Hi,
ich habe ein Problem mit dem Timer0 vom atmega und hoffe, dass ihr mir
weiterhelfen könnt.
1 | #define F_CPU 16000000UL
|
2 | #include <avr/io.h>
|
3 | #include <avr/interrupt.h>
|
4 | #include <util/delay.h>
|
5 |
|
6 | int main(void)
|
7 | {
|
8 | DDRB |= (1<<PINB5);
|
9 | PORTB &= ~(1 << PINB5);
|
10 |
|
11 | TCCR0A |= (1 << WGM01); // CTC-Mode
|
12 | TCCR0B |= (1 << CS00) | (1 << CS01); // clkI/O/64
|
13 | OCR0A |= (250 - 1);
|
14 | TIMSK0 |= (1 << TOIE0);
|
15 |
|
16 | sei();
|
17 | while (1)
|
18 | {
|
19 |
|
20 | }
|
21 | }
|
22 |
|
23 | ISR (TIMER0_OVF_vect)
|
24 | {
|
25 | static int32_t milliseconds = 0;
|
26 | milliseconds++;
|
27 |
|
28 | if(milliseconds>=1000)
|
29 | {
|
30 | PORTB ^= (1<<PINB5);
|
31 | milliseconds = 0;
|
32 | }
|
33 | }
|
Der Code ist noch ganz übersichtlich. Ich möchte zunächst die LED in der
ISR im Sekundentakt toggeln lassen. Doch leider bleibt diese aus. (auch
wenn ich die LED direkt beim eintreten in der ISR toggeln lassen möchte,
bleibt diese aus). Wenn ich in der while-schleife allerdings ein
_delay_ms(500); und dann die LED Toggle, blinkt diese im 500ms-Takt.
Aber was ist am Timer falsch? Oder warum wird nicht in die ISR
gesprungen?