نوشته اصلی توسط mojtabair
نمایش پست ها
ببخشید دیر شد
برنامه با کلی اصلاح تقدیم شما




/*****************************************************
Project : 22 PWM or ( 7 RGB and 1 PWM)
Resolution : 8 States (0 To 7)
Date : 23/Mar/2021
Time : 01:14:39
Author : Saman.Asadi www.ECA.ir
Author's Email : Saman.asadi.ir@gmail.com
Chip type : ATmega8
AVR Core Clock frequency : 8 MHz
*****************************************************/
#include <mega8.h> //for ATmega8 or ATmega8L or ATmega8A
#include <delay.h>
#define Max_Variable_PWM 7
#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);
void RGB1(unsigned int input_0_to_511);
void RGB2(unsigned int input_0_to_511);
void RGB3(unsigned int input_0_to_511);
void RGB4(unsigned int input_0_to_511);
void RGB5(unsigned int input_0_to_511);
void RGB6(unsigned int input_0_to_511);
void RGB7(unsigned int input_0_to_511);
//pwm[1] ===> PORTD.0 ¯¯¯¯¯\
//pwm[2] ===> PORTD.1 ———RGB1()
//pwm[3] ===> PORTD.2 _____/
//pwm[4] ===> PORTD.3 ¯¯¯¯¯\
//pwm[5] ===> PORTD.4 ———RGB2()
//pwm[6] ===> PORTB.6 _____/
//pwm[7] ===> PORTB.7 ¯¯¯¯¯\
//pwm[8] ===> PORTD.5 ———RGB3()
//pwm[9] ===> PORTD.6 _____/
//pwm[10] ===> PORTD.7 ¯¯¯¯¯\
//pwm[11] ===> PORTB.0 ———RGB4()
//pwm[12] ===> PORTB.1 _____/
//pwm[13] ===> PORTB.2 ¯¯¯¯¯\
//pwm[14] ===> PORTB.3 ———RGB5()
//pwm[15] ===> PORTB.4 _____/
//pwm[16] ===> PORTB.5 ¯¯¯¯¯\
//pwm[17] ===> PORTC.0 ———RGB6()
//pwm[18] ===> PORTC.1 _____/
//pwm[19] ===> PORTC.2 ¯¯¯¯¯\
//pwm[20] ===> PORTC.3 ———RGB7()
//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: 125.000 KHz
// Mode: CTC top=OCR2
// OC2 output: Disconnected
ASSR=0x00;
TCCR2 = 0x0C;
OCR2 = 0x9C;
TCNT2= 0x00;
//Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK |= 0x80;
// Global enable interrupts
#asm("sei")
}//End Config ...
RGB1(222);
RGB2(222);
RGB3(222);
RGB4(222);
RGB5(222);
RGB6(222);
RGB7(222);
while(1)
{
// Place your code here
}
}
// Timer 2 output compare interrupt service routine
interrupt [TIM2_COMP] void timer2_comp_isr(void)
{
if(Counter__pwm)
{
if(Counter__pwm == _pwm[1]) PORTD |= 0x01;
if(Counter__pwm == _pwm[2]) PORTD |= 0x02;
if(Counter__pwm == _pwm[3]) PORTD |= 0x04;
if(Counter__pwm == _pwm[4]) PORTD |= 0x08;
if(Counter__pwm == _pwm[5]) PORTD |= 0x10;
if(Counter__pwm == _pwm[6]) PORTB |= 0x40;
if(Counter__pwm == _pwm[7]) PORTB |= 0x80;
if(Counter__pwm == _pwm[8]) PORTD |= 0x20;
if(Counter__pwm == _pwm[9]) PORTD |= 0x40;
if(Counter__pwm == _pwm[10]) PORTD |= 0x80;
if(Counter__pwm == _pwm[11]) PORTB |= 0x01;
if(Counter__pwm == _pwm[12]) PORTB |= 0x02;
if(Counter__pwm == _pwm[13]) PORTB |= 0x04;
if(Counter__pwm == _pwm[14]) PORTB |= 0x08;
if(Counter__pwm == _pwm[15]) PORTB |= 0x10;
if(Counter__pwm == _pwm[16]) PORTB |= 0x20;
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;
_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];
PORTB &= 0x0;
PORTC &= 0xC0;
PORTD &= 0x0;
}
}
void RGB1(unsigned int input_0_to_511)
{
if( input_0_to_511>511)return;
pwm[1] = input_0_to_511 & 0x07;
input_0_to_511 /= 8;
pwm[2] = input_0_to_511 & 0x07;
input_0_to_511 /= 8;
pwm[3] = input_0_to_511 & 0x07;
}
void RGB2(unsigned int input_0_to_511)
{
if(input_0_to_511>511)return;
pwm[4] = input_0_to_511 & 0x07;
input_0_to_511 /= 8;
pwm[5] = input_0_to_511 & 0x07;
input_0_to_511 /= 8;
pwm[6] = input_0_to_511 & 0x07;
}
void RGB3(unsigned int input_0_to_511)
{
if(input_0_to_511>511)return;
pwm[7] = input_0_to_511 & 0x07;
input_0_to_511 /= 8;
pwm[8] = input_0_to_511 & 0x07;
input_0_to_511 /= 8;
pwm[9] = input_0_to_511 & 0x07;
}
void RGB4(unsigned int input_0_to_511)
{
if(input_0_to_511>511)return;
pwm[10] = input_0_to_511 & 0x07;
input_0_to_511 /= 8;
pwm[11] = input_0_to_511 & 0x07;
input_0_to_511 /= 8;
pwm[12] = input_0_to_511 & 0x07;
}
void RGB5(unsigned int input_0_to_511)
{
if(input_0_to_511>511)return;
pwm[13] = input_0_to_511 & 0x07;
input_0_to_511 /= 8;
pwm[14] = input_0_to_511 & 0x07;
input_0_to_511 /= 8;
pwm[15] = input_0_to_511 & 0x07;
}
void RGB6(unsigned int input_0_to_511)
{
if(input_0_to_511>511)return;
pwm[16] = input_0_to_511 & 0x07;
input_0_to_511 /= 8;
pwm[17] = input_0_to_511 & 0x07;
input_0_to_511 /= 8;
pwm[18] = input_0_to_511 & 0x07;
}
void RGB7(unsigned int input_0_to_511)
{
if(input_0_to_511>511)return;
pwm[19] = input_0_to_511 & 0x07;
input_0_to_511 /= 8;
pwm[20] = input_0_to_511 & 0x07;
input_0_to_511 /= 8;
pwm[21] = input_0_to_511 & 0x07;
}


یک دیدگاه بنویسید: