LCD unter Bascom ok, unter C# nee

Gast #1837228
Lesenswert?

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 ?   ö)
Angehängte Dateien:
#1837251
Lesenswert?

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.
#1837260
Lesenswert?

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
Gast #1837267
Lesenswert?

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.
Gast #1837338
Lesenswert?

...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)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren