Hallo µC Community, gestern habe ich versucht einen Timer mit einem attiny 2313 zu realisieren. Über die PB3 und PB4 sind mit Transistoren LEDs angeschlossen, die ich durch de- und aktivieren der Pins an- und ausschalten kann. Die LEDs sollen 12h brennen und dann für 12h aus sein. Wenn ich allerdings abends um 17:00 Uhr die Schaltung anschalte und morgens um 7:00 Uhr schaue ob die LEDs brennen, dann sind diese immer noch an. Wo liegt mein Fehler? Der AVR läuft mit 8Mhz und hier ist mein Sourcecode:
1 | #include <avr/io.h> |
2 | #include <avr/interrupt.h> |
3 | |
4 | int stunden = 12*60*60; |
5 | int count_isr = 0; |
6 | int seconds = 0; |
7 | |
8 | void initTimer() {
|
9 | TCNT0 = 0; // reset timer |
10 | TIMSK |= (1 << TOIE0); // enable overflow interrupt |
11 | TCCR0B |= (1 << CS00); |
12 | } |
13 | |
14 | int main(void) |
15 | {
|
16 | /* insert your hardware initialization here */ |
17 | DDRB = 0xff; // alles als ausgang |
18 | DDRD = 0xff; // alles als ausgang |
19 | sei(); |
20 | initTimer(); |
21 | PORTD |= (1 << PD3); |
22 | //PORTB |= (1 << PB2); |
23 | //PORTB |= (1 << PB3); |
24 | |
25 | for(;;){
|
26 | /* insert your main loop code here */ |
27 | //PORTD ^= (1 << PD3); |
28 | } |
29 | return 0; /* never reached */ |
30 | } |
31 | |
32 | ISR(TIMER0_OVF_vect) {
|
33 | // eine sekunde ist rum, wenn die ISR 31250 mal aufgerufen wurde |
34 | count_isr++; |
35 | if(count_isr >= 31250) {
|
36 | count_isr = 0; |
37 | seconds++; |
38 | } |
39 | if(seconds >= stunden) {
|
40 | seconds = 0; |
41 | PORTB ^= (1 << PB2); |
42 | PORTB ^= (1 << PB3); |
43 | } |
44 | } |
Vielen Dank Flops