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.