Viktorianische Uhrenanzeige: 350 LEDs und eine Steuerplatine

In einem früheren Blog, „Nachbildung von viktorianischen 21-Segment-Anzeigen“, habe ich beschrieben, wie mein Heimwerkerkumpel (und Maker der Sonderklasse) Steve Manley und ich dabei sind, moderne Interpretationen von viktorianischen 21-Segment-Anzeigen zu schaffen. Im Gegensatz zu den kleinen Glühbirnen, die das ursprüngliche Display beleuchteten, verwenden wir dreifarbige WS2812B-LEDs, wie die 4684 von Adafruit Industries LLC.

Anstelle eines komplizierten elektromechanischen Schalters zur Steuerung aller Funktionen, der „damals“ Stand der Technik gewesen wäre, verwenden wir eine moderne Mikrocontroller-Einheit (MCU), die den viktorianischen Ingenieuren und Erfindern ein Rätsel gewesen wäre.

Sowohl Steve als auch ich erstellen 10-Zeichen-Anzeigen. Um Ihnen eine Vorstellung davon zu geben, wie so etwas aussieht, zeigt Abbildung 1 eine frühe Implementierung von Steves Display mit einer 3D-gedruckten Frontplatte, die mit messingfarbener Farbe besprüht wurde. In diesem Fall führt Steve ein einfaches Testmuster aus, um zu prüfen, ob alle seine LEDs funktionieren.

Abbildung 1: Frühe 10-Zeichen-Implementierung der modernen Interpretation der viktorianischen 21-Segment-Anzeigen. (Bildquelle: Steve Manley)

Sie werden feststellen, dass Steves Pseudo-Messing-Panel in zwei Hälften geteilt ist, weil sein 3D-Drucker nicht die volle Spannweite von 20 Zoll (in.) des Displays bewältigen konnte. Außerdem entschied sich Steve für 10 große „Löcher“ in seiner Frontplatte, die die Außenkanten seiner Figuren umgeben. Im Vergleich dazu wurde meine Frontplatte mit einem Laser aus einem einzigen Stück Acryl mit Messingoberfläche geschnitten (Abbildung 2).

Abbildung 2: Die wichtigsten Elemente der 10-Zeichen-Anzeige. Im Vordergrund ist die lasergeschnittene Acryl-Pseudomessingplatte zu sehen. Hinter dieser Platte befinden sich zehn 3D-gedruckte Schalen, jede 64 mm hoch, 50 mm breit und 10 mm dick. Oben befinden sich zehn LED-Platinen, die von der Rückseite aus gesehen zu fünf Unterbaugruppen mit je zwei Platinen zusammengefasst sind. (Bildquelle: Max Maxfield)

Jede der Leiterplatten ist 50 mm breit und 64 mm hoch. Diese Platinen sind in fünf Unterbaugruppen mit je zwei Platinen zusammengefasst. Außerdem gibt es zehn 3D-gedruckte Schalen, die die gleiche Größe wie die Platten haben und 10 mm dick sind. Bei meiner lasergeschnittenen Pseudo-Messingplatte konnte der Laser die 21 Segmente, die jedes Zeichen bilden, ausschneiden, wobei zwischen den Segmenten dünne 0,7 mm breite Streifen übrig blieben.

Steve und ich haben in der Vergangenheit an ähnlichen Projekten gearbeitet, meist in Form eines freundschaftlichen Wettbewerbs, wie z. B. an den schlauen Chronographen, die wir vor ein paar Jahren erstellt haben (siehe, Erstellen eines schlauen Chronographen mit Arduino). Die Sache ist die, dass wir uns zwar auf Grundregeln geeinigt haben, wie z. B. die Anzahl und die relative Position der LEDs, aber in Bezug auf Dinge wie MCUs, Echtzeituhren (RTCs) und dergleichen sind wir in der Regel eigene Wege gegangen. Das Problem bei diesem Ansatz ist, dass es für uns fast unmöglich geworden ist, Code gemeinsam zu nutzen und auszutauschen.

Außerdem müssen wir jedes Mal, wenn wir ein neues Projekt in Angriff nehmen, das Rad neu erfinden, was eine Verschwendung von Zeit und Mühe ist. Daher haben wir uns in diesem Fall entschlossen, eine einzige Steuerplatine zu entwickeln, die wir beide für die Ansteuerung unserer Bildschirme verwenden würden. Außerdem haben wir beschlossen, ein Board mit allem Schnickschnack zu entwickeln, das für zukünftige Projekte über Jahre hinweg geeignet ist.

Das Steuerboard unseres viktorianischen Displays

Nach langem Grübeln, Verhandeln und Kompromissen haben wir einen Entwurf gefunden, der alle unsere Anforderungen erfüllt. Vielleicht ist es am besten, wenn ich Ihnen die Platine zeige (Abbildung 3) und dann einen kurzen Spaziergang durch die verschiedenen Teile mache.

