اطلاعیه

Collapse
No announcement yet.

تایمر 5 ثانیه در کدویژن

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

    تایمر 5 ثانیه در کدویژن

    سلام به همگی دوستان و بچه های گل گروه
    آقا من با تایمر 0 میخام یه تاخیر 5 ثانیه ایجاد کنم.میشه برنامش رو بگید بهم؟فوری نیاز دارم...حتما برنامه کدویژن باشه.گیر کردم.ممنون
    مرسی

    #2
    پاسخ : تایمر 5 ثانیه در کدویژن

    با یکی از وقفه ها ، وقفه مثلا 1 میلی ثانیه ای ایجاد کن.
    توی روتین وقفه 1 متغیر را 1 واحد افزایش بده. یعنی با هر بار وقفه که هر وقفه 1 میلی ثانیه طول میکشه متغیرتون 1 واحد افزایش پیدا میکنه حال اگر متغیرتون به 5000 رسید یعنی 5 ثانیه شد.

    دیدگاه


      #3
      پاسخ : تایمر 5 ثانیه در کدویژن


      در برنامه ی زیر فرکانس میکروکنترلر 4MHz است و تقسیم فرکانسی تایمر 0 برابر 1024 است.
      در این حالت تایمر وقتی که 3906.25 شمارش نمود، زمان 1 ثانیه ایجاد می شود. برای ایجاد زمان 5 ثانیه این عدد را در 5 ضرب می کنیم و در این صورت تایمر 19531.25 بار سر ریز می شود و چون تایمر صفر 8 بیتی است، 76.299 بار سر ریز می شود پس اگر تعداد سر ریز ها را 77 بار فرض کنیم باید به TCNT0 عدد 180 را اختصاص دهیم
      طبق برنامه ی زیر:

      کد:
      #include <mega32.h>
      char count=0;
      interrupt [TIM0_OVF] void timer0_ovf_isr(void)
      {
        count++;
        if(count==77)
        {
          TCNT0=180;
          count=0;
          //دستورات خود را در این قسمت بنویسید
        }
      }
      void main(void)
      {
        #asm("sei")
        TCCR0=0x05;
        TCNT0=180;
        while(1)
        {   
        }
      }
      { خلاف قوانین - پاک شد }
      برد آموزشی ARM: http://www.eca.ir/forum2/index.php?topic=91977
      آموزش DSP: http://www.eca.ir/forum2/index.php?topic=91940
      آموزش Allegro: http://www.eca.ir/forum2/index.php?topic=79877

      دیدگاه


        #4
        پاسخ : تایمر 5 ثانیه در کدویژن

        سلام دوست عزیز.ممنون
        بدون اینتراپت چطوری میشه اینکارو کرد!!
        میخام وقتی یه پین از یه پورتی یک شد 5 ثانیه بشمره و بره بعد یه پین دیگه رو یک کنه!!؟
        ممنون داداش

        دیدگاه


          #5
          پاسخ : تایمر 5 ثانیه در کدویژن

          اینجوری نوشتم ولی جواب نمیده :
          لطفا کمک کنید.ممنون

          دیدگاه


            #6
            پاسخ : تایمر 5 ثانیه در کدویژن

            این جواب نمیده.میشه یه نگاه بندازید و بهم بگیدچیکار کنم!!!
            میخام 5 ثانیه 1 پین رو یک نگه دارم و بعد خاموش شه.نمیخام از تابع delay استفاده بشه.
            فوری نیاز دارم.ممنون
            کد:
            #include <mega32.h> 
            char count=0; 
            interrupt [TIM0_OVF] void timer0_ovf_isr(void) 
            { 
              count++; 
              if(count==77) 
              { 
                TCNT0=180; 
                count=0; 
                PORTB.0=1;    // enable portb.0 
              } 
            } 
            void main(void){ 
            #asm("sei") 
            DDRB=0b111111111 ;    // for output 
              
              TCCR0=0x05;    //*5 
              TCNT0=180;  //tcnt0 shulde be 180 for 77 overflow 
              while(1){   
              } 
            }

            دیدگاه


              #7
              پاسخ : تایمر 5 ثانیه در کدویژن

              این همون برنامه بالایی نیست؟
              بهش کاری نداشته باش.
              به عکس پایین نگاه کن و تایمر/کانتر رو تنظیم کن:



              بعد توی رویه(تابع وقفه) اینجوری بنویس:

              کد:
              if ( PORTB.0==0 ) {
                PORTB.0=1;
              }
              else {
                PORTB.0=0;
              }
              با این دستور مثلا PORTB.0 هی روشن و خاموش میشه. حالا واسه هر پورتی خواستی تغییرش بده.

              دیدگاه


                #8
                پاسخ : تایمر 5 ثانیه در کدویژن


                برنامه ی زیر این کار را انجام می دهد:

                کد:
                #include <mega32.h>
                char count=0;
                interrupt [TIM0_OVF] void timer0_ovf_isr(void)
                {
                  count++;
                  if(count==77)
                  {
                    TCNT0=180;
                    count=0;
                    PORTB.0=!PORTB.0;
                  }
                }
                void main(void)
                {
                  #asm("sei")
                  TCCR0=0x05;
                  TIMSK=0x01;
                  TCNT0=180;
                  DDRB.0=1;
                  while(1)
                  {   
                  }
                }

                البته بدون وقفه نیز می توان این کار را انجام داد ولی جالب نیست چون CPU را تعطیل می کند:

                کد:
                #include <mega32.h>
                char count=0;
                void main(void)
                {
                  TCCR0=0x05;
                  TCNT0=180;
                  DDRB.0=1;  
                  while(1)
                  {
                    while(count<77)
                    {
                      while((TIFR&0x01)==0);
                      count++;
                      TIFR=0x01;
                    }
                    TCNT0=180; 
                    count=0;
                    PORTB.0=!PORTB.0;   
                  }
                }
                { خلاف قوانین - پاک شد }
                برد آموزشی ARM: http://www.eca.ir/forum2/index.php?topic=91977
                آموزش DSP: http://www.eca.ir/forum2/index.php?topic=91940
                آموزش Allegro: http://www.eca.ir/forum2/index.php?topic=79877

                دیدگاه


                  #9
                  پاسخ : تایمر 5 ثانیه در کدویژن

                  ممنون بچه ها کارتون درسته شما...
                  خیلی کمک میکنید.مرسی ... :nice:

                  دیدگاه

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