اطلاعیه

Collapse
No announcement yet.

کمک در تولید پالس با PWM

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

    کمک در تولید پالس با PWM

    با سلام به همه دوستان

    در مورد تولید پالس با PWM در میکرو سوالی داشتم

    آیا در بسکام و با این روش میشه پالسی با فرکانس و پهنای پالس خاص و دقیق رو تولید کرد؟
    مثلا میشه پالسی با فرکانس دقیق 100 هرتز تولید کرد ؟ همینطور در رابطه با پهنای پالس مثلا دقیقا 200 میکرو ثانیه؟

    اگه نه بهترین و دقیقترین روش برای اینکار چیه ؟

    ممنون میشم راهنماییم کنید...

    #2
    پاسخ : کمک در تولید پالس با PWM

    منتظر راهنمایی اساتید هستم

    با تشکر... :rolleyes:

    دیدگاه


      #3
      پاسخ : کمک در تولید پالس با PWM

      سلام

      آره قربونت برم...چرا نشه...اگه نشه که میکرو به درد لای جرز میخوره

      کدویژن و بسکام هم نداره...تنظیمات یه جوره..



      مثلا برای 100 هرتز...

      پریود میشه 10 میلی ثانیه..خب؟؟

      فرض کن کریستال 8 مگ گذاشتی....با Prescaler=8...کلاک تایمرت میشه 1 مگا هرتز...یعنی 1 میکرو ثانیه ..خب؟؟ یعنی چی؟؟..یعنی هر یدونه ای که میشمره 1 میکرو ثانیه طول میکشه.

      حالا مقدار اولیه تایمرت(مثلا تایمر 0) رو میذاری 155...خب؟؟...حالا چی میشه؟؟ ...از 155 شروع میکنه و تا 255 میشمره و Overflow میکنه...پس زمان کل این شمارش میشه:100*1=100میکروثانیه

      اینتراپت Overflow رو فعال کن....پس با این تنظیمات...این حلقه اینتراپت هر 100 میکرو ثانیه یکبار اجرا میشه...خب؟؟

      خب به جمالت.....یه متغیر توی حلقه اینتراپت بذار که هر بار حلقه اینتراپت اجرا میشه یه واحد بهش اضافه بشه...هر وقت اون متغیر برابر با 100 شد یعنی چی؟؟...یعنی 100*100میکرو=10 میلی ثانیه

      خب..پس هر وقت متغیر برابر با 100 شد پایه خروجی ای رو که میخوای..... تغییر وضعیت بده

      نهایتا یه پالس بی نهایت دقیق 100 هرتزی روی پایه میکروت داری

      موفق باشی عزیز جان
      خوب بودن تنها ویژگی ای است که برای دستیابی به آن نیاز به هیچ استعدادی نیست.... دکتر قمشه ای

      دیدگاه


        #4
        پاسخ : کمک در تولید پالس با PWM

        ممنون C man جان

        اما با PWM نمیشه اینکار رو با این دقت انجام داد درسته ؟

        دیدگاه


          #5
          پاسخ : کمک در تولید پالس با PWM


          دوستان
          سلام

          قصد از اینجا صحبت کردن...صحبت و بحث همه دوستان با هم و نهایتا پیشرفت همه دوستان هست



          اما با PWM نمیشه اینکار رو با این دقت انجام داد درسته ؟
          PWM برای فرکانسهای بالاتر و بیشتر در جاهایی استفاده میشه که ما قصد داریم عرض پالس رو مرتبا تغییر بدیم و ازین جور کارا....اسمش روشه دیگه..مدولاسیون پهنای باند. :biggrin:

          اما من روش قبلی رو ازین جهت ترجیح می دم..چون روی هر پایه ای که دلت بخواد میتونی هر شکل موجی درس کنی. :mrgreen:

          موفق باشید
          خوب بودن تنها ویژگی ای است که برای دستیابی به آن نیاز به هیچ استعدادی نیست.... دکتر قمشه ای

          دیدگاه


            #6
            پاسخ : کمک در تولید پالس با PWM

            سلام
            اگه یک موج ثابت 100 هرتز میخای خوب با یک اسکوپ تنظیمش کن
            انجمن LABVIEW
            http://www.eca.ir/forum2/index.php?board=279.0
            اموزش ميكروكنترلرهاي AVR به زبان ساده
            http://www.eca.ir/forum2/index.php/topic,7070.0.html

            دیدگاه


              #7
              پاسخ : کمک در تولید پالس با PWM

              نوشته اصلی توسط C man
              سلام

              آره قربونت برم...چرا نشه...اگه نشه که میکرو به درد لای جرز میخوره

              کدویژن و بسکام هم نداره...تنظیمات یه جوره..



              مثلا برای 100 هرتز...

              پریود میشه 10 میلی ثانیه..خب؟؟

              فرض کن کریستال 8 مگ گذاشتی....با Prescaler=8...کلاک تایمرت میشه 1 مگا هرتز...یعنی 1 میکرو ثانیه ..خب؟؟ یعنی چی؟؟..یعنی هر یدونه ای که میشمره 1 میکرو ثانیه طول میکشه.

              حالا مقدار اولیه تایمرت(مثلا تایمر 0) رو میذاری 155...خب؟؟...حالا چی میشه؟؟ ...از 155 شروع میکنه و تا 255 میشمره و Overflow میکنه...پس زمان کل این شمارش میشه:100*1=100میکروثانیه

              اینتراپت Overflow رو فعال کن....پس با این تنظیمات...این حلقه اینتراپت هر 100 میکرو ثانیه یکبار اجرا میشه...خب؟؟

              خب به جمالت.....یه متغیر توی حلقه اینتراپت بذار که هر بار حلقه اینتراپت اجرا میشه یه واحد بهش اضافه بشه...هر وقت اون متغیر برابر با 100 شد یعنی چی؟؟...یعنی 100*100میکرو=10 میلی ثانیه

              خب..پس هر وقت متغیر برابر با 100 شد پایه خروجی ای رو که میخوای..... تغییر وضعیت بده

              نهایتا یه پالس بی نهایت دقیق 100 هرتزی روی پایه میکروت داری

              موفق باشی عزیز جان
              سلام
              ضمن اینکه از توضیح خیلی خوبتون ممنونم میشه این قسمتی که باید یک متغیر در حلقه اینتراپت قرار بدیم رو بیشتر توضیح بدید متوجه نشدم که دقیقا کجا باید این متغیر رو بگذارم...اینتراپت compare match رو هم باید فعال کنیم؟؟
              خروجی رو هم باید در وضعیت toggle قرار بدیم؟؟
              اگه بخوایم با کدویژن بنویسیم به واسطه کدویزارد این کارا رو راحت میتونیم انجام بدیم اما اگه بخوایم با بسکام بنویسیم چطوری میشه؟؟
              ممنون میشم اگه لطف کنید و به سوالاتم پاسخ بدین..
              ====================
              هر موفیت بزرگی نتیجه هزاران تلاش کوچک و عادی ست...که مورد توجه و ستایش افراد دیگر قرار نگرفته اند...
              =====================

              دیدگاه


                #8
                پاسخ : کمک در تولید پالس با PWM

                این هم یه برنامه خوب که روی پایه PB0 یه pwm به عرض 200us و فرکانس 100hz تولید میکنه .

                $regfile = "m16def.dat"
                $crystal = 8000000
                Config Portb = Output
                Config Timer0 = Timer , Prescale = 1024
                Config Timer1 = Timer , Prescale = 8
                Dim Pw As Word
                pw=200

                Motor1 Alias Portb.0

                Stop Timer1
                Enable Ovf0
                Enable Interrupts
                Enable Timer0
                On Ovf0 Make_pwm
                Timer0 = 178

                Do
                Loop

                Make_pwm:

                Timer0 = 178

                Start Timer1

                Set motor1
                Do
                Loop Until Timer1 >= Pw
                Reset motor1
                Timer1 = 0

                return


                [glow=blue,2,300]آنقدر به تاريكي لعنت نفرستيد ، يك شمع روشن كنيد. [/glow]

                دیدگاه


                  #9
                  پاسخ : کمک در تولید پالس با PWM

                  خیلی ممنون از توجه تون :agree:
                  میشه بگید دستور Enable Ovf0 و دستور On Ovf0 Make_pwm
                  Timer0 = 178 یعنی چی؟؟
                  ====================
                  هر موفیت بزرگی نتیجه هزاران تلاش کوچک و عادی ست...که مورد توجه و ستایش افراد دیگر قرار نگرفته اند...
                  =====================

                  دیدگاه


                    #10
                    پاسخ : کمک در تولید پالس با PWM

                    این برنامه واسه تولید موج pwm با فرکانس 50Hz یا همون 20میلی ثانیه ست. Duty cycle آن توسط دو کلید قابلیت بالا و پایین شدنه داره. درحقیقت بدرد کنترل سرو موتور میخوره! بنظر ایرادی نداره! ولی عجیبه که توی پروتئوس، اصلاً کلیدها کار نمیکنه.
                    OCR0=180 در نظر گرفته شده که باعث میشه Duty cycle اولیه 51% باشه.
                    میشه بگین ایراد برنامه چیه که اصلاً کلیدها کار نمیکنه؟؟
                    کد:
                    #include <mega16.h>
                    #define up PINA.0
                    #define down PINA.1
                    unsigned int x=180;
                    interrupt [TIM0_OVF] void timer0_ovf_isr(void)
                    {
                     TCCR0=0X00;
                     TCNT0=100;
                     OCR0=x;
                     TCCR0=0X7D;
                     }
                     void main ()
                     {
                     PORTA=0x03;
                     DDRA=0x00;
                     PORTB=0x00;
                     DDRB=0x08;
                     TCNT0=100;
                     OCR0=180;
                     TIMSK=0X01;
                     TCCR0=0X7D;
                     #asm ("sei")
                     while (1)
                     {
                      if (down==0)
                      {
                      if (x>=110 && x<250) x+=10;
                      while (down==0);
                      }
                      if (up==0)
                      {
                      if (x!=110) x-=10;
                      while (up==0);
                      }
                      };
                      }
                    2- چگونه در پروتئوس میتوان فرکانس خروجی به همراه duty cycle رو خوند؟ اون ابزار اسیلوسکوپ رو که برمیدارم، شکل موج رو نشون میده، ولی من نمیدونم چجوری میشه فرکانسش رو خوند؟ (یعنی باید مثل اسکوپ واقعی، از رو تعداد خونه هاش فرکانس رو بدست بیارم!؟؟!) کدوم ابزار بدرد میخوره؟
                    در ضمن ابزاری که DC% رو نشون بده نداریم تو پروتئوس؟
                    دلي دارم که از تنگي در او جز غم نمي گنجد........ غمي دارم ز دلتنگي که در عالم نميگنجد

                    دیدگاه


                      #11
                      پاسخ : کمک در تولید پالس با PWM

                      1-کسی این برنامه رو نگاه نکرد؟ فرکانس کار هم 8MHz هست که با نسبت 1024 تقسیم میشه و ...
                      نمیدونم کجاش ایراد داره. کلید ها تو پروتئوس جواب نمیده!

                      یه تغییراتی دادم. مقدار OCR0 رو کردم 108. با این حساب Duty cycle میشه 5%. که واسه 20ms زمان سیگنال، 1ms high میشه.
                      مقدار TCCR0=7D هست، یعنی OC0 در هنگام match شدن، باید set بشه.
                      ولی تو پروتئوس، با OCR0=108، دیدم Duty cycle شد 95%!!! یعنی 19ms میشد high. یعنی انگار در TCCR0 بجای 7D، گذاشته باشی 6D!
                      حداقل اینو تو پروتئس ببینید چجوری میشه؟

                      2- روی سروو امتحان کردم. GND رو وصل کردم. با وصل Vcc، یه صدایی میده و 4~5 درجه چپ و راست میشه. وقتی سیگنال رو وصل میکنم، به اصطلاح اهل فن، Jitter میکنه! قیژ قیژ میکنه و یه طرف میچرخه، ولی نامنظم. و از هز چند بار امتحان، یکبار جواب میده. وقتی سیگنال رو قطع میکنم، تو جای قبلیش میمونه و با قطع و وصل کردن Vcc، تاتی تاتی برمیگرده سر جای اولش!!!!!
                      سیگنال هم از یک 10K رد کردم.
                      یکی بگه این دیوونه بازیا چیه!!؟؟ یکی یه سیگنال درست حسابی به ما بده این سروو رو راه بندازیم.... :cry2:
                      دلي دارم که از تنگي در او جز غم نمي گنجد........ غمي دارم ز دلتنگي که در عالم نميگنجد

                      دیدگاه


                        #12
                        پاسخ : کمک در تولید پالس با PWM

                        آقایان...خانمها
                        سلام
                        ببخشید چند وقتی نبودم
                        پیشنهاد میکنم قبلا از این که برید شکار ماهی....اول ماهی گیری یاد بگیرید :NO:

                        ضمن اینکه از توضیح خیلی خوبتون ممنونم میشه این قسمتی که باید یک متغیر در حلقه اینتراپت قرار بدیم رو بیشتر توضیح بدید متوجه نشدم که دقیقا کجا باید این متغیر رو بگذارم...اینتراپت compare match رو هم باید فعال کنیم؟؟
                        خروجی رو هم باید در وضعیت toggle قرار بدیم؟؟
                        اگه بخوایم با کدویژن بنویسیم به واسطه کدویزارد این کارا رو راحت میتونیم انجام بدیم اما اگه بخوایم با بسکام بنویسیم چطوری میشه؟؟
                        ممنون میشم اگه لطف کنید و به سوالاتم پاسخ بدین
                        در مورد تعریف متغیر در تایمر: روشی که گفتم یه روش کلیه که شما با مد نرمال میتونید هر نوع پالسی که دلتون بخواد روی هر پایه ای یا پایه هایی که دلتون بخواد ایجاد کنید.
                        در مد نرمال قبل از حلقه اینتراپت سریز...یه متغیر تعریف کنید. وبعد این متغیر رو در حلقه اینتراپت ++ کنید(مثلا a++). یعنی هربار که تایمر سرریز میشه و برنامه وارد حلقه اینتراپت میشه...یه واحد به a اضافه میشه.

                        مثال: میخواهیم با تایمر صفر روی PORTA.0 یه پالس با پریود 500 میکروثانیه و زمان بالا بودن 100 میکرو ثانیه ایجاد کنیم.

                        فرض کنیم کریستال 8 مگه.فرکانس تایمر رو 1 مگ انتخاب میکنیم (یعنی Prescaler=8 ) مقدار اولیه تایمر رو 155 انتخاب میکنم. پس مقدار شمارش شده توسط تایمر برای اینکه سرریز کنه... میشه 255-155=100..... از طرفی فرکانس تایمر1 مگه...یعنی زمان هر شمارش 1 میکروثانیه است...پس زمان سرریز تایمر میشه 100 میکرو ثانیه...پس یعنی میکرو هر 100 میکروثانیه وارد حلقه اینتراپت سرریز میشه. در حلقه اینتراپت یه متغییر رو ++ کنید(مثلا a++)...پس هر وقت یه واحد به a اضافه بشه...یعنی 100 میکرو ثانیه گذشته.
                        حالا در همون حلقه اینتراپت مینویسیم:



                        if(a==0) >>>...................................... .............قسمت اول
                        PORTA.0=1;

                        if(a==1) >>>>.................................. ..................قسمت دوم
                        PORTA.0=0;

                        if(a==6) >>>>.................................. ................قسمت سوم
                        a=0;

                        a++; >>>...................................... ....................قسمت چهارم



                        چه اتفاقی می افته؟؟؟


                        در قسمت اول PORTA.0 بالا میمونه تا a از صفر به یک برسه(یعنی 100 میکرو ثانیه بگذره)

                        در قسمت دوم بعد از 100 میکرو ثانیه...PORTA.0=0 میشه. و صفر میمونه

                        در قسمت سوم PORTA.0=0 میمونه تا a=6 بشه یعنی تا 500 میکرو ثانیه. بعدش a=0 میشه و این قضیه دوباره از اول تکرار میشه.

                        در قسمت چهارم... همونطور که گفته شد یه واحد به a اضافه میشه.



                        -کسی این برنامه رو نگاه نکرد؟ فرکانس کار هم 8MHz هست که با نسبت 1024 تقسیم میشه و ...
                        نمیدونم کجاش ایراد داره. کلید ها تو پروتئوس جواب نمیده!

                        یه تغییراتی دادم. مقدار OCR0 رو کردم 108. با این حساب Duty cycle میشه 5%. که واسه 20ms زمان سیگنال، 1ms high میشه.
                        مقدار TCCR0=7D هست، یعنی OC0 در هنگام match شدن، باید set بشه.
                        ولی تو پروتئوس، با OCR0=108، دیدم Duty cycle شد 95%!!! یعنی 19ms میشد high. یعنی انگار در TCCR0 بجای 7D، گذاشته باشی 6D!
                        حداقل اینو تو پروتئس ببینید چجوری میشه؟

                        2- روی سروو امتحان کردم. GND رو وصل کردم. با وصل Vcc، یه صدایی میده و 4~5 درجه چپ و راست میشه. وقتی سیگنال رو وصل میکنم، به اصطلاح اهل فن، Jitter میکنه! قیژ قیژ میکنه و یه طرف میچرخه، ولی نامنظم. و از هز چند بار امتحان، یکبار جواب میده. وقتی سیگنال رو قطع میکنم، تو جای قبلیش میمونه و با قطع و وصل کردن Vcc، تاتی تاتی برمیگرده سر جای اولش!!!!!
                        سیگنال هم از یک 10K رد کردم.
                        یکی بگه این دیوونه بازیا چیه!!؟؟ یکی یه سیگنال درست حسابی به ما بده این سروو رو راه بندازیم....

                        الف- یک جمله معروف: اگر برنامه ای توی پروتئوس جواب بدهد .... 100 درصد در عمل جواب خواهد داد اما ممکن است برنامه ای در عمل درست جواب بدهد اما در پروتئوس درست جواب ندهد.


                        ب-برای اسکوپ دقیق توی پروئتوس از قسمت Graph قطعه Digital رو انتخاب کنید و بیارید توی صفحه. بعد پراب ولتاژ رو روی سیمی که پالسش رو میخواهید بذارید..بعد پراب رو درگ کرده ودر داخل Digital بندازید. بعد digital رو Run کنید و پالستون رو ببینید.


                        ج-در مورد کنترل سروو موتور:

                        1-تغذیه سروو از تغذیه مدار ترجیحا ایزوله باشد.

                        2-قبل از اتصال پالس به سروو بد نیست با اسکوپ یه نیگا بهش بندازید.

                        3- تاتی تاتی و قیژ قیژ نشانه عدم ثبات در پالسه

                        4- همونطور که میدونید یا شاید هم نمیدونید...سروو با یه پالسی با پریود 20 میلی ثانیه کار میکنه و با تغییر زمان بالا بودن پالس از حدود 300 میکرو تا 2 میلی ثانیه از صفر تا حدود 180 درجه تغییر وضعیت میده...و اگه یه پالس ادامه داشته باشه سروو توی همون موقعیت میمونه و هیچ زوری نمیتونه اونو ازون موقعیت تکون بده....مگه اینکه اون زوره...زورش خیلی زیاد باشه :mrgreen: که در اون صورت سروو..... فاتحه مع الصلوات بلند. oo:

                        5-ختم کلام: اول یه پالس با پریود 20 میلی ثانیه و مدت بالا بودن مثلا 1 میلی ثانیه بسازید...و روی سروو تست کنید...ببنید کار میکنه؟؟...بعد یواش یواش سعی کنید لقمتون رو گنده تر بردارید و پروژتون رو تموم کنید. :applause:


                        مهندس و پیروز باشید

                        خوب بودن تنها ویژگی ای است که برای دستیابی به آن نیاز به هیچ استعدادی نیست.... دکتر قمشه ای

                        دیدگاه


                          #13
                          پاسخ : کمک در تولید پالس با PWM

                          حالا این یکی، با کریستال 12، pwm مربعی با پریود 20میلی و زمان بالا بودن 1 میلی.
                          توی پروتئوس دقیق جواب داد، هم با اسکوپش و هم با digital analyse.
                          کد:
                          #include <mega16.h>
                          #define xtal 12000000
                          #define up PINA.0
                          #define down PINA.1
                          unsigned int x=34;
                          interrupt [TIM0_OVF] void timer0_ovf_isr(void)
                          {
                           TCCR0=0X00;
                           TCNT0=22;
                           OCR0=x;
                           TCCR0=0X6D;
                           }
                           void main ()
                           {
                           PORTA=0x03;
                           DDRA=0x00;
                           PORTB=0x00;
                           DDRB=0x08;
                           TCNT0=22;
                           OCR0=34;
                           TIMSK=0X01;
                           TCCR0=0X6D;
                           #asm ("sei")
                           while (1)
                           {
                            if (down==0)
                            {
                            if (x>=100 && x<250) x+=10;
                            while (down==0);
                            }
                            if (up==0)
                            {
                            if (x!=100) x-=10;
                            while (up==0);
                            }
                            };
                            }

                          با مکافات تونستم یک اسکوپ جور کنم. خروجی میکرو امتحان کردم. موج مربعی خوبی بود، فقط کمی ایراد داشت!
                          پریودش بجای 20میلی ،حدود 19.2 میلی ثانیه بود،
                          و زمان بالا بودن، بجای 1میلی، حدود 1.36 میلی ثانیه بود!
                          تغذیه سروو هم جدا دادم، دقیق 5v. با این PWM، تقریباً 90 درجه رو چرخید. ولی از هر چند بار امتحان، یکبار اندازش از 90 کمتر یا بیشتر میشد....چرا؟

                          مشکل بعدی، همچنان با زدن کلید های up و down هیچگونه تغییری نه در پروتئوس و حتی در عمل ایجاد نشد!! نمیدونم کجای برنامه ایراد داره. با زدن این دو تا که به pina.0 و pina.1 وصل میشن باید زمان high بودن تغییر کنه که نمیکنه! چرا؟!
                          دلي دارم که از تنگي در او جز غم نمي گنجد........ غمي دارم ز دلتنگي که در عالم نميگنجد

                          دیدگاه


                            #14
                            پاسخ : کمک در تولید پالس با PWM

                            با سلام . در برنامه بالا ، در ابتدا فرکانس 8 مگ رو تقسیم بر 1024 میکنیم که بشه ( KHz 7.8125 ) که اگر زمان رو حساب کنیم میشه 128 us . از اونجایی که تایمر 0 یک تایمر 8 بیتی هست ، هر ( 128 * 255 ) میکرو ثانیه سر ریز میشه . حالا ما به تایمر 0 یک مقدار اولیه 178 که بدیم ، 178-255 یعنی 77 تا میمونه که سر ریز بشه . در این صورت تایمر 0 در هر ( 128 * 77 ) میکرو ثانیه ( تقریبا 10ms ) سرریز میشه . حالا با فعال کردن وقفه سرریز تایمر 0 ( Enable OVF0 ) و دستور ( On OVF0 Make_Pwm ) در هر 10ms که تایمر 0 سر ریز میشه به زیر برنامه وقفه پرش میکنه . با این کار فرکانس 100Hz تولید میشه .
                            [glow=blue,2,300]آنقدر به تاريكي لعنت نفرستيد ، يك شمع روشن كنيد. [/glow]

                            دیدگاه


                              #15
                              پاسخ : کمک در تولید پالس با PWM

                              یکی کمک کنه!
                              این سروو چرا خل میشه؟!؟ تایمر صفر رو جوری نوشتم تا بشه با دو تا سوییچ زمان 1 بودن پالس pwm رو از 1 تا 2 میلی ثاینه تغییر داد. با 11 بار زدن کلید ها، سروو هر دفعه 15 درجه جابجا میشه تا بازه 165 درجه رو طی کنه. خروجی oc0 میکرو رو هم با اسکوپ نگاه کردم، از یک تا دو میلی ثانیه تغییر میکنه. پس برنامه لابد درسته. اصلاً اینم فایلش، ببینید:
                              http://www.2shared.com/file/12775967/55db86f2/blink_led.html

                              ولی همه اینا تو تئوری و پروتئوس و دستگاه اسکوپ جواب داده! در عمل سروو فقط 90 درجه میچرخه!! چرا؟ مگه چی میخواد؟ از هر 10 بار امتحان عملی، فقط 1 بار درست عمل میکنه، ولی همون یکبار هم 90 درجه میچرخه! بقیه دفعات همش قیژ قیژ میکنه و گاهی الکی چپ و راست میشه... :angry: :angry: :cry2: :cry2:

                              اینم کد برنامه:
                              کد:
                              #include <mega16.h>
                              #include <delay.h>
                              #define xtal 12000000
                              #define up PINA.0
                              #define down PINA.1
                              unsigned int x=34;
                              interrupt [TIM0_OVF] void timer0_ovf_isr(void)
                              {
                               TCCR0=0X00;
                               TCNT0=22;
                               OCR0=x;
                               TCCR0=0X6D;
                               }
                               void main ()
                               {
                               PORTA=0x03;
                               DDRA=0x00;
                               PORTB=0x00;
                               DDRB=0x08;
                               TCNT0=22;
                               OCR0=34;
                               TIMSK=0X01;
                               TCCR0=0X6D;
                               #asm ("sei")
                               while (1)
                               {
                                if (down==0)
                                {
                                delay_ms(20);
                                if (down==0)
                                {
                                 if (x>33 && x!=34) x-=1;
                                 while (down==0);
                                }
                                }
                                if (up==0)
                                {
                                delay_ms(20);
                                if (up==0)
                                {
                                 if (x>22 && x<46 && x!=45) x+=1;
                                 while (up==0);
                                }
                                }
                                };
                                }
                              دلي دارم که از تنگي در او جز غم نمي گنجد........ غمي دارم ز دلتنگي که در عالم نميگنجد

                              دیدگاه

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