In der Mitte der linken Seite haben wir den Hauptprozessor, einen Teensy 3.6 in Form eines DEV-14058 von SparkFun Electronics. Er verfügt über einen 32-Bit-Arm-Cortex-M4F-Prozessor für 180 Megahertz (MHz) (er kann auf 240 MHz übertaktet werden) mit 1 Megabyte Flash, 256 Kilobyte SRAM und 4 Kilobyte EEPROM.

Abbildung 3: Die erste Version unserer Steuerplatine, beginnend mit der Teensy-3.6-Prozessorplatine DEV-14058, die auf einem Arm-Cortex-M4F-Kern basiert (links). (Bildquelle: Steve Manley)

Hinter dem Teensy auf der anderen Seite der Platine befinden sich zwei Potentiometer, mit denen man die Helligkeit des Displays oder die Geräuschempfindlichkeit einstellen kann. Auf der rechten Seite des Teensy befinden sich Steckleisten, die den Zugriff auf die unbelegten Ein-/Ausgangspins (I/O) der MCU ermöglichen.

Vor dem Teensy befindet sich eine CR2032-Knopfzelle, die für die Energieversorgung der Echtzeituhr (RTC) verwendet wird, wenn das System vom Netz getrennt wird. Vor der CR2032 auf der rechten Seite befinden sich Stiftleisten, an die weitere I2C-basierte Sensoren und Aktoren angeschlossen werden können. Vor der CR2032 auf der linken Seite befinden sich acht dreipolige Stiftleisten, die jeweils einen 0-Volt-Pin, einen 5-Volt-Pin und einen Datenpin enthalten. Jeder dieser Bausteine kann eine Kette von WS2812-LEDs ansteuern. Außerdem verfügt der Teensy über eine zugehörige Octo-LED-Bibliothek, die acht Ketten gleichzeitig steuern kann.

Bei unseren 21-Segment-Anzeigen haben die sieben kürzeren Segmente jeweils eine LED, während die vierzehn längeren Segmente jeweils zwei LEDs haben, was 35 LEDs pro Zeichen ergibt, also insgesamt 350 LEDs für die 10-Zeichen-Anzeige. Jede LED benötigt 24 Datenbits, und der zum Laden der LEDs verwendete Taktgeber läuft mit 800 Kilohertz (kHz). Das bedeutet, dass das Laden der Kette ((35 x 10) x 24)/800.000 = 10,5 Millisekunden (ms) dauern würde, wenn wir alle LEDs über einen einzigen MCU-Pin ansteuern würden.

Im Vergleich dazu können wir mit der Octo-Bibliothek des Teensy und durch Aufteilung unserer 10 Zeichen in fünf Paare von zwei Zeichen diese Zeit auf nur ((35 x 2) x 24)/800.000 = 2,1 ms reduzieren. Noch besser ist, dass die Octo-Bibliothek die DMA-Engine (Direct Memory Access) des Teensy nutzen kann, um diesen Upload im Hintergrund auszuführen und so den Hauptprozessor für andere Aufgaben freizugeben, z. B. für die Berechnung unserer erstaunlich raffinierten Lichteffekte.

Die fünf Drucktasten in der Mitte der Platine dienen dem Zugriff auf Menüs, der Auswahl von Modi und Effekten sowie der Eingabe von Werten (z. B. Datum und Uhrzeit). Es ist auch möglich, fünf panelmontierte Schalter mit Hilfe der grünen Schraubklemmen, die an den Rändern der Platine angebracht sind, parallel anzuschließen. Wir haben uns auch für eine Infrarotsteuerung (IR) entschieden, mit der dieselben Aufgaben wie mit den Drucktasten ausgeführt werden können. Der IR-Detektor befindet sich unterhalb der mittleren Taste. Über dieser Taste befindet sich ein lichtabhängiger Widerstand (LDR), mit dem die Helligkeit des Displays in Abhängigkeit vom Umgebungslicht gesteuert werden kann. Über dem LDR befindet sich ein Elektret-Mikrofon, mit dem wir das Display dazu bringen können, auf Töne zu reagieren. Alle diese Komponenten können von der Platine abgenommen, auf dem Panel montiert und über die grünen Schraubklemmen mit der Platine verbunden werden.

Auf der rechten Seite der Platine sehen wir einen 102010328 Seeeduino XIAO von Seeed Technology. Obwohl er nur so groß wie eine Briefmarke ist, hat der XIAO mit seinem 32-Bit-Arm-Cortex-M0+-Prozessorkern ATSAMD21G18, der mit 48 MHz läuft, mit 256 KByte Flash-Speicher und 64 KByte SRAM eine Menge Power. Der XIAO wird verwendet, um alle IR-Steuersignale zu verarbeiten und an den Teensy weiterzuleiten. Obwohl dies als Overkill angesehen werden könnte (da wir den Teensy mit Sicherheit auch für die direkte IR-Steuerung verwenden könnten), haben wir beschlossen, dass ein „Teile-und-herrsche“-Ansatz unser Leben auf lange Sicht sehr viel einfacher machen würde.

