Schau mal ins Projektforum
https://www.roboternetz.de/phpBB2/viewtopic.php?t=10766
Der Thread sollte dir helfen
Hi Leute, komm mir ziemlich dämlich vor
ich hab das altbewährte DIP-204 LCD An meinen M16 gehängt und will für das laufende Projekt den Port A für die Steuerung verwenden.
4-Bit
a.2=RS
a.3=E
a.4=DB4
a.5=DB5
a.6=DB6
a.7=DB7
DB0-3 = GND
Hab mich schon von der Lib verabschiedet und versuch das Ding "von Hand" mit dem folgenden Code zu betreiben, aber funzt nit.
Ich tüftel da schon 2 Abende dran rum und seh vermutlich den Wald vor Bäumen nicht. Habt Ihr mal ne Minute Zeit mir n Fingerzeig zu geben?
Code:$regfile = "m16def.dat" $crystal = 8000000 $baud = 2400 '$lib "ea-dip-Zeit.lib" 'Initlcd Declare Sub Lcdinit(byval Zeichen As Byte) Config Lcdpin = Pin , Db4 = Porta.4 , Db5 = Porta.5 , Db6 = Porta.6 , Db7 = Porta.7 , E = Porta.3 , Rs = Porta.2 Config Lcd = 20 * 4a Initlcd Config Pina.2 = Output Config Pina.3 = Output Config Pina.4 = Output Config Pina.5 = Output Config Pina.6 = Output Config Pina.7 = Output E Alias Porta.3 Rs Alias Porta.2 Call Lcdinit(&B00100100) Waitms 5 Call Lcdinit(&B00001001) Waitms 5 Call Lcdinit(&B00100000) Waitms 5 Call Lcdinit(&B00000110) Waitms 5 Call Lcdinit(&B00000001) Waitms 5 Call Lcdinit(&B00001100) Waitms 5 Cls Dim Temp As Byte Do Waitms 500 ' Hintergrundbeleuchtung aus Portd.7 = 0 Incr Temp Lcd Temp Print Temp Waitms 500 ' Hintergrundbeleuchtung ein Portd.7 = 1 Loop 'Schreibt die Initialisierungs - Bits zum LCD Sub Lcdinit(byval Zeichen As Byte) Print "init: "; Print Zeichen ' Höherwertiges Nibble setzen If Zeichen.4 = 1 Then Porta.4 = 1 Else Porta.4 = 0 If Zeichen.5 = 1 Then Porta.5 = 1 Else Porta.5 = 0 If Zeichen.6 = 1 Then Porta.6 = 1 Else Porta.6 = 0 If Zeichen.7 = 1 Then Porta.7 = 1 Else Porta.7 = 0 ' Höherwertiges Nibble übertragen E = 1 Waitms 1 E = 0 Waitms 1 ' Niederwertiges Nibble setzen If Zeichen.0 = 1 Then Porta.4 = 1 Else Porta.4 = 0 If Zeichen.1 = 1 Then Porta.5 = 1 Else Porta.5 = 0 If Zeichen.2 = 1 Then Porta.6 = 1 Else Porta.6 = 0 If Zeichen.3 = 1 Then Porta.7 = 1 Else Porta.7 = 0 ' Niederwertiges Nibble übertragen E = 1 Waitms 1 E = 0 Waitms 1 End Sub
Schau mal ins Projektforum
https://www.roboternetz.de/phpBB2/viewtopic.php?t=10766
Der Thread sollte dir helfen
ja, den Thread kenn ich auch schon, hab ich auch schon probiert, aber irgendwie funktionierts bei mir doch nicht ...
die elektrischen Verbindungen stimmen, die hab ich schon vor und zurück getestet ohne Ergebniss ...
Also es funktioniert soviel:
Reset, Anzeige wird leer, Initialisierungsroutine läuft durch, alle Zeichen
als 4-Ecke auf dem Display sichtbar,
CLS Anzeige wird leer
und das wars dann auch schon ... bin da echt am verzweifeln
Vu 4,98V, sollte allso passen
der Letzte war von mir
Ich hab das gleiche Display und hab festgestellt, dass wenn der Kontrast zu hoch eingestellt ist, nur weiße Rechtecke statt den Buchstaben ausgegeben wird. Versuch doch mal den Kontrast zu ändern. Das ist bei diesem Display etwas anders als bei den "normalen". Du ein poti mit 5v und Pin3 (Vo) verbinden und nicht wie sonst üblich mit Masse.
MFG
Hatte mich nicht eingellogt, sorry
Hallo!
Ich habe das gleiche Problem! (Scheint ne Krankheit zu sein)
Wie oben in dem Link beschrieben habe ich das mal versucht. Geht auch eigentlich optisch echt gut.
Mein problem ist aber dass das ganze wohl ziemlich langsam ist.
ich stell mal den Code dazu den ich benutze.
Bis jetzt zum nächsten Wert hochgezählt wird, dauert es ganze 4! Sekunden.Code:'ATMega8 '11059200 Hz 'BascomAVR 1.11.7.9 $crystal = 11059200 Declare Sub Lcdwrite(byval Zeichen As Byte) 'Pins des LCD-Modules setzen ggf. an eigene Anschlüsse anpassen Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5 Initlcd Config Lcd = 20 * 4a ' wird nicht benötigt daher auskommentiert 'Config Lcdbus = 4 ' oder weglassen :-) Call Lcdwrite(&B00101100) Waitms 5 Call Lcdwrite(&B00001001) Waitms 5 Call Lcdwrite(&B00101000) Waitms 5 Call Lcdwrite(&B00000110) Waitms 5 Call Lcdwrite(&B00001100) Waitms 5 Cls Dim N As Byte Do For N = 1 To 255 Locate 3 , 12 Lcd N Waitms 500 Cls Next Loop End Sub Lcdwrite(byval Zeichen As Byte) ' Höherwertiges Nibble setzen If Zeichen.4 = 1 Then Portc.3 = 1 Else Portc.3 = 0 If Zeichen.5 = 1 Then Portc.2 = 1 Else Portc.2 = 0 If Zeichen.6 = 1 Then Portc.1 = 1 Else Portc.1 = 0 If Zeichen.7 = 1 Then Portc.0 = 1 Else Portc.0 = 0 ' Höherwertiges Nibble übertragen Portc.4 = 1 Waitms 1 Portc.4 = 0 Waitms 1 ' Niederwertiges Nibble setzen If Zeichen.0 = 1 Then Portc.3 = 1 Else Portc.3 = 0 If Zeichen.1 = 1 Then Portc.2 = 1 Else Portc.2 = 0 If Zeichen.2 = 1 Then Portc.1 = 1 Else Portc.1 = 0 If Zeichen.3 = 1 Then Portc.0 = 1 Else Portc.0 = 0 ' Niederwertiges Nibble übertragen Portc.4 = 1 Waitms 1 Portc.4 = 0 Waitms 1 End Sub
Kann mir jemand sagen warum?
Ausserdem: Wenn man das LCD nicht säubert hat man 2 so komische KLammerreihen, woher kommen die?
Danke schonmal für die Hilfe
Marten83
Hi!
Hab gerade gemerkt das es wohl doch nicht so wirklich funktioniert!!
Hab wieder die Anfangsprobleme!
Wie der Kontrast eingestellt wird und welchen Vorwiderstand man bei Licht nutzt steht ja im Datenblatt. Ich würde das nicht als Krankheit bezeichnen wenn das bei dem LCD anders ist als bei anderen.
Die Ansteuerung ist bei dem DIP LCD halt leider etwas verzwickt. Aber wenn ihr die Initialisierungsroutine wie in dem Thread https://www.roboternetz.de/phpBB2/ze...ag.php?t=10766 nehmt, dann muss es gehn. Die Pins müsst ihr natürlich entsprechen eurer Belegung umschreiben.
Und wenn alles nicht hilft, dann schaut Euch mal das Projekt RN-KeyLCD an. Da steckt ihr das Display rein und dann könnt ihr es ganz einfach mit RS232 oder I2C ansteuern.
Gruß Frank
Also,
ich hab dann doch wieder auf die LIB zurückgegriffen und mein Layout etwas geändert. hab nicht mehr PortA.4 - PortA.7 sondern A.0 - A.3 verwendet für die DB-Leitungen, noch die RS und E auf Port D, die Lib angepasst und siehe da es funzt.
Den Kontrast hab ich per 5K Poti Mittelabgriff und Poti zwischen +5 und GND, funzt auch.
Das RN-Projekt find ich gut, nur ists für die Anwendung, die mir vorschwebt einfach zu sperrig. Wenn ich das LCD sockle kann ich darunter den Mega16 einlöten, das spart enorm Platz auf dem Layer
Lesezeichen