Werbung
Hallo
Ich hoffe Ihr könnt mir helfen
Ich habe an meinem ATmega162 mit 11,0592MHz Quarz das gleiche LCD wie bei RNKeyLCD
Leider tut das LCD bei mir noch keinen Mucks...
Ich weis auch nicht ob ich es korrekt verdrahtet habe bzw. den richtigen Bascom Code drauf habe.
Hier der Link zum Datenblatt:
http://www.robotikhardware.de/downlo...datenblatt.pdf
Das Display betreibe ich im 4Bit Modus.
D0-D3 habe ich an GND gelegt. D4 bis D7 mit dem AVR verbunden. Stromversorgung, E(Enable) und RS sind ebenfalls mit dem AVR verbunden. Die LED Beleuchtung brauche ich ja noch nicht
Zu den restlichen Pins noch kurze checks ob ichs richtig gemacht habe.
VEE; Kontrastspannung - Im Datasheet ist eine Schaltskizze zum Betreiben von VEE mit Poti und 27kOhm Widerstand eingezeichnet. Im Schaltplan von RNKeyLCD, den ich nun zum debuggen nutze fehlt dieser Widerstand. Was nun?
R/W (Read/Write) habe ich nicht mit dem AVR verbunden sondern auf Masse gelegt. Ist das korrekt?
RES (Reset, Interner 10K Pullup) habe ich gar nicht angeschlossen. Oder muss der irgendwo ran? Und was macht dieser Reset?
Ansonsten hier ein ganz einfacher Bascom Code damit mir das LCD was anzeigen soll. Ich weis auch hier nicht ob er korrekt ist.
Aber wie gesagt, das CD stellt sich tot, keine Kontrastbeleuchtung an, nichts....Code:$regfile = "m162def.dat" $crystal = 11059200 Config Lcd = 20 * 4 Config Lcdpin = Pin , E = Portb.0 , Rs = Portb.1 , Db7 = Portb.5 , Db6 = Portb.4 , Db5 = Portb.3 , Db4 = Portb.2 Config Lcdbus = 4 Config Lcdmode = Port Config Portb = Output Cls Portb = 63 Do Locate 1 , 1 Lcd "Hallo" Waitms 5000 Loop End
Das ist der komplette Code bei mir, um das LCD einzustellen.
Dann noch
cls
locate 1,1
lcd "Hello World
End
und fertich
Das sollte eigentlich reichen. Bascom erkennt damit schon selbst das es sich um 4Bit handelt usw.Config Lcd = 20 * 4
Config Lcdpin = Pin , E = Portb.0 , Rs = Portb.1 , Db7 = Portb.5 , Db6 = Portb.4 , Db5 = Portb.3 , Db4 = Portb.2
Mit Cls wird das Display initalisiert. Eigentlich ist waitms 10 völlig überflüssig, weil Bascom schon die benötigen Zeiten ausrechnet und mehr als genug Reserve dazu zählt.
Ich glaube auch ganz fest dran, irgendwo mal gelesen zu haben, das wenn kein CLS im Programm steht dann sobald der erste LCD-Befehl auftaucht (also irgendein Befehl der auf's Display zugreift) ein Code eingefügt wird um das Display zu initalisieren.
R/W muss auf Masse!
Außer wenn du das Busyflag auslesen willst. Aber das ist n anderes Thema.
VEE kannst du zum probieren auch erstmal auf Masse legen. Damit hast du den maximalen Kontrast.
Die erste und dritte Zeile müssen dann nach anlegen der Versorgungsspannung komplett schwerz aufgefüllt erscheinen. Was das schonmal klappt hast du so gut wie gewonnen!
RES ist für solche Display eher untypisch. Aber der muss auch auf Masse liegen so wie ich das Datenblatt deute.
EA-Display sind eigentlich ganz tolle Displays. Normalerweise ist es wirklich Qualität, was man da kauft. Aber (und das steht auch im Datenblatt) da ist kein HD44780 Controller drauf verbaut. Der verwendete KS0073 ist zwar nahzu kompatibel zum HD44780, aber nur nahzu und nicht völlig 100%ig. (Ist wie mit SPD und Union. Wenn du SPD mit der Union regieren will, würden alle Sitze zählen, aber wenn es um die Einladung zu Gesprächen geht, zählen nur die Sitze der einzelnen Parteien)
Solange du noch keinen Kontast hast und die schwarzen Balken siehst musst du den Fehler erstmal da suchen. (Wie gesagt, VEE mal auf GND legen)
Danach wirst du aber sicherlich immer noch das Problem haben.
Ich glaube einer der Unterschiede der beiden Kontroller ist die Initalisierungssequenz. Ich hab dir mal 4 Links rausgesucht. Gelesen habe ich sie nicht, aber ich denke, mind. einer wird dir dabei helfen können.
https://www.roboternetz.de/phpBB2/ze...ghlight=ks0073
https://www.roboternetz.de/phpBB2/ze...ghlight=ks0073
https://www.roboternetz.de/phpBB2/ze...ghlight=ks0073
https://www.roboternetz.de/phpBB2/ze...ghlight=ks0073
Vielen Dank![]()
Nur langsam wirds wirklich Frustbastelei...
Erst hab ich ewig rumprogrammiert...irgendwann erschienen dann wie durch Zufall auf dem LCD die heiligen Worte "Hallo Welt".
Voller Freunde hab ich dann das Sample runtergehauen, meinen eigentlichen Code drauf und seit dem ist die LCD Ansteuerung wieder tot.
Auch wenn ich nun den alten Code draufspiele geht absolut nichts mehr, nada...
Ich habe den AVR schon auf Funktion getestet. Er hat keine Schäden, führt jeden normalen Befehl (Tasterdruck -> LED leuchtet) korrekt aus, sofort aber das LCD ins Spiel kommt scheint alles zusammenzubrechen und er macht gar nichts mehr auch nicht mehr das mit dem Tasterdruck.
Ich versteh das nicht wieso er nun den alten Code nicht mehr ausführt...
Ich habe bei allen relevanten Pins nochmal den Kaltlötstellentest gemacht. Alle Lötstellen sind ok!
Man muss sagen, dass bei mir Bascom auch ein bissl spinnt, hängt sich manchmal auf aber wenn es dann mal speichert, dann durchaus brauchbaren Code.
Ich habe hier mal meinen LCD-Code. Bitte checkt den Mal, das muss doch gehen!!
Das ist der Code den ich eigentlich will, wegen dem Zeileproblem dieses LCD-Treibers.Code:$regfile = "m162def.dat" $crystal = 11059200 Declare Sub Lcdinit Declare Sub Lcdwrite(byval Zeichen As Byte) Config Lcdpin = Pin , E = Portb.0 , Rs = Portb.1 , Db7 = Portb.5 , Db6 = Portb.4 , Db5 = Portb.3 , Db4 = Portb.2 'Config Lcd = 20 * 4a 'ich habs mit und ohne versucht, nichts geht... Waitms 100 Call Lcdinit Cls Do Lcd "Hallo Welt" 'Displayausgabe für den Benutzer Waitms 5000 Cls 'Display löschen Loop Sub Lcdinit Call Lcdwrite(&B00101100) Call Lcdwrite(&B00001001) Call Lcdwrite(&B00101000) Call Lcdwrite(&B00000110) Call Lcdwrite(&B00001100) End Sub 'Schreibt die Initialisierungs - Bits zum LCD Sub Lcdwrite(byval Zeichen As Byte) ' Höherwertiges Nibble setzen If Zeichen.4 = 1 Then Portb.2 = 1 Else Portb.2 = 0 If Zeichen.5 = 1 Then Portb.3 = 1 Else Portb.3 = 0 If Zeichen.6 = 1 Then Portb.4 = 1 Else Portb.4 = 0 If Zeichen.7 = 1 Then Portb.5 = 1 Else Portb.5 = 0 ' Höherwertiges Nibble übertragen Portb.0 = 1 Waitms 1 Portb.0 = 0 Waitms 1 ' Niederwertiges Nibble setzen If Zeichen.0 = 1 Then Portb.2 = 1 Else Portb.2 = 0 If Zeichen.1 = 1 Then Portb.3 = 1 Else Portb.3 = 0 If Zeichen.2 = 1 Then Portb.4 = 1 Else Portb.4 = 0 If Zeichen.3 = 1 Then Portb.5 = 1 Else Portb.5 = 0 ' Niederwertiges Nibble übertragen Portb.0 = 1 Waitms 1 Portb.0 = 0 Waitms 1 End Sub End
Aber selbst das Programm das vorher funktionierte geht nicht mehr:
Wie gesagt, ich vermute sehr sehr stark dass es ein softwaretechnisches Problem gibt, denn vor dem ersetzen dieses Codes durch einen anderen funktionierte das Ding 1A. Das LCD scheint auch zu gehen. Man kann am Poti 1A den Kontrast verändern. Das ging ganz am Anfang noch nicht.Code:'=============================================================================== ' Compiler '=============================================================================== $regfile = "m162def.dat" $crystal = 11059200 '------------------------------------------------------------------------------- '=============================================================================== ' LCD Parametrieren '=============================================================================== Config Lcdpin = Pin , E = Portb.0 , Rs = Portb.1 , Db7 = Portb.5 , Db6 = Portb.4 , Db5 = Portb.3 , Db4 = Portb.2 Config Lcd = 20 * 4 Cls Cursor Off Noblink '______________________________________________________________________________ Do Cls Lcd "Hallo" Waitms 2000 Loop End
Könnt ihr mir mal sagen ob die Pins zur Steuerung des LCDs die mit dem AVR verbunden sind bei euch dort Spannung anliegt wenn ihr die Stromversorgung des LCD kappt?
Bei mir ist es so, dass nur Spannung an den Pins (Db4-Db7 sowie E und RS) anliegt wenn ich das LCD einschalte...Hat das seine Richtigkeit oder ist das bei mir ein Fehler. Denn eigentlich muss doch der AVR Signale senden auch wenn das LCD aus ist, das weis der AVR ja nicht nehme ich mal an?
Noch ein Tipp zu LCDs. Die brauchen ja immer zwei Spannungen. Einmal die Betriebsspannung und die Kontrastspannung. Die Kontrastspannung darf niemals vor der Betriebsspannung angelegt werden.
Zuerst B.Spannung und dann K.Spannung oder beide zur gleichen Zeit. Beim ausschalten das gleiche in umgekehrter Reihenfolge. Erst K.Spannung weg, dann B.Spannung. Oder beide gleichzeitig.
Das mit den Spannungen versteh ich nicht so ganz was du da meinst.
Es liegt Spannung an, obwohl keine Betriebsspannung da ist? Ich würd mir das patentieren lassen![]()
https://www.roboternetz.de/phpBB2/ze...ag.php?t=10766
Hast du den Beitrag schon gelesen? Ist ein Link aus einer der Beiträge, die ich dir rausgesucht habe.
Ich plag mich auch grad mit exact dem selben Problem rum.
Hab nen KS0076B, der lässt sich mit Bascom einfach auch nicht ansteuern.
Es liegt wohl am Initialiesieren. Ich glaub der erste Link der oben geposteten is schon gar nicht schlecht.
Man muss das LCd einfach *reusper* anders Initialisieren. Die machen das über eine LIB und nich direkt über Bascom (vlt is das zu langsam?!)
Ich fusel da jetzt schon ne Woche rum, aber bin leider auch noch nciht auf eine Lösung gekommen.
Aber die Hoffnung stirbt ja zuletzt... ^^
Gruß Javik
Lesezeichen