Die nächste Aufgabe ist Konstruktion einer einfachen Küchenuhr mit Arduino, die mit drei Bedientasten zu bedienen
und mit einer 7-Segmentanzeige sowie einem akustischen Signalgeber ausgestattet ist.
Die Anzeige der Küchenuhr wird aus vier einzelnen 7-Segmentanzeigen gebildet. Zwei Digits dienen zur Anzeige der Sekunden,
zwei weitere sind für die Minuten zuständig. Bei solchem Aufbau beträgt die maximale Zeitspanne, die mit der Uhr einstellbar ist,
99 Minuten und 59 Sekunden.
Die Schaltung wird von Arduino Nano gesteuert. Da der Mikrocontroller nicht ausreichend viele digitale Ausgänge zur Verfügung
stellt, werden die Anzeigen mithilfe eines Decoders im Multiplexing Verfahren angesteuert.
Die gewünschte Zeit wird mit zwei Tasten eingestellt. Mit einer Taste werden die Sekunden, mit der anderer die Minuten
eingegeben. Mit der dritten Taste wird unsere Küchenuhr gestartet.
Zum Schluss kommt ein Signalgeber ins Spiel. Die Aufgabe der Erzeugung eines akustischen Signals übernimmt ein aktiver
Summer.
Alle Elemente der 7-Segmentanzeigen sind an den Decoder 74HC5411 angeschlossen. Die Widerstände von 680 Ohm
dienen der Strombegrenzung. Der Decoder wird von Arduino gesteuert. Die Ausgänge D2 bis D5 bestimmen, welche Ziffer gerade angezeigt
werden soll. Die Ausgabe erfolgt im BCD-Code. Ohne weitere Maßnahmen würde die Ziffer an allen vier Anzeigen sichtbar. Um das zu
verhindern, kommen die Ausgänge D6 bis
D9 zum Einsatz. Sie bestimmen, auf welcher 7-Segmentanzeige die aktuelle Ziffer zu sehen sein wird. Mit jedem Ausgang wird jeweils nur
eine Anzeige aktiviert. Die Umschaltung zwischen den einzelnen Anzeigen erfolgt so schnell, dass das menschliche Auge sie nicht
wahrnehmen kann. Diese Art der Steuerung wird als Multiplexing bezeichnet. Der Vorteil des Verfahrens liegt darin, dass die Menge
der nötigen Verbindungen sehr stark reduziert werden kann. In diesem Fall werden mit acht Ausgängen vier 7-Segmentanzeigen gesteuert,
die sonst insgesamt 28 Ausgänge beansprucht hätten.
Das Programm
// ---------------------------------------------------------------------------
// Küchenuhr
// 4 x 7-Segmentanzeige, Decoder 74HC4511, Multiplexing, aktiver Summer
// Arduino Nano, IDE 1.8.13
// ---------------------------------------------------------------------------
Die Taste S1, die an den Eingang D10 des Arduino angeschlossen ist, ist für die Minuten verantwortlich. Bei jedem
Betätigen der Taste wird die Variable „Minuten“ um 1 erhöht. Der maximale Einstellwert beträgt 99. Ähnlich arbeitet die Taste S2.
Sie ist für die Sekunden zuständig. Der maximale Wert, der hier eingestellt werden kann, beträgt 59. Der aktuelle Wert wird in der
Variable „Sekunden“ gespeichert. Aus diesen zwei Variablen werden während der Eingabe die Ziffern gebildet, die auf den einzelnen
7-Segmentanzeigen anschließend angezeigt werden sollen.
Um das Prellen der Tasten umzugehen, wird am Anfang des Programms die Variable „Eingabe_Freigabe“ gebildet. Nach jeder Eingabe
wartet das Programm 200 ms bevor eine neue Eingabe erfolgen kann.
Werden die Tasten S1 und S2 gleichzeitig betätigt, werden die Werte genullt.
Mit dem Betätigen der Taste S3 wird die Uhr gestartet. Der aktuelle Zeitwert wird dann in Sekundentakt um 1 dekrementiert. Den
Takt gibt die Variable „Takt_Flanke“ vor. Sie fungiert im Programm als eine Flanke und steht nur für einen Programmablauf mit dem Wert
„True“ zur Verfügung. Danach wird sie auf „False“ zurückgesetzt und erst nach Ablauf 1 Sekunde geht sie für einen Programmablauf
wieder auf „True“.
Erreicht der aktuelle Zeitwert den Wert 0, wird das Dekrementieren unterbrochen und der akustische Signalgeber eingeschaltet.
Die Zeit ist abgelaufen.
Die Anzeige auf den 7-Segmentanzeigen erfolgt in dem Multiplexing Verfahren. Die Anzeigen werden im Takt von 3 Millisekunden
abwechselnd nacheinander eingeschaltet. Das erledigen die Ausgänge D6 bis D9. Sie werden für die Zeit jeweils auf Masse gezogen. Z.B.
digitalWrite(DIGIT_1, LOW);
Gleichzeitig, während eine Anzeige eingeschaltet ist, wird über die Ausgänge D2 bis D5 die für sie passende Ziffer ausgegeben.
Die Ausgabe erfolgt
in dem BCD-Code. Soll z.B. auf einer 7-Segmentanzeige die Ziffer 6
dargestellt werden, werden die Ausgänge wie folgt gesetzt:
D2 (Bit 0) = LOW
D3 (Bit 1) = HIGH
D4 (Bit 2) = HIGH
D5 (Bit 3) = LOW
Die zuständigen Bitwerte werden mit dem Befehl "bitRead" aus den „Ziffer“-Variablen ausgelesen. Für die zweite 7-Segmentanzeige (A2) ist
die Variable „Ziffer_2“ zuständig. Hier hat das dritte Bit (bei Ziffer = Ziffer_2) den Wert bitRead(Ziffer,2).
Die Übersetzung des BCD-Codes auf sieben Signale, die die Anzeigen ansteuern, übernimmt der Decoder
74HC5411.