اطلاعیه

Collapse
No announcement yet.

روشن وخاموش کردن تایمر

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

    روشن وخاموش کردن تایمر

    سلام
    لطفا کمک کنبد:
    چطوری می تونم تایمر میکروکنترلر را توسط یک کلید قطع و وصل به صورت مدوام (توی یه حلقه تکرار ) در کدویژن روشن و خاموش کنم؟
    سپاس گذارم .

    #2
    پاسخ : روشن وخاموش کردن تایمر

    سلام دادا.
    کدوم تایمر مد نظرته؟

    مثلاً در تایمر صفر بانوشت 1 در بیت های CS00, CS01, CS02 در رجیستر TCCR0 میتونی تایمر رو کنترل کنی.
    تشکر لازم نیست!

    دیدگاه


      #3
      پاسخ : روشن وخاموش کردن تایمر

      هر تایمری یه رجیستر کنترلی داره که کافیه اونو عوض کنی تا فعال یا غیر فعال بشه.

      دیدگاه


        #4
        پاسخ : روشن وخاموش کردن تایمر

        ممنون از همه شما
        اما منظور من این نیست میخواستم وقتی کلیدی قطع وصل میشه (قطع شدن زوشن شدن تایمر و وصل شدن خاموش شدن تایمر) اما مشکل اینجاست که من میخوام این پایه تو حلقه بی نهایت اسکن بشه که تو این قسمت که می نویسم (دستور قطع وصل رو) اصلا تایمر کار نمی کنه در ضمن تایمر صفر هست.
        مشکل اصلی من تو حلقه while هست هر دستور که مربوط به روشن وخاموش تایمر هست عمل نمی کنه.
        سپاس گذارم

        دیدگاه


          #5
          پاسخ : روشن وخاموش کردن تایمر

          خوب مشکل از برنامه ای که نوشتی لابد :icon_razz:
          برنامتو بذار اینجا ببینیم چیه!
          تو یه حلقه while اگه هیچ تاخیری نذاری دستورات تند تند اجرا میشه، یعنی شاید تایمر انقدر سریع خاموش روشن میشه که اصلا فرصت نمیکنه چیزی بشماره بنده خدا!
          حالا برنامه رو بذار ببینیم چیه

          دیدگاه


            #6
            پاسخ : روشن وخاموش کردن تایمر

            سلام دادا.
            برنامه رو بذار ببینیم چیکار کردی
            تشکر لازم نیست!

            دیدگاه


              #7
              پاسخ : روشن وخاموش کردن تایمر

              ممنون از همه شما
              ببنید مشکلو پیدا کردم اصلی مشکل من در این برنامه اینه که نمی تونم با یه کلید قطع و وصل یک خروجی یک وصفر کنم .
              وقتی کلید قطع میشه خروجی باید صفر بشه وقتی کلید وصل میشه باید خروجی یک بشه
              برنامه رو می زارم ببنید مشکل چیه (درضمن من خیـــــــــــــــــــــــــــــــــــــــــلی مبتدی هستم.)

              http://rapidshare.com/#!index|deletefiles|14509487604971856183http://rapidshare.com/files/441

              779228/code.rar|441779228|code.rar
              http://rapidshare.com/files/441779228/code.rar
              ببخشید که وقتون رو گرفتم.
              از همه شما تشکر میکنم.

              دیدگاه


                #8
                پاسخ : روشن وخاموش کردن تایمر

                بیخیال dude! همه تازه کاریم
                اما برنامت:
                کد:
                 #include <mega16.h> 
                
                
                
                void main(void){
                
                 DDRA=0X00;
                 PORTA=0X00;
                 
                 DDRD=0XFF;
                 PORTD=0X00;
                 
                 while(1){ 
                 if(PINA.0==1)
                 PORTD.0=1;
                 if(PINA.0==0)
                 PORTD.0=0;
                }
                }
                این برنامه چند تا مشکل داره، یکی یکی میگم:
                تو پورت A رو ورودی کردی ولی در حالت T-state یعنی اینکه در حالت معمولی میکرو گاهی این پورتو صفر میخونه و گاهی یک! این یه دلیله که موجب خطا میشه! برای اینکه اینطور نشه پورت A رو pull up تعریف کن، یعنی:PORTA=0xFF;
                DDRA=0x00;
                این دستور همه پورت A رو ورودی و پول پ میکنه، یعنی در حالت معمولی اونا رو یک میخونه! حالا کلیدی که میخوای وصل کنی رو هم با یه مقاومت خارجی به 5 ولت وصل کن، و اون سرشو به زمین! هر وقت کلید زده بشه پورت صفر میشه و در غیر اینصورت یک خونده میشه!
                بعدش اینکه هیچ تاخیری واسه خروجی نذاشتی، ببین مثلا اگه به این پین یه led وصل کنیف یه لحظه که کلید خورد روشن میشه و فورا خاموش میشه، یعنی انقدر سریع که تو نمیتونی ببینیش، اگه مثلا قراره روشن خاموش شدن led رو ببینی یه تاخیر500میلی ثانیه هم کفایت میکنه!
                من برنامه و واست یکم تغییر دادم و گذاشتم این پایین
                کد:
                 #include <mega16.h> 
                #include <delay.h>
                
                void main(void){
                // Input/Output Ports initialization
                // Port A initialization
                // Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In Func7=In
                // State0=P State1=P State2=P State3=P State4=P State5=P State6=P State7=P
                PORTA=0xFF;
                DDRA=0x00;
                
                // Port D initialization
                // Func0=Out Func1=Out Func2=Out Func3=Out Func4=Out Func5=Out Func6=Out Func7=Out
                // State0=0 State1=0 State2=0 State3=0 State4=0 State5=0 State6=0 State7=0
                PORTD=0x00;
                DDRD=0xFF;
                
                 
                 
                 while(1){ 
                 if(PINA.0==1)
                 	{
                 	PORTD.0=1;
                 	delay_ms(500);
                 	}
                 else
                 	{
                 	PORTD.0=0;
                 	delay_ms(500);
                 	}
                }
                }

                دیدگاه


                  #9
                  پاسخ : روشن وخاموش کردن تایمر

                  دوستان سلام.
                  میکروکنترلر atmega328/ زمانی که تایمری رو روشن میکنم تا برام PWM بسازه دقیقا زمان روشن شدن اون پین برای 3 میکرو ثانیه روشن میشه و بعد تایمر شروع به ساخت pwm میکنه/
                  و زمانی هم که تایمر رو خاموش میکنم تایمر مجددا 3 میکرو ثانیه پین رو روشن میکنه بعد خاموش میکنه. حتی اگه تایمر خاموش باشه دستور تعویض پین سازنده ی pwm روی همون تایمر رو هم بدم باز این برای 3 میکرو ثانیه روشن میکنه پین رو!
                  کد:
                  case 0b100:
                          
                          PORTD=0b01000000;
                          TCCR1A=0b00000000;
                          TCCR2A=0b00000000;
                          PORTB=0b00000000;
                          TCCR2A=0b10000001;
                          //AH=>B3 Duty //2A
                          //CL=>D6 on
                          break;
                          case 0b110:
                          
                          PORTD=0b01000000;
                          TCCR1A=0b00000000;
                          TCCR2A=0b00000000;
                          PORTB=0b00000000;
                          TCCR1A=0b00100001;
                          //BH=>B2 Duty //1B
                          //CL=>D6 on
                          break;
                  این قسمت در ISR نوشته شده/(atmel studio)
                  آیا اگه بیام کلا کلاک سورسشو قط کنم و وقتی میخوامش دوباره وصل کنم اصولی هست؟
                  جدیدترین ویرایش توسط Amir Zia; ۰۳:۰۸ ۱۳۹۸/۱۲/۰۸.






                  امیرحسین ضیا

                  دیدگاه

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