اطلاعیه

Collapse
No announcement yet.

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

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

    ساخت 7 RGB و 22 PWM با Mega8 و ساخت 10 RGB و 32 PWM با Mega16,32 (با GCC)

    طبق وعده ای که دیروز دادم برنامه RGB برای نرم افزار ATmelStudio را نوشتم یا بهتر بگم که برای کامپایلرهای GCC

    یک نکته هست که باید بگم و اینکه اگر این برنامه رو کپی پست کنید توی اتمل استودیو و دیدید که از این خط
    کد:
    #include <avr/iobits4ATmel_Studio.h>
    خطا گرفت بدونید که یه همچین کتابخانه ای وجود نداره :mrgreen: چون خودم نوشتمش و باید اون رو دانلود کنید و کپیش کنید توی این آدرس
    کد:
    C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.2.1002\avr8-gnu-toolchain\avr\include\avr
    این هم کتابخونه iobits4ATmel_Studio.h
    [hr]
    برنامه RGB در اتمل استودیو (میکروهای ATmega8)
    [code=c]
    //Designed by : Saman.Asadi
    //Date : 1393.08.12 ; 2014.11.03
    //Made in Iran-Shiraz
    //================================================== ====================|
    //Project1 : 7RGB by (ATmega8) |
    //Frequency crystal : 4~16MHz |
    //Frequency PWM : 250Hz |
    //Number of colors : 512 Colors (0 to 511) |
    //================================================== ====================|
    //Project2 : 22PWM by (ATmega8) |
    //Frequency crystal : 4~16MHz |
    //Frequency PWM : 250Hz |
    //Accuracy PWM : 3bit (0 to 7) |
    //================================================== ====================|
    //if F-CPU= 1MHz And F-PWM=250Hz then Max Processing 37.6 % Medium |
    //if F-CPU= 2MHz And F-PWM=250Hz then Max Processing 18.8 % Medium |
    //if F-CPU= 4MHz And F-PWM=250Hz then Max Processing 9.4 % Good | Data sheet
    //if F-CPU= 8MHz And F-PWM=250Hz then Max Processing 4.7 % Very Good |
    //if F-CPU=16MHz And F-PWM=250Hz then Max Processing 2.35 % Excellent |
    //================================================== ====================|
    #include <avr/io.h>
    #include <avr/iom8.h> //for ATmega8
    //#include <avr/iom8a.h> //for ATmega8a
    #include <avr/iobits4ATmel_Studio.h>
    #include <util/delay.h>
    #include <avr/interrupt.h>

    #define Set_LED1 Set_D0
    #define Set_LED2 Set_D1
    #define Set_LED3 Set_D2
    #define Set_LED4 Set_D3
    #define Set_LED5 Set_D4
    #define Set_LED6 Set_B6
    #define Set_LED7 Set_B7
    #define Set_LED8 Set_D5
    #define Set_LED9 Set_D6
    #define Set_LED10 Set_D7
    #define Set_LED11 Set_B0
    #define Set_LED12 Set_B1
    #define Set_LED13 Set_B2
    #define Set_LED14 Set_B3
    #define Set_LED15 Set_B4
    #define Set_LED16 Set_B5
    #define Set_LED17 Set_C0
    #define Set_LED18 Set_C1
    #define Set_LED19 Set_C2
    #define Set_LED20 Set_C3
    #define Set_LED21 Set_C4
    #define Set_LED22 Set_C5
    //===============================
    #define Max_var_PWM 7
    //===============================
    uint8_t PWM[25] , A= Max_var_PWM;
    //===============================
    void RGB1(uint16_t RGB_0_to_511)
    {
    PWM[1] = RGB_0_to_511 & 7;
    RGB_0_to_511 /= 8;
    PWM[2] = RGB_0_to_511 & 7;
    RGB_0_to_511 /= 8;
    PWM[3] = RGB_0_to_511 & 7;
    }
    void RGB2(uint16_t RGB_0_to_511)
    {
    PWM[4] = RGB_0_to_511 & 7;
    RGB_0_to_511 /= 8;
    PWM[5] = RGB_0_to_511 & 7;
    RGB_0_to_511 /= 8;
    PWM[6] = RGB_0_to_511 & 7;
    }
    void RGB3(uint16_t RGB_0_to_511)
    {
    PWM[7] = RGB_0_to_511 & 7;
    RGB_0_to_511 /= 8;
    PWM[8] = RGB_0_to_511 & 7;
    RGB_0_to_511 /= 8;
    PWM[9] = RGB_0_to_511 & 7;
    }
    void RGB4(uint16_t RGB_0_to_511)
    {
    PWM[10] = RGB_0_to_511 & 7;
    RGB_0_to_511 /= 8;
    PWM[11] = RGB_0_to_511 & 7;
    RGB_0_to_511 /= 8;
    PWM[12] = RGB_0_to_511 & 7;
    }
    void RGB5(uint16_t RGB_0_to_511)
    {
    PWM[13] = RGB_0_to_511 & 7;
    RGB_0_to_511 /= 8;
    PWM[14] = RGB_0_to_511 & 7;
    RGB_0_to_511 /= 8;
    PWM[15] = RGB_0_to_511 & 7;
    }
    void RGB6(uint16_t RGB_0_to_511)
    {
    PWM[16] = RGB_0_to_511 & 7;
    RGB_0_to_511 /= 8;
    PWM[17] = RGB_0_to_511 & 7;
    RGB_0_to_511 /= 8;
    PWM[18] = RGB_0_to_511 & 7;
    }
    void RGB7(uint16_t RGB_0_to_511)
    {
    PWM[19] = RGB_0_to_511 & 7;
    RGB_0_to_511 /= 8;
    PWM[20] = RGB_0_to_511 & 7;
    RGB_0_to_511 /= 8;
    PWM[21] = RGB_0_to_511 & 7;
    }

    // Timer 2 output compare interrupt service routine
    ISR(TIMER2_COMP_vect)
    {
    if(A)
    {
    if(A==PWM[1]) Set_LED1;
    if(A==PWM[2]) Set_LED2;
    if(A==PWM[3]) Set_LED3;
    if(A==PWM[4]) Set_LED4;
    if(A==PWM[5]) Set_LED5;
    if(A==PWM[6]) Set_LED6;
    if(A==PWM[7]) Set_LED7;
    if(A==PWM[8]) Set_LED8;
    if(A==PWM[9]) Set_LED9;
    if(A==PWM[10]) Set_LED10;
    if(A==PWM[11]) Set_LED11;
    if(A==PWM[12]) Set_LED12;
    if(A==PWM[13]) Set_LED13;
    if(A==PWM[14]) Set_LED14;
    if(A==PWM[15]) Set_LED15;
    if(A==PWM[16]) Set_LED16;
    if(A==PWM[17]) Set_LED17;
    if(A==PWM[18]) Set_LED18;
    if(A==PWM[19]) Set_LED19;
    if(A==PWM[20]) Set_LED20;
    if(A==PWM[21]) Set_LED21;
    if(A==PWM[22]) Set_LED22;
    }
    if(--A == 255)
    {
    A = Max_var_PWM;
    PORTB = 0;
    PORTC = 0;
    PORTD = 0;
    }
    }

    int main(void)
    {
    //Config PORTS
    DDRB = 255;
    DDRC = 63;
    DDRD = 255;
    // Timer/Counter 2 initialization
    // Clock source: System Clock
    // Clock value: 250.000 kHz
    // Mode: CTC top=OCR2
    // OC2 output: Disconnected
    TCCR2=0x0B;
    OCR2=124;
    //for 16MHz OCR0A=249;
    //for 8 MHz OCR0A=124;
    //for 4 MHz OCR0A=62;
    //for 2 MHz OCR0A=31;
    // Timer(s)/Counter(s) Interrupt(s) initialization
    TIMSK=0x80;
    // Global enable interrupts
    sei();
    //==================Start Program
    RGB1(18);
    RGB2(36);
    RGB3(54);
    RGB4(72);
    RGB5(90);
    RGB6(108);
    RGB7(126);

    while (1)
    {


    }
    }

    [/code]


    برنامه RGB در اتمل استودیو (میکروهای ATmega16,32)
    [code=c]
    //Designed by : Saman.Asadi
    //Date : 1393.08.12 ; 2014.11.03
    //Made in Iran-Shiraz
    //================================================== ====================|
    //Project1 : 10RGB by (ATmega16 or ATmega32) |
    //Frequency crystal : 2~16MHz |
    //Frequency PWM : 250Hz |
    //Number of colors : 512 Colors (0 to 511) |
    //================================================== ====================|
    //Project2 : 32PWM by (ATmega16 or ATmega32) |
    //Frequency crystal : 2~16MHz |
    //Frequency PWM : 250Hz |
    //Accuracy PWM : 3bit (0 to 7) |
    //================================================== ====================|
    //if F-CPU= 1MHz And F-PWM=250Hz then Max Processing 53.6 % Bad |
    //if F-CPU= 2MHz And F-PWM=250Hz then Max Processing 26.8 % Medium |
    //if F-CPU= 4MHz And F-PWM=250Hz then Max Processing 13.4 % Good | Data sheet
    //if F-CPU= 8MHz And F-PWM=250Hz then Max Processing 6.7 % Very Good |
    //if F-CPU=16MHz And F-PWM=250Hz then Max Processing 3.35 % Excellent |
    //================================================== ====================|
    #include <avr/io.h>
    #include <avr/iom16.h> //for ATmega16
    //#include <avr/iom16a.h> //for ATmega16a
    //#include <avr/iom32.h> //for ATmega32
    //#include <avr/iom32a.h> //for ATmega32a
    //#include <util/delay.h>
    #include <avr/iobits4ATmel_Studio.h>
    #include <avr/interrupt.h>

    #define Set_LED1 Set_B0
    #define Set_LED2 Set_B1
    #define Set_LED3 Set_B2
    #define Set_LED4 Set_B3
    #define Set_LED5 Set_B4
    #define Set_LED6 Set_B5
    #define Set_LED7 Set_B6
    #define Set_LED8 Set_B7
    #define Set_LED9 Set_D0
    #define Set_LED10 Set_D1
    #define Set_LED11 Set_D2
    #define Set_LED12 Set_D3
    #define Set_LED13 Set_D4
    #define Set_LED14 Set_D5
    #define Set_LED15 Set_D6
    #define Set_LED16 Set_D7
    #define Set_LED17 Set_C0
    #define Set_LED18 Set_C1
    #define Set_LED19 Set_C2
    #define Set_LED20 Set_C3
    #define Set_LED21 Set_C4
    #define Set_LED22 Set_C5
    #define Set_LED23 Set_C6
    #define Set_LED24 Set_C7
    #define Set_LED25 Set_A7
    #define Set_LED26 Set_A6
    #define Set_LED27 Set_A5
    #define Set_LED28 Set_A4
    #define Set_LED29 Set_A3
    #define Set_LED30 Set_A2
    #define Set_LED31 Set_A1
    #define Set_LED32 Set_A0
    //===============================
    #define Max_var_PWM 7
    //===============================
    uint8_t PWM[35] , A= Max_var_PWM;
    //===============================
    void RGB1(uint16_t RGB_0_to_511)
    {
    PWM[1] = RGB_0_to_511 & 7;
    RGB_0_to_511 /= 8;
    PWM[2] = RGB_0_to_511 & 7;
    RGB_0_to_511 /= 8;
    PWM[3] = RGB_0_to_511 & 7;
    }
    void RGB2(uint16_t RGB_0_to_511)
    {
    PWM[4] = RGB_0_to_511 & 7;
    RGB_0_to_511 /= 8;
    PWM[5] = RGB_0_to_511 & 7;
    RGB_0_to_511 /= 8;
    PWM[6] = RGB_0_to_511 & 7;
    }
    void RGB3(uint16_t RGB_0_to_511)
    {
    PWM[7] = RGB_0_to_511 & 7;
    RGB_0_to_511 /= 8;
    PWM[8] = RGB_0_to_511 & 7;
    RGB_0_to_511 /= 8;
    PWM[9] = RGB_0_to_511 & 7;
    }
    void RGB4(uint16_t RGB_0_to_511)
    {
    PWM[10] = RGB_0_to_511 & 7;
    RGB_0_to_511 /= 8;
    PWM[11] = RGB_0_to_511 & 7;
    RGB_0_to_511 /= 8;
    PWM[12] = RGB_0_to_511 & 7;
    }
    void RGB5(uint16_t RGB_0_to_511)
    {
    PWM[13] = RGB_0_to_511 & 7;
    RGB_0_to_511 /= 8;
    PWM[14] = RGB_0_to_511 & 7;
    RGB_0_to_511 /= 8;
    PWM[15] = RGB_0_to_511 & 7;
    }
    void RGB6(uint16_t RGB_0_to_511)
    {
    PWM[16] = RGB_0_to_511 & 7;
    RGB_0_to_511 /= 8;
    PWM[17] = RGB_0_to_511 & 7;
    RGB_0_to_511 /= 8;
    PWM[18] = RGB_0_to_511 & 7;
    }
    void RGB7(uint16_t RGB_0_to_511)
    {
    PWM[19] = RGB_0_to_511 & 7;
    RGB_0_to_511 /= 8;
    PWM[20] = RGB_0_to_511 & 7;
    RGB_0_to_511 /= 8;
    PWM[21] = RGB_0_to_511 & 7;
    }
    void RGB8(uint16_t RGB_0_to_511)
    {
    PWM[22] = RGB_0_to_511 & 7;
    RGB_0_to_511 /= 8;
    PWM[23] = RGB_0_to_511 & 7;
    RGB_0_to_511 /= 8;
    PWM[24] = RGB_0_to_511 & 7;
    }
    void RGB9(uint16_t RGB_0_to_511)
    {
    PWM[25] = RGB_0_to_511 & 7;
    RGB_0_to_511 /= 8;
    PWM[26] = RGB_0_to_511 & 7;
    RGB_0_to_511 /= 8;
    PWM[27] = RGB_0_to_511 & 7;
    }
    void RGB10(uint16_t RGB_0_to_511)
    {
    PWM[28] = RGB_0_to_511 & 7;
    RGB_0_to_511 /= 8;
    PWM[29] = RGB_0_to_511 & 7;
    RGB_0_to_511 /= 8;
    PWM[30] = RGB_0_to_511 & 7;
    }

    // Timer 2 output compare interrupt service routine
    ISR(TIMER2_COMP_vect)
    {
    if(A)
    {
    if(A==PWM[1]) Set_LED1;
    if(A==PWM[2]) Set_LED2;
    if(A==PWM[3]) Set_LED3;
    if(A==PWM[4]) Set_LED4;
    if(A==PWM[5]) Set_LED5;
    if(A==PWM[6]) Set_LED6;
    if(A==PWM[7]) Set_LED7;
    if(A==PWM[8]) Set_LED8;
    if(A==PWM[9]) Set_LED9;
    if(A==PWM[10]) Set_LED10;
    if(A==PWM[11]) Set_LED11;
    if(A==PWM[12]) Set_LED12;
    if(A==PWM[13]) Set_LED13;
    if(A==PWM[14]) Set_LED14;
    if(A==PWM[15]) Set_LED15;
    if(A==PWM[16]) Set_LED16;
    if(A==PWM[17]) Set_LED17;
    if(A==PWM[18]) Set_LED18;
    if(A==PWM[19]) Set_LED19;
    if(A==PWM[20]) Set_LED20;
    if(A==PWM[21]) Set_LED21;
    if(A==PWM[22]) Set_LED22;
    if(A==PWM[23]) Set_LED23;
    if(A==PWM[24]) Set_LED24;
    if(A==PWM[25]) Set_LED25;
    if(A==PWM[26]) Set_LED26;
    if(A==PWM[27]) Set_LED27;
    if(A==PWM[28]) Set_LED28;
    if(A==PWM[29]) Set_LED29;
    if(A==PWM[30]) Set_LED30;
    if(A==PWM[31]) Set_LED31;
    if(A==PWM[32]) Set_LED32;
    }
    if(--A == 255)
    {
    A = Max_var_PWM;
    PORTA = 0;
    PORTB = 0;
    PORTC = 0;
    PORTD = 0;
    }
    }

    int main(void)
    {
    //Config PORTS
    DDRA = 255;
    DDRB = 255;
    DDRC = 255;
    DDRD = 255;
    // Timer/Counter 2 initialization
    // Clock source: System Clock
    // Clock value: 250.000 kHz
    // Mode: CTC top=OCR2
    // OC2 output: Disconnected
    TCCR2=0x0B;
    OCR2=124;
    //for 16MHz OCR0A=249;
    //for 8 MHz OCR0A=124;
    //for 4 MHz OCR0A=62;
    //for 2 MHz OCR0A=31;
    //for 1 MHz OCR0A=15;
    // Timer(s)/Counter(s) Interrupt(s) initialization
    TIMSK=0x80;
    // Global enable interrupts
    sei();
    //==================Start Program
    RGB1 (18);
    RGB2 (36);
    RGB3 (54);
    RGB4 (72);
    RGB5 (90);
    RGB6 (108);
    RGB7 (126);
    RGB8 (144);
    RGB9 (162);
    RGB10(180);
    while (1)
    {


    }
    }
    [/code]

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

    دیدگاه


      ساخت 17 RGB و 53 PWM با ATmega64,128 (با GCC )

      برنامه RGB در اتمل استودیو (میکروهای ATmega64,128)
      [code=c]
      //Designed by : Saman.Asadi
      //Date : 1393.08.12 ; 2014.11.03
      //Made in Iran-Shiraz
      //================================================== ====================|
      //Project1 : 17RGB by (ATmega64 or ATmega128) |
      //Frequency crystal : 8~16MHz |
      //Frequency PWM : 250Hz |
      //Number of colors : 512 Colors (0 to 511) |
      //================================================== ====================|
      //Project2 : 53PWM by (ATmega64 or ATmega128) |
      //Frequency crystal : 8~16MHz |
      //Frequency PWM : 250Hz |
      //Accuracy PWM : 3bit (0 to 7) |
      //================================================== ====================|
      //if F-CPU= 2MHz And F-PWM=250Hz then Max Processing 50.8 % bad |
      //if F-CPU= 4MHz And F-PWM=250Hz then Max Processing 25.4 % medium |
      //if F-CPU= 8MHz And F-PWM=250Hz then Max Processing 12.7 % good | Data sheet
      //if F-CPU=16MHz And F-PWM=250Hz then Max Processing 6.35 % very good |
      //================================================== ====================|

      #include <avr/io.h>
      #include <avr/iom64.h> //for ATmega64
      // #include <avr/iom64a.h> //for ATmega64a
      // #include <avr/iom128.h> //for ATmega128
      // #include <avr/iom128a.h>//for ATmega128a
      //#include <util/delay.h>
      #include <avr/interrupt.h>
      #include <avr/iobits4ATmel_Studio.h>

      #define Set_LED1 Set_E0
      #define Set_LED2 Set_E1
      #define Set_LED3 Set_E2
      #define Set_LED4 Set_E3
      #define Set_LED5 Set_E4
      #define Set_LED6 Set_E5
      #define Set_LED7 Set_E6
      #define Set_LED8 Set_E7
      #define Set_LED9 Set_B0
      #define Set_LED10 Set_B1
      #define Set_LED11 Set_B2
      #define Set_LED12 Set_B3
      #define Set_LED13 Set_B4
      #define Set_LED14 Set_B5
      #define Set_LED15 Set_B6
      #define Set_LED16 Set_B7
      #define Set_LED17 Set_G3
      #define Set_LED18 Set_G4
      #define Set_LED19 Set_D0
      #define Set_LED20 Set_D1
      #define Set_LED21 Set_D2
      #define Set_LED22 Set_D3
      #define Set_LED23 Set_D4
      #define Set_LED24 Set_D5
      #define Set_LED25 Set_D6
      #define Set_LED26 Set_D7
      #define Set_LED27 Set_G0
      #define Set_LED28 Set_G1
      #define Set_LED29 Set_C0
      #define Set_LED30 Set_C1
      #define Set_LED31 Set_C2
      #define Set_LED32 Set_C3
      #define Set_LED33 Set_C4
      #define Set_LED34 Set_C5
      #define Set_LED35 Set_C6
      #define Set_LED36 Set_C7
      #define Set_LED37 Set_G2
      #define Set_LED38 Set_A7
      #define Set_LED39 Set_A6
      #define Set_LED40 Set_A5
      #define Set_LED41 Set_A4
      #define Set_LED42 Set_A3
      #define Set_LED43 Set_A2
      #define Set_LED44 Set_A1
      #define Set_LED45 Set_A0
      #define Set_LED46 Set_F7
      #define Set_LED47 Set_F6
      #define Set_LED48 Set_F5
      #define Set_LED49 Set_F4
      #define Set_LED50 Set_F3
      #define Set_LED51 Set_F2
      #define Set_LED52 Set_F1
      #define Set_LED53 Set_F0
      //===============================
      #define Max_var_PWM 7
      //===============================
      uint8_t PWM[60] , A= Max_var_PWM;
      //===============================
      void RGB1 (uint16_t RGB_0_to_511)
      {
      PWM[1] = RGB_0_to_511 & 7;
      RGB_0_to_511 /= 8;
      PWM[2] = RGB_0_to_511 & 7;
      RGB_0_to_511 /= 8;
      PWM[3] = RGB_0_to_511 & 7;
      }
      void RGB2 (uint16_t RGB_0_to_511)
      {
      PWM[4] = RGB_0_to_511 & 7;
      RGB_0_to_511 /= 8;
      PWM[5] = RGB_0_to_511 & 7;
      RGB_0_to_511 /= 8;
      PWM[6] = RGB_0_to_511 & 7;
      }
      void RGB3 (uint16_t RGB_0_to_511)
      {
      PWM[7] = RGB_0_to_511 & 7;
      RGB_0_to_511 /= 8;
      PWM[8] = RGB_0_to_511 & 7;
      RGB_0_to_511 /= 8;
      PWM[9] = RGB_0_to_511 & 7;
      }
      void RGB4 (uint16_t RGB_0_to_511)
      {
      PWM[10] = RGB_0_to_511 & 7;
      RGB_0_to_511 /= 8;
      PWM[11] = RGB_0_to_511 & 7;
      RGB_0_to_511 /= 8;
      PWM[12] = RGB_0_to_511 & 7;
      }
      void RGB5 (uint16_t RGB_0_to_511)
      {
      PWM[13] = RGB_0_to_511 & 7;
      RGB_0_to_511 /= 8;
      PWM[14] = RGB_0_to_511 & 7;
      RGB_0_to_511 /= 8;
      PWM[15] = RGB_0_to_511 & 7;
      }
      void RGB6 (uint16_t RGB_0_to_511)
      {
      PWM[16] = RGB_0_to_511 & 7;
      RGB_0_to_511 /= 8;
      PWM[17] = RGB_0_to_511 & 7;
      RGB_0_to_511 /= 8;
      PWM[18] = RGB_0_to_511 & 7;
      }
      void RGB7 (uint16_t RGB_0_to_511)
      {
      PWM[19] = RGB_0_to_511 & 7;
      RGB_0_to_511 /= 8;
      PWM[20] = RGB_0_to_511 & 7;
      RGB_0_to_511 /= 8;
      PWM[21] = RGB_0_to_511 & 7;
      }
      void RGB8 (uint16_t RGB_0_to_511)
      {
      PWM[22] = RGB_0_to_511 & 7;
      RGB_0_to_511 /= 8;
      PWM[23] = RGB_0_to_511 & 7;
      RGB_0_to_511 /= 8;
      PWM[24] = RGB_0_to_511 & 7;
      }
      void RGB9 (uint16_t RGB_0_to_511)
      {
      PWM[25] = RGB_0_to_511 & 7;
      RGB_0_to_511 /= 8;
      PWM[26] = RGB_0_to_511 & 7;
      RGB_0_to_511 /= 8;
      PWM[27] = RGB_0_to_511 & 7;
      }
      void RGB10(uint16_t RGB_0_to_511)
      {
      PWM[28] = RGB_0_to_511 & 7;
      RGB_0_to_511 /= 8;
      PWM[29] = RGB_0_to_511 & 7;
      RGB_0_to_511 /= 8;
      PWM[30] = RGB_0_to_511 & 7;
      }
      void RGB11(uint16_t RGB_0_to_511)
      {
      PWM[31] = RGB_0_to_511 & 7;
      RGB_0_to_511 /= 8;
      PWM[32] = RGB_0_to_511 & 7;
      RGB_0_to_511 /= 8;
      PWM[33] = RGB_0_to_511 & 7;
      }
      void RGB12(uint16_t RGB_0_to_511)
      {
      PWM[34] = RGB_0_to_511 & 7;
      RGB_0_to_511 /= 8;
      PWM[35] = RGB_0_to_511 & 7;
      RGB_0_to_511 /= 8;
      PWM[36] = RGB_0_to_511 & 7;
      }
      void RGB13(uint16_t RGB_0_to_511)
      {
      PWM[37] = RGB_0_to_511 & 7;
      RGB_0_to_511 /= 8;
      PWM[38] = RGB_0_to_511 & 7;
      RGB_0_to_511 /= 8;
      PWM[39] = RGB_0_to_511 & 7;
      }
      void RGB14(uint16_t RGB_0_to_511)
      {
      PWM[40] = RGB_0_to_511 & 7;
      RGB_0_to_511 /= 8;
      PWM[41] = RGB_0_to_511 & 7;
      RGB_0_to_511 /= 8;
      PWM[42] = RGB_0_to_511 & 7;
      }
      void RGB15(uint16_t RGB_0_to_511)
      {
      PWM[43] = RGB_0_to_511 & 7;
      RGB_0_to_511 /= 8;
      PWM[44] = RGB_0_to_511 & 7;
      RGB_0_to_511 /= 8;
      PWM[45] = RGB_0_to_511 & 7;
      }
      void RGB16(uint16_t RGB_0_to_511)
      {
      PWM[46] = RGB_0_to_511 & 7;
      RGB_0_to_511 /= 8;
      PWM[47] = RGB_0_to_511 & 7;
      RGB_0_to_511 /= 8;
      PWM[48] = RGB_0_to_511 & 7;
      }
      void RGB17(uint16_t RGB_0_to_511)
      {
      PWM[49] = RGB_0_to_511 & 7;
      RGB_0_to_511 /= 8;
      PWM[50] = RGB_0_to_511 & 7;
      RGB_0_to_511 /= 8;
      PWM[51] = RGB_0_to_511 & 7;
      }
      // Timer 0 output compare A interrupt service routine
      ISR(TIMER0_COMP_vect)
      {
      if(A)
      {
      if(A==PWM[1]) Set_LED1 ;
      if(A==PWM[2]) Set_LED2 ;
      if(A==PWM[3]) Set_LED3 ;
      if(A==PWM[4]) Set_LED4 ;
      if(A==PWM[5]) Set_LED5 ;
      if(A==PWM[6]) Set_LED6 ;
      if(A==PWM[7]) Set_LED7 ;
      if(A==PWM[8]) Set_LED8 ;
      if(A==PWM[9]) Set_LED9 ;
      if(A==PWM[10]) Set_LED10 ;
      if(A==PWM[11]) Set_LED11 ;
      if(A==PWM[12]) Set_LED12 ;
      if(A==PWM[13]) Set_LED13 ;
      if(A==PWM[14]) Set_LED14 ;
      if(A==PWM[15]) Set_LED15 ;
      if(A==PWM[16]) Set_LED16 ;
      if(A==PWM[17]) Set_LED17 ;
      if(A==PWM[18]) Set_LED18 ;
      if(A==PWM[19]) Set_LED19 ;
      if(A==PWM[20]) Set_LED20 ;
      if(A==PWM[21]) Set_LED21 ;
      if(A==PWM[22]) Set_LED22 ;
      if(A==PWM[23]) Set_LED23 ;
      if(A==PWM[24]) Set_LED24 ;
      if(A==PWM[25]) Set_LED25 ;
      if(A==PWM[26]) Set_LED26 ;
      if(A==PWM[27]) Set_LED27 ;
      if(A==PWM[28]) Set_LED28 ;
      if(A==PWM[29]) Set_LED29 ;
      if(A==PWM[30]) Set_LED30 ;
      if(A==PWM[31]) Set_LED31 ;
      if(A==PWM[32]) Set_LED32 ;
      if(A==PWM[33]) Set_LED33 ;
      if(A==PWM[34]) Set_LED34 ;
      if(A==PWM[35]) Set_LED35 ;
      if(A==PWM[36]) Set_LED36 ;
      if(A==PWM[37]) Set_LED37 ;
      if(A==PWM[38]) Set_LED38 ;
      if(A==PWM[39]) Set_LED39 ;
      if(A==PWM[40]) Set_LED40 ;
      if(A==PWM[41]) Set_LED41 ;
      if(A==PWM[42]) Set_LED42 ;
      if(A==PWM[43]) Set_LED43 ;
      if(A==PWM[44]) Set_LED44 ;
      if(A==PWM[45]) Set_LED45 ;
      if(A==PWM[46]) Set_LED46 ;
      if(A==PWM[47]) Set_LED47 ;
      if(A==PWM[48]) Set_LED48 ;
      if(A==PWM[49]) Set_LED49 ;
      if(A==PWM[50]) Set_LED50 ;
      if(A==PWM[51]) Set_LED51 ;
      if(A==PWM[52]) Set_LED52 ;
      if(A==PWM[53]) Set_LED53 ;
      }
      if(--A == 255)
      {
      A = Max_var_PWM;
      PORTA = 0;
      PORTB = 0;
      PORTC = 0;
      PORTD = 0;
      PORTE = 0;
      PORTF = 0;
      PORTG = 0;
      }
      }

      int main(void)
      {

      //Config PORTS
      DDRA = 255;
      DDRB = 255;
      DDRC = 255;
      DDRD = 255;
      DDRE = 255;
      DDRF = 255;
      DDRG = 63 ;
      // Timer/Counter 0 initialization
      // Clock source: System Clock
      // Clock value: 250.000 kHz
      // Mode: CTC top=OCR0
      // OC0 output: Disconnected
      TCCR0=0x0B;
      OCR0=124;
      //for 16MHz OCR0A=249;
      //for 8 MHz OCR0A=124;
      //for 4 MHz OCR0A=62;
      //for 2 MHz OCR0A=31;
      // Timer(s)/Counter(s) Interrupt(s) initialization
      TIMSK=2;
      // Global enable interrupts
      sei();
      //==================Start Program
      RGB1 (30);
      RGB2 (60);
      RGB3 (90);
      RGB4 (120);
      RGB5 (150);
      RGB6 (180);
      RGB7 (210);
      RGB8 (240);
      RGB9 (270);
      RGB10(300);
      RGB11(330);
      RGB12(360);
      RGB13(390);
      RGB14(420);
      RGB15(450);
      RGB16(480);
      RGB17(510);

      while (1)
      {


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

      دیدگاه


        ساخت 28 RGB و 86 PWM با ATmega640,1280,2560 (با GCC )

        برنامه RGB در اتمل استودیو (میکروهای ATmega640,1280,2560)
        [code=c]
        //Designed by : Saman.Asadi
        //Date : 1393.08.12 ; 2014.11.03
        //Made in Iran-Shiraz
        //================================================== ====================|
        //Project1 : 28RGB by (ATmega640 or ATmega1280 or ATmega2560) |
        //Frequency crystal : 8~16MHz |
        //Frequency PWM : 250Hz |
        //Number of colors : 512 Colors (0 to 511) |
        //================================================== ====================|
        //Project2 : 86PWM by (ATmega640 or ATmega1280 or ATmega2560) |
        //Frequency crystal : 8~16MHz |
        //Frequency PWM : 250Hz |
        //Accuracy PWM : 3bit (0 to 7) |
        //================================================== ====================|
        //if F-CPU= 2MHz And F-PWM=250Hz then Max Processing 86.4 % Very bad |
        //if F-CPU= 4MHz And F-PWM=250Hz then Max Processing 43.2 % bad |
        //if F-CPU= 8MHz And F-PWM=250Hz then Max Processing 21.6 % medium | Data sheet
        //if F-CPU=16MHz And F-PWM=250Hz then Max Processing 10.8 % good |
        //================================================== ====================|

        #include <avr/io.h>
        #include <avr/iom640.h> //for ATmega640
        //#include <avr/iom1280.h>//for ATmega1280
        //#include <avr/iom2560.h> //for ATmega2560
        //#include <util/delay.h>
        #include <avr/interrupt.h>
        #include <avr/iobits4ATmel_Studio.h>

        #define Set_LED1 Set_G5
        #define Set_LED2 Set_E0
        #define Set_LED3 Set_E1
        #define Set_LED4 Set_E2
        #define Set_LED5 Set_E3
        #define Set_LED6 Set_E4
        #define Set_LED7 Set_E5
        #define Set_LED8 Set_E6
        #define Set_LED9 Set_E7
        #define Set_LED10 Set_H0
        #define Set_LED11 Set_H1
        #define Set_LED12 Set_H2
        #define Set_LED13 Set_H3
        #define Set_LED14 Set_H4
        #define Set_LED15 Set_H5
        #define Set_LED16 Set_H6
        #define Set_LED17 Set_B0
        #define Set_LED18 Set_B1
        #define Set_LED19 Set_B2
        #define Set_LED20 Set_B3
        #define Set_LED21 Set_B4
        #define Set_LED22 Set_B5
        #define Set_LED23 Set_B6
        #define Set_LED24 Set_B7
        #define Set_LED25 Set_H7
        #define Set_LED26 Set_G3
        #define Set_LED27 Set_G4
        #define Set_LED28 Set_L0
        #define Set_LED29 Set_L1
        #define Set_LED30 Set_L2
        #define Set_LED31 Set_L3
        #define Set_LED32 Set_L4
        #define Set_LED33 Set_L5
        #define Set_LED34 Set_L6
        #define Set_LED35 Set_L7
        #define Set_LED36 Set_D0
        #define Set_LED37 Set_D1
        #define Set_LED38 Set_D2
        #define Set_LED39 Set_D3
        #define Set_LED40 Set_D4
        #define Set_LED41 Set_D5
        #define Set_LED42 Set_D6
        #define Set_LED43 Set_D7
        #define Set_LED44 Set_G0
        #define Set_LED45 Set_G1
        #define Set_LED46 Set_C0
        #define Set_LED47 Set_C1
        #define Set_LED48 Set_C2
        #define Set_LED49 Set_C3
        #define Set_LED50 Set_C4
        #define Set_LED51 Set_C5
        #define Set_LED52 Set_C6
        #define Set_LED53 Set_C7
        #define Set_LED54 Set_J0
        #define Set_LED55 Set_J1
        #define Set_LED56 Set_J2
        #define Set_LED57 Set_J3
        #define Set_LED58 Set_J4
        #define Set_LED59 Set_J5
        #define Set_LED60 Set_J6
        #define Set_LED61 Set_G2
        #define Set_LED62 Set_A7
        #define Set_LED63 Set_A6
        #define Set_LED64 Set_A5
        #define Set_LED65 Set_A4
        #define Set_LED66 Set_A3
        #define Set_LED67 Set_A2
        #define Set_LED68 Set_A1
        #define Set_LED69 Set_A0
        #define Set_LED70 Set_J7
        #define Set_LED71 Set_K7
        #define Set_LED72 Set_K6
        #define Set_LED73 Set_K5
        #define Set_LED74 Set_K4
        #define Set_LED75 Set_K3
        #define Set_LED76 Set_K2
        #define Set_LED77 Set_K1
        #define Set_LED78 Set_K0
        #define Set_LED79 Set_F7
        #define Set_LED80 Set_F6
        #define Set_LED81 Set_F5
        #define Set_LED82 Set_F4
        #define Set_LED83 Set_F3
        #define Set_LED84 Set_F2
        #define Set_LED85 Set_F1
        #define Set_LED86 Set_F0
        //===============================
        #define Max_var_PWM 7
        //===============================
        uint8_t PWM[90] , A= Max_var_PWM;
        //===============================
        void RGB1 (uint16_t RGB_0_to_511)
        {
        PWM[1] = RGB_0_to_511 & 7;
        RGB_0_to_511 /= 8;
        PWM[2] = RGB_0_to_511 & 7;
        RGB_0_to_511 /= 8;
        PWM[3] = RGB_0_to_511 & 7;
        }
        void RGB2 (uint16_t RGB_0_to_511)
        {
        PWM[4] = RGB_0_to_511 & 7;
        RGB_0_to_511 /= 8;
        PWM[5] = RGB_0_to_511 & 7;
        RGB_0_to_511 /= 8;
        PWM[6] = RGB_0_to_511 & 7;
        }
        void RGB3 (uint16_t RGB_0_to_511)
        {
        PWM[7] = RGB_0_to_511 & 7;
        RGB_0_to_511 /= 8;
        PWM[8] = RGB_0_to_511 & 7;
        RGB_0_to_511 /= 8;
        PWM[9] = RGB_0_to_511 & 7;
        }
        void RGB4 (uint16_t RGB_0_to_511)
        {
        PWM[10] = RGB_0_to_511 & 7;
        RGB_0_to_511 /= 8;
        PWM[11] = RGB_0_to_511 & 7;
        RGB_0_to_511 /= 8;
        PWM[12] = RGB_0_to_511 & 7;
        }
        void RGB5 (uint16_t RGB_0_to_511)
        {
        PWM[13] = RGB_0_to_511 & 7;
        RGB_0_to_511 /= 8;
        PWM[14] = RGB_0_to_511 & 7;
        RGB_0_to_511 /= 8;
        PWM[15] = RGB_0_to_511 & 7;
        }
        void RGB6 (uint16_t RGB_0_to_511)
        {
        PWM[16] = RGB_0_to_511 & 7;
        RGB_0_to_511 /= 8;
        PWM[17] = RGB_0_to_511 & 7;
        RGB_0_to_511 /= 8;
        PWM[18] = RGB_0_to_511 & 7;
        }
        void RGB7 (uint16_t RGB_0_to_511)
        {
        PWM[19] = RGB_0_to_511 & 7;
        RGB_0_to_511 /= 8;
        PWM[20] = RGB_0_to_511 & 7;
        RGB_0_to_511 /= 8;
        PWM[21] = RGB_0_to_511 & 7;
        }
        void RGB8 (uint16_t RGB_0_to_511)
        {
        PWM[22] = RGB_0_to_511 & 7;
        RGB_0_to_511 /= 8;
        PWM[23] = RGB_0_to_511 & 7;
        RGB_0_to_511 /= 8;
        PWM[24] = RGB_0_to_511 & 7;
        }
        void RGB9 (uint16_t RGB_0_to_511)
        {
        PWM[25] = RGB_0_to_511 & 7;
        RGB_0_to_511 /= 8;
        PWM[26] = RGB_0_to_511 & 7;
        RGB_0_to_511 /= 8;
        PWM[27] = RGB_0_to_511 & 7;
        }
        void RGB10(uint16_t RGB_0_to_511)
        {
        PWM[28] = RGB_0_to_511 & 7;
        RGB_0_to_511 /= 8;
        PWM[29] = RGB_0_to_511 & 7;
        RGB_0_to_511 /= 8;
        PWM[30] = RGB_0_to_511 & 7;
        }
        void RGB11(uint16_t RGB_0_to_511)
        {
        PWM[31] = RGB_0_to_511 & 7;
        RGB_0_to_511 /= 8;
        PWM[32] = RGB_0_to_511 & 7;
        RGB_0_to_511 /= 8;
        PWM[33] = RGB_0_to_511 & 7;
        }
        void RGB12(uint16_t RGB_0_to_511)
        {
        PWM[34] = RGB_0_to_511 & 7;
        RGB_0_to_511 /= 8;
        PWM[35] = RGB_0_to_511 & 7;
        RGB_0_to_511 /= 8;
        PWM[36] = RGB_0_to_511 & 7;
        }
        void RGB13(uint16_t RGB_0_to_511)
        {
        PWM[37] = RGB_0_to_511 & 7;
        RGB_0_to_511 /= 8;
        PWM[38] = RGB_0_to_511 & 7;
        RGB_0_to_511 /= 8;
        PWM[39] = RGB_0_to_511 & 7;
        }
        void RGB14(uint16_t RGB_0_to_511)
        {
        PWM[40] = RGB_0_to_511 & 7;
        RGB_0_to_511 /= 8;
        PWM[41] = RGB_0_to_511 & 7;
        RGB_0_to_511 /= 8;
        PWM[42] = RGB_0_to_511 & 7;
        }
        void RGB15(uint16_t RGB_0_to_511)
        {
        PWM[43] = RGB_0_to_511 & 7;
        RGB_0_to_511 /= 8;
        PWM[44] = RGB_0_to_511 & 7;
        RGB_0_to_511 /= 8;
        PWM[45] = RGB_0_to_511 & 7;
        }
        void RGB16(uint16_t RGB_0_to_511)
        {
        PWM[46] = RGB_0_to_511 & 7;
        RGB_0_to_511 /= 8;
        PWM[47] = RGB_0_to_511 & 7;
        RGB_0_to_511 /= 8;
        PWM[48] = RGB_0_to_511 & 7;
        }
        void RGB17(uint16_t RGB_0_to_511)
        {
        PWM[49] = RGB_0_to_511 & 7;
        RGB_0_to_511 /= 8;
        PWM[50] = RGB_0_to_511 & 7;
        RGB_0_to_511 /= 8;
        PWM[51] = RGB_0_to_511 & 7;
        }
        void RGB18(uint16_t RGB_0_to_511)
        {
        PWM[52] = RGB_0_to_511 & 7;
        RGB_0_to_511 /= 8;
        PWM[53] = RGB_0_to_511 & 7;
        RGB_0_to_511 /= 8;
        PWM[54] = RGB_0_to_511 & 7;
        }
        void RGB19(uint16_t RGB_0_to_511)
        {
        PWM[55] = RGB_0_to_511 & 7;
        RGB_0_to_511 /= 8;
        PWM[56] = RGB_0_to_511 & 7;
        RGB_0_to_511 /= 8;
        PWM[57] = RGB_0_to_511 & 7;
        }
        void RGB20(uint16_t RGB_0_to_511)
        {
        PWM[58] = RGB_0_to_511 & 7;
        RGB_0_to_511 /= 8;
        PWM[59] = RGB_0_to_511 & 7;
        RGB_0_to_511 /= 8;
        PWM[60] = RGB_0_to_511 & 7;
        }
        void RGB21(uint16_t RGB_0_to_511)
        {
        PWM[61] = RGB_0_to_511 & 7;
        RGB_0_to_511 /= 8;
        PWM[62] = RGB_0_to_511 & 7;
        RGB_0_to_511 /= 8;
        PWM[63] = RGB_0_to_511 & 7;
        }
        void RGB22(uint16_t RGB_0_to_511)
        {
        PWM[64] = RGB_0_to_511 & 7;
        RGB_0_to_511 /= 8;
        PWM[65] = RGB_0_to_511 & 7;
        RGB_0_to_511 /= 8;
        PWM[66] = RGB_0_to_511 & 7;
        }
        void RGB23(uint16_t RGB_0_to_511)
        {
        PWM[67] = RGB_0_to_511 & 7;
        RGB_0_to_511 /= 8;
        PWM[68] = RGB_0_to_511 & 7;
        RGB_0_to_511 /= 8;
        PWM[69] = RGB_0_to_511 & 7;
        }
        void RGB24(uint16_t RGB_0_to_511)
        {
        PWM[70] = RGB_0_to_511 & 7;
        RGB_0_to_511 /= 8;
        PWM[71] = RGB_0_to_511 & 7;
        RGB_0_to_511 /= 8;
        PWM[72] = RGB_0_to_511 & 7;
        }
        void RGB25(uint16_t RGB_0_to_511)
        {
        PWM[73] = RGB_0_to_511 & 7;
        RGB_0_to_511 /= 8;
        PWM[74] = RGB_0_to_511 & 7;
        RGB_0_to_511 /= 8;
        PWM[75] = RGB_0_to_511 & 7;
        }
        void RGB26(uint16_t RGB_0_to_511)
        {
        PWM[76] = RGB_0_to_511 & 7;
        RGB_0_to_511 /= 8;
        PWM[77] = RGB_0_to_511 & 7;
        RGB_0_to_511 /= 8;
        PWM[78] = RGB_0_to_511 & 7;
        }
        void RGB27(uint16_t RGB_0_to_511)
        {
        PWM[79] = RGB_0_to_511 & 7;
        RGB_0_to_511 /= 8;
        PWM[80] = RGB_0_to_511 & 7;
        RGB_0_to_511 /= 8;
        PWM[81] = RGB_0_to_511 & 7;
        }
        void RGB28(uint16_t RGB_0_to_511)
        {
        PWM[82] = RGB_0_to_511 & 7;
        RGB_0_to_511 /= 8;
        PWM[83] = RGB_0_to_511 & 7;
        RGB_0_to_511 /= 8;
        PWM[84] = RGB_0_to_511 & 7;
        }
        // Timer 0 output compare A interrupt service routine
        ISR(TIMER0_COMPA_vect)
        {
        if(A)
        {
        if(A==PWM[1]) Set_LED1 ;
        if(A==PWM[2]) Set_LED2 ;
        if(A==PWM[3]) Set_LED3 ;
        if(A==PWM[4]) Set_LED4 ;
        if(A==PWM[5]) Set_LED5 ;
        if(A==PWM[6]) Set_LED6 ;
        if(A==PWM[7]) Set_LED7 ;
        if(A==PWM[8]) Set_LED8 ;
        if(A==PWM[9]) Set_LED9 ;
        if(A==PWM[10]) Set_LED10 ;
        if(A==PWM[11]) Set_LED11 ;
        if(A==PWM[12]) Set_LED12 ;
        if(A==PWM[13]) Set_LED13 ;
        if(A==PWM[14]) Set_LED14 ;
        if(A==PWM[15]) Set_LED15 ;
        if(A==PWM[16]) Set_LED16 ;
        if(A==PWM[17]) Set_LED17 ;
        if(A==PWM[18]) Set_LED18 ;
        if(A==PWM[19]) Set_LED19 ;
        if(A==PWM[20]) Set_LED20 ;
        if(A==PWM[21]) Set_LED21 ;
        if(A==PWM[22]) Set_LED22 ;
        if(A==PWM[23]) Set_LED23 ;
        if(A==PWM[24]) Set_LED24 ;
        if(A==PWM[25]) Set_LED25 ;
        if(A==PWM[26]) Set_LED26 ;
        if(A==PWM[27]) Set_LED27 ;
        if(A==PWM[28]) Set_LED28 ;
        if(A==PWM[29]) Set_LED29 ;
        if(A==PWM[30]) Set_LED30 ;
        if(A==PWM[31]) Set_LED31 ;
        if(A==PWM[32]) Set_LED32 ;
        if(A==PWM[33]) Set_LED33 ;
        if(A==PWM[34]) Set_LED34 ;
        if(A==PWM[35]) Set_LED35 ;
        if(A==PWM[36]) Set_LED36 ;
        if(A==PWM[37]) Set_LED37 ;
        if(A==PWM[38]) Set_LED38 ;
        if(A==PWM[39]) Set_LED39 ;
        if(A==PWM[40]) Set_LED40 ;
        if(A==PWM[41]) Set_LED41 ;
        if(A==PWM[42]) Set_LED42 ;
        if(A==PWM[43]) Set_LED43 ;
        if(A==PWM[44]) Set_LED44 ;
        if(A==PWM[45]) Set_LED45 ;
        if(A==PWM[46]) Set_LED46 ;
        if(A==PWM[47]) Set_LED47 ;
        if(A==PWM[48]) Set_LED48 ;
        if(A==PWM[49]) Set_LED49 ;
        if(A==PWM[50]) Set_LED50 ;
        if(A==PWM[51]) Set_LED51 ;
        if(A==PWM[52]) Set_LED52 ;
        if(A==PWM[53]) Set_LED53 ;
        if(A==PWM[54]) Set_LED54 ;
        if(A==PWM[55]) Set_LED55 ;
        if(A==PWM[56]) Set_LED56 ;
        if(A==PWM[57]) Set_LED57 ;
        if(A==PWM[58]) Set_LED58 ;
        if(A==PWM[59]) Set_LED59 ;
        if(A==PWM[60]) Set_LED60 ;
        if(A==PWM[61]) Set_LED61 ;
        if(A==PWM[62]) Set_LED62 ;
        if(A==PWM[63]) Set_LED63 ;
        if(A==PWM[64]) Set_LED64 ;
        if(A==PWM[65]) Set_LED65 ;
        if(A==PWM[66]) Set_LED66 ;
        if(A==PWM[67]) Set_LED67 ;
        if(A==PWM[68]) Set_LED68 ;
        if(A==PWM[69]) Set_LED69 ;
        if(A==PWM[70]) Set_LED70 ;
        if(A==PWM[71]) Set_LED71 ;
        if(A==PWM[72]) Set_LED72 ;
        if(A==PWM[73]) Set_LED73 ;
        if(A==PWM[74]) Set_LED74 ;
        if(A==PWM[75]) Set_LED75 ;
        if(A==PWM[76]) Set_LED76 ;
        if(A==PWM[77]) Set_LED77 ;
        if(A==PWM[78]) Set_LED78 ;
        if(A==PWM[79]) Set_LED79 ;
        if(A==PWM[80]) Set_LED80 ;
        if(A==PWM[81]) Set_LED81 ;
        if(A==PWM[82]) Set_LED82 ;
        if(A==PWM[83]) Set_LED83 ;
        if(A==PWM[84]) Set_LED84 ;
        if(A==PWM[85]) Set_LED85 ;
        if(A==PWM[86]) Set_LED86 ;
        }
        if(--A == 255)
        {
        A = Max_var_PWM;
        PORTA = 0;
        PORTB = 0;
        PORTC = 0;
        PORTD = 0;
        PORTE = 0;
        PORTF = 0;
        PORTG = 0;
        PORTH = 0;
        PORTJ = 0;
        PORTK = 0;
        PORTL = 0;
        }
        }

        int main(void)
        {
        // Crystal Oscillator division factor: 1
        CLKPR=0x80;
        CLKPR=0x00;
        //Config PORTS
        DDRA = 255;
        DDRB = 255;
        DDRC = 255;
        DDRD = 255;
        DDRE = 255;
        DDRF = 255;
        DDRG = 63 ;
        DDRH = 255;
        DDRJ = 255;
        DDRK = 255;
        DDRL = 255;
        // Timer/Counter 0 initialization
        // Clock source: System Clock
        // Clock value: 125.000 kHz
        // Mode: CTC top=OCR0A
        // OC0A output: Disconnected
        // OC0B output: Disconnected
        TCCR0A=0x02;
        TCCR0B=0x03;
        OCR0A=62;
        //for 16MHz OCR0A=124;
        //for 8 MHz OCR0A=62;
        //for 4 MHz OCR0A=31;
        // Timer/Counter 0 Interrupt(s) initialization
        TIMSK0=0x02;
        // Global enable interrupts
        sei();
        //==================Start Program
        RGB1 (18 );
        RGB2 (36 );
        RGB3 (54 );
        RGB4 (72 );
        RGB5 (90 );
        RGB6 (108);
        RGB7 (126);
        RGB8 (144);
        RGB9 (162);
        RGB10(180);
        RGB11(198);
        RGB12(216);
        RGB13(234);
        RGB14(252);
        RGB15(280);
        RGB16(288);
        RGB17(306);
        RGB18(324);
        RGB19(342);
        RGB20(360);
        RGB21(378);
        RGB22(396);
        RGB23(414);
        RGB24(432);
        RGB25(450);
        RGB26(468);
        RGB27(486);
        RGB28(504);

        while (1)
        {


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

        دیدگاه


          مقایسه سه نرم افزار کدویژن و اتمل استودیو و بسکام

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

          در این پست اشاره ای خواهم کرد به مقایسه سه نرم افزار که میتونه در بهینه سازی خیلی بهتون کمک کنه ...
          البته این رو هم بگم که این پست نظر شخصی من هست و از هیچ سایتی منبع ندارم ...

          یک گلگی از دوستان هم بکنم که من این همه برنامه گذاشتم یکی پیدا نشد بگه آقا این که نوشتید max processing این به چه دردی میخوره ...
          اصلا چرا این رو گذاشتید ؟ ... و پرسشهایی از این دست ...

          من این رو گذاشتم که سه نرم افزار رو با هم مقایسه کنم و امروز هم که قرار هست در این مورد صحبت کنم ...
          به این نوشته ها نگاه کنید
          کد:
          =========================== BASCOM-AVR ==================================================
          if F-CPU=16MHz And F-PWM=250Hz then Max Processing 2.7 % Excellent //mega8
          if F-CPU=16MHz And F-PWM=250Hz then Max Processing 3.75 % Excellent //mega16,32
          if F-CPU=16MHz And F-PWM=250Hz then Max Processing 7.0 % very good //mega64,128
          if F-CPU=16MHz And F-PWM=250Hz then Max Processing 11.0 % good   //mega640,1280,2560
          
          =========================== CodeVisionAVR ===============================================
          if F-CPU=16MHz And F-PWM=250Hz then Max Processing 1.6 % Excellent //mega8
          if F-CPU=16MHz And F-PWM=250Hz then Max Processing 2.55 % Excellent //mega16,32
          if F-CPU=16MHz And F-PWM=250Hz then Max Processing 4.6 % Very Good //mega64,128
          if F-CPU=16MHz And F-PWM=250Hz then Max Processing 7.85 % very good //mega640,1280,2560
          
          =========================== Atmel Studio ================================================
          if F-CPU=16MHz And F-PWM=250Hz then Max Processing 2.35 % Excellent //mega8
          if F-CPU=16MHz And F-PWM=250Hz then Max Processing 3.35 % Excellent //mega16,32
          if F-CPU=16MHz And F-PWM=250Hz then Max Processing 6.35 % very good //mega64,128
          if F-CPU=16MHz And F-PWM=250Hz then Max Processing 10.8 % good   //mega640,1280,2560
          همونطور که مشاهده میکنید بهترین نرم افزار از لحاظ بهینه سازی کدویژن است ... میدونم که دور از انتظار بود ولی حقیقت داره و من بارها و بارها این مساله رو بررسی کردم و به نکته عجیبی برخوردم که دیدم کدویژن از اتمل استودیو بسیار بهتر است و خیلی برام جای سوال بود که اتمل استودیو که نرم افزار خود شرکت اتمل هست چرا اینقدر بیشتر پردازش میکنه ... ؟
          قبلا" چند پروژه با کدویژن و اتمل استودیو نوشته بودم و کدها را توی نرم افزار های یکدیگر کپی کرده بودم و دیدم که کدویژن خیلی بهتره ...
          واقعا حــــیـــــف این نرم افزار خوب (اتمل استودیو) . . .

          نرم افزار AtmelStudio نسبت به CodeVisionAVR چیزی حدود %37.58 و
          نرم افزار BASCOM-AVR نسبت به CodeVisionAVR چیزی حدود %40.13 بیشتر پردازش می کند ...
          البته این رو هم بگم که شاید این بهینه سازی به خاطر بهینه کردن دستورات شرطی است چون این برنامه هایی که گذاشتم بیشتر از دستورات شرطی استفاده کردم ...

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

          دیدگاه


            پاسخ : مقایسه سه نرم افزار کدویژن و اتمل استودیو و بسکام

            نوشته اصلی توسط سامان اسدی
            یک گلگی از دوستان هم بکنم که من این همه برنامه گذاشتم یکی پیدا نشد بگه آقا این که نوشتید max processing این به چه دردی میخوره ...
            اصلا چرا این رو گذاشتید ؟ ... و پرسشهایی از این دست ...
            بشخصه به موضوع این تاپیک خیلی علاقه دارم و تمام مطالبی که قرار میدید رو دنبال میکنم و از برنامه هایی که میزارین خیلی استفاده میکنم.واین تاپیک رو یکی از بهترین و کامل ترین تاپیک های این انجمن میدونم.(این تاپیک به عنوان یه منبع خوب برای سوالات مرتبط با این موضوع برای خیلی از دوستان لینک میشه).البته شما چون از خلاقیت خودتون استفاده میکنید و بصورت نرم افزاری این کار رو انجام دادید برای خیلی از تازه کارها موضوع سنگینه و بیشتر سوالاتی که دارن مربوط به ضعف برنامه نویسی خودشون هست و به همین دلیل ممکنه اینجا مطرح نکنن!
            با تشکر از شما.

            دیدگاه


              پاسخ : مقایسه سه نرم افزار کدویژن و اتمل استودیو و بسکام

              نوشته اصلی توسط ((O-I-O))
              بشخصه به موضوع این تاپیک خیلی علاقه دارم و تمام مطالبی که قرار میدید رو دنبال میکنم و از برنامه هایی که میزارین خیلی استفاده میکنم.واین تاپیک رو یکی از بهترین و کامل ترین تاپیک های این انجمن میدونم.(این تاپیک به عنوان یه منبع خوب برای سوالات مرتبط با این موضوع برای خیلی از دوستان لینک میشه).البته شما چون از خلاقیت خودتون استفاده میکنید و بصورت نرم افزاری این کار رو انجام دادید برای خیلی از تازه کارها موضوع سنگینه و بیشتر سوالاتی که دارن مربوط به ضعف برنامه نویسی خودشون هست و به همین دلیل ممکنه اینجا مطرح نکنن!
              با تشکر از شما.
              سلام دوست خوبم
              اختیار دارید ...
              اینقدر تاپیکهای با ارزشی هستند که به چشم نمیاد ...
              البته نمیتونم اینجا بگم ...
              چون ممکنه که تاپیکهای باارزش دیگری هم باشند که من ندیده باشم ...
              به هر روی ...
              از اینکه اینقدر ابراز علاقه به این تاپیک می کنید بسیار سپاسگذارم ... :applause:
              نوشته اصلی توسط ((O-I-O))
              شما چون از خلاقیت خودتون استفاده میکنید و بصورت نرم افزاری این کار رو انجام دادید برای خیلی از تازه کارها موضوع سنگینه و بیشتر سوالاتی که دارن مربوط به ضعف برنامه نویسی خودشون هست و به همین دلیل ممکنه اینجا مطرح نکنن!
              ببخشید یه سوال
              پس دوستان به غیر از اینجا سوالات خودشون رو از کجا و کی میپرسند ؟؟؟
              اگر به صورت پیام خصوصی نباشه لطف کنید لینک کنید ... ممنون

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

              دیدگاه


                پاسخ : مقایسه سه نرم افزار کدویژن و اتمل استودیو و بسکام

                نوشته اصلی توسط سامان اسدی
                پس دوستان به غیر از اینجا سوالات خودشون رو از کجا و کی میپرسند ؟؟؟
                اگر به صورت پیام خصوصی نباشه لطف کنید لینک کنید ... ممنون
                یا خودشون تاپیک میزنن یا توی انجمن نور پردازی و ال ای دی مطرح میکنند.
                برنامه های شما اینقدر سطح بالا نوشته شدن که ظاهر دوستان خجالت میکشن بیان اینجا سوالاتشون رو مطرح کنن.
                http://www.eca.ir/forum2/index.php?topic=101312.msg646816#msg646816

                دیدگاه


                  پاسخ : مقایسه سه نرم افزار کدویژن و اتمل استودیو و بسکام

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

                  دیدگاه


                    پاسخ : چگونه همه پایه های میکروکنترلر AVR را PWMکنیم؟پروژه RGB اضاف شد(با سه نرم افزار)

                    سلام من یک برنامه میخوام برای ATtiny13a که تمام پایه های b0-b4 که خروجی هستن به صورت همزمان یک برنامه pwm را اجرا کند اما نمیدونم باید چی کار کنم برنامه رو برای فلاشر 5 کانال میخوام ممنون میشم راهنمائیم کنید تا بتونم این کد رو بنویسم
                    با کدویژن ممنون
                    درد من تنهایی نیست ، بلکه مرگ ملتی است که گدایی را قناعت، بی عرضگی را صبر، و باتبسمی بر لبان این حماقت را حکمت خداوند می نامند. ---((گاندی))---

                    دیدگاه


                      پاسخ : چگونه همه پایه های میکروکنترلر AVR را PWMکنیم؟پروژه RGB اضاف شد(با سه نرم افزار)

                      نوشته اصلی توسط b.saeed65
                      سلام من یک برنامه میخوام برای ATtiny13a که تمام پایه های b0-b4 که خروجی هستن به صورت همزمان یک برنامه pwm را اجرا کند اما نمیدونم باید چی کار کنم برنامه رو برای فلاشر 5 کانال میخوام ممنون میشم راهنمائیم کنید تا بتون این کد رو بنویسم
                      با کدویژن ممنون
                      سلام
                      طیف نورتون میخواین چند تایی باشه ؟؟ مثلا از بی نوری تا پرنوری چند پله وجود داشته باشه ... 10 تایی -20تایی -50تایی -100تایی؟؟؟
                      فرکانس چقدر باشه ؟؟
                      [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
                      معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
                      معرفی نرم افزار Codewizard PWM
                      با من بیشتر آشنا شوید

                      دیدگاه


                        پاسخ : چگونه همه پایه های میکروکنترلر AVR را PWMکنیم؟پروژه RGB اضاف شد(با سه نرم افزار)

                        نوشته اصلی توسط سامان اسدی
                        سلام
                        طیف نورتون میخواین چند تایی باشه ؟؟ مثلا از بی نوری تا پرنوری چند پله وجود داشته باشه ... 10 تایی -20تایی -50تایی -100تایی؟؟؟
                        فرکانس چقدر باشه ؟؟
                        ممنون از بی نوری تا پرنوری و بلعکس 50تای
                        فرکانس میکرو9.6 هستش میشه با فرکانس 150khz or1200khz نوشت ؟
                        ممنون میشم اگر به صورتی توضیح بدین که متوجه بشم
                        درد من تنهایی نیست ، بلکه مرگ ملتی است که گدایی را قناعت، بی عرضگی را صبر، و باتبسمی بر لبان این حماقت را حکمت خداوند می نامند. ---((گاندی))---

                        دیدگاه


                          ساخت 5 PWM با ATtiny13A (با دقت 50 پله و 250 هرتز)

                          نوشته اصلی توسط b.saeed65
                          ممنون از بی نوری تا پرنوری و بلعکس 50تای
                          فرکانس میکرو9.6 هستش میشه با فرکانس 150khz or1200khz نوشت ؟
                          ممنون میشم اگر به صورتی توضیح بدین که متوجه بشم
                          بفرمایید این هم کد :

                          ساخت 5 PWM با ATiny13A (برای کدویژن) :
                          [code=c]
                          /************************************************** ***
                          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 :
                          Version :
                          Date : 12/11/2014
                          Author : Saman
                          Company :
                          Comments:


                          Chip type : ATtiny13A
                          AVR Core Clock frequency: 9.600000 MHz
                          Memory model : Tiny
                          External RAM size : 0
                          Data Stack size : 16
                          ************************************************** ***/

                          #include <tiny13a.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 max_var_PWM 50

                          unsigned char a = max_var_PWM , pwm[10];

                          // Timer 0 output compare A interrupt service routine
                          interrupt [TIM0_COMPA] void timer0_compa_isr(void)
                          {
                          if(a)
                          {
                          if(a == pwm[1])Set_LED1;
                          if(a == pwm[2])Set_LED2;
                          if(a == pwm[3])Set_LED3;
                          if(a == pwm[4])Set_LED4;
                          if(a == pwm[5])Set_LED5;
                          }
                          if(--a == 255)
                          {
                          a = max_var_PWM;
                          PORTB=0;
                          }
                          }

                          void main(void)
                          {
                          // Declare your local variables here

                          // Crystal Oscillator division factor: 1
                          CLKPR=0x80;
                          CLKPR=0x00;

                          PORTB=0x00;
                          DDRB=0x1F;

                          // Timer/Counter 0 initialization
                          // Clock source: System Clock
                          // Clock value: 1200 kHz
                          // Mode: CTC top=OCR0A
                          // OC0A output: Disconnected
                          // OC0B output: Disconnected
                          TCCR0A=0x02;
                          TCCR0B=0x02;
                          OCR0A=94;
                          // Timer/Counter 0 Interrupt(s) initialization
                          TIMSK0=0x04;
                          // Global enable interrupts
                          #asm("sei&quot

                          pwm[1]=10;
                          pwm[2]=20;
                          pwm[3]=30;
                          pwm[4]=40;
                          pwm[5]=50;

                          while (1)
                          {


                          }
                          }
                          [/code]

                          خوب
                          اینجا 5 تا PWM ساختم با فرکانس 250 هرتز که برای اون کاری که میخواید بسیار مناسبه ...
                          شما فقط باید به []pwm مورد نظر مقدار بدید و به کدهای نوشته شده کاری نداشته باشید ...
                          به عنوان مثال میخواهید pwm5 را با نوری متوسط نمایش دهید و چون مقدار دقت PWM شما 50 تایی است باید PWM5 را برابر با 25 قرار دهید...
                          باید این گونه نوشت
                          [code=c]
                          pwm[5]=25;[/code]
                          امیدوارم که خوب توضیح داده باشم
                          سوالی بود در خدمتم
                          [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
                          معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
                          معرفی نرم افزار Codewizard PWM
                          با من بیشتر آشنا شوید

                          دیدگاه


                            پاسخ : چگونه همه پایه های میکروکنترلر AVR را PWMکنیم؟ (ساخت PWM 5 با ATtiny13A)

                            ممنون :applause: :wow: از برنامه که قرار دادین بیشتر از یک هفته است که درگیرشم.
                            برای اینکه نورش از حداقل به حداکثر بیاد بیام یک متغییر تعریف کنم و برنامه رو بگذارم داخل حلقه for یا از ارایه استفاده کنم ؟ ممنون
                            درد من تنهایی نیست ، بلکه مرگ ملتی است که گدایی را قناعت، بی عرضگی را صبر، و باتبسمی بر لبان این حماقت را حکمت خداوند می نامند. ---((گاندی))---

                            دیدگاه


                              برنامه ای برای کم نوری به پرنوری و عکس آن . . .

                              نوشته اصلی توسط b.saeed65
                              ممنون :applause: :wow: از برنامه که قرار دادین بیشتر از یک هفته است که درگیرشم.
                              برای اینکه نورش از حداقل به حداکثر بیاد بیام یک متغییر تعریف کنم و برنامه رو بگذارم داخل حلقه for یا از ارایه استفاده کنم ؟ ممنون
                              خواهش میکنم ... قابلی نداشت ...
                              سری که درد نمیکنه چرا دسمال ببندی ؟؟ :redface: همون روز اول یه راست میومدید همین جا سوال میکردید ... :nerd:
                              ببین دوست عزیز
                              مثلا میخوایم PWM1 رو نورش رو از حداقل به حداکثر برسونیم و دوباره همین کار رو عکسش انجام بدیم ... پس باید آرایه [pwm[1 را برابر با متغیری بدیم که مدام تغییر کند ... برای اینکار باید یک حلقه for نوشت و در حین اینکه متغیر حلقه زیاد یا کم میشود باید آرایه [pwm[1 را برابر متغیر for قرار دهیم ...
                              به عنوان مثال :
                              [code=c]
                              while (1)
                              {
                              for(x=0;x<51;x++)
                              {
                              pwm[1]=x;
                              delay_ms(10);
                              }
                              for(x=50;x>=0;x--)
                              {
                              pwm[1]=x;
                              delay_ms(10);
                              }
                              }
                              [/code]
                              این کد رو تست کنی میبینی که از کم نوری به پرنوری و از پرنوری به کم نوری میل میکند ...
                              موفق باشید
                              [hr]
                              یادم رفت بگم
                              x رو همون اول برنامه باید به صورت زیر تعریف کنید .
                              [code=c]
                              signed char x;
                              [/code]
                              [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
                              معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
                              معرفی نرم افزار Codewizard PWM
                              با من بیشتر آشنا شوید

                              دیدگاه


                                پاسخ : چگونه همه پایه های میکروکنترلر AVR را PWMکنیم؟ (ساخت PWM 5 با ATtiny13A)

                                :applause: :applause: :wow: :applause: :applause:

                                واقعا ممنون
                                از پرنور به کم نورش همین الان روی برد داره کار میکنه :wow: اما از کم نور به پرنورش فقط دفعه اول کار میکنه و بعدش فقط از پرنور به کم نوره و یک چند ثانیه کلا خاموش دوباره از پرنور به کم نور فقط
                                درد من تنهایی نیست ، بلکه مرگ ملتی است که گدایی را قناعت، بی عرضگی را صبر، و باتبسمی بر لبان این حماقت را حکمت خداوند می نامند. ---((گاندی))---

                                دیدگاه

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