Hallo, ich möchte die Pins eines Atmega8 mithilfe des Timer2 togglen; PB0 und PB1 sollen dabei gegensätzliche Zustände annehmen; sprich um 180° verschoben sein. Mit folgendem Code klappt das leider nicht, und ich finde auf Teufel komm' raus den Fehler nicht. Der uC läuft bei 1Mhz. Frequenz der Pins sollte bei den gegebenen Einstellungen knapp 2kHz sein, aber ich messe 0V an beiden Pins.
1 | #include <avr/interrupt.h> |
2 | #include <avr/io.h> |
3 | |
4 | |
5 | int main(void) |
6 | {
|
7 | DDRB |= (1<<DDB1) | (1<<DDB0) | (1<<PB2); |
8 | PORTB |= (1<<PB2); //um zu testen, ob Port C überhaupt "lebt" |
9 | TCCR2 |= (1<<WGM21); //CTC mode |
10 | OCR2 = 250; //top value |
11 | TIMSK |= (1<<OCIE2); //erlaube Overflow-Interrupts |
12 | sei(); //erlaube globale Interrupts |
13 | while (1) |
14 | {
|
15 | }
|
16 | }
|
17 | |
18 | ISR(TIMER2_COMP_vect) |
19 | {
|
20 | PORTB ^= (1<<PB0); //toggle PB0 bei jedem compare match |
21 | if(PORTB & (1<<PB0)) //setze PB1 gegensätzlich zu PB2 |
22 | {
|
23 | PORTB &= !(1<<PB1); |
24 | }
|
25 | else
|
26 | {
|
27 | PORTB |= (1<<PB1); |
28 | }
|
29 | }
|
Ich stehe total auf dem Schlauch. Weiß jemand weiter und kann mir helfen?