Forum: Projekte & Code HD44780 Display 2x16 Xmega-Assemblerbaustein


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Jan K. (pit1)


Angehängte Dateien:

Lesenswert?

Hallo,

beiliegender Code dient zur Darstellung und dem Hardware-gestützten
fließend-weichen Scrolling von 2x16 Zeichen Displayinhalten auf den
bekannten HD44780- kompatiblen LCDs und OLEDs.

Der Aufruf erfolgt im Rahmen eines Timer-Interrupts (200Hz/5ms optimal),
wobei pro Interrupt jeweils immer nur eine Instruktion oder Zeichen an
das Display gesendet werden. Damit ist die Prozessor-Belastung nicht nur
gering, sondern auch sehr gleichmäßig, vorhersagbar und unabhängig vom
Hauptprogramm. Bedient wird der Baustein dabei über ein einzelnes
Interface-GPIOR Register sowie natürlich Puffer-RAM für die
darzustellenden Inhalte.

Die Ansteuerung erfolgt rein schreibend und entgegen dem allgemeinen
4-Bit Trend hier im 8-Bit Modus, mit folgenden Hintergedanken:

- die Anbindung von 5V Displays benötigt keine Pegelwandlung (sofern das
Display mit den geringeren 3V Pegeln auf den Datenleitungen klarkommt)
weil die im 4-Bit Modus eventuell notwendige Busyflag Lese-Abfrage
entfällt

- gewisse Display-Funktionen (Zeichensätze) sind manchmal nur im 8-Bit
Modus verfügbar

- die Xmegas haben ausreichend Pins und die Software kann auch etwas
einfacher gehalten werden :-)

Damit werden 8 Datenleitungen, 2 Leitungen für RS/Enable sowie ggf. noch
eine Leitung für die LED-Beleuchtung bei LCDs + Chip-Select (so
vorhanden) benötigt. R/W liegt fest auf Masse (darf Chip-Select auch).

Funktionell werden unterstützt:

- Display-Initialisierung (evtl. vom Anwender an Display anzupassen)
- permanente Darstellung des aktuellen Pufferbereichs
- Scrolling desselben auf dem Display rechts/links (je 2x16 Zeichen)
- Display/ LCD-Beleuchtung ON/OFF

Als spezielles Feature kann jedem Glied einer Kette von Display-Inhalten
(Menü-System) eine (bei 200Hz Takt ca. alle 0.6s) auszuführende Funktion
zugeordnet werden. Damit kann der Baustein dann dynamisch zu ändernde
Ausgaben bezogen auf den aktuellen Inhalt/Pufferbereich eigenständig
veranlassen (z.B. für eine Uhrzeitanzeige).

Nicht unterstützt und zu ergänzen wären noch die Definition von
Sonderzeichen und die Cursordarstellung.

Wenn die I/O-Ausgaben entsprechend angepasst werden kann der Code auch
für andere AVR Typen Verwendung finden.

Getestet auf einem EA DIP162 (LCD) und EA W162 (OLED).

Jan

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.