1 | #include <avr\io.h> |
2 | #include <avr\interrupt.h> |
3 | #define F_CPU 1000000
|
4 | |
5 | volatile uint8_t count; |
6 | |
7 | int main () { |
8 | |
9 | TCCR0 |= (1<<CS01) | (1<<CS00); // FCPU/64 => 1000000Hz/64/256= 61Hz |
10 | TIMSK |= (1<<TOIE0); |
11 | TCNT0 = 0; |
12 | DDRB |= (1<<PB2); |
13 | count=0; |
14 | sei(); |
15 | |
16 | while (1) ; |
17 | }
|
18 | |
19 | ISR(TIMER0_OVF_vect) { |
20 | count++; |
21 | |
22 | if (count==61) { |
23 | PORTB |= (1<<PB2); |
24 | count=0; |
25 | PORTB &= ~(1<<PB2); |
26 | }
|
27 | }
|
Die Berechnung des Timers sollte stimmen, oder? Mein Problem ist nun, dass wenn ich im Interrupt die LED nicht wieder ausschalte diese anbleibt und wenn ich sie nicht ausschalte geht sie erst gar nicht an. Oder geht das ganze so schnell, dass ich es gar nicht sehen kann? Falls ja, wie kann man das ändern? Wenn ich ein delay nach dem LED einschalten einfügen würde, verändere ich dann den ganzen Timer ablauf, oder ist das nur für das Interrup relevant? zB:
1 | if (count==61) { |
2 | PORTB |= (1<<PB2); |
3 | _delay_ms(50); |
4 | count=0; |
5 | PORTB &= ~(1<<PB2); |
6 | }
|
Danke!