So hier ein Auschnitt aus meinen Code, ich hab eine LED Matrix:
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( );
}
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.
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
Lesezeichen