7-Segmentanzeige mit HT16K33 LED-Treiber

Die 4-stellige (No-Name) 7-Segmentanzeige, die z.B. bei Ebay oder Amazon bezogen werden kann, wird von einem - auf der Rückseite des Breakout Boards befindlichen - HT16K33 LED-Treiber gesteuert und kann nur über die I2C-Schnittstelle angesprochen werden.

 

Bild: 4-stellige 7-Segmentanzeige mit HT16K33 LED-Treiber

Im Vergleich zur vorgestellten Sparkfun-Anzeige wird zur Ansteuerung mehr Speicherplatz (Flashspeicher und SRAM) benötigt, da die Konvertierung der darzustellenden Zeichen in den 7-Segment-Code im Sketch bzw. in der Library erfolgen muss. Bei der Sparkfun-Anzeige erfolgt diese durch den in der Anzeige integrierten Atmega328-Prozessor. Der geringere Speicherbedarf kann bei Verwendung der Anzeige mit einem Attiny45/85 schon maßgeblich sein, sich für die Sparkfun-Anzeige zu entscheiden. Allerdings ist HT16K33-Anzeige mit ca. € 3,- bis € 5,- wesentlich günstiger zu erwerben.

Testaufbau:

Verwendete Bauteile und Komponenten:

  • 1 Arduino Uno oder Nano
  • 1 4-stellige 7-Segmentanzeige mit HT16K33 LED-Treiber


Anschlüsse der 7-Segmentanzeige:

  • VCC (4,5 V - 5,5 V)
  • GND
  • SDA
  • SCL


      

Library MyHT16K33_7Seg für Arduino und Attiny45/85

Sowohl für Arduino als auch für Attiny habe ich für diese Anzeige eine Library mit den nachfolgenden Funktionen geschrieben. Ziel war auch, dass möglichst viele Funktionen identisch mit denen der Sparkfun-Anzeige sind, so dass ein Wechsel zwischen den Anzeigen leicht möglich ist.


Funktionen, die größtenteils identisch mit den Funktionen der Sparkfun-Anzeige sind:

  • Initialisieren des HT16K33 LED-Treibers  1)
  • Abfrage, ob die Anzeige über I2C ansprechbar ist
  • Ändern des Helligkeitswertes der Anzeige in 16 Stufen (gegenüber 256 Stufen bei der Sparkfun-Anzeige)
  • Dunkelsetzen der gesamten Anzeige
  • Abfrage ob Anzeige dunkel gesetzt ist
  • Segmenttest, alle Segmente leuchten 1 Sekunde
  • Anzeigen eines gerundeten Fließkommawertes (angezeigt werden immer 4 Digits) mit Overflowanzeige "oFL" bei Bereichsüber- oder -unterschreitung
  • Beliebige Anzeige von Ziffern und Komma
  • Anzeigen eines Festkommawertes, mit Angabe der Anzahl der Kommastellen und mit oder ohne Vornullenunterdrückung. Rundung muss im aufrufenden Programm erfolgen. Overflowanzeige "oFL" bei Bereichsüber- oder -unterschreitung
  • Anzeigen von zwei zu übergebenden Zahlen im Uhrzeitformat (entweder Stunde:Minute oder Minute:Sekunde)
  • Ausgabe von 4 einzelnen Zeichen (Buchstaben, soweit darstellbar und Ziffern)
  • Ausgabe eines Textstrings (max. 4 Buchstaben, soweit darstellbar und Ziffern)


1)  Die Initialisierung ist unbedingt erforderlich und wurde aus Kompatibilitätsgründen auch bei der Library für die Sparkfun-Anzeige (hier aber ohne Funktion) realisiert. Somit ist, wenn die beiden nachfolgenden zusätzlichen Funktionen nicht benutzt werden, ein einfacher Austausch der Anzeigen möglich.


Zusätzliche Funktionen:

  • Ändern des Anzeigemodus (Anzeige Ein, Aus oder Blinken mit 0,5 Hz, 1 Hz oder 2 Hz)
  • Setzen der Anzeige in den Standby-Modus (der Stromverbrauch der Anzeige wird dabei auf bis zu 1 µA reduziert)


I2C-Adresse:

Die I2C-Adresse ist standardmäßig 0x70 und kann über Lötbrücken auf 0x71 bis 0x77 eingestellt werden.


Die Library kann hier heruntergeladen werden:

Sollte die Library jemand verwenden oder testen, würde ich mich über eine Rückmeldung sehr freuen!

Version 1.3 für Arduino und Attiny45/85

MyHT16K33_7Seg.cpp.txt

MyHT16K33_7Seg.h.txt

keywords.txt

Leider kann ich hier keine "cpp"- oder "h"-Files hochladen, daher zum Verwenden der Library ".txt" aus den Dateinamen entfernen und in einem neuen Verzeichnis mit dem Namen "MyHT16K33_7Seg" dort speichern, wo eure anderen Libraries gespeichert sind.


Zur Auflistung der Funktionen der Library geht es hier: Funktionen


Programmbeispiel MyHT16K33_7Seg:

Das Programmbeispiel gibt Zahlen und Zeichen am LED-Display aus und entspricht dem Programmbeispiel bei der Sparkfun-Anzeige. Nur die init()-Funktion der MyHT16k33_7Seg-Library ist zusätzlich erforderlich.

//Testprogramm für 7-Segmentanzeige mit HT16K33 LED-Treiber
//Code fuer Arduino und Attiny45/85
//Author Retian
//Version 1.0


#include <MyHT16K33_7Seg.h>
MyHT16K33_7Seg My7S(0x70);


void setup()
{
  My7S.init();
  My7S.sendBlank(); //Dunkelsetzen der Anzeige
  delay(1000);
  My7S.sendString("HALO");
  delay(3000);
}


void loop()
{
  //Ausgabe eines Float-Wertes
  float FloatWert = 43.45;
  My7S.sendFloatVal(FloatWert); //Ausgabe der Float-Zahl "FloatWert"
  delay(2000);

  //Ausgabe eines Festkomma-Wertes
  int IntWert = 9836;
  byte dezStellen = 1; //Ausgabe mit einer Dezimalstelle
  bool blankZero = true; //Vornullen unterdrücken
  My7S.sendFixedVal(IntWert, dezStellen, blankZero);
  delay(2000);

  //Ausgabe von Zeichen (Zahlen + Buchstaben)
  My7S.sendChar('A','b','2','9');
  delay(2000);

  //Ausgabe eines Textstrings (Zahlen + Buchstaben)
  char text[5];
  strcpy(text, "1AnE"); //
  My7S.sendString(text);
  delay(2000);
}