اطلاعیه

Collapse
No announcement yet.

چگونه همه پایه های میکروکنترلر AVR را PWM کنیم ؟؟

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

    پاسخ : چگونه همه پایه های میکروکنترلر AVR را PWM کن

    نوشته اصلی توسط سید محمد .
    مهندس اومدم دکمه ویرایش رو بزنم . اشتباهی merge رو زدم . یه کم به هم ریخت .

    چشم مهندس .پس با اجازتون یه تاپیک جدید میزنم .
    من از شما تشکر کردم دیدم پست شما نیست :(
    پست خیلی خیلی خوبی بود ...
    حتی بهتر از توضیحات من :applause:
    [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
    معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
    معرفی نرم افزار Codewizard PWM
    با من بیشتر آشنا شوید

    دیدگاه


      پاسخ : چگونه همه پایه های میکروکنترلر AVR را PWM کن

      مهندس جان لهمون نکن .
      هر چی نوشتیم از شما یاد گرفتیم .

      اومدم merge رو زدم به هم ریخت . دارم درستش میکنم . ادامه هم داره .
      إِنَّ الَّذِینَ یُحِبُّونَ أَنْ تَشِیعَ الْفاحِشَهُ فِی الَّذِینَ آمَنُوا لَهُمْ عَذابٌ أَلِیمٌ فِی الدُّنْیا وَ الْآخِرَهِ وَ اللَّهُ یَعْلَمُ وَ أَنْتُمْ لا تَعْلَمُونَ.
      کسانى که دوست دارند زشتی ها در میان مردم با ایمان شیوع یابد عذاب دردناکى براى آنها در دنیا و آخرت است، و خداوند میداند و شما نمی‏دانید. (نور19)

      دیدگاه


        توضیح خط به خط و بلوک به بلوک برنامه pwm مربوط به LED بارانی

        توضیح خط به خط و بلوک به بلوک برنامه pwm مربوط به LED بارانی


        اول توضیح کلی :
        ایده اصلی این برنامه از عملکرد pwm سخت افزاری گرفته شده . قسمتهای مختلف که بهش نیاز داریم رو رنگی میکنم .
        در pwm سخت افزاری یه رجیستر داریم به نام tcnt که با کلاک میکرو یا تقسیمی از کلاک میکرو افزایش پیدا میکنه .
        یه رجیستر هم داریم برای مقایسه به نام ocr
        این دو تا رجیستر دائم با هم مقایسه میشن . هر وقت مقدار tcnt با ocr برابر بشه پایه مربوط به pwm تغییر وضعیت میده . در نهایت هم بعد از سرریز tcnt دوباره پایه تغییر وضعیت میده
        -------------------------------------------------------------------------------------------------------------
        با توجه به توضیحات بالا میریم سراغ پیاده سازی .
        نکات مهمش اینهاست

        1 یه چیزی لازم داریم که کلاک رو شبیه سازی کنه
        2 یه چیزی لازم داریم که کار رجیستر TCNT رو شبیه سازی کنه
        3 یه چیزی که با کلاک شبیه سازی شده کار افزایش TCNT رو شبیه سازی کنه (تو این کد کاهش میده)
        4 یه چیز لازم داریم که نقش OCR رو بازی کنه
        5 یه چیزی لازم داریم که مقایسه کنه
        6 یه چیز هم لازم داریم که برای تغییر وضعیت پایه خروجی بعد از مقایسه .
        7 یه چیز لازم داریم برای تغییر وضعیت پایه خروجی بعد از سرریز.

        با این الگوریتم اگه برنامه رو بنویسیم میتونیم روی هر تعداد پایه pwm ثابت داشته باشیم .

        برای اینکه LEDها حرکت داشته باشن باید یه قسمت هم به برنامه اضافه کنیم برای حرکت.( البته جناب اسدی عزیز زحمتشو کشیدن )

        هر قسمت کد داره یکی از نقش های بالا رو انجام میده . بعضی خیلی طولانی در حد چند خط و بعضی خیلی کوتاه مثلا در شرط if

        * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
        دونه دونه شماره های بالا رو توضیح میدم (با توجه به کدها )

        1 ( یه چیزی لازم داریم که کلاک رو شبیه سازی کنه )
        برای شبیه سازی کلاک از تایمر استفاده شده . طوری تنظیم شده که هر 150 میکرو ثانیه بپره به زیر روال تایمر . این کار با مقدار دهی به OCR0 و تنظیم رجیستر TCCR انجام شده .
        همه کارهایی که به صورت سخت افزاری در تایمر در مد pwm انجام میشه در حالت نرم افزاری تو زیرروال تایمر باید انجام بشه .

        2 ( یه چیزی لازم داریم کار TCNT را شبیه سازی کنه )
        کار TCNT رو متغییر a داره انجام میده. البته با این تفاوت که TCNT افزایشی میشمارد ولی متغییر a داره کاهشی میشمارد . ( فرقی هم نداره ، خودتون بررسی کنید. همه چی دست خودمونه )

        3 (یه چیزی که با کلاک شبیه سازی شده کار افزایش TCNT رو شبیه سازی کنه (تو این کد کاهش میده) )
        تو شرط if اون a-- اون چیز بلاییه . ( تو حالت سخت افزاری TCNT با کلاک زیاد میشه . اینجا متغیر a با کلاک کم میشه)

        4 (یه چیز لازم داریم نقش ocr رو بازی کنه )
        برای شبیه سازی رجیستر OCR جناب اسدی یه آرایه تعریف کردن به اسم pwm

        تعداد اعضای این آرایه چقدر باشه ؟
        پاسخ : به تعداد پایه هایی که میخواین روش سیگنال بندازین ( سیگنال pwm )

        فضای متغیر آرایه چقدر باشه ؟
        پاسخ : 8بیتی باشه کافیه . چون از صفر تا 99 بیشتر احتیاج نداریم و کاراکتر تا 255 رو میتونه در خودش ذخیره کنه .

        چرا از 0 تا 99 ؟
        پاسخ : چون ما عرض سیگنالمون رو 100% در نظر میگیریم . حالا اگه بخواییم 50 در صد سیگنال سطح یک باشه فقط کافیه به اندیس مورد نظر مقدار 50 را بدهیم .
        ;pwm[1]=50
        اگر دقت PWM را 256 پله (8بیتی) بگیریم متغیر 8بیتی را نماینده کل عرض پالس در یک دوره تناوب قرار میدادیم برای ایجاد دیوتی سایکل 30 درصد باید از تناسب کمک میگرفتیم و محاسبه میکردیم. این کار محاسبات اضافی رو حذف میکنه .

        5 (یه چیزی لازم داریم که مقایسه کنه)
        مقایسه داره تو زیر روال تایمر اتفاق میافته که یه نگاه کنید همه چیز معلومه[code=c] ;if(a == pwm[1] )led1=1[/code]

        گفتیم تو حالت سخت افزاری TCNT با OCR مقایسه میشه .
        اینجا عضو آرایه با متغییر a مقایسه میشه . یادآوری میکنم که هر عضو آرایه رو به عنوان رجیستر مقایسه برای یه پایه در نظر گرفتیم .

        6 (یه چیز هم لازم داریم برای تغییر وضعیت پایه خروجی بعد از مقایسه )
        تو همین کد بالا[code=c] ;led1=1[/code]

        این همان حرکت بعد از مقایسه است .

        7 (یه چیز لازم داریم برای تغییر وضعیت پایه خروجی بعد از سرریز )
        تو همین زیر روال تایمر بعد از if پایین که در آن از متغییر a یه واحد کم کرده همه پورت ها رو صفر کرده .
        این هم حرکت بعد از سر ریزه .


        اون آرایه های rain نقش جدول look up رو دارن . forهای انتهای برنامه هم با کمک آن جداول look up (همون rain های ابتدای برنامه ) اعضای آرایه رو مقدار دهی میکنن .
        ------------------------------------------------------------------------------------------------------------------------------------------
        2 تا سوال دارم که هنوز نفهمیدم.
        تو آرایه اگه ما تعداداعضا رو 10 بزاریم و فقط به 2 تاش مقدار اولیه بدیم بقیشون چه مقداری به خودشون میگیرن ؟
        اون کدهای پایین تو حلقه بینهایت : یکیشون رو میشه خط به خط توضیح بدین ؟ یه جون دارشو اگه میشه لطفا !
        إِنَّ الَّذِینَ یُحِبُّونَ أَنْ تَشِیعَ الْفاحِشَهُ فِی الَّذِینَ آمَنُوا لَهُمْ عَذابٌ أَلِیمٌ فِی الدُّنْیا وَ الْآخِرَهِ وَ اللَّهُ یَعْلَمُ وَ أَنْتُمْ لا تَعْلَمُونَ.
        کسانى که دوست دارند زشتی ها در میان مردم با ایمان شیوع یابد عذاب دردناکى براى آنها در دنیا و آخرت است، و خداوند میداند و شما نمی‏دانید. (نور19)

        دیدگاه


          پاسخ : چگونه همه پایه های میکروکنترلر AVR را PWM کن

          نوشته اصلی توسط سید محمد .
          2 تا سوال دارم که هنوز نفهمیدم.
          تو آرایه اگه ما تعداداعضا رو 10 بزاریم و فقط به 2 تاش مقدار اولیه بدیم بقیشون چه مقداری به خودشون میگیرن ؟
          اون کدهای پایین تو حلقه بینهایت : یکیشون رو میشه خط به خط توضیح بدین ؟ یه جون دارشو اگه میشه لطفا !
          آفرین ...
          خوشم اومد ... سوال خوبی بود ...
          ببینید دوستان
          بستگی داره ... اگر یه قسمت حافظه را به طور تصادفی بگیرید تازمانی که به آنها مقدار ندهید مقدار آنها میتواند غیر صفر باشد ...
          اگر متغیر را سراسری تعریف کنید همون اول کار خود کامپایلر مقدار صفر را مقداردهی می کند ...
          اگر متغیر محلی تعریف کنید و به آن مقدار ندهید میتواند غیر صفر باشد ... ولی چه بهتر که مقدار دهی کنیم ...
          اگر یه قسمت از حافظه فلش را رزرو کنید و از آن استفاده ای نکنید ، مقدار آنها مقدار صفر است ...

          در مورد سوال دوم:
          کدوم برنامه ؟؟ من هزارتا برنامه تو این تاپیک نوشتم ... کدومش رو میگید ؟؟ همون پست دومم ؟؟
          [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
          معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
          معرفی نرم افزار Codewizard PWM
          با من بیشتر آشنا شوید

          دیدگاه


            پاسخ : چگونه همه پایه های میکروکنترلر AVR را PWM کن

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

            کدوم برنامه ؟؟ من هزارتا برنامه تو این تاپیک نوشتم ... کدومش رو میگید ؟؟ همون پست دومم ؟؟
            بله ، مثلا آخرین for :
            [code=vb] for(x3=0;x3<4;x3++)
            for(x1=0;x1<19;x1++)
            { for(x2=8;x2>00;x2--)pwm[x2]=pwm[x2-1];
            for(x2=9;x2<17;x2++)pwm[x2]=pwm[x2+1];
            pwm[0]=rain4[x1];
            pwm[17]=rain4[x1];
            delay_ms(40);
            }[/code]
            این بخش رو متوجه نمیشم .
            چرا 3 تا متغییر
            چرا for های تو در تو
            چرا فقط pwm[0] , pwm[17]

            البته مهندس یه سری توضیح تو این پست بود .
            http://www.eca.ir/forum2/index.php?topic=90246.msg576250#msg576250
            خوندم. خیلی متوجه نشدم . بازم زحمت بی سوادی ما افتاد گردن شما
            إِنَّ الَّذِینَ یُحِبُّونَ أَنْ تَشِیعَ الْفاحِشَهُ فِی الَّذِینَ آمَنُوا لَهُمْ عَذابٌ أَلِیمٌ فِی الدُّنْیا وَ الْآخِرَهِ وَ اللَّهُ یَعْلَمُ وَ أَنْتُمْ لا تَعْلَمُونَ.
            کسانى که دوست دارند زشتی ها در میان مردم با ایمان شیوع یابد عذاب دردناکى براى آنها در دنیا و آخرت است، و خداوند میداند و شما نمی‏دانید. (نور19)

            دیدگاه


              پاسخ : پاسخ : چگونه همه پایه های میکروکنترلر AVR را PWM کن

              نوشته اصلی توسط سید محمد .
              بله ، مثلا آخرین for :
              [code=vb] for(x3=0;x3<4;x3++)
              for(x1=0;x1<19;x1++)
              { for(x2=8;x2>00;x2--)pwm[x2]=pwm[x2-1];
              for(x2=9;x2<17;x2++)pwm[x2]=pwm[x2+1];
              pwm[0]=rain4[x1];
              pwm[17]=rain4[x1];
              delay_ms(40);
              }[/code]
              این بخش رو متوجه نمیشم .
              چرا 3 تا متغییر
              چرا for های تو در تو
              چرا فقط pwm[0] , pwm[17]
              بابا ایول ...
              تا اونجایی که حافظه من یاری میکنه هیچ کس این سوال رو نپرسیده بود ... :applause:
              دوستان این قسمت نکته خیلی ریزی هست
              من 16 تا LED گذاشته بودم ...
              PWM هم از 1تا 16 گرفته بودم ...
              دوتا خانه
              کد:
               pwm[0] , pwm[17]
              هم به عنوان متغیر کمکی در نظر گرفتم ... :->
              نکته انحرافی اینجا بود ... :mrgreen:
              خوب حالا چرا دوتا حلقه For گذاشتم که یکی از 8 تا 1 و دیگری از 9 تا 16 ؟؟
              به خاطر اینکه خواستم اینطوری بشه ...
              کد:
              pwm[8]=pwm[7];
              pwm[7]=pwm[6];
              pwm[6]=pwm[5];
              pwm[5]=pwm[4];
              pwm[4]=pwm[3];
              pwm[3]=pwm[2];
              pwm[2]=pwm[1];
              pwm[1]=pwm[0];
              
              pwm[9 ]=pwm[10];
              pwm[10]=pwm[11];
              pwm[11]=pwm[12];
              pwm[12]=pwm[13];
              pwm[13]=pwm[14];
              pwm[14]=pwm[15];
              pwm[15]=pwm[16];
              pwm[16]=pwm[17];
              یعنی اینکه داریم مقدار ها را شیفت می دهیم ...
              بعد از این کار باید اندیسهای 0 و 17 را مقداردهی کنیم تا برای میزان نور مرحله بعدی کم و زیاد شود ...
              حلقه اولی هم برای تکرار افکت هست ...
              کد:
               for(x3=0;x3<4;x3++)
              یعنی 4 بار تکرار میشه ...

              نوشته اصلی توسط سید محمد .
              البته مهندس یه سری توضیح تو این پست بود .
              http://www.eca.ir/forum2/index.php?topic=90246.msg576250#msg576250
              خوندم. خیلی متوجه نشدم . بازم زحمت بی سوادی ما افتاد گردن شما
              افرادی که سوالهای خوب میپرسند خیلی زود پیشرفت می کنند ... از جمله شما ... :applause:
              [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
              معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
              معرفی نرم افزار Codewizard PWM
              با من بیشتر آشنا شوید

              دیدگاه


                پاسخ : چگونه همه پایه های ATmega16-32-64-128 را PWM کنیم؟؟ ATmega8 هم اضاف شد

                [/img]
                نوشته اصلی توسط سامان اسدی
                سلام شاهین جان
                ببین
                خیلی از قسمت های برنامه رو کاری نداشته باش که چیکار میکنه ...
                به عنوان مثال به این کدها کاری نداشته باش ...
                فکر کن که نیستند ...
                کد:
                $regfile = "m8def.dat"
                 $crystal = 8000000
                
                
                 Led1 Alias portd.0
                 Led2 Alias portd.1
                 Led3 Alias portd.2
                 Led4 Alias portd.3
                 Led5 Alias portd.4
                 Led6 Alias Portb.6
                 Led7 Alias Portb.7
                 Led8 Alias Portd.5
                 Led9 Alias Portd.6
                 Led10 Alias Portd.7
                 Led11 Alias Portb.0
                 Led12 Alias Portb.1
                 Led13 Alias Portb.2
                 Led14 Alias Portb.3
                 Led15 Alias Portb.4
                 Led16 Alias Portb.5
                 Led17 Alias Portc.0
                 Led18 Alias Portc.1
                 Led19 Alias Portc.2
                 Led20 Alias Portc.3
                 Led21 Alias Portc.4
                 Led22 Alias Portc.5
                
                 Max_var_pwm Alias 99
                 Max_led Alias 22
                 Delay1 Alias 20
                 'ms
                 Delay2 Alias 200
                 'ms
                 Dim Pwm(35) As Byte , A As Byte , _
                 Y2 As Byte , _
                 X1 As Byte , X2 As Byte , X3 As Byte
                 Y2 = Max_led + Max_led
                 A = Max_var_pwm
                
                  'Config All =============================================
                  'Config Timers
                  'Config Ports
                   Config Timer0 = Timer , Prescale = 8
                   Enable Interrupts
                   Enable Timer0
                   On Ovf0 T0
                   Tcnt0 = 105
                   Start Timer0
                   Ddrb = 255
                   Ddrc = 63
                   Ddrd = 255
                  'End Config ============================================
                
                  Do
                
                  Loop
                End                             'end program
                
                
                T0:
                  Tcnt0 = 105
                  If A > 0 Then
                   If A = Pwm(1) Then Led1 = 1
                   If A = Pwm(2) Then Led2 = 1
                   If A = Pwm(3) Then Led3 = 1
                   If A = Pwm(4) Then Led4 = 1
                   If A = Pwm(5) Then Led5 = 1
                   If A = Pwm(6) Then Led6 = 1
                   If A = Pwm(7) Then Led7 = 1
                   If A = Pwm(8) Then Led8 = 1
                   If A = Pwm(9) Then Led9 = 1
                   If A = Pwm(10) Then Led10 = 1
                   If A = Pwm(11) Then Led11 = 1
                   If A = Pwm(12) Then Led12 = 1
                   If A = Pwm(13) Then Led13 = 1
                   If A = Pwm(14) Then Led14 = 1
                   If A = Pwm(15) Then Led15 = 1
                   If A = Pwm(16) Then Led16 = 1
                   If A = Pwm(17) Then Led17 = 1
                   If A = Pwm(18) Then Led18 = 1
                   If A = Pwm(19) Then Led19 = 1
                   If A = Pwm(20) Then Led20 = 1
                   If A = Pwm(21) Then Led21 = 1
                   If A = Pwm(22) Then Led22 = 1
                
                  End If
                  Decr A
                  If A = 255 Then
                   A = Max_var_pwm
                   Portb = 0
                   Portc = 0
                   Portd = 0
                  End If
                Return
                فقط این رو مد نظر داشته باش که ما اگر به آرایه Pwm و اندیس مورد نظر مقدار دهی کنیم ; pwm مورد نظر تنظیم میشود ...
                مقداری که مجاز هستیم در این برنامه میتوانیم از 0 تا 99 مقدار بدهیم ... که این نشان دهنده دیوتی سایکل (درصد نسبت یک بودن به صفر بودن) است
                خوب
                حالا در این حلقه Do-Loop دو حلقه For میگذاریم یکی برای خاموشی به روشنایی کامل و دیگری از روشنایی کامل به خاموشی ...

                این کد برای خاموشی به روشنایی
                کد:
                   For X = 0 To 99
                     Pwm(1) = X
                     Waitms 10
                   Next
                این کد برای روشنایی به خاموشی
                کد:
                   For X = 99 To 0 Step -1
                     Pwm(1) = X
                     Waitms 10
                   Next
                خوب حالا اگر این دو حلقه را یکی پس از دیگری بگذاریم میبینیم که اول خاموش به روشنی و سپس روشنایی به خاموشی تغییر پیدا میکند ... (این کار به طور مداوم انجام میگیرد)
                پس از این دو حلقه اگر خواستید که یک لحظه بماند یک تاخیری بدهید مانند کد زیر

                کد:
                   For X = 0 To 99
                     Pwm(1) = X
                     Waitms 10
                   Next
                
                   Waitms 1000
                
                   For X = 99 To 0 Step -1
                     Pwm(1) = X
                     Waitms 10
                   Next
                
                   Waitms 1000
                به همین راحتی و خوشمزگی ... :nerd:
                سوالی بود در خدمتم ...
                سلام چرا وقتی تو حلقه do - loop
                قرارشوون میدم موقع کامپایل خطا میده
                $regfile = "m8def.dat"
                $crystal = 8000000


                Led1 Alias portd.0
                Led2 Alias portd.1
                Led3 Alias portd.2
                Led4 Alias portd.3
                Led5 Alias portd.4
                Led6 Alias Portb.6
                Led7 Alias Portb.7
                Led8 Alias Portd.5
                Led9 Alias Portd.6
                Led10 Alias Portd.7
                Led11 Alias Portb.0
                Led12 Alias Portb.1
                Led13 Alias Portb.2
                Led14 Alias Portb.3
                Led15 Alias Portb.4
                Led16 Alias Portb.5
                Led17 Alias Portc.0
                Led18 Alias Portc.1
                Led19 Alias Portc.2
                Led20 Alias Portc.3
                Led21 Alias Portc.4
                Led22 Alias Portc.5

                Max_var_pwm Alias 99
                Max_led Alias 22
                Delay1 Alias 20
                'ms
                Delay2 Alias 200
                'ms
                Dim Pwm(35) As Byte , A As Byte , _
                Y2 As Byte , _
                X1 As Byte , X2 As Byte , X3 As Byte
                Y2 = Max_led + Max_led
                A = Max_var_pwm

                'Config All =============================================
                'Config Timers
                'Config Ports
                Config Timer0 = Timer , Prescale = 8
                Enable Interrupts
                Enable Timer0
                On Ovf0 T0
                Tcnt0 = 105
                Start Timer0
                Ddrb = 255
                Ddrc = 63
                Ddrd = 255
                'End Config ============================================

                Do
                For X = 0 To 99
                Pwm(1) = X
                Waitms 10
                Next
                Waitms 1000


                For X = 99 To 0 Step -1
                Pwm(1) = X
                Waitms 10
                Next

                Waitms 1000
                Loop
                End 'end program


                T0:
                Tcnt0 = 105
                If A > 0 Then
                If A = Pwm(1) Then Led1 = 1
                If A = Pwm(2) Then Led2 = 1
                If A = Pwm(3) Then Led3 = 1
                If A = Pwm(4) Then Led4 = 1
                If A = Pwm(5) Then Led5 = 1
                If A = Pwm(6) Then Led6 = 1
                If A = Pwm(7) Then Led7 = 1
                If A = Pwm(8) Then Led8 = 1
                If A = Pwm(9) Then Led9 = 1
                If A = Pwm(10) Then Led10 = 1
                If A = Pwm(11) Then Led11 = 1
                If A = Pwm(12) Then Led12 = 1
                If A = Pwm(13) Then Led13 = 1
                If A = Pwm(14) Then Led14 = 1
                If A = Pwm(15) Then Led15 = 1
                If A = Pwm(16) Then Led16 = 1
                If A = Pwm(17) Then Led17 = 1
                If A = Pwm(18) Then Led18 = 1
                If A = Pwm(19) Then Led19 = 1
                If A = Pwm(20) Then Led20 = 1
                If A = Pwm(21) Then Led21 = 1
                If A = Pwm(22) Then Led22 = 1

                End If
                Decr A
                If A = 255 Then
                A = Max_var_pwm
                Portb = 0
                Portc = 0
                Portd = 0
                End If
                Return

                Rain:
                Data 99 , 80 , 70 , 60 , 40 , 20 , 15 , 9 , 7 , 5 , _
                3 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , _
                0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,_
                0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,_
                0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0

                در ضمن از کریستال داخلی یا خارجی استفاده کنم
                [img][/img]

                دیدگاه


                  پاسخ : چگونه همه پایه های میکروکنترلر AVR را PWM کنیم ؟؟

                  [img][/img]راستی چرا نمیتونم عکس بفرستم
                  رو آیکنش زیر B بولد کلیک میکنم فقط مینویسه و دیگه هیچی

                  :angry: :angry: :angry: :angry: :angry: :angry:

                  دیدگاه


                    پاسخ : چگونه همه پایه های ATmega16-32-64-128 را PWM کنیم؟؟ ATmega8 هم اضاف شد

                    نوشته اصلی توسط amoosa
                    [/img]
                    سلام چرا وقتی تو حلقه do - loop
                    قرارشوون میدم موقع کامپایل خطا میده
                    کد:
                    $regfile = "m8def.dat"
                     $crystal = 8000000
                    
                    
                     Led1 Alias portd.0
                     Led2 Alias portd.1
                     Led3 Alias portd.2
                     Led4 Alias portd.3
                     Led5 Alias portd.4
                     Led6 Alias Portb.6
                     Led7 Alias Portb.7
                     Led8 Alias Portd.5
                     Led9 Alias Portd.6
                     Led10 Alias Portd.7
                     Led11 Alias Portb.0
                     Led12 Alias Portb.1
                     Led13 Alias Portb.2
                     Led14 Alias Portb.3
                     Led15 Alias Portb.4
                     Led16 Alias Portb.5
                     Led17 Alias Portc.0
                     Led18 Alias Portc.1
                     Led19 Alias Portc.2
                     Led20 Alias Portc.3
                     Led21 Alias Portc.4
                     Led22 Alias Portc.5
                    
                     Max_var_pwm Alias 99
                     Max_led Alias 22
                     Delay1 Alias 20
                     'ms
                     Delay2 Alias 200
                     'ms
                     Dim Pwm(35) As Byte , A As Byte , _
                     Y2 As Byte , _
                     X1 As Byte , X2 As Byte , X3 As Byte
                     Y2 = Max_led + Max_led
                     A = Max_var_pwm
                    
                      'Config All =============================================
                      'Config Timers
                      'Config Ports
                       Config Timer0 = Timer , Prescale = 8
                       Enable Interrupts
                       Enable Timer0
                       On Ovf0 T0
                       Tcnt0 = 105
                       Start Timer0
                       Ddrb = 255
                       Ddrc = 63
                       Ddrd = 255
                      'End Config ============================================
                    
                     Do
                      For X = 0 To 99
                         Pwm(1) = X
                         Waitms 10
                       Next
                       Waitms 1000
                    
                    
                       For X = 99 To 0 Step -1
                         Pwm(1) = X
                         Waitms 10
                       Next
                    
                       Waitms 1000
                      Loop
                    End                             'end program
                    
                    
                    T0:
                      Tcnt0 = 105
                      If A > 0 Then
                       If A = Pwm(1) Then Led1 = 1
                       If A = Pwm(2) Then Led2 = 1
                       If A = Pwm(3) Then Led3 = 1
                       If A = Pwm(4) Then Led4 = 1
                       If A = Pwm(5) Then Led5 = 1
                       If A = Pwm(6) Then Led6 = 1
                       If A = Pwm(7) Then Led7 = 1
                       If A = Pwm(8) Then Led8 = 1
                       If A = Pwm(9) Then Led9 = 1
                       If A = Pwm(10) Then Led10 = 1
                       If A = Pwm(11) Then Led11 = 1
                       If A = Pwm(12) Then Led12 = 1
                       If A = Pwm(13) Then Led13 = 1
                       If A = Pwm(14) Then Led14 = 1
                       If A = Pwm(15) Then Led15 = 1
                       If A = Pwm(16) Then Led16 = 1
                       If A = Pwm(17) Then Led17 = 1
                       If A = Pwm(18) Then Led18 = 1
                       If A = Pwm(19) Then Led19 = 1
                       If A = Pwm(20) Then Led20 = 1
                       If A = Pwm(21) Then Led21 = 1
                       If A = Pwm(22) Then Led22 = 1
                    
                      End If
                      Decr A
                      If A = 255 Then
                       A = Max_var_pwm
                       Portb = 0
                       Portc = 0
                       Portd = 0
                      End If
                    Return
                    
                     Rain:
                     Data 99 , 80 , 70 , 60 , 40 , 20 , 15 , 9 , 7 , 5 , _
                        3 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , _
                        0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,_
                        0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,_
                        0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
                    در ضمن از کریستال داخلی یا خارجی استفاده کنم
                    [img][/img]
                    درود
                    متغیر X تعریف نکردید ...
                    کد:
                    Dim X As Byte
                    نوشته اصلی توسط amoosa
                    [img][/img]راستی چرا نمیتونم عکس بفرستم
                    رو آیکنش زیر B بولد کلیک میکنم فقط مینویسه و دیگه هیچی

                    :angry: :angry: :angry: :angry: :angry: :angry:
                    آموزش های اولیه برای کار با امکانات انجمن

                    شاد و پیروز باشید
                    [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
                    معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
                    معرفی نرم افزار Codewizard PWM
                    با من بیشتر آشنا شوید

                    دیدگاه


                      پاسخ : چگونه همه پایه های میکروکنترلر AVR را PWM کنیم ؟؟

                      سلام من میخوام برای یک مدار فلاشر تابلو ال ای دی ثابت افکت نیم روشن رو درست کنم که تمام پایه های یک پورت ATmega8 به صورت نیمه روشن باشه و بعد یک بیت کاملا روشن بشه و داخل این 8 بیت جابجا میشده باشه
                      ممنون میشم برای نوشتن برنامه راهنماییم کنید به زبان c
                      درد من تنهايي نيست ، بلکه مرگ ملتي است که گدايي را قناعت، بي عرضگي را صبر، و باتبسمي بر لبان اين حماقت را حکمت خداوند مي نامند. ---((گاندي))---

                      دیدگاه


                        پاسخ : چگونه همه پایه های میکروکنترلر AVR را PWM کنیم ؟؟

                        برنامه های بالا کامل هستن اقای اسدی زحمتشونو کشیدن فقط شما یکی از برنامه ها رو کپی بگیر تو حلقه اصلی مقدار بده به پورت ها ونورشونو کنترل کن
                        http://s6.uplod.ir/i/00674/9cm41hm4inx0.jpg

                        دیدگاه


                          پاسخ : چگونه همه پایه های میکروکنترلر AVR را PWM کنیم ؟؟

                          با سلام

                          با یک ولوم چه طور یک پایه از میکرو را که به آن ال ای دی وصل شده است کم و زیاد کنم؟؟با استفاده از PWM نرم افزاری

                          دیدگاه


                            پاسخ : چگونه همه پایه های میکروکنترلر AVR را PWM کنیم ؟؟

                            نوشته اصلی توسط soltanfarid
                            با سلام

                            با یک ولوم چه طور یک پایه از میکرو را که به آن ال ای دی وصل شده است کم و زیاد کنم؟؟با استفاده از PWM نرم افزاری
                            سلام
                            کار سختی نیست
                            شما میتوانید عدد را از ADC بخوانید و آن را مساوی با یکی از خانه های(اندیس) مورد نظر آرایه مقدار دهی کنید ...

                            موفق باشید
                            [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
                            معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
                            معرفی نرم افزار Codewizard PWM
                            با من بیشتر آشنا شوید

                            دیدگاه


                              پاسخ : چگونه همه پایه های میکروکنترلر AVR را PWM کنیم ؟؟

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

                              دیدگاه


                                پاسخ : چگونه همه پایه های میکروکنترلر AVR را PWM کنیم ؟؟

                                نوشته اصلی توسط amin tal
                                سلام بر دوستان عزیز...
                                ایجاد یک موج مربعی با طول موج کوتاه (زیر کیلو هرتز)بسیار دقیق که در اسکیلوپ هم دقیق باشه و میزان صدم هرتز خطا داشته باشه با میکرو Avr امکانپذیره؟
                                و از طری نرم افزاری موج دقیقتری بدست میاد یا از طریق سخت افزاری؟
                                سلام

                                پاسخ پرسش یک:
                                بله ... امکان پذیر است ...

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

                                موفق باشید
                                [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
                                معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
                                معرفی نرم افزار Codewizard PWM
                                با من بیشتر آشنا شوید

                                دیدگاه

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