اطلاعیه

Collapse
No announcement yet.

ایجاد پالس با تایمر صفر

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    ایجاد پالس با تایمر صفر

    من می خواهم با تایمر صفر یک تک پالس 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 نوشته ام درست است؟
    آیا تابع اینتراپت و متغیرهای آن درست است؟
    دوستانی که می توانند کمکم کنند
    با تشکر
    با عرض معذرت بعضی از علامتها در برنامه پس و پیش شده که مشکل از کامپیوتر من است

    #2
    پاسخ : ایجاد پالس با تایمر صفر

    نوشته اصلی توسط javad_zavr
    [left]من می خواهم با تایمر صفر یک تک پالس 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 نوشته ام درست است؟
    آیا تابع اینتراپت و متغیرهای آن درست است؟
    سلام
    برای منتظر موندن جهت آمدن وثقه over flow تایمر0 باید داخل قسمت اینتراپت اینو بنویسی
    PORRTB.0=1
    TCCR0=0b00000010;
    while(!TIFR&0x01==0);
    PORTB.0=0;
    TCCR0=0b00000000;
    انقدر احمق نیستم که فکر کنم کارم تموم شده

    دیدگاه

    لطفا صبر کنید...
    X