1 | #include <avr/io.h>
|
2 | #include <util/delay.h>
|
3 | #include <avr/interrupt.h>
|
4 | #include <stdlib.h>
|
5 | //
|
6 | //#ifndef F_CPU
|
7 | //#define F_CPU 1000000000UL
|
8 | //#endif
|
9 |
|
10 |
|
11 |
|
12 | int main(void)
|
13 | {
|
14 |
|
15 | DDRB |= (1 << PB2); // PWM output on PB2 - OC0A
|
16 | DDRB |= (1 << PB3); // PWM output on B3 - OC1A
|
17 | DDRB |= (1 << PB4); // PWM output on B4 - OC1B
|
18 |
|
19 | // Rot
|
20 | TCCR0A = (1<<COM0A1)|(1<<COM0A0)|(1<<WGM01)|(1<<WGM00);
|
21 | OCR0A = 0x10; // initial PWM pulse width
|
22 |
|
23 | //Blau
|
24 | DDRB |= (1 << PB3); // PWM output on PB2
|
25 | TCCR1A = (1 << COM1A1) | (1 << WGM00); // phase correct PWM mode
|
26 | OCR1A = 0x10; // initial PWM pulse width
|
27 |
|
28 | //Grün
|
29 | DDRB |= (1 << PB4); // PWM output on PB2
|
30 | TCCR1B = (1 << COM1B1) | (1 << WGM00); // phase correct PWM mode
|
31 | OCR1B = 0x10; // initial PWM pulse width
|
32 | TCCR0B = (1 << CS01); // clock source = CLK/8, start PWM
|
33 | //Rot
|
34 | PORTB |= (1 << PB1); // initializes the pull-up resistor on AVR pin PB1
|
35 | PORTB |= (1 << PB0); // initializes the pull-up resistor on AVR pin PB0
|
36 | PORTD |= (1 << PD6); // initializes the pull-up resistor on AVR pin PD2
|
37 |
|
38 | //Blau
|
39 | PORTB |= (1 << PB7); // initializes the pull-up resistor on AVR pin PB1
|
40 | PORTB |= (1 << PB6); // initializes the pull-up resistor on AVR pin PB0
|
41 | PORTD |= (1 << PB5); // initializes the pull-up resistor on AVR pin PD2
|
42 |
|
43 | //Grün
|
44 | PORTB |= (1 << PD3); // initializes the pull-up resistor on AVR pin PB1
|
45 | PORTB |= (1 << PD4); // initializes the pull-up resistor on AVR pin PB0
|
46 | PORTD |= (1 << PD5); // initializes the pull-up resistor on AVR pin PD2
|
47 |
|
48 |
|
49 | TCCR0B = (1 << CS01); // clock source = CLK/8, start PWM
|
50 |
|
51 | unsigned char PWM_R = 0; // 8-bit PWM value
|
52 | unsigned char PWM_G = 0; // 8-bit PWM value
|
53 | unsigned char PWM_B = 0; // 8-bit PWM value
|
54 | int Schalter[8] = {0,0,0,0,0,0,0,0};
|
55 |
|
56 |
|
57 | while(1)
|
58 | {
|
59 | // Schalter abfragen und Werte in Array ablegen
|
60 | // Rot
|
61 | if (bit_is_clear(PINB, PB1))
|
62 | { Schalter[0] = 1;}
|
63 | else { Schalter[0] = 0;}
|
64 |
|
65 | if (bit_is_clear(PINB, PB0))
|
66 | { Schalter[1] = 1;}
|
67 | else { Schalter[1] = 0;}
|
68 |
|
69 | if (bit_is_clear(PIND, PD6))
|
70 | { Schalter[2] = 1;}
|
71 | else { Schalter[2] = 0;}
|
72 |
|
73 | //Blau
|
74 | if (bit_is_clear(PINB, PB1))
|
75 | { Schalter[0] = 1;}
|
76 | else { Schalter[0] = 0;}
|
77 |
|
78 | if (bit_is_clear(PINB, PB0))
|
79 | { Schalter[1] = 1;}
|
80 | else { Schalter[1] = 0;}
|
81 |
|
82 | if (bit_is_clear(PIND, PD6))
|
83 | { Schalter[2] = 1;}
|
84 | else { Schalter[2] = 0;}
|
85 |
|
86 |
|
87 | //Grün
|
88 | if (bit_is_clear(PINB, PB1))
|
89 | { Schalter[0] = 1;}
|
90 | else { Schalter[0] = 0;}
|
91 |
|
92 | if (bit_is_clear(PINB, PB0))
|
93 | { Schalter[1] = 1;}
|
94 | else { Schalter[1] = 0;}
|
95 |
|
96 | if (bit_is_clear(PIND, PD6))
|
97 | { Schalter[2] = 1;}
|
98 | else { Schalter[2] = 0;}
|
99 |
|
100 | //Bedingungen abfragen und Ergebnis an PWM übergeben
|
101 | //Rot
|
102 | if (Schalter[0]==0 && Schalter[1]==0 && Schalter[2] == 0) //000
|
103 | { PWM_R = 0; }
|
104 |
|
105 | if (Schalter[0]==1 && Schalter[1]==0 && Schalter[2] == 0) //100
|
106 | { PWM_R = 85; }
|
107 | if (Schalter[0]==0 && Schalter[1]==1 && Schalter[2] == 0) //010
|
108 | { PWM_R = 85; }
|
109 | if (Schalter[0]==0 && Schalter[1]==0 && Schalter[2] == 1) //001
|
110 | { PWM_R = 85; }
|
111 |
|
112 | if (Schalter[0]==1 && Schalter[1]==1 && Schalter[2] == 0) //110
|
113 | { PWM_R = 170; }
|
114 | if (Schalter[0]==0 && Schalter[1]==1 && Schalter[2] == 1) //011
|
115 | { PWM_R = 170; }
|
116 | if (Schalter[0]==1 && Schalter[1]==0 && Schalter[2] == 1) //101
|
117 | { PWM_R = 170; }
|
118 |
|
119 | if (Schalter[0]==1 && Schalter[1]==1 && Schalter[2] == 1) //111
|
120 | { PWM_R = 255; }
|
121 |
|
122 | OCR0A = PWM_R; // write new PWM value
|
123 |
|
124 | //Blau
|
125 | if (Schalter[3]==0 && Schalter[4]==0 && Schalter[5] == 0) //000
|
126 | { PWM_B = 0; }
|
127 |
|
128 | if (Schalter[3]==1 && Schalter[4]==0 && Schalter[5] == 0) //100
|
129 | { PWM_B = 85; }
|
130 | if (Schalter[3]==0 && Schalter[4]==1 && Schalter[5] == 0) //010
|
131 | { PWM_B = 85; }
|
132 | if (Schalter[3]==0 && Schalter[4]==0 && Schalter[5] == 1) //001
|
133 | { PWM_B = 85; }
|
134 |
|
135 | if (Schalter[3]==1 && Schalter[1]==1 && Schalter[5] == 0) //110
|
136 | { PWM_B = 170; }
|
137 | if (Schalter[3]==0 && Schalter[4]==1 && Schalter[5] == 1) //011
|
138 | { PWM_B = 170; }
|
139 | if (Schalter[4]==1 && Schalter[4]==0 && Schalter[5] == 1) //101
|
140 | { PWM_B = 170; }
|
141 |
|
142 | if (Schalter[0]==1 && Schalter[4]==1 && Schalter[5] == 1) //111
|
143 | { PWM_B = 255; }
|
144 |
|
145 | OCR0A = PWM_B; // write new PWM value
|
146 |
|
147 |
|
148 | //Grün
|
149 | if (Schalter[6]==0 && Schalter[7]==0 && Schalter[8] == 0) //000
|
150 | { PWM_G = 0; }
|
151 |
|
152 | if (Schalter[6]==1 && Schalter[7]==0 && Schalter[8] == 0) //100
|
153 | { PWM_G = 85; }
|
154 | if (Schalter[6]==0 && Schalter[7]==1 && Schalter[8] == 0) //010
|
155 | { PWM_G = 85; }
|
156 | if (Schalter[6]==0 && Schalter[7]==0 && Schalter[8] == 1) //001
|
157 | { PWM_G = 85; }
|
158 |
|
159 | if (Schalter[6]==1 && Schalter[7]==1 && Schalter[8] == 0) //110
|
160 | { PWM_G = 170; }
|
161 | if (Schalter[6]==0 && Schalter[7]==1 && Schalter[8] == 1) //011
|
162 | { PWM_G = 170; }
|
163 | if (Schalter[6]==1 && Schalter[7]==0 && Schalter[8] == 1) //101
|
164 | { PWM_G = 170; }
|
165 |
|
166 | if (Schalter[6]==1 && Schalter[7]==1 && Schalter[8] == 1) //111
|
167 | { PWM_G = 255; }
|
168 |
|
169 | OCR0A = PWM_G; // write new PWM value
|
170 |
|
171 | }//while
|
172 | }//main
|