من می خواهم با تایمر صفر یک تک پالس 256us ایجاد کنم
بدین منظور از atmega8 در مد نرمال استفاده کردم و کلاک آن را نیز 8MHz انتخاب کردم و پریس کال را نیز 8 انتخاب کردم
پی در نتیجه
t=(255-0)T
بنابراین باید نتیجه بگیریم که t=255us
اما در عمل اینطور نیست و مقدار t حدود 20us در می آید
برای برنامه نویسی از نرم افزار codevision و برای رسم مدار از proteus 75 استفاده میکنم
ضمنا از ایتراپت خارجی استفاده کردم بطوری که اگر کلید INT0 صفر شود برنامه به قسمت اینتراپت میرود
برای قسمت ایتراپت دستورات زیر را نوشته ام:
interrupt[EXT-INT0] void ext-int0-isr()
{
PORTB.0=1;
TCCR0=0b00000010; //TIMER CLOCK=CLK/8
WHILE(TIFR==0x00){ //wait until overflow
}
TCCR0=0x00; //clear TOV0
PORTB.0=0;
}
سوال: آیا روابطی که در بالا برای بدست آوردن زمان t نوشته ام درست است؟
آیا تابع اینتراپت و متغیرهای آن درست است؟
دوستانی که می توانند کمکم کنند
با تشکر
با عرض معذرت بعضی از علامتها در برنامه پس و پیش شده که مشکل از کامپیوتر من استبدین منظور از atmega8 در مد نرمال استفاده کردم و کلاک آن را نیز 8MHz انتخاب کردم و پریس کال را نیز 8 انتخاب کردم
پی در نتیجه
t=(255-0)T
بنابراین باید نتیجه بگیریم که t=255us
اما در عمل اینطور نیست و مقدار t حدود 20us در می آید
برای برنامه نویسی از نرم افزار codevision و برای رسم مدار از proteus 75 استفاده میکنم
ضمنا از ایتراپت خارجی استفاده کردم بطوری که اگر کلید INT0 صفر شود برنامه به قسمت اینتراپت میرود
برای قسمت ایتراپت دستورات زیر را نوشته ام:
interrupt[EXT-INT0] void ext-int0-isr()
{
PORTB.0=1;
TCCR0=0b00000010; //TIMER CLOCK=CLK/8
WHILE(TIFR==0x00){ //wait until overflow
}
TCCR0=0x00; //clear TOV0
PORTB.0=0;
}
سوال: آیا روابطی که در بالا برای بدست آوردن زمان t نوشته ام درست است؟
آیا تابع اینتراپت و متغیرهای آن درست است؟
دوستانی که می توانند کمکم کنند
با تشکر
دیدگاه