سلام دوستان.....من با atmega32 تونستم عرض پالس رو اندازه بگیرم و دیوتی سایکل رو حساب کنم.....هم با پروتئوس و هم از نظر سخت افزاری تستش کردم و جواب داد...ولی چون دوتا تایمر 16 بیتی نیاز دارم رفتن سراغ atmega 64 و همون برنامه رو براش نوشتم ولی نتونستم تو پروتئوس ازش جواب بگیرم......الان یک ماه که دارم باهاش سرو وکله میزنم ولی جواب نمیده.....من برای اینکار یه پایه اینتراپت رو دادم به ورودی پالس و با روشن و خاموش کردن تایمر یک زمان کل و زمان خاموش بودن رو اندازه گرفتم دقیقا همون کاری که برای atmega32 کردم با این تفاوت که رجیستر اینتراپتش اسمش فرق میکنه...اگه میشه یه نگاهی به برنامم بندازین....خیلی بهش نیاز دارم...ممنون.... :cry2:
// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)
{
if(end==0){
if(flag==0){
TCNT1=0x00;
TCCR1A=0x00;
TCCR1B=0x01;
flag=1;
}else{
TCCR1A=0x00;
TCCR1B=0x00;
total=TCNT1;
TCNT1=0x00;
TCCR1A=0x00;
TCCR1B=0x01;
EICRA=0x02;
up=1;
ok=1;
end=1;
}
};
if(ok==1){
TCCR1A=0x00;
TCCR1B=0x00;
tempon=TCNT1;
sumtempon+=tempon;
count++;
if(up==1){
EICRA=0x03;
up=0;
}else{
TCNT1=0x00;
TCCR1A=0x00;
TCCR1B=0x01;
EICRA=0x02;
up=1;
}
}
}
// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)
{
if(end==0){
if(flag==0){
TCNT1=0x00;
TCCR1A=0x00;
TCCR1B=0x01;
flag=1;
}else{
TCCR1A=0x00;
TCCR1B=0x00;
total=TCNT1;
TCNT1=0x00;
TCCR1A=0x00;
TCCR1B=0x01;
EICRA=0x02;
up=1;
ok=1;
end=1;
}
};
if(ok==1){
TCCR1A=0x00;
TCCR1B=0x00;
tempon=TCNT1;
sumtempon+=tempon;
count++;
if(up==1){
EICRA=0x03;
up=0;
}else{
TCNT1=0x00;
TCCR1A=0x00;
TCCR1B=0x01;
EICRA=0x02;
up=1;
}
}
}
دیدگاه