Hi Leute sicher ein leichtes Ding für euch: Beim Overflow des T1 soll ein Register um 1 erhöht, und als LED Leiste angezeigt werden. Leider bleiben die LEDs alle aus. Nichts erhöht sich. Springt der vielleicht nicht in die INT-Routine?
ach ja das if ( overflw == 5) muss im Normalfall if ( overflw == 43) heißen. Hab es hier nur zum Debuggen verkürzt.
So wird das nix.. Du brauchst globale Variablen, auf die du aus jeder Funktion zugreifen kannst. Dann brauchst du noch das Schlüsselwort volatile, damit du auf die Variable auch aus Interruptroutinen aufrufen kannst, sonst denkt sich der Compiler vielleicht mal, dass er da irgendwas optimieren kann, was ungut wäre #include <avr/io.h> #include <avr/iom8515.h> #include <avr/interrupt.h> volatile uint8_t min_counter_low = 0x00; volatile uint8_t min_counter_high = 0x00; volatile uint8_t overflw = 0x00; int main(void) {DDRB = 0xFF; PORTB = 0x00; TCCR1B |= (1<<CS12); TIMSK |= (1<<TOIE1); sei(); for (;;) {PORTB = min_counter_low; } return 0; } ISR (TIMER1_OVF_vect) {++overflw; //++bla ist etwas schneller als bla++ } if ( overflw == 5) { min_counter_low++; overflw = 0x00; } }
Hm, da ging was schief.. Also ab ISR.. nochmal: ISR (TIMER1_OVF_vect) {++overflw; //++bla ist etwas schneller als bla++ if (overflw == 5) {++min_counter_low; overflw = 0x00; } }
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.