Hallo LCD-Freaks
Per Zufall stiess ich auf LCD's mit einem ST7920 Controller, welcher dem HD44780 sehr ähnlich sein soll. Das
Display bietet neben dem Text-Mode auch einen Grafikmode. Im Text-Mode werden die Zeichen sehr schön
in einer 8x16 Matrix dargestellt, auch mit Unterlängen.
Das Display kann von Bascom mit der LCD4.LIB angesteuert werden. Leider stimmen die Cursor-Positionen
nicht, so wollte ich selber eine eigene Ansteuerung in Bascom schreiben. Es klappt auch recht gut, nur
leider wird das Dislpay nicht immer sauber initialisiert. Es scheint ein Timing-Problem zu geben. Mit dem
Pollin-Display für EUR 2.95 klappt es fast zu 100%, mit dem andern Chinesen-Teil leider nicht.
Meine Dislpays:
http://www.pollin.de/shop/dt/NTAzOTc4OTk-/Bauelemente_Bauteile/Aktive_Bauelemente/Displays/LCD_DataVision_DG_14032.html
http://www.ebay.com/itm/ws/eBayISAPI.dll?ViewItem&item=261034188078&ssPageName=ADME:X:RTQ:US:1123
Unten mein Code als Download. Ein paar Bemerkungen:
Der Code ist noch in absoluter Rohform.
Funktion
--------
Die Routine LCD4_INIT enthält die Initialisierung des LCD's im 4Bit-Modus. Hier muss wahrscheinlich auch
irgendwo ein Fehler sein, sonst würden alle LCD's, wie mit der Bascom-LCD4.LIB, sauber nitialisiert.
Die Cursor-Steuerung ist speziell beim ST7920. Der Controller ist eigentlich in 16x16 Pixel Zeichen
organisiert. Das wird für die vielen integrierten chinesischen Zeichen auch benötigt. Usere westlichen
Zeichen werden im 8x16 Pixel-Format dargestellt. Es haben somit zwei Zeichen in einer DDRAM-Position
(Display-RAM) Platz. Beim Schreiben managed dies der Controller selber und schreibt automatisch zwei
Zeichen pro DDRAM-Position. Für die Anzeige kann der Cursor nur pro DDRAM-Position gesetzt werden.
Leider kann dann so nur jede zweite LCD-Anzeigeposition per DDRAM-Position angesteuert weden. Ich
habe das Problem so gelöst, dass ich für jede Zeile einen String definiert habe. So schreibt z.B der
Befehl LCDA 1, 2, "Test" mit dem MID-Befehl auf der Position 2 in den String ZL1. Anschliessend wird
immer die ganze Zeile ZL1 angezeigt, immer von Position 1 der Zeile aus.
Fragen
-------
Wieso wird das Display nicht immer sauber initialisiert? Wer hat hier eine korrekte Init-Routine?
Hat jemand auch schon Erfahrung, wie dann der erweiterte Befehlssatz angewendet wird, mit dem
Pixel gesetzt und somit Grafik dargestellt werden kann?
Vielen Dank schon mal an alle
Grüsse
Thomas
Per Zufall stiess ich auf LCD's mit einem ST7920 Controller, welcher dem HD44780 sehr ähnlich sein soll. Das
Display bietet neben dem Text-Mode auch einen Grafikmode. Im Text-Mode werden die Zeichen sehr schön
in einer 8x16 Matrix dargestellt, auch mit Unterlängen.
Das Display kann von Bascom mit der LCD4.LIB angesteuert werden. Leider stimmen die Cursor-Positionen
nicht, so wollte ich selber eine eigene Ansteuerung in Bascom schreiben. Es klappt auch recht gut, nur
leider wird das Dislpay nicht immer sauber initialisiert. Es scheint ein Timing-Problem zu geben. Mit dem
Pollin-Display für EUR 2.95 klappt es fast zu 100%, mit dem andern Chinesen-Teil leider nicht.
Meine Dislpays:
http://www.pollin.de/shop/dt/NTAzOTc4OTk-/Bauelemente_Bauteile/Aktive_Bauelemente/Displays/LCD_DataVision_DG_14032.html
http://www.ebay.com/itm/ws/eBayISAPI.dll?ViewItem&item=261034188078&ssPageName=ADME:X:RTQ:US:1123
Unten mein Code als Download. Ein paar Bemerkungen:
Der Code ist noch in absoluter Rohform.
Funktion
--------
Die Routine LCD4_INIT enthält die Initialisierung des LCD's im 4Bit-Modus. Hier muss wahrscheinlich auch
irgendwo ein Fehler sein, sonst würden alle LCD's, wie mit der Bascom-LCD4.LIB, sauber nitialisiert.
Die Cursor-Steuerung ist speziell beim ST7920. Der Controller ist eigentlich in 16x16 Pixel Zeichen
organisiert. Das wird für die vielen integrierten chinesischen Zeichen auch benötigt. Usere westlichen
Zeichen werden im 8x16 Pixel-Format dargestellt. Es haben somit zwei Zeichen in einer DDRAM-Position
(Display-RAM) Platz. Beim Schreiben managed dies der Controller selber und schreibt automatisch zwei
Zeichen pro DDRAM-Position. Für die Anzeige kann der Cursor nur pro DDRAM-Position gesetzt werden.
Leider kann dann so nur jede zweite LCD-Anzeigeposition per DDRAM-Position angesteuert weden. Ich
habe das Problem so gelöst, dass ich für jede Zeile einen String definiert habe. So schreibt z.B der
Befehl LCDA 1, 2, "Test" mit dem MID-Befehl auf der Position 2 in den String ZL1. Anschliessend wird
immer die ganze Zeile ZL1 angezeigt, immer von Position 1 der Zeile aus.
Fragen
-------
Wieso wird das Display nicht immer sauber initialisiert? Wer hat hier eine korrekte Init-Routine?
Hat jemand auch schon Erfahrung, wie dann der erweiterte Befehlssatz angewendet wird, mit dem
Pixel gesetzt und somit Grafik dargestellt werden kann?
Vielen Dank schon mal an alle
Grüsse
Thomas