اطلاعیه

Collapse
No announcement yet.

مشکل با چشمک زن با timer0

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

    مشکل با چشمک زن با timer0

    سلام دوستان
    من با تایمر 0 می خوام یه چشمک زن درست کنم که تایمر شروع به شمارش کرد و بعد از اورفلو دادن پین b.0رو یک کنه وگر نه صفر بشه برنامش هم نوشتم ولی کار نمی کنه چرا؟
    کد:
    while (1)
       {
      if((TIFR&0x01)==1){
              PORTB.0=1;
      
      } 
      else
      {
      PORTB.0=0;
      }
    
       }
    }

    #2
    پاسخ : مشکل با چشمک زن با timer0

    :rolleyes:

    دیدگاه


      #3
      پاسخ : مشکل با چشمک زن با timer0

      سلام
      کد:
      if((TIFR&0x02)==1)
      بعد از سریز تایمر صفر با نوشتن یک در TOV0 اونو پاک کنید.
      قبل از دويدن بايد راه رفتن ياد گرفت.

      دیدگاه


        #4
        پاسخ : مشکل با چشمک زن با timer0

        نوشتم بازم نشد
        کد:
        while (1)
           {
          if((TIFR&0x02)==1){
                  PORTB.0=1; 
                  TIFR|=0x02;
          
          } 
          else
          {
          PORTB.0=0;
          }
        
           }
        }

        دیدگاه


          #5
          پاسخ : مشکل با چشمک زن با timer0

          کدتون رو کامل قرار بدبد.به TCCR0 هم مقدار دادید دیگه؟
          قبل از دويدن بايد راه رفتن ياد گرفت.

          دیدگاه


            #6
            پاسخ : مشکل با چشمک زن با timer0

            اینم کد کامل

            کد:
            #include <mega8.h>
            
            // Declare your global variables here
            
            void main(void)
            {
            // Declare your local variables here
            
            // Input/Output Ports initialization
            // Port B initialization
            // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
            // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
            PORTB=0x00;
            DDRB=0x00;
            
            // Port C initialization
            // Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
            // State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
            PORTC=0x00;
            DDRC=0x00;
            
            // Port D initialization
            // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
            // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
            PORTD=0x00;
            DDRD=0x00;
            
            // Timer/Counter 0 initialization
            // Clock source: System Clock
            // Clock value: 16000.000 kHz
            TCCR0=0x01;
            TCNT0=0x35;
            
            // Timer/Counter 1 initialization
            // Clock source: System Clock
            // Clock value: Timer1 Stopped
            // Mode: Normal top=0xFFFF
            // OC1A output: Discon.
            // OC1B output: Discon.
            // Noise Canceler: Off
            // Input Capture on Falling Edge
            // Timer1 Overflow Interrupt: Off
            // Input Capture Interrupt: Off
            // Compare A Match Interrupt: Off
            // Compare B Match Interrupt: Off
            TCCR1A=0x00;
            TCCR1B=0x00;
            TCNT1H=0x00;
            TCNT1L=0x00;
            ICR1H=0x00;
            ICR1L=0x00;
            OCR1AH=0x00;
            OCR1AL=0x00;
            OCR1BH=0x00;
            OCR1BL=0x00;
            
            // Timer/Counter 2 initialization
            // Clock source: System Clock
            // Clock value: Timer2 Stopped
            // Mode: Normal top=0xFF
            // OC2 output: Disconnected
            ASSR=0x00;
            TCCR2=0x00;
            TCNT2=0x00;
            OCR2=0x00;
            
            // External Interrupt(s) initialization
            // INT0: Off
            // INT1: Off
            MCUCR=0x00;
            
            // Timer(s)/Counter(s) Interrupt(s) initialization
            TIMSK=0x00;
            
            // USART initialization
            // USART disabled
            UCSRB=0x00;
            
            // Analog Comparator initialization
            // Analog Comparator: Off
            // Analog Comparator Input Capture by Timer/Counter 1: Off
            ACSR=0x80;
            SFIOR=0x00;
            
            // ADC initialization
            // ADC disabled
            ADCSRA=0x00;
            
            // SPI initialization
            // SPI disabled
            SPCR=0x00;
            
            // TWI initialization
            // TWI disabled
            TWCR=0x00;
            
            while (1)
               {
              if((TIFR&0x02)==1){
                      PORTB.0=1; 
                      TIFR|=0x02;
              
              } 
              else
              {
              PORTB.0=0;
              }
            
               }
            }

            دیدگاه


              #7
              پاسخ : مشکل با چشمک زن با timer0

              -------------

              دیدگاه


                #8
                پاسخ : مشکل با چشمک زن با timer0

                شرمنده که میکرو رو مشخص نکرده بودید در mega8 بیت TOV0 بیت اولیه نه دومی پس:
                کد:
                 while(!(TIFR & 0x01));
                 TIFR |= 0x01;
                این یه نمونه کد دیگه:
                کد:
                #include <mega32a.h>
                void delay();
                void main()
                {
                 DDRB=0x01;
                 PORTB=0x00;
                 TCCR0=0x00;
                 TCNT0=0x00;
                 while(1)
                  { 
                  PORTB.0=~PORTB.0;
                  delay();
                  }
                }
                //------------
                void delay()
                 {
                 TCCR0=0x02;
                 while(!(TIFR & 0x01));
                 TIFR |= 0x01;
                 }
                فقط چون شما برای یه ال ای دی میخواین فکر میکنم فرکانس بقدر بالا خواهد بود که چشمک زدن ال ای دی قابل مشاهده نباشه فقط روشن دیده بشه.(مثلا با فرکانس 500 کیلو هرتز دوره تناوبمون میشه حدودا 1024 میکرو ثانیه (فرکانس موج مربعی حدودا 976 هرتز).
                قبل از دويدن بايد راه رفتن ياد گرفت.

                دیدگاه


                  #9
                  پاسخ : مشکل با چشمک زن با timer0

                  تشکر اگر بخوام با IFبنویسم و داخل whileباشه چی

                  دیدگاه


                    #10
                    پاسخ : مشکل با چشمک زن با timer0

                    نوشته اصلی توسط بنیامین خلیلی
                    تشکر اگر بخوام با IFبنویسم و داخل whileباشه چی
                    به این شکلی که شما دستور if رو نوشتید :
                    if((TIFR&0x02)==1)
                    برنامه روی این خط تا زمانی که TOV0 یک بشه صبر نمیکنه.اگه نخوایم تابع تعریف کنیم بشکل زیر میشه:
                    کد:
                    #include <mega32a.h>
                    void main()
                    {
                     DDRB=0x01;
                     PORTB=0x00;
                     TCCR0=0x00;
                     TCNT0=0x00;
                     while(1)
                      {  
                      TCCR0=0x02;
                      while(!(TIFR & 0x01));
                      TIFR |= 0x01;
                      PORTB.0=~PORTB.0;
                      }
                    }
                    اگه بخوایم داخل while دستور if بنویسیم اون چیزی که به ذهن من میرسه فقط باعث اضافه شدن خطوط و دستورات برنامه میشه.
                    این برنامه معادل برنامه زیر (زمان تاخییر رو باید تنظیم کرد):
                    کد:
                    #include <mega32a.h>
                    #include <delay.h>
                    
                    void main()
                    {
                    DDRB=0xFF;
                    PORTB=0x00;
                     while(1)
                     {
                     delay_ms(1000);
                     PORTB.0=~PORTB.0;
                     }
                     }
                    قبل از دويدن بايد راه رفتن ياد گرفت.

                    دیدگاه

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