Beachte Startzustand mit allen FF sind 0 siehe TI-Basis: Die Ampel
Beachte: Weiteres FF notwendig wegen doppeltem Zustand mit LED in der Mitte
Verwendeter µC: ATMEL AVR 8 Bit RISC.
Systemtakt 1MHz Zylkuszeit 1µs.
Kathoden Blau | PB0 | MC | PA0 | |
Kathoden Grün | PB1 | |||
Kathoden Rot | PB2 | |||
TA | PD2 (INT0) | PC0 | L1 | |
500Hz | PD3 (INT1) | .. | .. | |
.. | .. | |||
PC7 | L8 |
void UP_INIT(){ MCUCR |= (1<<ISC01); // INT0 fallende Flanke MCUCR |= (1<<ISC11); // INT1 fallende Flanke GIMSK |= (1<<INT0); // INT0 freigeschaltet (TA) // GIMSK |= (1<<INT1); // INT1 freigeschaltet (500HZ) noch nicht! auswahl=1; // Startwert sei(); // globale Interrupt-Freigabe
volatile unsigned char zaehler = 0; // Interrupts zahelen void UP_LE2(){ GIMSK |= (1<<INT1); // INT1 freigeschaltet (500HZ) while (zaehler<200); // 200 Interrupts abwarten GIMSK &= ~(1<<INT1); // INT1 deaktivieren PORTC=0; // LEDs aus }
ISR (INT1_vect){ PORTB = ~(1<<(zaehler%3)); // Farbauswahl PORTC = LEDs[zaehler%3]; // LED Auswahl zaehler++; }
Jede 2ms wird eine andere Farbe eingeschaltet, der Zyklus wiederholt sich alle 6ms.
Durch die "Trägheit des Auges" können die kurz aufleuchtenden LED nicht unterschieden werden, sie wirken als ob sie dauernd leuchten.