Atmega328p Timer ISR wird nicht ausgelöst

Gast #6689815
Lesenswert?

Mahlzeit,
ich versuche mich gerade mit einem Timerinterrupt auf einem Atmega328p 
(Arduino). Hier ist an PinB5 eine LED angeschlossen.
1
#define F_CPU 8000000
2

3

4
int main(void)
5
{
6

7
  /* PB5 als Ausgang fuer LED zum Testen */
8
  DDRB |= (1 << PINB5);
9
//  PORTB &= ~(1 << PINB5);
10
  PORTB |= (1 << PINB5);
11
  
12
    // 50 ms
13
    TCCR1B = (1 << WGM12) | (1 << CS11) | (1 << CS10); // CTC-Mode clkIO/64
14
    OCR1A = (6250-1);
15
    TIMSK1 = (1 << OCIE1A);
16
  
17
    while (1) 
18
    {
19
    
20
    } /* Ende while */
21
} /* Ende main */
22

23

24
ISR (TIMER1_COMPA_vect)
25
{
26
  static uint8_t ticks_u8 = 0;  // Anzahl der Aufrufe der ISR
27

28
    ticks_u8++;
29
    if(ticks_u8 >= 20)
30
    {
31
        ticks_u8 = 0;
32
        PORTB ^= (1 << PINB5);
33
    }
34
}
Eigentlich sollte die LED im sekundentakt an/aus gehen. Das Problem ist, 
dass sie entweder an oder aus bleibt (je nachdem wie ich diese 
initialisere).

Aber die ISR ist doch so richtig oder?
Beitrag #6689828 wurde von einem Moderator gelöscht.
Gast #6689989
Lesenswert?

Franz schrieb:
> Das war es. Muss ich jetzt aber erst nochmal gucken, was und wozu das
> ist.

sei ; set global interrupt enable

Brauchst du immer, wenn du Interrupts verwenden willst.
Ist mir aber auch schon passiert ...
Deshalb steht in manchen meiner Quelltexte auch drin:
1
sei();  // wie immer: zunächst vergessen und sich dann gewundert :-)
😀

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