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?