So hier ein Auschnitt aus meinen Code, ich hab eine LED Matrix:
Ich benutze den 8Bit Timer um die LED Matrix zu multiplexen und den 16Bit Timer um das Bild umzuschalten. Ich denke das wird der wichtige Teil sein. Davor wird nur der ml_write buffer befüllt, so dass alle LEDs brennen und es wird eine Endlosschleife durchlaufen.Code:#if F_CPU == 1000000 # define PRESCALER (1 << CS10) | (1 << CS11) #elif F_CPU == 16000000 # define PRESCALER (1 << CS12) | (1 << CS10) #endif /* ... */ ISR(TIMER0_OVF_vect) { ml_plex(); px_send(); } ISR(TIMER1_OVF_vect) { TCNT1 = 49911; // 65536 - 15625 ml_write [0] = ~(ml_write[0]); ml_write [1] = ~(ml_write[1]); ml_write [2] = ~(ml_write[2]); ml_swap = 1; } void init(void) { TCCR0 |= (1 << CS01); TCCR1B |= PRESCALER; TCNT1 = 49911; // 65536 - 15625 TIMSK |= (1 << TOIE1) | (1 << TOIE0); sei( ); }
Wenn die Rechnung stimmt muss der Fehler ja irgendwo im Programm liegen oder?
EDIT1: Es sind eher gefühlte 2 Sekunden wie 3, aber definitiv länger als 1 Sekunde







Zitieren

Lesezeichen