Alle oberflächenmontierten Bauteile (SMDs) befinden sich unter der Platine. Dazu gehören eine DS3231SN#-RTC von Maxim Integrated, ein energieeffizienter Stereo-Audio-Codec SGTL5000XNAA3R2 von NXP, ein Schalter-Entprell-Chip LS119-S von LogiSwitch und ein Octal-Bus-Transceiver 74HCT245 der Toshiba Electronic Devices and Storage Corp, der als Spannungspegelwandler fungiert.

Die rote Steuerplatine ist in Abbildung 4 auf der Rückseite meines Displays zu sehen. Ebenfalls abgebildet ist eine grüne Stromverteilungsplatine, die einen robusten 3,3-Volt-Regler enthält, der bei Bedarf zur Ansteuerung zusätzlicher 3,3-Volt-Sensoren verwendet werden kann.

Abbildung 4: Zusammenbau einer 10-Zeichen-Anzeige. Die rote Steuerplatine ist auf der rechten Seite des Bildes zu sehen. Die grüne Platine auf der linken Seite wird für die Stromverteilung zu den Platinen und Displays verwendet. (Bildquelle: Max Maxfield)

Rechts vom Display, hier nicht abgebildet, befindet sich ein blaues Prototyping-Board. All dies bedeutet, dass wir rote, grüne und blaue (RGB) Boards haben, was „unseren Sinn für Humor kitzelte“. Im Idealfall wäre die Stromverteilungsplatine rot und die Steuerplatine grün gewesen, aber aus unbekannten Gründen hätte uns die Platinenfabrik einen erheblichen Preisaufschlag für das dickere Kupfer auferlegt, das für die Stromverteilung auf einem roten Substrat erforderlich ist.

Programmierung der Steuerplatine

Im nächsten Schritt beginnt der eigentliche Spaß, denn wir müssen den Code für die Ansteuerung des Displays schreiben. Ein Ansatz, den wir verwenden wollen, ist das Konzept einer Hintergrundfarbe, einer Vordergrundfarbe und einer Maske. Wenn ein Maskenbit auf 0 gesetzt ist, zeigt das entsprechende Segment die Hintergrundfarbe an; wenn das gleiche Maskenbit auf 1 gesetzt ist, zeigt das Segment die Vordergrundfarbe an. Interessant ist dabei, dass sowohl die Vordergrund- als auch die Hintergrundfarbe statische Farben wie Schwarz, Weiß oder eine andere Farbe sein können. Alternativ können sowohl die Vordergrund- als auch die Hintergrundfarbe dynamisch sein, z. B. in Form von Regenbogenstreifen, die sich über das Display ziehen.

Fazit

Es gibt noch viele andere Experimente, die wir mit diesen neu geprägten viktorianischen Uhrenanzeigen durchführen wollen. Mit dem Mikrofon und dem Audiocodec-Chip könnten wir zum Beispiel einen audio-reaktiven Modus implementieren (siehe auch Audio-reaktives Artefakt mit Arduino Teil 1 und Teil 2). Eine weitere Sache, die ich gerne ausprobieren würde, ist die Möglichkeit, Lauftext über das Display „gleiten“ zu lassen, indem ich es nach links oder rechts neige (siehe auch Hinzufügen von Bewegungs- und Orientierungssensorik zu Hobbyprojekten).

Abschließend denke ich immer wieder an George Lafayette Mason, der das Patent für die ursprünglichen 21-Segment-Displays im Jahr 1898 anmeldete, also vor 123 Jahren, während ich diese Zeilen schreibe. Ich frage mich, was George denken würde, wenn er sehen könnte, was wir mit seiner Idee und den heutigen Technologien machen.

Über den Autor

Image of Max Maxfield

Clive „Max“ Maxfield erhielt 1980 seinen BSc in Regelungstechnik von der Sheffield Hallam University, England, und begann seine Karriere als Entwickler von Zentraleinheiten (CPUs) für Großrechner. Im Laufe der Jahre hat Max alles von Siliziumchips bis hin zu Leiterplatten und von Gehirnwellenverstärkern bis hin zu Steampunk-Prognosemaschinen (bitte nicht fragen) entwickelt. Darüber hinaus ist er seit mehr als 30 Jahren an der Spitze der Electronic Design Automation (EDA) tätig.

Max ist Autor und/oder Co-Autor einer Reihe von Büchern, darunter „Designus Maximus Unleashed“ (in Alabama verboten), „Bebop to the Boolean Boogie“ (Ein unkonventioneller Leitfaden zur Elektronik), „EDA: Where Electronics Begins“, „FPGAs: Instant Access“ und „How Computers Do Math“. Werfen Sie auch einen Blick auf seinen Blog „Max's Cool Beans“.

More posts by Clive „Max“ Maxfield
 TechForum

Have questions or comments? Continue the conversation on TechForum, Digi-Key's online community and technical resource.

Visit TechForum