14 Segment Display Ansteuerung

By | 9. Mai 2020

Wem die üblichen 7-Segment-Anzeigen zu wenige Möglichkeiten haben alphanumerische Zeichen darzustellen, der kann die neuen 14-Segment-Anzeigen für die eigenen Projekte verwenden. Bei einer 14 Segment-Anzeige hat man den gleichen Aufbau wie bei einer 7-Segment-Anzeige nur mit dem Unterschied, dass man 7 zusätzliche Licht-Segmente ansteuern kann. Damit ergeben sich natürlich mehr Darstellungsmöglichkeiten. Insbesondere, wenn man mehrere solcher Displays neben einander anbringt, wie in meinem Versuchsaufbau, bei dem zwei parallel angeordnete vierfach Display-Module angesteuert werden.

Das 14-Segment LED Display mit I2C Backpack von der Firma Adafruit verwendet einen Treiber Chip, der die Schwerarbeit beim Ansteuern komplett übernimmt. Durch die doppelte Anzahl an LED Segmenten lassen sich wesentlich mehr Zeichen darstellen, als mit den klassischen 7-Segment Anzeigen.

Um mehrere solcher Module aneinander reihen zu können, kann man die I2C Adresse auf der Platine über die herausgeführten Adressleitungen A0-A2 konfigurieren. Die erfolgt über entsprechende Löt- punkte an der jeweiligen Stelle. Die neue I2C Adresse ergibt sich als Summe aus der Basis-Adresse 0x70 und den Bit-Werten: Adresse = 0x70 + A2 + A1 + A0. Ist beispielsweise ein Lötpunkt auf A0 angebracht worden,  entsprecht das einem High-Pegel und somit dem binären Wert 1. Damit ergäbe sich die neue I2C-Adresse durch die einfache Rechnung: 0x70 + A2=0 + A1=0 + A0=1 =>0x71 . In meinem Versuchsaufbau habe ich zwei 4-stellige Display Module aneinander gereiht, und über das oben beschriebene Verfahren die Adressen I2C auf 0x70 und 0x71 definiert, um eine größere Anzeige-Möglichkeit zu erhalten.

Die Programmierung erfolgt über eine Bibliothek, die es erlaubt, verschiedene Anzeige-Objekte zu erzeugen. Das so erzeugte Objekt muss anschliessend initialisiert und die I2C Bus-Adresse angegeben werden, damit es über die das Displaymodule angesprochen werden kann. Es ist möglich, jedes einzelne Segment eines Displays anzusteuern. Dazu ist folgender Befehl vorhanden: Disp1.writeDigitRaw(0, 0x3FFF); Mit diesem Code werden beispielsweise alle Segmente angeschaltet. Die Segmente werden analog zu den Segmenten eines 7-Segment-Displays angesprochen, nur dass dazu nun 16bit erforderlich ist.

Die Programmierung erfolgt über eine Bibliothek, die es erlaubt verschiedene Anzeigeobjekte zu erzeugen. Das so erzeugte Objekt muss anschliessend initialisiert und die I2C Bus-Adresse angegeben werden, damit es über die das Displaymodule angesprochen werden kann.

Um ein bestimmtes Segment anzusprechen stellt die Bibliothek folgende Funktion bereit:

Die Anordnung der Segmente geht aus nachfolgender Graphik hervor.

Es sind aber auch Routinen implementiert, die es erlauben, jedes einzelne Segment eines Displays anzusteuern. Dazu ist folgender Befehl vorhanden: Disp1.writeDigitRaw(0, 0x3FFF); Mit diesem Code werden beispielsweise alle Segmente angeschaltet. Die Segmente werden analog zu den Segmenten eines 7-Segment-Displays angesprochen, nur dass dazu nun 16bit erforderlich ist.

Ich habe mir dazu eine kleine Excel-Tabelle erstellt, die mir die Berechnung der Hex-Adressen erleichtert. Die Funktion ist sehr einfach: Ich habe eine Tabelle erstellt, in die ich für jedes Segment einen Wert “0” oder “1” eintragen kann. Da es sich wie gesagt um 16 Bit breite Informationen handelt, wurden die Werte in je 4 Bit-Gruppen eingeteilt, die dann zusammengefasst und in einen Hexadezimalen Wert umgerechnet wurden.

Aus den Hex-Werten wurde dann in Spalte Z der benötigte  Ansteuercode zusammen gesetzt. Was einem die Umrechnung der Binar-Werte in Hex-Code automatisch erledigt. Allerdings ist es auch eine schöne Übung, die manche etwas erfahreneren “Maker” an die Anfangszeit der Computer-Programmierung mit Einplatinen Rechner erinnern wird. Hierzu wurden nur die von  Excel standardmässig angebotenen Funktionen verwendet. In der oben gezeigten Darstellung ist das Prinzip noch einmal schematisch dargestellt und müsste somit für die eigenen Zwecke leicht adaptiert werden können.

Um das Ganze in der Praxis auch ausprobieren zu können, hier ein einfaches Beispiel wie damit gearbeitet werden kann.

Um einzelne Segmente anzusteuern, benötigt man wie bereits erwähnt den entsprechenden Steuercode in Form eines hexadezimalen Wertes (siehe Exel-Tabelle). Ist dieser ermittelt würde eine Ansteuerung der oberen und unteren Segmente als  Programm dann so aussehen:

Mit folgendem Resultat:

Darüber hinaus sind Routinen implementiert, die es erlauben, einzelne Buchstaben an ein Segment zu übertragen. Dazu ist folgender Befehl Disp1.writeDigitAscii(Digit, ‘ char’); vorhanden. Nachfolgendes Programm schreibt so unter anderem  das Wort “Peter 99” auf das Display 1 und Display2:

Damit wird das Ausgeben von Text-Nachrichten natürlich sehr vereinfacht und kann ohne komplizierte Daten-Manipulationen durchgeführt werden. Ich bevorzuge in vielen Fällen die Ausgabe von Nachrichten über eine solche Anzeige, da sie wesentlich unempfindlicher ist als ein LCD Display oder ein Touch-Screen.