Das 4x64-Matrix-Display hat es unserem Kunden Hans-Ulrich Küster, der uns von seinem Projekt „elektronische Sanduhr/Eieruhr“ berichtet hatte, offensichtlich angetan. Denn es eignet sich auch hervorragend für eine großformatige Anzeige. Er schreibt: Das Alter bringt es mit sich, dass es mit dem Sehen und dem Hören nicht mehr so richtig funktionieren will. So geht es einem Verwandten von mir.
Eine normale Uhr kann er in der Nacht nicht erkennen, die sprechende Uhr geht ohne Hörgerät auch nicht so richtig. Also durfte ich mir was einfallen lassen.
Um eine möglichst große Anzeige zu erhalten, habe ich zwei MAX7219 8x32 4 in 1 Dot Matrix LED übereinandergesetzt. Als Uhr diente eine Real Time Clock RTC DS3231 I2C.
Auch dieses Projekt habe ich nachgebaut und möchte es mit Ihnen teilen. In einer Fortsetzung werde ich berichten, wie ich den Micro Controller mit ATMEGA 328P durch die WLAN-fähigen Micro Controller von Espressif ersetzt habe. Denn am Ende dieses Blogs möchte ich über die Weiterentwicklung der Sanduhr von Herrn Küster schreiben.
Verwendete Hardware
Anzahl | Bauteil |
---|---|
1 | Micro Controller mit ATMEGA 328P |
2 | MAX7219 8x32 4 in 1 Dot Matrix LED Anzeigemodul |
1 | Real Time Clock RTC DS3231 I2C |
Steckbrett (Breadboard) und Kabel (Jumper Wire) |
In meinem provisorischen Nachbau habe ich nach dem Anlöten der zweiten, gewinkelten Pin-Leiste die beiden Matrix-Displays kurzerhand mit einem langen Stück Tesafilm verbunden, die „Daisy Chain“ mit dem beiliegenden Kabel verbunden und die Verbindung zur Spannungsversorgung und der SPI-Schnittstelle des Micro Controllers hergestellt.
Die Schaltung weist keine Besonderheiten auf: Die SPI-Schnittstelle beim Micro Controller ist die Zweitbelegung der digitalen Pins D13=SCK (=Serial Clock), D12=MISO (=Master in-Slave out, bei Displays nicht benötigt), D11=MOSI (=Master out – Slave in) und D10=SS (=Slave Select). Die Bezeichnungen am Matrix-Display weichen etwas ab: DIN (= Data in) wird mit MOSI verbunden, CS (=Chip Select) ist ein Synonym für SS (=Slave Select) und SCL ist die Taktleitung und wird mit SCK verbunden. Dann fehlt nur noch die Spannungsversorgung: GND an GND und VCC an 5V.
Die verwendete Real Time Clock (RTC DS3231) hat eine I2C-Schnittstelle, also SDA an den analogen Pin A4 und SCL an A5, Spannungsversorgung an GND und VCC an 3,3V oder 5V.
Zu Beginn des Sketches werden drei Programm-Bibliotheken geladen, um die verwendete Hardware leicht einzubinden:
// Anzeige
// I2C Schnittstelle
// Real Time Clock ZS-042
Sofern noch nicht geschehen, diese in der bekannten Weise unter Menüpunkt /Werkzeuge/Bibliotheken_verwalten suchen und hinzufügen.
Das Einbinden der Anzeige erfolgt anschließend mit
// Anzahl Segmente
MD_MAX72XX uhr = MD_MAX72XX(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);
Da die Bibliothek MD_MAX72xx.h für verschiedene Displays verwendet werden kann, wird das hier genutzte, von AZ-Delivery vertriebene Matrix-Display als FC16_HW definiert. Da insgesamt 8 Matrix-Displays hintereinandergeschaltet (kaskadiert) werden, wird MAX_DEVICES 8 festgelegt. Die SPI-Schnittstelle wird innerhalb der Bibliothek MD_MAX72xx.h eingebunden.
Wer ein anderes Display benutzen möchte, kann mit dem Beispielsketch MD_MAX72xx_HW_MAPPER seine Einstellungen ermitteln.
Die beiden anderen Bibliotheken sind für die Aktivierung der I2C-Schnittstelle und die Real Time Clock nötig.
Für die großen Zahlen findet man keine Vorlage im Internet. Die hat Herr Küster dann in selbst definierten Funktionen beschrieben.
Für die Synchronisation der Real Time Clock wird die Systemzeit des Rechners beim Hochladen des Sketches verwendet. Dazu wird die Variable in Zeile 22
bool syncOnFirstStart = false; // true mit PC synchronisieren, ansonsten false
beim ersten Hochladen auf true gesetzt, danach beim erneuten Hochladen auf false.
Hier der gesamte Sketch zum Download
Update Sanduhr / Eieruhr
Nun wie angekündigt noch ein kurzes Update zur elektronischen Sanduhr/Eieruhr.
Um noch flexibler die Zeit für den Countdown eingeben zu können, wurde der Schalter 2 durch ein Potentiometer ersetzt.
Der Wert für das Poti ist unkritisch, da geht alles zwischen 1 kOhm und 10 kOhm. Jetzt zum Zeitablauf. Im Deklarationsteil sind pause_1 und pause_x für die Zeiten verantwortlich. Steht das Poti auf Minimalwert, bestimmt pause_1 die Zeit, im Sketch mit dem Wert für 5 Minuten. Steht das Poti auf Maximalwert, bestimmt pause_x die Zeit.
Durch Veränderung des Wertes pause_x kann man die Zeitspanne, die sich einstellen lässt, verändern. Folgende Werte wurden gemessen:
35 -> 6:05 Minuten
30 -> 6:15 Minuten
25 -> 6:30 Minuten
20 -> 6:50 Minuten
15 -> 7:30 Minuten
10 -> 8:45 Minuten
9 -> 9:10 Minuten
8 -> 9:40 Minuten
7 -> 10:20 Minuten
6 -> 11: 15 Minuten
5 -> 12:30 Minuten
Verändert man allerdings den Wert für pause_1 dann verändern sich auch alle anderen Einstellungen und man muss die Zeiten neu ausprobieren.
Es ist sicherlich sinnvoll, egal welche Werte man wählt, für das eigene Poti eine Skala zu erstellen.
Hier der Sketch Sanduhr_poti zum Download
Viel Spaß mit den Vorschlägen von Herrn Küster. Beim nächsten Mal nehmen wir für die Uhrzeitanzeige einen WLAN-fähigen Micro Controller von Espressif.
1 commento
Himmerlich
Nachdem der Sommer vorbei ist habe ich wieder mehr Zeit zum Basteln. Mir gefällt die Uhr mit Großbuchstaben sehr gut, so dass ich diese gebaut habe. Es klappt auch mit der Anzeige, nur müssen in der 2. Reihe die Punkte verschoben oder gespiegelt werden. Ich habe schon die FC16_HW ersetzt durch ICSTATION_HW. Da ist jetzt die Zeit schon zu erahnen. Gibt es noch weitere xxxxx-HW?
Vielleicht kann mir jemand helfen. Ich baue erst einmal auf den ESP32 um. Wozu kann ich dann WIFI verwenden?
Viele Grüße
Wolfgang