Hallo,
ich versuche gerade verzweifelt den Timer0 am ATMEGA 48 in ganz zu
bringen.
Leider funktioniert folgender code nicht:
1 | volatile uint16_t millisekunden = 0;
|
2 |
|
3 | void init()
|
4 | {
|
5 | /* Control Timer aktivieren */
|
6 | TCCR0A = (1<<WGM01); // Normal port operation, OC0A disconnected, CTC
|
7 | TCCR0B = (1<<CS22) | (0<<CS21) | (1<<CS20); // Prescaler 1024
|
8 | TIMSK0 = (1 << OCIE0A); //Timer0A output compare match interrupt
|
9 | OCR0A = 20;
|
10 | TCNT0 = 0;
|
11 |
|
12 | sei(); // turn interrupt on
|
13 | }
|
14 |
|
15 | ISR(TIMER0_COMPA_vect)
|
16 | {
|
17 | millisekunden++;
|
18 | if (outputState.PWMPortOutput[1] != 100)
|
19 | outputState.PWMPortOutput[1] = 100;
|
20 | else
|
21 | outputState.PWMPortOutput[1] = 0;
|
22 | if (millisekunden == 1000)
|
23 | {
|
24 | if (outputState.PWMPortOutput[0] == 100)
|
25 | outputState.PWMPortOutput[0] = 0;
|
26 | else
|
27 | outputState.PWMPortOutput[0] = 100;
|
28 |
|
29 | millisekunden = 0;
|
30 | }
|
31 | }
|
Der Interrupt wird wenn nur einmal aufgerufen.
Timer 2 läuft ohne Probleme (generiert das PWM aus outputState). Auch
Timer1 läuft mit dalay_ms problemlos.
Dann hab ich noch PCINT Interrupts, auch diese laufen Problemlos.
Also warum läuft Timer0 nicht?
Auch den ATmega hab ich schon getauscht... selbes Problem.
Hat irgendwer noch ne Idee woran das liegen könnte?