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 ? ö)
g457 schrieb: > F_CPU falsch? negativ, F_CPU ist korrekt Anschlussbelegung ist übrigens: RS PB0 En PB1 DBs PB2-5 (also auch keine JTAG-Probleme)
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)
Biko schrieb:
1 | #define LCD_DDADR_LINE1 0x00
|
2 | #define LCD_DDADR_LINE2 0x40
|
3 | #define LCD_DDADR_LINE3 0x14
|
4 | #define LCD_DDADR_LINE4 0x54
|
Steht im vollständigem Datenblatt.
Volker Zabe schrieb: > #define LCD_DDADR_LINE1 0x00 > #define LCD_DDADR_LINE2 0x40 > #define LCD_DDADR_LINE3 0x14 > #define LCD_DDADR_LINE4 0x54 Ok, korrekt, LCD funktioniert jetzt! Super, Danke an alle Helfer! :O)
Volker Zabe schrieb: > Steht im vollständigem Datenblatt. PS: kannst du mal das vollständige datenblatt oder den link posten?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.