Hallo,
habe hier ein 4x20-LCD Typ HDM20416H, rudimentäres Datenblatt im Anhang,
das wie im Tutorial beschrieben betrieben werden soll.
http://www.mikrocontroller.net/articles/Erweiterte_LCD-Ansteuerung
Leider zeigt das Display im Betrieb mit dem angegebenen Beispielprogramm
mehr oder weniger wirres Zeug. In der Hauptsache scheint es so zu sein,
dass Buchstaben ausgelassen werden und es sieht so aus, als wären es
z.T. nach dem Neustart andere Buchstaben, die ausgelassen werden. Wenn
das Programm Sonderzeichen anzeigt, ist mehr oder weniger nur noch Salat
auf dem Display.
Als Hauptverdächtige kommen nach meiner Meinung eigentlich nur die
folgenden beiden Programmteile in Frage:
1.
>>//////////////////////////////////////////////////////////////////////
//////////
>>// Zeilendefinitionen des verwendeten LCD>>// die Einträge hier sollten für ein LCD mit einer Zeilenlänge von 16 >>Zeichen
passen
>>// bei anderen Zeilenlängen müssen diese Einträge angepasst werden>#define LCD_DDADR_LINE1 0x00>#define LCD_DDADR_LINE2 0x40>#define LCD_DDADR_LINE3 0x10>#define LCD_DDADR_LINE4 0x50
2.
>>//////////////////////////////////////////////////////////////////////
//////////
>>// LCD Ausführungszeiten (MS=Millisekunden, US=Mikrosekunden)>#ifndef LCD_TIMINGS>#define LCD_TIMINGS>#define LCD_BOOTUP_MS 15>#define LCD_ENABLE_US 1>#define LCD_WRITEDATA_US 46>#define LCD_COMMAND_US 42>#define LCD_SOFT_RESET_MS1 5>#define LCD_SOFT_RESET_MS2 1>#define LCD_SOFT_RESET_MS3 1>#define LCD_SET_4BITMODE_MS 5>#define LCD_CLEAR_DISPLAY_MS 2>#define LCD_CURSOR_HOME_MS 2>#endif // LCD_TIMINGS
Zu 1.: das verwendete LCD hat ja pro Zeile 20 Zeilen statt 16, wüßte
aber jetzt aus dem Stehgreif nicht, was dort eingetragen werden muss
Zu 2.: da das Display Buchstaben "verschluckt", scheint die Vermutung
naheliegend, dass irgendwas mit den vorgegebenen Ausführungszeiten zu
schnell für das angeschlossenen Display ist. Könnte das hinkommen und
wenn ja, welchen Parameter müßte man dann ändern?
Noch eine Anmerkung: das beschriebene Display läuft problemlos unter
Bascom. Leider konnte ich dort nichts über die verwendeten
Ausführungszeiten finden...
PS: Forensuche wurde auch schon konsultiert, mit vielen Treffern aber
wenig direkten Bezügen zum vorliegenden Problem.
Jetzt also wie üblich die große Frage:
W a s k ö n n t e e s s e i n ? ö)
Biko schrieb:> Zu 1.: das verwendete LCD hat ja pro Zeile 20 Zeilen statt 16, wüßte> aber jetzt aus dem Stehgreif nicht, was dort eingetragen werden muss
Das ist es sicher nicht.
Wenn das ein Problem ist, dann merkst du das maximal wenn du den Cursor
in die 2.te Zeile schickst und der ganz woanders auftaucht
> Zu 2.: da das Display Buchstaben "verschluckt", scheint die Vermutung> naheliegend, dass irgendwas mit den vorgegebenen Ausführungszeiten zu> schnell für das angeschlossenen Display ist. Könnte das hinkommen und> wenn ja, welchen Parameter müßte man dann ändern?
Möglich wärs.
Du kannst ja einfach mal alle Zeiten mal 10 nehmen.
Länger darfst du die Zeiten immer machen. Nur zu kurz darfst du nicht
werden.
Biko schrieb:> g457 schrieb:>> F_CPU falsch?> negativ, F_CPU ist korrekt
Das haben schon viele gesgat und hinterher hat sich dann doch
rausgestellt, dass sie falsch war.
Hauptproblem war dabei immer, dass nicht verstanden wurde, dass F_CPU
informativen Charakter hat. Bei F_CPU kann ich hinschreiben was ich
will, deswegen läuft der µC noch lange nicht mit dieser Taktfrequenz
Biko schrieb:> Möglich wärs.> Du kannst ja einfach mal alle Zeiten mal 10 nehmen.> Länger darfst du die Zeiten immer machen. Nur zu kurz darfst du nicht> werden.
Gute Idee, das teste ich...
Karl heinz Buchegger schrieb:> Biko schrieb:>> g457 schrieb:>>> F_CPU falsch?>> negativ, F_CPU ist korrekt>> Das haben schon viele gesgat und hinterher hat sich dann doch> rausgestellt, dass sie falsch war.> Hauptproblem war dabei immer, dass nicht verstanden wurde, dass F_CPU> informativen Charakter hat. Bei F_CPU kann ich hinschreiben was ich> will, deswegen läuft der µC noch lange nicht mit dieser Taktfrequenz
Hm, habe die korrekte f in der entsprechenden .h-Datei eingetragen und
gehe davon aus, dass das auch beim Compilieren so übernommen wurde.
Werde das gleich mit untersuchen.
...so, folgendes Ergebnis:
-F_CPU korrekt eingestellt (per Stopuhr definiertes Delay nachgemessen,
Gegenprobe mit Quarz anderer Frequenz ausgeführt)
-durch Verlängerung der Delay-Zeiten (Punkt 2., s.o.) um den Faktor 10
werden jetzt alle Buchstaben korrekt dargestellt, die minimal möglichen
Delay-Zeiten muss ich noch ermitteln.
übriggebliebenes Problem: es werden pro Zeile nur 16 Zeichen ausgenutzt,
das führt wieder zu Punkt 1:
>>// Zeilendefinitionen des verwendeten LCD>>// die Einträge hier sollten für ein LCD mit einer Zeilenlänge von 16 Zeichen >>passen>>// bei anderen Zeilenlängen müssen diese Einträge angepasst werden>#define LCD_DDADR_LINE1 0x00>#define LCD_DDADR_LINE2 0x40>#define LCD_DDADR_LINE3 0x10>#define LCD_DDADR_LINE4 0x50
Was also jetzt hier eintragen, damit alle 20 Zeichen pro Zeile genutzt
werden können?
(im Datenblatt steht leider nichts dazu)