README.md 20 KB

LCD-Shield

📜 Inhaltsverzeichnis

  1. Das LCD-Shield
  2. LCD-Shield Bibliothek
  3. Literaturverzeichnis

Hinweis: Wenn Sie dieses Repository downloaden möchten, können Sie es direkt als ZIP-Datei herunterladen, oder mit Hilfe des Git-Repository-Links auf Ihren Rechner klonen.

☁ Git-Repository-Link: https://gogs.es-lab.de/HS-Anhalt/LCD-Shield


📟 1. Das LCD-Shield

In diesem Repository finden Sie alle Informationen zum LCD-Shield (Liquid Crystal Display), welches Sie im Modul "Elektronikdesign" entwickeln. Des Weiteren finden Sie hier eine Bibliothek zum Einbinden in die Arduino IDE (Integrated Development Environment), um das LC-Display in Betrieb zu nehmen. Die LCD-Shield Bibliothek kann ab der Version 5 verwendet werden. In den folgenden Abschnitten werden die Funktionen, der Stromlaufplan und die Versionsunterschiede des LCD-Shields erklärt.

Funktionen

Das LCD-Shield besitzt, neben dem LC-Display, Tasten und LEDs (Light Emitting Diode), mit denen folgende Funktionen abgebildet werden können:

  • Über ein vier mal zehn Zeichen Display können Textnachrichten dargestellt werden.
  • Zur Displaynavigation oder zur Realisierung sonstiger Funktionen steht ein Tastenkreuz mit vier Tastern zur Verfügung.
  • Mithilfe zweier LEDs (rot und grün) können individuelle Signale dargestellt werden.
  • Die Displayhintergrundbeleuchtung lässt sich über Software, mithilfe der bereitgestellten Bibliothek, separat ein- und ausschalten.

Stromlaufplan

Die folgende Abbildung zeigt den Stromlaufplan in der aktuellen Version.

Das LC-Display A1 mit der Bezeichnung LCD_EA_DOGS104 besitzt vier Zeilen und kann pro Zeile zehn Zeichen darstellen. Über den Transistor Q1 kann die Displayhintergrundbeleuchtung ein- und ausgeschaltet werden. Der IC (Integrated Circuit) U1 mit der Bezeichnung TXS0102 ist ein bidirektionaler Pegelwandler für den I²C Bus (Inter-Integrated Circuit). Dieser wird benötigt, da der Arduino mit 5 V arbeitet, aber das LC-Display nur mit maximal 3,3 V angesteuert werden kann. Vier Taster S1 bis S4 sind über Pull-Down Widerstände mit dem Arduino verbunden. Die Taster und die LEDs können individuell programmiert werden.

Hinweis: Sollten Sie Fragen zum Stromlaufplan haben, wenden Sie sich bitte an Herrn Prütting.

Versionsunterschiede

In der folgenden Tabelle werden die Versionsunterschiede des LCD-Shields ab Version 5 dargestellt. Dabei werden die Arduino Pins mit den verbundenen Bauelementen verglichen.

Pin Version 5 Version 6
IO4 S3 -
IO5 S4 S3
IO6 D1 S4
IO7 D2 D1
IO8 Q1 D2
IO9 - Q1

Bei der Nutzung der LCD-Shield Bibliothek muss entsprechend darauf geachtet werden, welche Shield-Version verwendet wird.

🗃 2. LCD-Shield Bibliothek

In den folgenden Abschnitten wird die LCD-Shield Bibliothek erklärt. Dabei wird auf die Installation, die Verwendung von Beispielprogrammen und die Nutzung der Klasse HSA_LCD_Shield eingeganen.

Sollten zusätzlich Fragen zur Verwendung der LCD-Shield Bibliothek auftauchen, wenden Sie sich bite an Herrn Müller.

Installation

Damit Sie diese Bibliothek in Ihrem Arduino-Sketch verwenden können, laden Sie als Erstes dieses Repository als ZIP-Datei herunter.

Im Anschluss wechseln Sie zur Arduino IDE und klicken in der Menüleiste auf Sketch, Bibliothek einbinden, .ZIP-Bibliothek hinzufügen….

Es öffnet sich der Dateimanager, wo Sie die heruntergeladene Datei auswählen und öffnen.

Nun Steht ihnen unter Sketch, Bibliothek einbinden die HS-Anhalt LCD-Shield Bibliothek zur Verfügung und kann in Ihrem Programm eingebunden werden.

Bespielprogramme

Die Bibliothek beinhaltet Beispielprogramme zum Testen der Funktionalität des LCD-Shields. Des Weiteren dienen die Beispielprogramme zum besseren Verständnis der Klasse HSA_LCD_Shield.

Die Beispielprogramme finden Sie unter Datei, Beispiele, HS-Anhalt LCD-Shield. Entsprechend Ihrer Version des LCD-Shields können Sie das passende Beispielprogramm auswählen.

Kontrollieren Sie unter Werkzeuge die Einstellungen: Board und Port.

Im Anschluss können Sie das Beispielprogramm auf Ihrem Arduino hochladen. Befolgen Sie die Anweisungen auf dem Display, um die LCD-Shield Funktionen zu testen.

Verwenden der Klasse

In den folgenden Abschnitten werden Symbole, Objekte und Methoden der Klasse HSA_LCD_Shield erklärt, damit diese im eigenen Programm verwendet werden können. Da die Attribute der Klasse geschützt sind und folglich nicht vom Anwender verändert werden können, werden diese hier nicht weiter aufgeführt oder erläutert.

Symbole

Symbole der Klasse HSA_LCD_Shield werden hauptsächlich zur besseren Lesbarkeit des Quellcodes und zur Parameterübergabe für Objekte und Methoden verwendet. In diesem Abschnitt werden alle wichtigen Symbole und deren Werte aufgelistet.

  • Standard LC-Display I²C-Adresse

    I2C_ADDRESS        0x3C
    
  • LCD-Shield Versionen

    LCD_VERSION_5        0x05
    LCD_VERSION_6        0x06
    
  • LCD-Shield Konfigurationen

    CONFIG_L1B1        "L1B1"        // Config: LEDs = On, Buttons = On
    CONFIG_L0B1        "L0B1"        // Config: LEDs = Off, Buttons = On
    CONFIG_L1B0        "L1B0"        // Config: LEDs = On, Buttons = Off
    CONFIG_L0B0        "L0B0"        // Config: LEDs = Off, Buttons = Off
    
  • Taster

    BUTTON_UP        0x01
    BUTTON_RIGHT     0x02
    BUTTON_DOWN      0x03
    BUTTON_LEFT      0x04
    
  • LEDs

    LED_RED        0x05
    LED_GREEN      0x06
    

Objekte

Damit Methoden einer Klasse verwendet werden können, muss zunächst ein Objekt der Klasse HSA_LCD_Shield erstellt werden. Dafür wird der sogenannte Konstruktor einer Klasse aufgerufen. Soll ein Objekt der Klasse wieder entfernt werden, wird der Destruktor aufgerufen. Mit Erstellung eines Objektes werden anhand der übergebenen Parameter Attribute gesetzt, die das Verwenden bestimmter Methoden ermöglicht. Es wird empfohlen Objekte global zu erstellen.

  • Konstruktor:

    Definition:

    • Standard:

      HSA_LCD_Shield <objekt>(byte <version>, const char <config>[5]);
      
    • Vererbung:

      HSA_LCD_Shield <Objekt> = HSA_LCD_Shield(byte <version>, const char <config>[5]);
      

    Beschreibung:

    Erstellt ein <Objekt> der Klasse HSA_LCD_Shield.

    Parameter:

    • <version> (optional): Angabe der LCD-Shield Versionsnummer mit LCD_VERSION_5 oder LCD_VERSION_6. Wird kein Parameter übergeben, wird automatisch die höchste Versionsnummer ausgewählt (Standard).
    • <config> (optional): Angabe der LED- und Tasterkonfigurationen mit CONFIG_L1B1, CONFIG_L0B1, CONFIG_L1B0 und CONFIG_L0B0. Hinweise zu den Konfigurationsmöglichkeiten finden Sie unter Symbole. Entsprechend der Konfigutaion werden GPIOs initialisiert. Wird kein Parameter übergeben, werden automatich die Taster und LEDs initialisiert (Standard).

    Beispiel:

    • Beispiel 1:

      // Erstelle Objekt der Klasse mit Standardeinstellungen.
      HSA_LCD_Shield Display();
      
    • Beispiel 2:

      // Erstelle Objekt der Klasse für LCD-Shield Version 5 und Standardeinstellungen
      // für LEDs und Taster.
      HSA_LCD_Shield Display(LCD_VERSION_5);
      
    • Beispiel 3:

      // Erstelle Objekt der Klasse ohne Initialisierung der Taster und LEDs
      // und mit Standardeinstellungen für die LCD-Shield Version.
      HSA_LCD_Shield Display(CONFIG_L0B0);
      
    • Beispiel 4:

      // Erstelle Objekt der Klasse für LCD-Shield Version 5, ohne Initialisierung der
      // LEDs aber mit Initialisierung der Taster.
      HSA_LCD_Shield Display(LCD_VERSION_5, CONFIG_L0B1);
      
    • Beispiel 5:

      // Erstelle Objekt der Klasse durch Vererbung mit Standardeinstellungen.
      HSA_LCD_Shield Display = HSA_LCD_Shield();
      

  • Destruktor:

    Definition:

    ~<Objekt>(void);
    

    Beschreibung:

    Entfernt ein <Objekt> der Klasse HSA_LCD_Shield.

    Beispiel:

    // Erstelle Objekt der Klasse mit Standardeinstellungen.
    HSA_LCD_Shield Display();
    
    // Führe andere Anweisungen aus!!
    // ...
    
    // Entferne Objekt der Klasse wieder.
    ~Display();
    

Methoden

Methoden sind vom Prinzip her Funktionen einer Klasse. Der Klasse HSA_LCD_Shield stehen die Methoden:

zur Verfügung.

  • begin:

    Definition:

    bool HSA_LCD_Shield.begin(byte <address>); 
    

    Beschreibung:

    Diese Methode wird als erstes nach der Objekterstellung aufgerufen, um das LC-Display über I²C zu parametrieren und um, je nach Konfiguration, die GPIOs für LEDs und Taster zu initialisieren. Es wird empfohlen, diese Methode unter der Funktion void setup(void) aufzurufen.

    Parameter:

    <address> (optional): Mithilfe dieses Prarameters kann die standard I²C-Adresse des LC-Displays geändert werden. Wird kein Parameter der Methode übergeben, wird I2C_ADDRESS zur Adressierung des LC-Displays verwendet.

    Rückgabewert

    • false: Es ist ein Fehler bei der Konfiguration aufgetreten. Überprüfen Sie die übergebenen Parameter bei der Objekterstellung.
    • true: Die Konfiguration war erfolgreich.

    Beispiel:

    // Erstelle Objekt der Klasse mit Standardeinstellungen.
    HSA_LCD_Shield Display();
    
    void setup(void) {
        // Initialisiere serielle Kommunikation mit einer Baudrate von 9600
        Serial.begin(9600);
    
        // Initialisiere LEDs/Taster und LC-Display mit der standard I²C-Adresse
        if(Display.begin()) Serial.println("Konfiguration erfolgreich!");
        else Serial.println("Konfiguration nicht erfolgreich!");
    }
    
    

  • returnVersion:

    Definition:

    bool HSA_LCD_Shield.returnVersion(byte <address>);
    

    Beschreibung:

    Parameter:

    Rückgabewert

    Beispiel:

    
    

  • returnConfig:

    Definition:

    bool HSA_LCD_Shield.returnConfig(byte <address>);
    

    Beschreibung:

    Parameter:

    Rückgabewert

    Beispiel:

    
    

  • returnAddress:

    Definition:

    bool HSA_LCD_Shield.returnAddress(byte <address>);
    

    Beschreibung:

    Parameter:

    Rückgabewert

    Beispiel:

    
    

  • lcdBacklight:

    Definition:

    void HSA_LCD_Shield.lcdBacklight(bool <state>);
    

    Beschreibung:

    Mit dieser Methode lässt sich die LCD-Hintergrundbeleuchtung ein- oder ausschalten.

    Parameter:

    <state>:

    • HIGH oder true: schaltet die LCD-Hintergrundbeleuchtung ein
    • LOW oder false: schaltet die LCD-Hintergrundbeleuchtung aus

    Beispiel:

    // Erstelle Objekt der Klasse mit Standardeinstellungen.
    HSA_LCD_Shield Display();
    
    void setup(void) {
        // Initialisiere LEDs/Taster und LC-Display mit der standard I²C-Adresse
        Display.begin();
    
        // LCD-Backlight 6 mal mit 2 Hz blinken lassen
        for(int i = 0; i < 6; i++) {
            Display.lcdBacklight(HIGH);
            delay(250);
            Display.lcdBacklight(LOW);
            delay(250);
        }
    
        // LCD-Backlight dauerhaft einschalten
        Display.lcdBacklight(HIGH);
    }
    

  • controlLED:

    Definition:

    bool HSA_LCD_Shield.controlLED(byte <address>);
    

    Beschreibung:

    Parameter:

    Rückgabewert

    Beispiel:

    
    

  • getLED:

    Definition:

    bool HSA_LCD_Shield.getLED(byte <address>);
    

    Beschreibung:

    Parameter:

    Rückgabewert

    Beispiel:

    
    

  • getButton:

    Definition:

    bool HSA_LCD_Shield.getButton(byte <address>);
    

    Beschreibung:

    Parameter:

    Rückgabewert

    Beispiel:

    
    

  • writeRow:

    Definition:

    bool HSA_LCD_Shield.writeRow(byte <address>);
    

    Beschreibung:

    Parameter:

    Rückgabewert

    Beispiel:

    
    

  • writeXY:

    Definition:

    bool HSA_LCD_Shield.writeXY(byte <address>);
    

    Beschreibung:

    Parameter:

    Rückgabewert

    Beispiel:

    
    

  • clearDisplay:

    Definition:

    void HSA_LCD_Shield.clearDisplay(void);
    

    Beschreibung:

    Diese Methode löscht alle Zeichen auf den LC-Display.

    Beispiel:

    // Erstelle Objekt der Klasse mit Standardeinstellungen.
    HSA_LCD_Shield Display();
    
    void setup(void) {
        // Initialisiere LEDs/Taster und LC-Display mit der standard I²C-Adresse
        Display.begin();
    
        // LCD-Backlight dauerhaft einschalten
        Display.lcdBacklight(HIGH);
    }
    
    void loop(void) {
        // "Hallo Welt" auf dem LC-Display blinken lassen
        Display.writeRow(0x01, "Hallo Welt");
        delay(2000);
        Display.clearDisplay();
        delay(1000);
    }
    

📚 3. Literaturverzeichnis

    [1]  Atmel
           ATmega328 (Mikrocontroller) Datenblatt
           http://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7810-Automotive-
           Microcontrollers-ATmega328P_Datasheet.pdf

           Abfragedatum: 13.11.2018

    [2]  Texas Instruments
           TXS0102 (IC) Datenblatt
           http://www.ti.com/lit/ds/symlink/txs0102.pdf
           Abfragedatum: 14.11.2018

    [3]  Arduino
           Language Reference
           https://www.arduino.cc/en/Reference/HomePage
           Abfragedatum: 23.10.2017

    [4]  SOLOMON SYSTECH
           Display-Controller: SSD1803A
           https://www.lcd-module.de/fileadmin/eng/pdf/zubehoer/ssd1803a_2_0.pdf
           Abfragedatum: 20.04.2018

    [5]  LCD-Module
           LC-Display: EA DOGS104-A
           https://www.lcd-module.com/fileadmin/eng/pdf/doma/dogs104e.pdf
           Abfragedatum: 20.04.2018


Hochschule Anhalt | Anhalt University of Applied Sciences | Fachbereich 6 EMW
LCD-Shield

Prof. Dr. Michael Brutscheck
📧 Michael.Brutscheck@HS-Anhalt.de

Dipl. Ing. Harald Prütting
📧 Harald.Pruetting@HS-Anhalt.de

Tobias Müller, M. Eng.
📧 Tobias.Mueller@HS-Anhalt.de

© HS-Anhalt.de, 26.11.2018