Wechseln zu: Navigation, Suche

LCD

LCD

Kurze Beschreibung von LCD Displays

Kleine Displays sind mittlerweile schon sehr günstig zu bekommen (ab ca. 5 Euro pro Stück für ein 2x16 Zeichen Display).

Es gibt Displays welche eine gewisse Anzahl von Zeichen darstellen können (zB. 2x16 Zeichen bedeutet 2 Zeilen mit jeweils 16 Zeichen) und Typen welche nur Pixel-Grafiken darstellen können.

Wichtig ist natürlich mit welcher Schnittstelle und Protokoll das Display angesprochen werden muss.

OpenMCP unterstützt zeichenorientierte LCD Displays welche mit dem HD44780 Protokoll umgehen können. Am besten verwendet man dafür das Pollin AVR-NET-IO Board mit dem passenden ADDON Board und dem LCD Display TC1602.

Die Displays werden üblicherweise mit 8 Datenleitungen und einigen Steuerleitungen angesprochen. Da man an einem Mikrocontroller meist sparsam mit IO Pins umgehen muss gibt es eine schöne Lösung (von Pollin) welche TWI (2-Wire Bus oder I2C Bus) nutzt und somit mit 2 IO Pins auskommt.

== Anschluss des Displays TC1602 an das ADDON Board TC1602.jpg Das Display hat 16 Pins: (Beschriftung laut Platine am Display)

01: 5V
02: GND
03: Kontrastspannung (0-5V; 0V für vollen Kontrast ist bei mir ausreichend)
04: RS
05: R/W
06: EX
07: DB0
08: DB1
09: DB2
10: DB3
11: DB4
12: DB5
13: DB6
14: DB7
15: Anodenspannung (für Hintergrundbeleuchtung)
16: Kathodenspannung (für Hintergrundbeleuchtung)

Mit dem ADDON Board von Pollin wird ein geeignetes Flachbandkabel mitgeliefert. Diese Kabel muss konfektioniert werden und 1:1 mit den Anschlüssen am Display verbunden werden:

AVR-NET-IO-ADDON-mitDisplay.jpg

Beim Flachbandkabel verwendet man die rote Leitung als Nr 1. Bei der 16-poligen Wannenbuchse ist das Pin 1 mit einem Pfeil markiert. Auf dem Bild habe ich nur die nötigen Komponenten für das LCD Display bestückt. Achtung: der Transistor Q1 ist ein PNP Transistor, nicht wie in der Beschreibung angegeben. Ich habe zb. einen BC556 für meine eigene Platine verwendet.

OpenMCP und das LCD Display

In der Datei AVRNETIO.config.h muss folgendes aktiviert werden:


#define TWI
#define LCD
#define LCD_Rows 2
#define LCD_Columns 16


Im makefile muss das richtige Board mit Addon konfiguriert werden:


HARDWARE = AVRNETIO
ADDON = AVRNETIO_ADDON


Danach wird automatisch beim Systemstart das Display initialisiert und laufend Informationen ausgegeben.

Will man das Display selbst ansprechen dann funktioniert das so: Datei /apps/modules/lcd_info.c anpassen und Zeile 66 auskommentieren: //THREAD_RegisterThread( LCDINFO_thread, PSTR("LCD-Info")); Dadurch unterdrückt man die standardmässigen Ausgaben von OpenMCP.

Mit folgenden Methoden kann man ganz einfach Informationen aufs Display schreiben:


#include "hardware/lcd/lcd.h"
LCD_init(); // initialisiert das Display
LCD_clrscreen(); // löscht den Inhalt am Display (müsste nach init nicht sein)
printf_P( PSTR( "Leistung: %dW\r\n"), power);  // \r\n beginnt neue Zeile
printf_P( PSTR( "RPM: %dU/min"), rpm);


Weitere Anregungen kann man sich aus der Datei lcd.c bzw. lcd_info.c holen.

Schaltplan für den Anschluss des Displays

Der Schaltplan stammt vom Pollin ADDON Board: Original Schaltplan von Pollin

LCD-Schaltplan.png

Der Kontrast wird mit dem Trimmer TR1 eingestellt. Ich finde aber es reicht auch das Pin 3 auf Masse zu schliessen (= voller Kontrast).

Dafür könnte man in Serie zu R13 einen Trimmer mit etwa 100Ohm schliessen um die Hintergrundbeleuchtung regelbar zu machen.

PC0 und PC1 stellen den TWI Bus vom Controller dar. Beim ATmega644 bedeutet das zB:

PC0: Pin 22
PC1: Pin 23