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