ATMEGA48 Timer0 Problem

Gast #2775429
Lesenswert?

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?
#2775448
Lesenswert?

ahh ja klar dämlicher copy paste....
Aber leider keine Änderung... (Bits sind gleich).
Was mir aber noch aufgefallen ist: Wenn ich die PCINT Interrupts häufig 
betätige wird der Interrupt vom Timer0 auch in nicht nachvollziehbarer 
Weise ausgeführt (outputState.PWMPortOutput[1] = 100; resp. 
outputState.PWMPortOutput[1] = 0;).
Gast #2775463
Lesenswert?

>Auch Timer1 läuft mit dalay_ms problemlos.

Öh, was?

>ahh ja klar dämlicher copy paste....
>Aber leider keine Änderung... (Bits sind gleich).

Ich weiss, aber wenn du mal nen kompletten Quellcode
zeigen würdest, dann könnte man vieleicht auch helfen.

Alternativ würde ich dir mal empfehlen nur Timer0
in einem Testprogramm auszuprobieren. Eigentlich sieht die
Init gut aus.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren