BASCOM-Steuerung serieller Grafik-Displays am Beispiel des
"uOLED-128-G1" von Fa. 4dsystems

Stand: 18. Januar 2011


Abb.1  128x128 Pixel "UOLED-128-G1"

Es ist schon fantastisch, welche Darstellungsmöglichkeiten moderne farbige Grafik-Displays bieten. Ob mehrfarbige Texte, Hintergründe, sonstige Grafikelemente, Bilder oder sogar Videos, für den Gestalter gibt es hier kaum Grenzen. Oft sind solche Displays auch in Fertiggeräten enthalten, die u.U. für wenig Geld bei z.B. Discountern erhältlich sind oder auch als Restbestände günstig "verramscht" werden. Für den Hobbyelektroniker bleibt dann aber in den meisten Fällen doch das Problem ihrer Ansteuerung, nachdem Unterlagen über die benötigten Befehlsstrukturen oftmals doch nicht im erforderlichen Umfang zur Verfügung stehen.
Wird für ein Projekt nicht nur die Erstellung eines Einzelstücks geplant, so ist es allerdings trotz der in der Regel damit verbundenen höheren Beschaffungskosten ratsam, hierfür nur auf Bauteile zurückzugreifen, von deren Verfügbarkeit auch noch in überschaubarer Zukunft ausgegangen werden kann. So erging es mir auch mit den Grafik-Displays, bei denen ich mich letztendlich für die Produkte der australischen Firma "4D Systems" ( http://www.4dsystems.com.au/ ) entschieden habe. Angeboten wird dort eine Auswahl von TFT- und OLED-Displays verschiedener Größe, wobei mir die für viele Versionen angebotene Möglichkeit einer Steuerung lediglich über die serielle Schnittstelle ( http://www.4dsystems.com.au/products.php?cat=26 ) besonders interessant erschien.  Für erste Versuche wählte ich die 128x128 Pixel-Version: "uOLED-128-G1" ( http://www.4dsystems.com.au/prod.php?id=78 ) aus. Die  Zusammenschaltung mit einem Microcontroller über dessen UART-Portanschlüsse ( RxD, TxD ) und ggf. noch einem zusätzlichen Port-Pin zur RESET-Steuerung gestaltete sich zum Kinderspiel ( Abb.2 ). Dass dabei auch keine irgendwelchen ggf. ultrakleinen Anschlusspins zu beschalten waren, machte mir die Sache noch zusätzlich symphatisch.


Abb.2

Der Autobaud-Mode lässt Datenraten zwischen 300 Baud und 256 KBaud zu.  Zur Baudratenerkennung ist dabei nur der Befehl "&H55" in Richtung Display zu senden.
Zur Anzeigevon ASCII-Zeichen bzw. Texten stehen 3 verschiedene Fonts bestehend aus 5x7, 8x8 oder 8x12 Pixel zur Verfügung. Im unformatierten Betrieb lassen sie sich zusätzlich skalieren und erlauben damit im Bedarfsfall auch eine beliebige Grossdarstellung ( Abb.3 ).


Abb.3   mögliche Skalierung im unformatierten Betrieb

Ein interessantes Feature ergibt sich auch durch die einfache Möglichkleit zur Darstellung von Bild- oder sogar Videovorlagen. Mit einfachen Befehlen lassen sich die entsprechenden Files dabei von einer im zugehörigen Slot ( Abb.4 ) zu betreibenden handelsüblichen Micro-SD-Speicherkarte lesen. Zu ihrer Erstellung und Ablage stellt die Firma das von ihrer Homepage kostenlos erhältliche Windows-Tool "GraphicsComposer" zur Verfügung ( siehe dazu auch weiter unten ). Es kann z.B. Bildvorlagen in den üblichen Formaten wie BMP, JPG und GIF verarbeiten und dabei auch an die jeweils benutzte Displaygröße anpassen.


Abb.4


INBETRIEBNAHME

Die Displays können mit Versorgungsspannungen zwischen 3.6V ( bei Nutzung der Speicherkarte ab 4.0V ) und 6.0V betrieben werden. Nominalwert ist 5.0V.  Die Datenanschlüsse sind TTL-kompatibel zu Peripherie, die mit 3.3V betrieben wird, erlauben aber auch eine direkte Zusammenschaltung mit Bausteinen, die mit 5V versorgt werden.
Nach Anlegen der Versorgungsspannung schaltet sich das Display selbständig ein. Das Gleiche wird bewirkt, indem man den RESET-Pin für mindestens einige 100 Millisekunden mit MASSE verbindet. Wird nach dem Einschalten nicht auch innerhalb weniger Sekunden ein externes Steuerprogramm gestartet, so erscheint automatisch ein gescrollter Kennungstext.  Ist  zusätzlich noch eine Brücke zwischen Pin6 und Pin8 der Anschlussleiste gesetzt, so ist stattdessen und ohne weitere externe Steuersoftware auch eine kontinuierliche Anzeige aller ggf. auf der Karte gespeicherten Bildvorlagen ( Slide Show ) möglich.

BASCOM-STEUERUNG

Nun wollte ich mein "uOLED-128-G1" aber auch via "BASCOM-AVR" steuern. Weil die Internetsuche nach vorhandener Mustersoftware aber ergebnislos verlief, galt es die benötigten Bascom-Befehle selbst zusammenzustellen. Hilfreich waren dabei aber immerhin gefundene Softwarebeispiele, die zur Verwendung mit BASIC-Stamp oder PICAXE erstellt worden waren. Die wichtigste Informationsquelle war aber das zum Display-Typ verfügbare "USERS MANUAL" ( siehe dazu die Link im Download-Bereich von: http://www.4dsystems.com.au/prod.php?id=78 ) .  

Als einen nicht zu vernachlässigenden Nachteil empfinde ich, daß der Hersteller vor dem Ausschalten des Bausteins ein vorheriges softwaregesteuertes Abschalten der Display-Versorgung verlangt. Dazu dient die HEX-Characterfolge: &H59, &H03, &H00. Angeblich soll ein häufiges Missachten zur Schädigungen des Displays führen können!  Es ist zu hoffen, daß zukünftige Versionen auch ohne diese Forderung auskommen werden und sich die Ausführung der Prozedur auch auf irgendeine Weise automatisch intern lösen lässt!

Zum Abschluß
folgt ein kleines Musterprogramm zur Textdarstellung. Es zeigt die Verwendung der wichtigsten Standard-Befehle. Nach jeder erfolgreich erkannten und durchgeführten Anweisung wird das Display mit Rücksendung des HEX-Charakters "&H06" antworten. Diese Meldung kann benutzt werden, um den Ablauf der einzelnen Befehle in möglichst schneller Folge zu ermöglichen. Bei alternativ möglichen einfachen WAIT-Anweisungen könnte es dagegen sein, dass diese zu knapp ausgelegt wurden oder Zeit verschenkt wird.
Das Beispielprogramm verzweigt somit  nach jedem Befehl in die Subroutine "WARTE". Wird hier im negativen Fall allerdings stattdessen ein "&H15" zurückgesandt, so wird zumindest dieses einfache Musterprogramm seine weitere Ausführung stoppen.

BASCOM-AVR-CODE zur TEXTDARSTELLUNG

Dim Z as Byte

Print Chr(&H55)                                                                                                                                                                  'autobaud
Gosub Warte

Print Chr(&H45)                                                                                                                                                                  'clear screen
Gosub Warte

Print Chr(&H42) ; Chr(&Hff) ; Chr(&Hff)                                                                                                                           'set background ( here in white )
Gosub Warte

Print Chr(&H73) ; Chr(&H02) ; Chr(&H01) ; Chr(&H02) ; Chr(&H00) ; Chr(&H00) ; "HALLO " ; Chr(&H00)         '( formatted ) text out ( here in black )
Gosub Warte

Wait 30

Print Chr(&H59) ; Chr(&H03) ; Chr(&H00)                                                                                                                          'power down
End

Warte:
Do
Z = Inkey()
Loop Until Z = Chr(&H06)
Return
Mit diesen Informationen und den Angaben im Display-Manual sollte es jetzt nicht mehr schwer fallen, auch die ansonsten möglichen Steuerbefehle zu bilden.

ABLAGE UND ABRUF VON GRAFIKVORLAGEN

Die jeweils gewünschten Bildvorlagen können mithilfe des Tools "GraphicsComposer" ( Abb.5 ) erstellt und auf der später zu benutzenden Speicherkarte abgelegt werden. Wird die Karte unter Verwendung eines geeigneten Adapters dazu vorerst direkt vom PC aus angesprochen, so kann dieser Vorgang auch völlig unabhängig von ihrem späteren Einsatz am Display durchgeführt werden.
 
WICHTIG! 
Nachdem das Programm "GraphicComposer" aber offenbar mit einer anderen, als der üblicherweise benutzten FAT-Formatierung arbeitet, ist zu berücksichtigen, daß die hiermit auf der Karte abgelegten Files zwar in Verbindung mit dem Display genutzt, aber ansonsten nicht eingesehen werden können. Darüberhinaus kann nach Bearbeitung mit diesem Programm auch nicht länger auf ggf. bereits vorher auf der Karte gespeicherte Daten zugegriffen werden. Somit ist zu empfehlen, eine separate Speicherkarte für die ausschließliche Verwendung mit dem Display zu verwenden.



Abb. 5 

Zum Display-Aufruf der auf der Karte gespeicherten Bilder ist die dafür im zusätzlich erzeugten Textfile jeweils zu findende HEX-Zeichenfolge zu benutzen ( unten in Rot hervorgehoben ).
Beispiel für ein erzeugtes Textfile ( welches in diesem Fall nur den Eintrag für ein einziges Bild enthält ):
===========================
SERIAL-PLATFORM OUTPUT FILE
===========================
---------------------------------------------------------------------------------------
File "cartoon.gif"
Sector Address 0x001000
Width = 128 Height = 128 Bits = 16 (Location and size may be adjusted depending on image size
                                     and Size Mode selected)

Display Image from Memory Card (Serial Command):
Syntax:
@, I, x, y, width, height, colourMode, SectorAdd(hi), SectorAdd(mid), SectorAdd(lo)
Data:
0x40, 0x49, 0x00, 0x00, 0x80, 0x80, 0x10, 0x00, 0x10, 0x00

---------------------------------------------------------------------------------------
Cmd (00) = 0x40
Cmd (01) = 0x49
Cmd (02) = 0x00
Cmd (03) = 0x00
Cmd (04) = 0x80
Cmd (05) = 0x80
Cmd (06) = 0x10
Cmd (07) = 0x00
Cmd (08) = 0x10
Cmd (09) = 0x00
Cmd (0A) = 0x0B
Cmd (0B) = 0x00
Cmd (0C) = 0x00
Cmd (0D) = 0x00
Cmd (0E) = 0x00
Im vorliegenden Beispiel erfolgt der Bildaufruf somit unter Verwendung des Befehls:
Print Chr(&H40) ; Chr(&H49) ; Chr(&H00) ; Chr(&H00) ; Chr(&H80) ; Chr(&H80) ; Chr(&H10) ; Chr(&H00) ; Chr(&H10) ; Chr(&H00)       'print picture

LINKLISTE FÜR BEZUGSQUELLEN ( im Aufbau )

http://www.tigal.com/
http://www.sparkfun.com/search/results?term=4d&what=products

E-Mail contact via: