| 1,5 → 1,6 |
| //############################################################################ |
| // - LED CTRL Main |
| // - PWM CTRL |
| // - Main |
| // - ATMEGA8 mit 8MHz |
| // - Nur für den privaten Gebrauch |
| // - Keine Garantie auf Fehlerfreiheit |
| 16,6 → 17,7 |
| volatile unsigned int ppm_signal = 1500; |
| volatile unsigned char ppm_new = 0; |
| volatile unsigned char TMR1OvF = 0; |
| volatile unsigned int TMR1MS; |
| volatile unsigned char ch0; |
| volatile unsigned char ch1; |
| volatile unsigned char ch2; |
| 22,9 → 24,8 |
| volatile unsigned char ch3; |
| volatile unsigned char ch4; |
| volatile unsigned char ch5; |
| unsigned int timer; |
| |
| |
| |
| SIGNAL(SIG_OVERFLOW1) |
| { |
| TMR1OvF++; |
| 66,6 → 67,7 |
| SIGNAL(SIG_OVERFLOW0) |
| { |
| static unsigned char counter; |
| static unsigned char ms1; |
| unsigned char PORTB_BAK; |
| unsigned char PORTD_BAK; |
| |
| 72,75 → 74,68 |
| PORTB_BAK = PORTB; |
| PORTD_BAK = PORTD; |
| |
| |
| if (counter == 0) |
| if (counter++ == 254) |
| { |
| PORTB_BAK clrbit (CH0_B | CH1_B | CH2_B); |
| PORTD_BAK clrbit (CH3_D | CH4_D | CH5_D); |
| PORTB_BAK LEDON (CH0_B | CH1_B | CH2_B); |
| PORTD_BAK LEDON (CH3_D | CH4_D | CH5_D); |
| counter = 0; |
| } |
| |
| if (ch0 == counter) PORTB_BAK LEDOFF CH0_B; |
| if (ch1 == counter) PORTB_BAK LEDOFF CH1_B; |
| if (ch2 == counter) PORTB_BAK LEDOFF CH2_B; |
| if (ch3 == counter) PORTD_BAK LEDOFF CH3_D; |
| if (ch4 == counter) PORTD_BAK LEDOFF CH4_D; |
| if (ch5 == counter) PORTD_BAK LEDOFF CH5_D; |
| |
| PORTB = PORTB_BAK; |
| PORTD = PORTD_BAK; |
| |
| if (ch0 == 255) |
| if (ms1++ == 32) |
| { |
| PORTB_BAK setbit CH0_B; |
| ms1=0; |
| TMR1MS++; |
| } |
| if (ch0 == counter) |
| { |
| PORTB_BAK setbit CH0_B; |
| } |
| if (ch0 == 0) |
| { |
| PORTB_BAK clrbit CH0_B; |
| } |
| |
| |
| |
| |
| } |
| |
| |
| |
| if (ch1 == counter) |
| { |
| PORTB_BAK setbit CH1_B; |
| } |
| if (ch2 == counter) |
| { |
| PORTB_BAK setbit CH2_B; |
| } |
| if (ch3 == counter) |
| { |
| PORTD_BAK setbit CH3_D; |
| } |
| if (ch4_BAK == counter) |
| { |
| PORTD setbit CH4_D; |
| } |
| if (ch5_BAK == counter) |
| { |
| PORTD setbit CH5_D; |
| } |
| } |
| |
| |
| |
| } |
| |
| |
| unsigned int SetDelay (unsigned int t) |
| { |
| unsigned char temp_hi; |
| unsigned char temp_lo; |
| |
| temp_hi = (TMR1MS >> 8); |
| temp_lo = (TMR1MS & 0xff); |
| if (temp_hi != (TMR1MS >> 8)) temp_hi = (TMR1MS >> 8); |
| |
| counter++; |
| return(((temp_hi << 8) | temp_lo) + t + 1); |
| |
| PORTB = PORTB_BAK; |
| PORTD = PORTD_BAK; |
| } |
| |
| |
| char CheckDelay(unsigned int t) |
| { |
| unsigned char temp_hi; |
| unsigned char temp_lo; |
| |
| temp_hi = (TMR1MS >> 8); |
| temp_lo = (TMR1MS & 0xff); |
| if (temp_hi != (TMR1MS >> 8)) temp_hi = (TMR1MS >> 8); |
| |
| return(((t - ((temp_hi << 8) | temp_lo)) & 0x8000) >> 9); |
| |
| } |
| |
| |
| |
| |
| |
| /*##############################################################################*/ |
| void StartPWM(unsigned char txbyte) |
| void StartPWM(void) |
| { |
| //Timer 0 Config for getting right timing for IR Pattern |
| TCCR0 = (0<<CS02)|(0<<CS01)|(1<<CS00); // (@8MHz) = 1/8us Clk = 256/8 = 32us overflow |
| 151,9 → 146,6 |
| |
| |
| |
| |
| |
| |
| /*##############################################################################*/ |
| void StartPPM(void) |
| { |
| 194,15 → 186,19 |
| /*##############################################################################*/ |
| int main (void) |
| { |
| unsigned int i; |
| unsigned char colorState; |
| unsigned char nextcolorState; |
| |
| DDRC = (1<<ledred); |
| DDRB = (CH0_B|CH1_B|CH2_B); |
| PORTB = 0x00; |
| |
| DDRC = (ledred); |
| PORTC = 0x00; |
| DDRD = (1<<ledgreen); |
| |
| DDRD = (ledgreen|CH3_D|CH4_D|CH5_D); |
| PORTD = 0x00; |
| DDRB = (1<<1)|(1<<2)|(1<<3); |
| PORTB = 0x00; |
| |
| |
| ch0 = 0; |
| ch1 = 0; |
| ch2 = 0; |
| 212,18 → 208,71 |
| |
| //StartUART(); |
| StartPPM(); |
| StartI2C(); |
| //StartI2C(); |
| StartPWM(); |
| sei(); |
| |
| |
| //rot > Violett > Blau > Türkis > Grün > Gelb > |
| |
| |
| colorState = 0; |
| |
| while (1) |
| { |
| |
| //printf("%d ",ppm_signal); |
| |
| for (i=0; i<=255; i++) |
| { |
| switch(colorState) |
| { |
| case 0: |
| ch0 = i; //fade in (ch0) red |
| nextcolorState = 2; |
| break; |
| |
| |
| |
| case 2: |
| ch1 = i; //fade in (ch1) blue to get purple (red + blue) |
| nextcolorState = 4; |
| break; |
| |
| case 4: |
| ch0 = 255 - i; //fade out (ch0) red to get pure blue |
| nextcolorState = 6; |
| break; |
| |
| case 6: |
| ch2 = i; //fade in (ch2) green to get cyan (blue + green) |
| nextcolorState = 8; |
| break; |
| |
| case 8: |
| ch1 = 255 - i; //fade out (ch1) blue to get pure green |
| nextcolorState = 10; |
| break; |
| |
| case 10: |
| ch0 = i; //fade in (ch0) red to get yellow (green + red) |
| nextcolorState = 12; |
| break; |
| |
| case 12: |
| ch2 = 255 - i; //fade out (ch2) green to get pure red |
| nextcolorState = 0; |
| break; |
| } |
| |
| |
| timer = SetDelay(1); |
| while (!CheckDelay(timer)); |
| } |
| |
| colorState = nextcolorState; |
| timer = SetDelay(3); |
| while (!CheckDelay(timer)); |
| |
| |
| } |
| |
| |