اطلاعیه

Collapse
No announcement yet.

تایمر کانتر ها

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

    #16
    پاسخ : تایمر کانتر ها

    اگه میشه چندتا مثال عملی بزنید تا بیشتر متوجه بشیم
    سلام دوست عزیز شاید این کمکتو بکنه
    با استفاده از مد CTC یه فرکانسه 50KHz رو پایه OCR1A تولید میشه

    http://persiandrive.net/318836

    موفق باشید
    ذکات علم یاد دادنه ....

    دیدگاه


      #17
      پاسخ : تایمر کانتر ها

      سلام

      من یه جا خوندم که گفته بود: مد ctc همون مد مقایسه هست. در این حالت ریجستر TCNT0 به طور دائم با رجیستر OCR0 مقایسه میشه و اگه با هم تطابق داشت مقدار TCNT0 صفر میشه.

      خوب واسه تایمر چطوری باید رو این مد سوئیچ کنیم؟! در زبان winAVR کار میکنم

      یه مثال دیدم که مقدار TCNT0 برابر با صفر و مقدار OCR0 هم برابر با 5 بود! ولی در اجرا بعد از 6 بار پالس دادن مقدارها برابر میشدند! چرا؟! بعد از تطابق با همدیگر مقدار TCNT0 برابر صفر نمیشه؟!

      این OCR0 دقیقا چیه و وظیفش چی هست؟!

      آیا بعد از تطابق این دوتا، پین OC0 روی میکرو، نسبت به حالت قبلش not میشه؟! اگه آره پس چرا واسه من نمیشه؟! :angry: :angry: :angry:

      تو اینترنت دیدم که مقدار TCCR0 برابر با 0X19 بود و گفته بود که این تقریباً همون 10 میلی ثانیه تاخیره! میشه یه توضیحی در این مورد بدین؟!

      سورس برنامه ای که دارم باهاش ور میرم:

      راستی PINB3 که همون OC0 هست رو هم خروجی تعریف کردم و هم تعریف نکردم! در هر دو حالت not نمیشد!


      کد:
      #include <avr\io.h>
      #include <avr\interrupt.h>
      #include <avr\delay.h>
      
      
      ISR( TIMER0_COMP_vect )
      {
      	//set error led.
      	PORTC |= 0x01;
      	//_delay_ms(500);
      	//PORTC &= 0;
      }
      
      void main()
      {
      	//prescaler = External clock source on T0 pin. Clock on falling edge.
      	//see table for timer0 prescaler
      	TCCR0 = 0b00000110; //(1<<CS01)|(1<<CS02);
      	OCR0 = 5;	//set ocrn register.
      	TIMSK |= 0x02;//enable timer0 compare match interrupt bit.OCIE0 is bit 1.
      	
      
      	
      	//config ports
      	DDRA = 0xff; //set porta as output.
      DDRB |= (1<<PINB3);
      	PORTB = 0xff; //enable all pullups	
      	DDRC = 0xff; //set portc as output.
      	
      	//set global interrupt bit.
      	sei();
      	while( 1 )
      	{
      		//copy counter register to PORTA.
      		PORTA = TCNT0;
      		//check reset pin
      		if( (PINB & 0x80) == 0 )
      		{
      			TCNT0 = 0;
      			PORTC &= 0xfe;//clear error led.
      		}
      	}
      }

      شماتیکش:

      [img]http://www.*****upload.com/images/52185322095025103222.gif[/img]
      http://ceworld.ir/images/ads/dornablogcom_ads.gif

      دیدگاه


        #18
        پاسخ : تایمر کانتر ها

        خواستم بگم که جواب همه سوالاتم تو ارسال قبلی رو خودم پیدا کردم!

        جز این سوالم: یه مثال دیدم که مقدار TCNT0 برابر با صفر و مقدار OCR0 هم برابر با 5 بود! ولی در اجرا بعد از 6 بار پالس دادن وقفه تطابق فراخوانی میشد! چرا؟!

        برنامش هم همون برنامه ای هست که تو ارسال قبلی گذاشتم.
        http://ceworld.ir/images/ads/dornablogcom_ads.gif

        دیدگاه


          #19
          پاسخ : تایمر کانتر ها

          نوشته اصلی توسط behnam_kh2002
          یه مثال دیدم که مقدار TCNT0 برابر با صفر و مقدار OCR0 هم برابر با 5 بود! ولی در اجرا بعد از 6 بار پالس دادن وقفه تطابق فراخوانی میشد! چرا؟!
          برای محاسبه زمان تولید شده توسط وقفه مقایسه، مقدار 1+OCRx به عنوان مبنا قرار می گیرد. دلیل این است که یک کلاک اضافی برای تغییر وضعیت مقدار تایمر از OCRx به مقدار صفر مورد نیاز است. در مثال شما 5 کلاک برای رسیدن مقدار تایمر به 5 و یک کلاک اضافه برای صفر شدن آن لازم است.
          اوژن: به معنای افکننده و شکست دهنده است
          دانایی، توانایی است-Knowledge is POWER
          برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
          وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
          قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
          اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
          ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

          دیدگاه

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