Hallo Zusammen,
ich bin eben auf ein seltsames Problem mit Timer2 gestoßen. Und zwar
läuft der Timer aus irgedeinem Grund nicht im Power_Save Mode.
Was ich nicht verstehe ist, dass ich genau den gleichen Code Teil auf
einem anderen Atmega1284p am laufen habe. Das einzige, was ich auf dem
anderen Atmega anders gemacht habe, ist ein anderer Prescaler, aber das
kann ja eigentlich nicht das Problem sein. An TOSC habe ich einen
Uhrenquarz angeschlossen. Jemand ne Idee, was ich falsch gemacht habe?
1 | #include <avr/io.h>
|
2 | #include <avr/interrupt.h>
|
3 | #include <avr/sleep.h>
|
4 | volatile int count=0;
|
5 |
|
6 | int main(void){
|
7 |
|
8 | // Timer 2 konfigurieren
|
9 | GTCCR |= (1 << TSM) | (1 << PSRASY); //Timer anhalten, Prescaler Reset
|
10 | ASSR = (1 << AS2); //Asynchron Mode einschalten
|
11 | TCCR2A = (1 << WGM21); //CTC Modus
|
12 | TCCR2B = (1 << CS22) | (1 << CS21) | (1<< CS20); //Prescaler 1024
|
13 | OCR2A = 128;
|
14 | while(ASSR & ((1<<TCN2UB) | (1<<OCR2AUB) | (1<<OCR2BUB) | (1<<TCR2AUB) | (1<<TCR2BUB)));
|
15 |
|
16 | TIMSK2 |= (1<<OCIE2A);
|
17 | GTCCR &= ~(1 << TSM);
|
18 | sei();
|
19 |
|
20 | DDRB=0x01;
|
21 |
|
22 | while (1) {
|
23 | // set_sleep_mode(SLEEP_MODE_PWR_SAVE);
|
24 | // sleep_mode();
|
25 | }
|
26 | }
|
27 |
|
28 | ISR (TIMER2_COMPA_vect){ //alle 4 Sekunden
|
29 | if(count%2)
|
30 | PORTB=0x01;
|
31 | else
|
32 | PORTB=0;
|
33 | ++count;
|
34 | }
|