ساخت 7 RGB و 22 PWM با Mega8 و ساخت 10 RGB و 32 PWM با Mega16,32 (با GCC)
طبق وعده ای که دیروز دادم برنامه RGB برای نرم افزار ATmelStudio را نوشتم یا بهتر بگم که برای کامپایلرهای GCC
یک نکته هست که باید بگم و اینکه اگر این برنامه رو کپی پست کنید توی اتمل استودیو و دیدید که از این خط
خطا گرفت بدونید که یه همچین کتابخانه ای وجود نداره :mrgreen: چون خودم نوشتمش و باید اون رو دانلود کنید و کپیش کنید توی این آدرس
این هم کتابخونه 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]
طبق وعده ای که دیروز دادم برنامه RGB برای نرم افزار ATmelStudio را نوشتم یا بهتر بگم که برای کامپایلرهای GCC
یک نکته هست که باید بگم و اینکه اگر این برنامه رو کپی پست کنید توی اتمل استودیو و دیدید که از این خط
کد:
#include <avr/iobits4ATmel_Studio.h>
کد:
C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.2.1002\avr8-gnu-toolchain\avr\include\avr
[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]
دیدگاه