اطلاعیه

Collapse
No announcement yet.

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

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

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

    نوشته اصلی توسط Majid_Malvandi
    درود بر دوستان.

    با pwm یک سافت استارتر برای موتور دی سی ساختم.
    موتور 24 ولت دی سی میباشد و بدون بار تا 300 میلی امپر جریان کشی دارد.
    مشکلی که هست فقط موقع سافت استارت دیود شاتکی بینهایت داغ میکنه.بعدش که موتور حرکت کرد سرد میشه.
    دیود هم دیود دوبل شاتکی هست.از دیود هایی که داخل منابع سویچینگ استفاده میشه.

    ایا دیود باید عوض بشه ؟؟؟؟

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

    دیدگاه


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

      نوشته اصلی توسط Majid_Malvandi
      درود بر دوستان.

      با pwm یک سافت استارتر برای موتور دی سی ساختم.
      موتور 24 ولت دی سی میباشد و بدون بار تا 300 میلی امپر جریان کشی دارد.
      مشکلی که هست فقط موقع سافت استارت دیود شاتکی بینهایت داغ میکنه.بعدش که موتور حرکت کرد سرد میشه.
      دیود هم دیود دوبل شاتکی هست.از دیود هایی که داخل منابع سویچینگ استفاده میشه.

      ایا دیود باید عوض بشه ؟؟؟؟

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

      دیدگاه


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

        درود بر شما.
        دیود شاتکی رو دقیقا موازی با دیود داخلی ماسفت IRF540N بستم.آند دیود به سورس ماسفت-کاتد دیود به درین ماسفت
        مشکلم با فرکانسه.
        میکرو مگا 16=تایمر کانتر 1 با مد هشت بیتیPWM=فیوز بیت کریستال داخلی میکرو 8مگاهرتز هست.از داخل برنامه فرکانس را روی 2 مگاهرتز تنظیم کردم تا Waitms 1000 یک ثانیه واقعی بشه.
        پرسکل رو 1 میکنم=موتور از دیوتی 50 به بعد حرکت میکنه با گشتاور کم تو دور پایین.خیلی اهسته و بیصدا=اما شاتکی تا مرز سوختن میره.اگه دیوتی روی همون 50 باشه بعد 1 دقیقه شاتکی میسوزه.بعد اینکه شاتکی سوخت درجا ماسفت شروع میکنه به داغ شدن و سوختن

        وقتی پرسکل رو 8 میکنم=موتور از دیوتی 20 حرکت میکنه با گشتاور بال تو دور پایین=اما موتور صوت میکشه

        وقتی پرسکل رو 64 میکنم= موتور قار قار میکنه.

        حالا چیکار کنم که هم موتور سوت نکشه؟
        هم گشتاور تو دور پایین بالا باشه؟
        هم شاتکی داغ نکنه؟

        سپاس از توجه شما.
        ابتدا و شروع هرکاری سخت ترین مرحله آن کار است. برای مثال به عقابها نگاه کن ، حتی اونها هم در ابتدای پرواز ، زیاد بال و پر می زنند، اما هنگامی که اوج می گیرند ، دیگر حتی نیازی به پر زدن هم ندارند ...

        کافیست اولین قدمها را بدون ترس و با پشتکارِ بالا برداری مطمئن باش بزودی به اوج خواهی رسید و روزهای سخت همیشه نخواهند ماند ...

        دیدگاه


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

          نوشته اصلی توسط Majid_Malvandi
          درود بر شما.
          دیود شاتکی رو دقیقا موازی با دیود داخلی ماسفت IRF540N بستم.آند دیود به سورس ماسفت-کاتد دیود به درین ماسفت
          مشکلم با فرکانسه.
          میکرو مگا 16=تایمر کانتر 1 با مد هشت بیتیPWM=فیوز بیت کریستال داخلی میکرو 8مگاهرتز هست.از داخل برنامه فرکانس را روی 2 مگاهرتز تنظیم کردم تا Waitms 1000 یک ثانیه واقعی بشه.
          پرسکل رو 1 میکنم=موتور از دیوتی 50 به بعد حرکت میکنه با گشتاور کم تو دور پایین.خیلی اهسته و بیصدا=اما شاتکی تا مرز سوختن میره.اگه دیوتی روی همون 50 باشه بعد 1 دقیقه شاتکی میسوزه.بعد اینکه شاتکی سوخت درجا ماسفت شروع میکنه به داغ شدن و سوختن

          وقتی پرسکل رو 8 میکنم=موتور از دیوتی 20 حرکت میکنه با گشتاور بال تو دور پایین=اما موتور صوت میکشه

          وقتی پرسکل رو 64 میکنم= موتور قار قار میکنه.

          حالا چیکار کنم که هم موتور سوت نکشه؟
          هم گشتاور تو دور پایین بالا باشه؟
          هم شاتکی داغ نکنه؟

          سپاس از توجه شما.
          درود خداوند بر تو
          عزیز دل برادر کاملا درست اشتباه کردی ... :mrgreen:
          دیود را جای خوبی قرار ندادی چون که جریان سلفی برگشتی از موتور خنثی نشده ... و زمانی که جریان موتور قطع میشه ولتاژی برابر با چند صد ولت یا هزار ولت ایجاد خواهد شد و این مساله باعث میشود تا به دیود و ماسفت آسیب وارد کند و طرز درست بستن دیود باید کاتد دیود را به مثبت تغذیه و آند آن را به درین ماسفت متصل کنید ... به این شکل بستن مدار که دیود در این وضعیت قرار دارد در اصطلاح میگویند دیود هرزگرد است ... یعنی جریان برگشتی از موتور را خنثی میکند ...
          برای جلوگیری از صدای بد موتور هم باید فرکانس آن را در مرز بین 40 هرتز تا 100 هرتز نگه دارید ... (بسته به هر موتور فرکانسش فرق میکنه)
          موفق باشید ...
          [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
          معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
          معرفی نرم افزار Codewizard PWM
          با من بیشتر آشنا شوید

          دیدگاه


            پاسخ : هم گشتاور تو دور پایین بالا باشه؟

            نوشته اصلی توسط Majid_Malvandi
            هم گشتاور تو دور پایین بالا باشه؟
            دوست عزیز از این که این پرسش شما را ندیدم ، ببخشید ...
            در مورد این پرسش شما باید گفت که شما احتیاج به یک مدار بسته دارید نه یک مدار باز ...
            مداری که شما کار میکنید بدون نمونه برداری از خروجی است ...
            شما باید یک شفت انکدر روی موتور وصل کنید و دور آن را بخوانید و زمانی که گشتاور زیاد شد دور آن پایین می آید و شما از اینجا متوجه خواهید شد که دور آن پایین آمده و باید جریان آن را به نسبت زیاد کنید ...
            این نمونه موتورها در بازار هم وجود دارد البته قیمت آنها گران است ولی در عوض دقت و قدرت و سرعت و هوشمندی آنها بسیار بالاست ...
            نمونه موتوری که میتوانم به شما معرفی کنم سرو موتورهای AC سه فازه هستند ...
            ارزانترین مارکی که میتوانم به شما معرفی کنم دلتا است ...
            400 وات با گشتاور 1.27 نیوتن متر است البته این مدل اینرسی پایین است که قیمت آن حدودا" 1.5 میلیون تومان است ...
            این مدلی که گفته شد شفت انکدر 160,000 پالس دارد ... به بیان دیگر در هر دور 160هزار پالس تولید میکند و این پالسها انتقال به میکروکنترلر داخلی درایور آن داده میشود ... شما کاری با این پالسها ندارید ... و تنها کاری که میکنید آن است که به پایه های دایرکت و پالس و فعالساز پالسهای مورد نظر را به درایور موتور میدهید ...
            موفق باشید ...
            [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
            معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
            معرفی نرم افزار Codewizard PWM
            با من بیشتر آشنا شوید

            دیدگاه


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

              نوشته اصلی توسط majidmalvandi نمایش پست ها
              درود بر شما.
              دیود شاتکی رو دقیقا موازی با دیود داخلی ماسفت IRF540N بستم.آند دیود به سورس ماسفت-کاتد دیود به درین ماسفت
              مشکلم با فرکانسه.
              میکرو مگا 16=تایمر کانتر 1 با مد هشت بیتیPWM=فیوز بیت کریستال داخلی میکرو 8مگاهرتز هست.از داخل برنامه فرکانس را روی 2 مگاهرتز تنظیم کردم تا Waitms 1000 یک ثانیه واقعی بشه.
              پرسکل رو 1 میکنم=موتور از دیوتی 50 به بعد حرکت میکنه با گشتاور کم تو دور پایین.خیلی اهسته و بیصدا=اما شاتکی تا مرز سوختن میره.اگه دیوتی روی همون 50 باشه بعد 1 دقیقه شاتکی میسوزه.بعد اینکه شاتکی سوخت درجا ماسفت شروع میکنه به داغ شدن و سوختن

              وقتی پرسکل رو 8 میکنم=موتور از دیوتی 20 حرکت میکنه با گشتاور بال تو دور پایین=اما موتور صوت میکشه

              وقتی پرسکل رو 64 میکنم= موتور قار قار میکنه.

              حالا چیکار کنم که هم موتور سوت نکشه؟
              هم گشتاور تو دور پایین بالا باشه؟
              هم شاتکی داغ نکنه؟

              سپاس از توجه شما.
              این که موتور صوت میکشه دلیلش فرکانس کریر یا همون فرکانس موج pwm هست فرکانس شنوایی انسان از 20 هرتز هست تا 20 کیلوهرتز خب اکر فرکانس تو این محدوده باشه به دلیل لرزش خیلی کم سیمپیچ موتور صدایی ازش شنیده میشه که این لرزش هم خوب نیست وبه مرور باعث آسیب به موتور میشه که تو درایو هایه پیشرفته تو خروجی یه سلف به صورت فیلتر نصب میشه که این فرکانس رو تا حدودی فیلتر میکنه اگر شما بتونی فرکانس رو تا حد 21 کیلو هرتز هم ببری صدایه موتور خیلی خیلی کم میشه
              هر چه فرکانس بیشتر بشه صدایه موتور کمتر میشه و موتور نرم تر کار میکنه ولی محدودیت هم وجود داره یکی از این محدودیت ها اثر پوستی هست که هرچه فرکانس بیشتر بشه الکترون ها بیشتر تمایل پیدا میکنند از قسمت بیرونی هادی حرکت کنند و تا عمق کمتری از هادی جریان الکترون داریم و این باعث میشه هادی گرم بشه شما تا جایی که امکان داره و محدودیت ایجاد نمیشه واست فرکانس رو ببر بالا من تو درایو هایه معروف و صنعتی دیدم حدودا 22 کیلوهرتز هست فرکانس

              دیدگاه


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

                سلام دوستان
                من این برنامه رو از یه سایت پیدا کردم ولی نمیدونم چرا سرعت چشمک زدن led ها این قدر کمه لطفا اشکالشو بهم بگید
                برنامه:
                [FONT=Yekan]$regfile = "m8def.dat"[/FONT]$crystal = 1000000
                '=============================
                Config Portd = Output
                Dim C As Byte
                Dim X As Byte
                Dim Led(8) As Byte , A As Byte


                '=============================
                Config Timer0 = Timer , Prescale = 1
                On Ovf0 Rgbpwm
                Enable Timer0
                Enable Interrupts
                For X = 0 To 8
                Led(x) = 0


                Next


                Do
                Led(1) = 100
                Led(2) = 60
                Led(3) = 120
                Led(4) = 220
                Loop
                End
                Rgbpwm:
                Timer0 = 0
                Incr C
                If C = 0 Then Portd = &B11111111
                If Led(1) = C Then Reset Portd.0
                If Led(2) = C Then Reset Portd.1
                If Led(3) = C Then Reset Portd.2
                If Led(4) = C Then Reset Portd.3
                Return


                دیدگاه


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

                  سلام
                  لطفا بگید برای اینکه بخوایم کل پورت رو رو یه سطح ولتاژ نگه داریم چیکار باید کرد؟
                  برای فلاشر میخوام
                  تا بتونم نور و کم و زیاد کنم

                  دیدگاه


                    پاسخ : (برنامه اصلاح شد) چگونه تمام پایه های ATmega16-32-64-128 را PWM کنیم ؟؟!!

                    سلام خدمت آقا سامان عزیز
                    نمیدونم به این تاپیک سر میزنید یا خیر!!!
                    ولی من این برنامه رو استفاده کردم واسه سه کاری و چند افکت دیگه هم بهش اضافه کردم، مثل موج مکزیکی، ولی تو این افکت، ال ای دی ها پرش دارند!!! چرا؟نمونه کدم رو هم ارسال میکنم لطف کنید یه نگاهی بهش بندازید
                    کد:
                    #include <mega8.h>#include <delay.h>
                    
                    
                    #define     Set_LED1         PORTB.0 = 1
                    #define     Set_LED2         PORTB.1 = 1
                    #define     Set_LED3         PORTB.2 = 1
                    #define     Set_LED4         PORTB.3 = 1
                    #define     Set_LED5         PORTB.4 = 1
                    #define     Set_LED6         PORTB.5 = 1
                    #define     Set_LED7         PORTB.6 = 1
                    #define     Set_LED8         PORTB.7 = 1
                    #define     Set_LED9         PORTD.0 = 1
                    #define     Set_LED10        PORTD.1 = 1
                    #define     Set_LED11        PORTD.2 = 1
                    #define     Set_LED12        PORTD.3 = 1
                    #define     Set_LED13        PORTD.4 = 1
                    #define     Set_LED14        PORTD.5 = 1
                    #define     Set_LED15        PORTD.6 = 1
                    #define     Set_LED16        PORTD.7 = 1
                    #define     Set_LED17        PORTC.0 = 1
                    #define     Set_LED18        PORTC.1 = 1
                    #define     Set_LED19        PORTC.2 = 1
                    #define     Set_LED20        PORTC.3 = 1
                    
                    
                    #define     BLUE             PORTB.0=PORTB.1=PORTB.2=PORTB.3=PORTB.4=PORTB.5=PORTB.6=PORTB.7=PORTD.0=PORTD.1
                    #define     RED              PORTD.2=PORTD.3=PORTD.4=PORTD.5=PORTD.6=PORTD.7=PORTC.0=PORTC.1=PORTC.2=PORTC.3
                    #define     byte            unsigned char
                    #define     PB              PORTB
                    #define     PD              PORTD
                    #define     PC              PORTC
                    #define     TIME            100
                    #define     max_var_PWM     100
                    #define     Max_LED         20
                    #define     Delay1          30  //ms
                    #define     Delay2          400 //ms
                    #define     D_3             40
                    
                    
                    #define     ON              1
                    #define     OFF             0
                    
                    
                    // Declare your global variables here
                    byte    a = max_var_PWM , pwm[Max_LED+3],q=0;
                    flash byte  rain[]=
                    {100,95,90,85,80,75,70,65,60,55,50,45,40,35,30,25,20,15,10,5
                    ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
                    rain1[]=
                    {100,95,90,85,80,75,70,65,60,55,50,45,40,35,30,25,20,15,10,5
                    ,5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100};
                    interrupt [TIM0_OVF] void timer0_comp_isr(void)
                    {
                    TCNT0 = 95;
                    if(a)
                        {
                        if(!q)
                            {
                            if(a == pwm[1]){Set_LED20;Set_LED1;}
                            if(a == pwm[2]){Set_LED19;Set_LED2;}
                            if(a == pwm[3]){Set_LED18;Set_LED3;}
                            if(a == pwm[4]){Set_LED17;Set_LED4;}
                            if(a == pwm[5]){Set_LED16;Set_LED5;}
                            if(a == pwm[6]){Set_LED15;Set_LED6;}
                            if(a == pwm[7]){Set_LED14;Set_LED7;}
                            if(a == pwm[8]){Set_LED13;Set_LED8;}
                            if(a == pwm[9]){Set_LED12;Set_LED9;}
                            if(a == pwm[10]){Set_LED11;Set_LED10;}
                            }
                        else if(q==1)
                            {
                            if(a == pwm[20])Set_LED20;
                            if(a == pwm[19])Set_LED19;
                            if(a == pwm[18])Set_LED18;
                            if(a == pwm[17])Set_LED17;
                            if(a == pwm[16])Set_LED16;
                            if(a == pwm[15])Set_LED15;
                            if(a == pwm[14])Set_LED14;
                            if(a == pwm[13])Set_LED13;
                            if(a == pwm[12])Set_LED12;
                            if(a == pwm[11])Set_LED11;
                            if(a == pwm[10])Set_LED10;
                            if(a == pwm[9])Set_LED9;
                            if(a == pwm[8])Set_LED8;
                            if(a == pwm[7])Set_LED7;
                            if(a == pwm[6])Set_LED6;
                            if(a == pwm[5])Set_LED5;
                            if(a == pwm[4])Set_LED4;
                            if(a == pwm[3])Set_LED3;
                            if(a == pwm[2])Set_LED2;
                            if(a == pwm[1])Set_LED1;
                            }
                        if(q==2)
                            {
                            if(a == pwm[20]){Set_LED20;Set_LED1;}
                            if(a == pwm[18]){Set_LED19;Set_LED2;}
                            if(a == pwm[16]){Set_LED18;Set_LED3;}
                            if(a == pwm[14]){Set_LED17;Set_LED4;}
                            if(a == pwm[12]){Set_LED16;Set_LED5;}
                            if(a == pwm[10]){Set_LED15;Set_LED6;}
                            if(a == pwm[8]){Set_LED14;Set_LED7;}
                            if(a == pwm[6]){Set_LED13;Set_LED8;}
                            if(a == pwm[4]){Set_LED12;Set_LED9;}
                            if(a == pwm[2]){Set_LED11;Set_LED10;}
                            }
                        else if(q==3)
                            {
                            if(a == pwm[1])Set_LED20;
                            if(a == pwm[2])Set_LED19;
                            if(a == pwm[3])Set_LED18;
                            if(a == pwm[4])Set_LED17;
                            if(a == pwm[5])Set_LED16;
                            if(a == pwm[6])Set_LED15;
                            if(a == pwm[7])Set_LED14;
                            if(a == pwm[8])Set_LED13;
                            if(a == pwm[9])Set_LED12;
                            if(a == pwm[10])Set_LED11;
                            if(a == pwm[11])Set_LED10;
                            if(a == pwm[12])Set_LED9;
                            if(a == pwm[13])Set_LED8;
                            if(a == pwm[14])Set_LED7;
                            if(a == pwm[15])Set_LED6;
                            if(a == pwm[16])Set_LED5;
                            if(a == pwm[17])Set_LED4;
                            if(a == pwm[18])Set_LED3;
                            if(a == pwm[19])Set_LED2;
                            if(a == pwm[20])Set_LED1;
                            }
                        }
                    if(--a == 255)
                        {
                        a = max_var_PWM;
                        PORTD=0;
                        PORTB=0;
                        PORTC=0;
                        }
                    }
                    
                    
                    void main(void)
                    {
                    byte  a,b,c;
                    byte y1=Max_LED-1 ,y2= Max_LED+Max_LED ,x1 ,x2;
                      //Config all
                      //Config timers
                      //Config PORTS
                      {
                        DDRB=255;
                        DDRC=255;
                        DDRD=255;
                        // Timer/Counter 0 initialization
                        // Clock source: System Clock
                        // Clock value: 1000.000 kHz
                        TCNT0=105;
                        TCCR0=2;
                        // Timer(s)/Counter(s) Interrupt(s) initialization
                        TIMSK=1;
                        // Global enable interrupts
                        #asm("sei")
                      }
                    
                    
                    while (1)
                          {
                          // Place your code here 
                          for(c=0;c<5;c++)
                                {
                                for(b=0;b<3;b++)
                                   {
                                   for(x1=0;x1<39;x1++)
                                      {
                                      for(x2=y1;x2>0;x2--)
                                          {
                                          pwm[x2+1]=pwm[x2];
                                          }
                                      pwm[1]=rain1[x1];
                                      delay_ms(Delay1);
                                      }
                                   }
                                if(q++==3) q=0;
                                delay_ms(Delay2);
                                }
                          
                          for(c=0;c<0;c++)
                                {
                                for(a=0;a<3;a++)
                                    {
                                    #asm("cli")
                                    BLUE=ON;
                                    delay_ms(D_3);
                                    BLUE=OFF;
                                    delay_ms(D_3);
                                    }
                                delay_ms(D_3);
                                for(a=0;a<3;a++)
                                    {
                                    #asm("cli")
                                    RED=ON;
                                    delay_ms(D_3);
                                    RED=OFF;
                                    delay_ms(D_3);
                                    }
                                delay_ms(D_3);
                                for(a=0;a<3;a++)
                                    {
                                    #asm("cli")
                                    RED=BLUE=ON;
                                    delay_ms(D_3);
                                    RED=BLUE=OFF;
                                    delay_ms(D_3);
                                    }
                                delay_ms(D_3*4);
                                }
                          
                          for(c=0;c<0;c++)
                                {
                                for(a=0;a<3;a++)
                                    {
                                    #asm("cli")
                                    BLUE=ON;
                                    delay_ms(D_3);
                                    BLUE=OFF;
                                    delay_ms(D_3);
                                    }
                                delay_ms(D_3*4);
                                for(a=0;a<3;a++)
                                    {
                                    #asm("cli")
                                    RED=ON;
                                    delay_ms(D_3);
                                    RED=OFF;
                                    delay_ms(D_3);
                                    }
                                delay_ms(D_3*10);
                                }
                          
                          for(c=0;c<0;c++)
                                {
                                #asm("cli")
                                PD=PB=PC=0;
                                delay_ms(300);
                                PD=PB=PC=255;
                                delay_ms(300);
                                }      
                          #asm("sei")                
                          }
                    }
                    جدیدترین ویرایش توسط Saviour; ۲۰:۵۶ ۱۳۹۵/۱۱/۱۶.

                    دیدگاه


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

                      سلام.آقای مهندس من یه پروژه دارم که باید تابلو ledبسازم که متن power lab رو با استفاده از mega32با استفاده از PWM بسازم.اگه امکانش هست راهنمایی کنید.تشکر

                      دیدگاه


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

                        نوشته اصلی توسط javat2020 نمایش پست ها
                        سلام.آقای مهندس من یه پروژه دارم که باید تابلو ledبسازم که متن power lab رو با استفاده از mega32با استفاده از PWM بسازم.اگه امکانش هست راهنمایی کنید.تشکر
                        با سلام و درود
                        به انجمن خوش آمدید.
                        در مورد کدام بخش از ساخت تابلو LED سوال دارید؟ به عنوان مثال آیا سوال شما پیرامون بخش برنامه نویسی آن است یا اینکه پیرامون بخش طراحی مدار آن یا چینش LEDها روی تابلو یا .... ؟

                        در بخش «تابلو ثابت LED» به مباحث مرتبط با ساخت تابلو LED پرداخته می شود:
                        انجمن: تابلو ثابت LED
                        جدیدترین ویرایش توسط فکر; ۱۶:۱۶ ۱۳۹۶/۰۱/۱۳.

                        دیدگاه


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

                          بیشتر پیرامون برنامه نویسی ان است،اینکه باید افکت های مختلف را دران اجرا کنم.ضمنا اگر نکته در مورد بقیه مسایل از جمله جینش و طراحی مدار هم هست خوشحال میشم بیان کنید

                          دیدگاه


                            پاسخ : (برنامه اصلاح شد) چگونه تمام پایه های ATmega16-32-64-128 را PWM کنیم ؟؟!!

                            نوشته اصلی توسط Saviour نمایش پست ها
                            سلام خدمت آقا سامان عزیز
                            نمیدونم به این تاپیک سر میزنید یا خیر!!!
                            ولی من این برنامه رو استفاده کردم واسه سه کاری و چند افکت دیگه هم بهش اضافه کردم، مثل موج مکزیکی، ولی تو این افکت، ال ای دی ها پرش دارند!!! چرا؟نمونه کدم رو هم ارسال میکنم لطف کنید یه نگاهی بهش بندازید
                            کد:
                            #include <mega8.h>#include <delay.h>
                            
                            
                            #define     Set_LED1         PORTB.0 = 1
                            #define     Set_LED2         PORTB.1 = 1
                            #define     Set_LED3         PORTB.2 = 1
                            #define     Set_LED4         PORTB.3 = 1
                            #define     Set_LED5         PORTB.4 = 1
                            #define     Set_LED6         PORTB.5 = 1
                            #define     Set_LED7         PORTB.6 = 1
                            #define     Set_LED8         PORTB.7 = 1
                            #define     Set_LED9         PORTD.0 = 1
                            #define     Set_LED10        PORTD.1 = 1
                            #define     Set_LED11        PORTD.2 = 1
                            #define     Set_LED12        PORTD.3 = 1
                            #define     Set_LED13        PORTD.4 = 1
                            #define     Set_LED14        PORTD.5 = 1
                            #define     Set_LED15        PORTD.6 = 1
                            #define     Set_LED16        PORTD.7 = 1
                            #define     Set_LED17        PORTC.0 = 1
                            #define     Set_LED18        PORTC.1 = 1
                            #define     Set_LED19        PORTC.2 = 1
                            #define     Set_LED20        PORTC.3 = 1
                            
                            
                            #define     BLUE             PORTB.0=PORTB.1=PORTB.2=PORTB.3=PORTB.4=PORTB.5=PORTB.6=PORTB.7=PORTD.0=PORTD.1
                            #define     RED              PORTD.2=PORTD.3=PORTD.4=PORTD.5=PORTD.6=PORTD.7=PORTC.0=PORTC.1=PORTC.2=PORTC.3
                            #define     byte            unsigned char
                            #define     PB              PORTB
                            #define     PD              PORTD
                            #define     PC              PORTC
                            #define     TIME            100
                            #define     max_var_PWM     100
                            #define     Max_LED         20
                            #define     Delay1          30  //ms
                            #define     Delay2          400 //ms
                            #define     D_3             40
                            
                            
                            #define     ON              1
                            #define     OFF             0
                            
                            
                            // Declare your global variables here
                            byte    a = max_var_PWM , pwm[Max_LED+3],q=0;
                            flash byte  rain[]=
                            {100,95,90,85,80,75,70,65,60,55,50,45,40,35,30,25,20,15,10,5
                            ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
                            rain1[]=
                            {100,95,90,85,80,75,70,65,60,55,50,45,40,35,30,25,20,15,10,5
                            ,5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100};
                            interrupt [TIM0_OVF] void timer0_comp_isr(void)
                            {
                            TCNT0 = 95;
                            if(a)
                                {
                                if(!q)
                                    {
                                    if(a == pwm[1]){Set_LED20;Set_LED1;}
                                    if(a == pwm[2]){Set_LED19;Set_LED2;}
                                    if(a == pwm[3]){Set_LED18;Set_LED3;}
                                    if(a == pwm[4]){Set_LED17;Set_LED4;}
                                    if(a == pwm[5]){Set_LED16;Set_LED5;}
                                    if(a == pwm[6]){Set_LED15;Set_LED6;}
                                    if(a == pwm[7]){Set_LED14;Set_LED7;}
                                    if(a == pwm[8]){Set_LED13;Set_LED8;}
                                    if(a == pwm[9]){Set_LED12;Set_LED9;}
                                    if(a == pwm[10]){Set_LED11;Set_LED10;}
                                    }
                                else if(q==1)
                                    {
                                    if(a == pwm[20])Set_LED20;
                                    if(a == pwm[19])Set_LED19;
                                    if(a == pwm[18])Set_LED18;
                                    if(a == pwm[17])Set_LED17;
                                    if(a == pwm[16])Set_LED16;
                                    if(a == pwm[15])Set_LED15;
                                    if(a == pwm[14])Set_LED14;
                                    if(a == pwm[13])Set_LED13;
                                    if(a == pwm[12])Set_LED12;
                                    if(a == pwm[11])Set_LED11;
                                    if(a == pwm[10])Set_LED10;
                                    if(a == pwm[9])Set_LED9;
                                    if(a == pwm[8])Set_LED8;
                                    if(a == pwm[7])Set_LED7;
                                    if(a == pwm[6])Set_LED6;
                                    if(a == pwm[5])Set_LED5;
                                    if(a == pwm[4])Set_LED4;
                                    if(a == pwm[3])Set_LED3;
                                    if(a == pwm[2])Set_LED2;
                                    if(a == pwm[1])Set_LED1;
                                    }
                                if(q==2)
                                    {
                                    if(a == pwm[20]){Set_LED20;Set_LED1;}
                                    if(a == pwm[18]){Set_LED19;Set_LED2;}
                                    if(a == pwm[16]){Set_LED18;Set_LED3;}
                                    if(a == pwm[14]){Set_LED17;Set_LED4;}
                                    if(a == pwm[12]){Set_LED16;Set_LED5;}
                                    if(a == pwm[10]){Set_LED15;Set_LED6;}
                                    if(a == pwm[8]){Set_LED14;Set_LED7;}
                                    if(a == pwm[6]){Set_LED13;Set_LED8;}
                                    if(a == pwm[4]){Set_LED12;Set_LED9;}
                                    if(a == pwm[2]){Set_LED11;Set_LED10;}
                                    }
                                else if(q==3)
                                    {
                                    if(a == pwm[1])Set_LED20;
                                    if(a == pwm[2])Set_LED19;
                                    if(a == pwm[3])Set_LED18;
                                    if(a == pwm[4])Set_LED17;
                                    if(a == pwm[5])Set_LED16;
                                    if(a == pwm[6])Set_LED15;
                                    if(a == pwm[7])Set_LED14;
                                    if(a == pwm[8])Set_LED13;
                                    if(a == pwm[9])Set_LED12;
                                    if(a == pwm[10])Set_LED11;
                                    if(a == pwm[11])Set_LED10;
                                    if(a == pwm[12])Set_LED9;
                                    if(a == pwm[13])Set_LED8;
                                    if(a == pwm[14])Set_LED7;
                                    if(a == pwm[15])Set_LED6;
                                    if(a == pwm[16])Set_LED5;
                                    if(a == pwm[17])Set_LED4;
                                    if(a == pwm[18])Set_LED3;
                                    if(a == pwm[19])Set_LED2;
                                    if(a == pwm[20])Set_LED1;
                                    }
                                }
                            if(--a == 255)
                                {
                                a = max_var_PWM;
                                PORTD=0;
                                PORTB=0;
                                PORTC=0;
                                }
                            }
                            
                            
                            void main(void)
                            {
                            byte  a,b,c;
                            byte y1=Max_LED-1 ,y2= Max_LED+Max_LED ,x1 ,x2;
                              //Config all
                              //Config timers
                              //Config PORTS
                              {
                                DDRB=255;
                                DDRC=255;
                                DDRD=255;
                                // Timer/Counter 0 initialization
                                // Clock source: System Clock
                                // Clock value: 1000.000 kHz
                                TCNT0=105;
                                TCCR0=2;
                                // Timer(s)/Counter(s) Interrupt(s) initialization
                                TIMSK=1;
                                // Global enable interrupts
                                #asm("sei")
                              }
                            
                            
                            while (1)
                                  {
                                  // Place your code here 
                                  for(c=0;c<5;c++)
                                        {
                                        for(b=0;b<3;b++)
                                           {
                                           for(x1=0;x1<39;x1++)
                                              {
                                              for(x2=y1;x2>0;x2--)
                                                  {
                                                  pwm[x2+1]=pwm[x2];
                                                  }
                                              pwm[1]=rain1[x1];
                                              delay_ms(Delay1);
                                              }
                                           }
                                        if(q++==3) q=0;
                                        delay_ms(Delay2);
                                        }
                                  
                                  for(c=0;c<0;c++)
                                        {
                                        for(a=0;a<3;a++)
                                            {
                                            #asm("cli")
                                            BLUE=ON;
                                            delay_ms(D_3);
                                            BLUE=OFF;
                                            delay_ms(D_3);
                                            }
                                        delay_ms(D_3);
                                        for(a=0;a<3;a++)
                                            {
                                            #asm("cli")
                                            RED=ON;
                                            delay_ms(D_3);
                                            RED=OFF;
                                            delay_ms(D_3);
                                            }
                                        delay_ms(D_3);
                                        for(a=0;a<3;a++)
                                            {
                                            #asm("cli")
                                            RED=BLUE=ON;
                                            delay_ms(D_3);
                                            RED=BLUE=OFF;
                                            delay_ms(D_3);
                                            }
                                        delay_ms(D_3*4);
                                        }
                                  
                                  for(c=0;c<0;c++)
                                        {
                                        for(a=0;a<3;a++)
                                            {
                                            #asm("cli")
                                            BLUE=ON;
                                            delay_ms(D_3);
                                            BLUE=OFF;
                                            delay_ms(D_3);
                                            }
                                        delay_ms(D_3*4);
                                        for(a=0;a<3;a++)
                                            {
                                            #asm("cli")
                                            RED=ON;
                                            delay_ms(D_3);
                                            RED=OFF;
                                            delay_ms(D_3);
                                            }
                                        delay_ms(D_3*10);
                                        }
                                  
                                  for(c=0;c<0;c++)
                                        {
                                        #asm("cli")
                                        PD=PB=PC=0;
                                        delay_ms(300);
                                        PD=PB=PC=255;
                                        delay_ms(300);
                                        }      
                                  #asm("sei")                
                                  }
                            }
                            پرپر زدنش به احتمال زیاد از سرعت کم رفرش هست. سرعت تایمر رو بیشتر کن. منظور افزایش کلاکش هست.
                            چرا ناراحتی پاتریک!
                            + امروز ی بچه دیدم سرچهارراه گل میفروخت
                            - از دیدنش ناراحت شدی؟
                            + نه
                            پس چی ناراحتت کرده
                            + اینکه دیدن اینجور بچه ها انقدر واسم عادی شده که دیگه ناراحتم نمیکنه
                            ------------------------------------------------------------------------------------------------------
                            تاحالا فکر کردی بیسواد کیه؟- بی سواد یعنی کسی که نمیتونه ذهنیاتش رو عملی کنه!
                            ------------------------------------------------------------------------------------------------------
                            محصولات

                            دیدگاه


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

                              نوشته اصلی توسط sjaber نمایش پست ها
                              سلام دوستان
                              من این برنامه رو از یه سایت پیدا کردم ولی نمیدونم چرا سرعت چشمک زدن led ها این قدر کمه لطفا اشکالشو بهم بگید
                              درود بر شما
                              آقا عذرخواهی میکنم بابت اینکه چند ماهی نبودم
                              به آرایه ها از 0 تا 100 مقدار دهی شود
                              فرکانس بر روی 8 مگا تنظیم کنید
                              برنامه شما اینه
                              کد:
                              '*****************************************************
                              'Project                   : 4 PWM
                              'Resolution                : 101 States (0 To 100)
                              'Date                      : 13/Jun/2017
                              'Time                      : 10:31:59
                              'Author                    : Saman.Asadi    www.ECA.ir
                              'Author's Email            : Saman.asadi.ir@gmail.com
                              'http://www.eca.ir/forums/thread48596.html
                              'Chip type                 : ATmega8
                              'Program type              : Application
                              'AVR Core Clock frequency  : 8   MHz
                              '*****************************************************
                              $regfile = "m8def.dat" 'for ATmega8 or ATmega8A
                              $crystal = 8000000
                              Max_variable_pwm Alias 100
                              Set_pwm Alias Max_variable_pwm
                              Reset_pwm Alias 0
                              
                              Dim Counter_pwm As Byte , Pwm(6) As Byte , _pwm(6) As Byte
                              
                              'Config All =============================================
                                 Config Timer2 = TIMER , Prescale = 8 , Async = Off , Clear_timer = 1
                                 Enable Compare2
                                 ON Compare2 T2
                                 OCR2 = &H63
                                 Start Timer2
                              
                                 'Global enable interrupts
                                 Enable Interrupts
                                 'Config Outputs
                                 DDRD = &H0F OR DDRD
                              'End Config ============================================
                              
                              '(
                              pwm(1) ===> PORTD.0
                              pwm(2) ===> PORTD.1
                              pwm(3) ===> PORTD.2
                              pwm(4) ===> PORTD.3
                              ')
                              
                              
                              Pwm(1) = 1
                              Do
                              '===================================================
                              
                              '===================================================
                              Loop
                              End
                              
                              
                              T2:
                                 If Counter_pwm > 0 Then
                                      If Counter_pwm = _pwm(1) Then PORTD = &H01 OR PORTD
                                      If Counter_pwm = _pwm(2) Then PORTD = &H02 OR PORTD
                                      If Counter_pwm = _pwm(3) Then PORTD = &H04 OR PORTD
                                      If Counter_pwm = _pwm(4) Then PORTD = &H08 OR PORTD
                                  End If
                                  Decr Counter_pwm
                                  If Counter_pwm = 255 Then
                                      Counter_pwm = Max_variable_pwm
                                      PORTD = &HF0 AND PORTD
                                      _pwm(1) = Pwm(1)
                                      _pwm(2) = Pwm(2)
                                      _pwm(3) = Pwm(3)
                                      _pwm(4) = Pwm(4)
                                  End If
                              Return
                              موفق باشید

                              دلیل: ادغام دو پست برای جلوگیری از اسپم

                              نوشته اصلی توسط hamed.zahedi نمایش پست ها
                              سلام
                              لطفا بگید برای اینکه بخوایم کل پورت رو رو یه سطح ولتاژ نگه داریم چیکار باید کرد؟
                              برای فلاشر میخوام
                              تا بتونم نور و کم و زیاد کنم
                              درود بر شما
                              دوست عزیز با کمک گرفتن از PWM که ساختارش به این صورت هست که فرکانس ثابت هست ولی عرض پالس قابل تغییر است
                              با این کار در حقیقت میزان سطح ولتاژ متوسط را تغییر میدهید و میزان سطح ولتاژ کم و زیاد خواهد شد
                              موفق باشید

                              دلیل: ادغام دو پست برای جلوگیری از اسپم

                              نوشته اصلی توسط Saviour نمایش پست ها
                              سلام خدمت آقا سامان عزیز
                              نمیدونم به این تاپیک سر میزنید یا خیر!!!
                              ولی من این برنامه رو استفاده کردم واسه سه کاری و چند افکت دیگه هم بهش اضافه کردم، مثل موج مکزیکی، ولی تو این افکت، ال ای دی ها پرش دارند!!! چرا؟نمونه کدم رو هم ارسال میکنم لطف کنید یه نگاهی بهش بندازید
                              کد:
                              #include <mega8.h>#include <delay.h>
                              
                              
                              #define     Set_LED1         PORTB.0 = 1
                              #define     Set_LED2         PORTB.1 = 1
                              #define     Set_LED3         PORTB.2 = 1
                              #define     Set_LED4         PORTB.3 = 1
                              #define     Set_LED5         PORTB.4 = 1
                              #define     Set_LED6         PORTB.5 = 1
                              #define     Set_LED7         PORTB.6 = 1
                              #define     Set_LED8         PORTB.7 = 1
                              #define     Set_LED9         PORTD.0 = 1
                              #define     Set_LED10        PORTD.1 = 1
                              #define     Set_LED11        PORTD.2 = 1
                              #define     Set_LED12        PORTD.3 = 1
                              #define     Set_LED13        PORTD.4 = 1
                              #define     Set_LED14        PORTD.5 = 1
                              #define     Set_LED15        PORTD.6 = 1
                              #define     Set_LED16        PORTD.7 = 1
                              #define     Set_LED17        PORTC.0 = 1
                              #define     Set_LED18        PORTC.1 = 1
                              #define     Set_LED19        PORTC.2 = 1
                              #define     Set_LED20        PORTC.3 = 1
                              
                              
                              #define     BLUE             PORTB.0=PORTB.1=PORTB.2=PORTB.3=PORTB.4=PORTB.5=PORTB.6=PORTB.7=PORTD.0=PORTD.1
                              #define     RED              PORTD.2=PORTD.3=PORTD.4=PORTD.5=PORTD.6=PORTD.7=PORTC.0=PORTC.1=PORTC.2=PORTC.3
                              #define     byte            unsigned char
                              #define     PB              PORTB
                              #define     PD              PORTD
                              #define     PC              PORTC
                              #define     TIME            100
                              #define     max_var_PWM     100
                              #define     Max_LED         20
                              #define     Delay1          30  //ms
                              #define     Delay2          400 //ms
                              #define     D_3             40
                              
                              
                              #define     ON              1
                              #define     OFF             0
                              
                              
                              // Declare your global variables here
                              byte    a = max_var_PWM , pwm[Max_LED+3],q=0;
                              flash byte  rain[]=
                              {100,95,90,85,80,75,70,65,60,55,50,45,40,35,30,25,20,15,10,5
                              ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
                              rain1[]=
                              {100,95,90,85,80,75,70,65,60,55,50,45,40,35,30,25,20,15,10,5
                              ,5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100};
                              interrupt [TIM0_OVF] void timer0_comp_isr(void)
                              {
                              TCNT0 = 95;
                              if(a)
                                  {
                                  if(!q)
                                      {
                                      if(a == pwm[1]){Set_LED20;Set_LED1;}
                                      if(a == pwm[2]){Set_LED19;Set_LED2;}
                                      if(a == pwm[3]){Set_LED18;Set_LED3;}
                                      if(a == pwm[4]){Set_LED17;Set_LED4;}
                                      if(a == pwm[5]){Set_LED16;Set_LED5;}
                                      if(a == pwm[6]){Set_LED15;Set_LED6;}
                                      if(a == pwm[7]){Set_LED14;Set_LED7;}
                                      if(a == pwm[8]){Set_LED13;Set_LED8;}
                                      if(a == pwm[9]){Set_LED12;Set_LED9;}
                                      if(a == pwm[10]){Set_LED11;Set_LED10;}
                                      }
                                  else if(q==1)
                                      {
                                      if(a == pwm[20])Set_LED20;
                                      if(a == pwm[19])Set_LED19;
                                      if(a == pwm[18])Set_LED18;
                                      if(a == pwm[17])Set_LED17;
                                      if(a == pwm[16])Set_LED16;
                                      if(a == pwm[15])Set_LED15;
                                      if(a == pwm[14])Set_LED14;
                                      if(a == pwm[13])Set_LED13;
                                      if(a == pwm[12])Set_LED12;
                                      if(a == pwm[11])Set_LED11;
                                      if(a == pwm[10])Set_LED10;
                                      if(a == pwm[9])Set_LED9;
                                      if(a == pwm[8])Set_LED8;
                                      if(a == pwm[7])Set_LED7;
                                      if(a == pwm[6])Set_LED6;
                                      if(a == pwm[5])Set_LED5;
                                      if(a == pwm[4])Set_LED4;
                                      if(a == pwm[3])Set_LED3;
                                      if(a == pwm[2])Set_LED2;
                                      if(a == pwm[1])Set_LED1;
                                      }
                                  if(q==2)
                                      {
                                      if(a == pwm[20]){Set_LED20;Set_LED1;}
                                      if(a == pwm[18]){Set_LED19;Set_LED2;}
                                      if(a == pwm[16]){Set_LED18;Set_LED3;}
                                      if(a == pwm[14]){Set_LED17;Set_LED4;}
                                      if(a == pwm[12]){Set_LED16;Set_LED5;}
                                      if(a == pwm[10]){Set_LED15;Set_LED6;}
                                      if(a == pwm[8]){Set_LED14;Set_LED7;}
                                      if(a == pwm[6]){Set_LED13;Set_LED8;}
                                      if(a == pwm[4]){Set_LED12;Set_LED9;}
                                      if(a == pwm[2]){Set_LED11;Set_LED10;}
                                      }
                                  else if(q==3)
                                      {
                                      if(a == pwm[1])Set_LED20;
                                      if(a == pwm[2])Set_LED19;
                                      if(a == pwm[3])Set_LED18;
                                      if(a == pwm[4])Set_LED17;
                                      if(a == pwm[5])Set_LED16;
                                      if(a == pwm[6])Set_LED15;
                                      if(a == pwm[7])Set_LED14;
                                      if(a == pwm[8])Set_LED13;
                                      if(a == pwm[9])Set_LED12;
                                      if(a == pwm[10])Set_LED11;
                                      if(a == pwm[11])Set_LED10;
                                      if(a == pwm[12])Set_LED9;
                                      if(a == pwm[13])Set_LED8;
                                      if(a == pwm[14])Set_LED7;
                                      if(a == pwm[15])Set_LED6;
                                      if(a == pwm[16])Set_LED5;
                                      if(a == pwm[17])Set_LED4;
                                      if(a == pwm[18])Set_LED3;
                                      if(a == pwm[19])Set_LED2;
                                      if(a == pwm[20])Set_LED1;
                                      }
                                  }
                              if(--a == 255)
                                  {
                                  a = max_var_PWM;
                                  PORTD=0;
                                  PORTB=0;
                                  PORTC=0;
                                  }
                              }
                              
                              
                              void main(void)
                              {
                              byte  a,b,c;
                              byte y1=Max_LED-1 ,y2= Max_LED+Max_LED ,x1 ,x2;
                                //Config all
                                //Config timers
                                //Config PORTS
                                {
                                  DDRB=255;
                                  DDRC=255;
                                  DDRD=255;
                                  // Timer/Counter 0 initialization
                                  // Clock source: System Clock
                                  // Clock value: 1000.000 kHz
                                  TCNT0=105;
                                  TCCR0=2;
                                  // Timer(s)/Counter(s) Interrupt(s) initialization
                                  TIMSK=1;
                                  // Global enable interrupts
                                  #asm("sei")
                                }
                              
                              
                              while (1)
                                    {
                                    // Place your code here 
                                    for(c=0;c<5;c++)
                                          {
                                          for(b=0;b<3;b++)
                                             {
                                             for(x1=0;x1<39;x1++)
                                                {
                                                for(x2=y1;x2>0;x2--)
                                                    {
                                                    pwm[x2+1]=pwm[x2];
                                                    }
                                                pwm[1]=rain1[x1];
                                                delay_ms(Delay1);
                                                }
                                             }
                                          if(q++==3) q=0;
                                          delay_ms(Delay2);
                                          }
                                    
                                    for(c=0;c<0;c++)
                                          {
                                          for(a=0;a<3;a++)
                                              {
                                              #asm("cli")
                                              BLUE=ON;
                                              delay_ms(D_3);
                                              BLUE=OFF;
                                              delay_ms(D_3);
                                              }
                                          delay_ms(D_3);
                                          for(a=0;a<3;a++)
                                              {
                                              #asm("cli")
                                              RED=ON;
                                              delay_ms(D_3);
                                              RED=OFF;
                                              delay_ms(D_3);
                                              }
                                          delay_ms(D_3);
                                          for(a=0;a<3;a++)
                                              {
                                              #asm("cli")
                                              RED=BLUE=ON;
                                              delay_ms(D_3);
                                              RED=BLUE=OFF;
                                              delay_ms(D_3);
                                              }
                                          delay_ms(D_3*4);
                                          }
                                    
                                    for(c=0;c<0;c++)
                                          {
                                          for(a=0;a<3;a++)
                                              {
                                              #asm("cli")
                                              BLUE=ON;
                                              delay_ms(D_3);
                                              BLUE=OFF;
                                              delay_ms(D_3);
                                              }
                                          delay_ms(D_3*4);
                                          for(a=0;a<3;a++)
                                              {
                                              #asm("cli")
                                              RED=ON;
                                              delay_ms(D_3);
                                              RED=OFF;
                                              delay_ms(D_3);
                                              }
                                          delay_ms(D_3*10);
                                          }
                                    
                                    for(c=0;c<0;c++)
                                          {
                                          #asm("cli")
                                          PD=PB=PC=0;
                                          delay_ms(300);
                                          PD=PB=PC=255;
                                          delay_ms(300);
                                          }      
                                    #asm("sei")                
                                    }
                              }
                              سلام دوست عزیز
                              عذر خواهی میکنم بابت چند ماهی که نبودم
                              کدی که مربوط بهخاموش و روشن کردن LED نوشتید نیازی به خاموش و روشن کردن تایمر نداره
                              دستور خاموش و روشن بدید خودش خاموش و روشن میشه
                              در ضمن برنامه های قبلیم یه باگی داشت که اصلاح کردم
                              قالب برنامتون رو از برنامه زیر استفاده کنید ...
                              موفق باشید
                              کد:
                              /*****************************************************
                              This program was produced by the
                              CodeWizardAVR V2.05.3 Standard
                              Automatic Program Generator
                              © Copyright 1998-2011 Pavel Haiduc, HP InfoTech s.r.l.
                              http://www.hpinfotech.com
                              Project                   : 22 PWM
                              Resolution                : 101 States (0 To 100)
                              Date                      : 13/Jun/2017
                              Time                      : 10:50:04
                              Author                    : Saman.Asadi    www.ECA.ir
                              Author's Email            : Saman.asadi.ir@gmail.com
                              http://www.eca.ir/forums/thread48596.html
                              Chip type                 : ATmega8
                              Program type              : Application
                              AVR Core Clock frequency  : 8   MHz
                              Memory model              : Small
                              Data Stack size           : 256
                              *****************************************************/
                              #include <mega8.h> //for ATmega8 or ATmega8L or ATmega8A
                              #include <delay.h>
                              
                              #define    Max_Variable_PWM  100
                              #define    set_pwm           Max_Variable_PWM
                              #define    reset_pwm         0
                              
                              unsigned char Counter_PWM , pwm[24] , _pwm[24];
                              
                              interrupt [TIM2_COMP] void timer2_comp_isr(void);
                              
                              /*
                              pwm[1] ===> PORTB.0
                              pwm[2] ===> PORTB.1
                              pwm[3] ===> PORTB.2
                              pwm[4] ===> PORTB.3
                              pwm[5] ===> PORTB.4
                              pwm[6] ===> PORTB.5
                              pwm[7] ===> PORTB.6
                              pwm[8] ===> PORTB.7
                              pwm[9] ===> PORTD.0
                              pwm[10] ==> PORTD.1
                              pwm[11] ==> PORTD.2
                              pwm[12] ==> PORTD.3
                              pwm[13] ==> PORTD.4
                              pwm[14] ==> PORTD.5
                              pwm[15] ==> PORTD.6
                              pwm[16] ==> PORTD.7
                              pwm[17] ==> PORTC.0
                              pwm[18] ==> PORTC.1
                              pwm[19] ==> PORTC.2
                              pwm[20] ==> PORTC.3
                              pwm[21] ==> PORTC.4
                              pwm[22] ==> PORTC.5
                              */
                              
                              void main(void)
                              {
                                  //Config all
                                  //Config timers
                                  //Config PORTS
                                  {
                                      DDRB |= 0xFF;
                                      DDRC |= 0x3F;
                                      DDRD |= 0xFF;
                                      // Timer/Counter 2 initialization
                                      // Clock source: System Clock
                                      // Clock value: 1000.000 KHz
                                      // Mode: CTC top=OCR2
                                      // OC2 output: Disconnected
                                      ASSR=0x00;
                                      TCCR2 = 0x0A;
                                      OCR2 = 0x63;
                                      TCNT2= 0x00;
                                      //Timer(s)/Counter(s) Interrupt(s) initialization
                                      TIMSK |= 0x80;
                                      // Global enable interrupts
                                      #asm("sei")
                                  }//End Config ...
                              
                              
                                  while(1)
                                  {
                              //===================================================
                              
                              //===================================================
                                  }
                              
                              
                              }
                              
                              
                              // Timer 2 output compare interrupt service routine
                              interrupt [TIM2_COMP] void timer2_comp_isr(void)
                              {
                                  if(Counter_PWM)
                                  {
                                      if(Counter_PWM == _pwm[1]) PORTB |= 0x01;
                                      if(Counter_PWM == _pwm[2]) PORTB |= 0x02;
                                      if(Counter_PWM == _pwm[3]) PORTB |= 0x04;
                                      if(Counter_PWM == _pwm[4]) PORTB |= 0x08;
                                      if(Counter_PWM == _pwm[5]) PORTB |= 0x10;
                                      if(Counter_PWM == _pwm[6]) PORTB |= 0x20;
                                      if(Counter_PWM == _pwm[7]) PORTB |= 0x40;
                                      if(Counter_PWM == _pwm[8]) PORTB |= 0x80;
                                      if(Counter_PWM == _pwm[9]) PORTD |= 0x01;
                                      if(Counter_PWM == _pwm[10]) PORTD |= 0x02;
                                      if(Counter_PWM == _pwm[11]) PORTD |= 0x04;
                                      if(Counter_PWM == _pwm[12]) PORTD |= 0x08;
                                      if(Counter_PWM == _pwm[13]) PORTD |= 0x10;
                                      if(Counter_PWM == _pwm[14]) PORTD |= 0x20;
                                      if(Counter_PWM == _pwm[15]) PORTD |= 0x40;
                                      if(Counter_PWM == _pwm[16]) PORTD |= 0x80;
                                      if(Counter_PWM == _pwm[17]) PORTC |= 0x01;
                                      if(Counter_PWM == _pwm[18]) PORTC |= 0x02;
                                      if(Counter_PWM == _pwm[19]) PORTC |= 0x04;
                                      if(Counter_PWM == _pwm[20]) PORTC |= 0x08;
                                      if(Counter_PWM == _pwm[21]) PORTC |= 0x10;
                                      if(Counter_PWM == _pwm[22]) PORTC |= 0x20;
                                  }
                                  if(--Counter_PWM == 255)
                                  {
                                      Counter_PWM = Max_Variable_PWM;
                                      PORTB &= 0x0;
                                      PORTC &= 0xC0;
                                      PORTD &= 0x0;
                                      _pwm[1] = pwm[1];
                                      _pwm[2] = pwm[2];
                                      _pwm[3] = pwm[3];
                                      _pwm[4] = pwm[4];
                                      _pwm[5] = pwm[5];
                                      _pwm[6] = pwm[6];
                                      _pwm[7] = pwm[7];
                                      _pwm[8] = pwm[8];
                                      _pwm[9] = 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] = pwm[17];
                                      _pwm[18] = pwm[18];
                                      _pwm[19] = pwm[19];
                                      _pwm[20] = pwm[20];
                                      _pwm[21] = pwm[21];
                                      _pwm[22] = pwm[22];
                                  }
                              }
                              [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
                              معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
                              معرفی نرم افزار Codewizard PWM
                              با من بیشتر آشنا شوید

                              دیدگاه


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

                                عرض سلام و احترام خدمت آقای اسدی، وقتتون بخیر
                                مهندس جان من برنامه را ازشروع تاپیک پیگیر شدم و تا اندازه ای مطالب را مطالعه کردم و در راه اندازی ابتدایی مشکلی نداشتم.
                                یک سوال نسبتا مشکل برایم پیش آمد که خواستم در صورت امکان جنابعالی راهنمایی بفرمایید:
                                1- سری های ال ای دی RGB که با ولتاژ 220 کنترل می شوند و عمدتا دارای تریستور و یک برد راه انداز با آی سی قیری شکل هستند و در طول های 30 متری در بازار موجود هستند را با استفاده از BT151 با برنامه حاضر راه اندازی کردم، متاسفانه چند مشکل وجود دارد که یکی پرپر کردن هستش (برای دادن فیدهای کامل به کانالها با مشکل روبرو شدم) و دوم اینکه نمی دونم باید برای ایزوله شدن گیت تریستور از میکرو و حفاظت از میکرو از چه قطعه ای استفاده کنم. در حال حاضر به صورت مستقیم راه اندازی شد و متاسفانه با MOC3021 هم جواب نگرفتم.
                                2-مهندس جان در بررسی کدها متاسفانه متوجه بخش کنترل سرعت با ADC و اضافه نمودن دیگر افکت ها نشدم، امکان لینک دادن به مطلب برای جنابعالی میسر هست؟ به دلیل ازدیاد مطالب یافتن مطلب مناسب کمی دشوار شده است.

                                پ.ن: اگر نیاز به ارائه تصویر از مدار و یا ریسه ال ای دی هست بفرمایید
                                ممنونم
                                موفق باشید

                                دیدگاه

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