Digispark mit LCD-Anzeige

Viele denken, dass die Verwendung einer LCD-Anzeige an einem Mikrocontroller schwierig ist. Deshalb möchten wir Ihnen an einem einfachen Beispiel zeigen, wie Sie ganz einfach eine solche Anzeige in Ihr Digispark Projekt einbinden können.


Als Hardware benötigen Sie zusätzlich zu einem Digispark nur noch den LCD-Erweiterungssatz. Die Kommunikation zwischen dem Digispark und dem Display erfolgt per I2C Protokoll. Zum Glück müssen wir uns auch darüber eigentlich keine großen Sorgen machen, da es für die Ansteuerung in der für den Digispark angepassten Arduino Entwicklungsumgebung bereits fertige Bibliotheken gibt, die wir einfach wiederverwenden können.

Der nachfolgende Programmcode implementiert einen einfachen Sekunden-Zähler, der die verstrichene Zeit seit dem letzten Anschalten des Digispark kontinuierlich auf einem LCD-Display ausgibt.

// --------------------------------
// Benötigte Bibliotheken einbinden
// --------------------------------
#include <TinyWireM.h>                  // I2C
#include <LiquidCrystal_I2C.h>          // LCD

// ---------------------
// Konstanten definieren
// ---------------------
#define GPIO_ADDR     0x27              // I2C-Adresse für LCD-Controller

// -------------------------
// globale Variablen anlegen
// -------------------------
LiquidCrystal_I2C lcd(GPIO_ADDR,16,2);  // Objekt-Instanz für LCD-Steuerung
long Sekunden = 0;                      // Zähl-Variable für verstrichenen Zeit

// --------------------------------------------------------
// Setup-Routine (wird automatisch beim Starten ausgeführt)
// --------------------------------------------------------
void setup(){
  // I2C Schnittstelle initialisieren
  TinyWireM.begin();                    
 
  // LCD-Display initialisieren
  lcd.init();                           
 
  // Hintergrundbeleuchtung anschalten
  lcd.backlight();                    

  // fixen Text ausgeben
  lcd.print("Sekunden:");         
}

// ------------------------------------------------------------
// Haupt-Routine (wird kontinuierlich als Schleife durchlaufen)
// ------------------------------------------------------------
void loop(){
  // Sekundenzähler inkrementieren
  ++Sekunden;            

  // Cursor in LCD-Display positionieren (Zeichen 11, Zeile 1)
  lcd.setCursor(10,0);
 
  // ggf. führende Leerzeichen ausgeben, damit Sekunden
  // rechtsbündig dargestellt werden
  if (Sekunden < 10){ lcd.print(" ");}
  if (Sekunden < 100){ lcd.print(" ");}
  if (Sekunden < 1000){ lcd.print(" ");}
  if (Sekunden < 10000){ lcd.print(" ");}
  if (Sekunden < 100000){ lcd.print(" ");}
 
  // Sekunden ausgeben
  lcd.print(Sekunden);
 
  // eine Sekunde warten
  delay(1000);  
}

Das LCD-Display "merkt" sich den jeweils auszugebenden Text. Um eine neue Information auszugeben, muss die virtuelle Eingabe-Marke mit der setCursor()-Funktion erst an die entsprechende Stelle positioniert werden. Bitte beachten Sie dabei, dass diese Funktion bei 0 beginnt zu zählen. Die Anweisung lcd.setCursor(10,0); stellt die Textmarke deshalb auf das 11 Zeichen in der ersten Zeile.

Neben der setCursor() Methode sind in der LCD-Bibliothek auch noch andere Funktionen definiert:

begin(uint8_t cols, uint8_t rows, uint8_t charsize = LCD5x8DOTS)

Konfiguriert die LCD Anzeige anhand der angegebenen Parameter.
cols: Anzahl der Spalten des Displays

rows: Anzahl der Zeilen des Displays

charsize: Größe eines einzelnen Zeichens
clear() Löscht die Anzeige
home() stellt den Cursor in die linke obere Ecke
noDisplay() schaltet das Display ab
display() schaltet das Display an
noBlink() schaltet das Blinken des Cursors ab
blink() schaltet das Blinken des Cursors an
noCursor() blended den Cursor aus
cursor() blended den Cursor ein
scrollDisplayLeft() scrollt die Anzeige nach links, ohne dass der Inhalt des Displays erneut gesendet werden muss
scrollDisplayRight() scrollt die Anzeige nach rechts, ohne dass der Inhalt des Displays erneut gesendet werden muss
leftToRight() stellt den Textfluss ein auf von links nach rechts
rightToLeft() stellt den Textfluss ein auf von rechts nach links
noBacklight() schaltet die Hintergrundbeleuchtung aus
backlight() schaltet die Hintergrundbeleuchtung ein
autoscroll()  
noAutoscroll()  
createChar(uint8_t, uint8t[]) erstellt ein benutzerdefiniertes Zeichen
setCursor(uint8_t col, uint8_t row)

setzt den Cursor an eine beliebige Stelle

col: Spaltennummer (beginnend bei 0)

row: Zeilennummer (beginnend bei 0)

init(); initialisiert das LCD Display

Darüber hinaus erbt die LCD-Klasse alle Eigenschaften und Methoden der Print-Klasse.


Hinweis:
Bitte beachten Sie, dass die im Beispiel verwendete Delay()-Funktion ggf. etwas ungenau arbeitet. Für ein korrekte Zeitanzeige wie in Uhren, Weckern oder ähnlichem sollte für die Zeitermittlung besser der Real-Time-Clock-Erweiterungssatz verwendet werden.