Hi all! Wieder mal ne Frage zu LCD´s mit HD44780 Chip! Muss gleich vorausschicken: Bin anfänger bez. AVR´s! Folgendes Problem: Habe mit so ein Display mit 16*2 zugelegt und kanns auch ansteuern. Jedoch nur die erste Zeile. Ich verwende zwar den BASCOMAVR-Basic-Compiler, aber nicht die eingebauten Befehle wie "LCD" etc. Habe die Funktion "händisch" nachprogrammiert. Meine Frage: Wie kann man die Zweite Zeile ansteuern. So wie ich das verstehe muss ich die DD-RAM Addr auf H40 setzten. Ich mach das indem ich erstmal E auf Hi setzte, und RS aus Lo, anschliesend, lege ich am Datenbus die gewünschte Addresse plus 128, z.B 192, also erstes Zeichen in der Zweiten Zeile. Danach geht E auf Lo (damit wirksam), danach E auf Hi und Datan an den Bus, z.B. 65 f. "A" und dann setz ich E wieder auf Lo. Wie gesagt, alles "händisch" nachprogrammiert. Mit der Ersten Zeile funktionierts, aber ich komm einfach nicht in die 2. Zeile! Hat jemand eine Idee? Kann es sein, dass bei der Doku zu meinem Display ein Fehler drinn ist? Danke für die Hilfe! Cu Scotty!
Hallo Scotty Du mußt erst den Cursor auf die Adresse H40 stellen und dann das Zeichen Schreiben. mfg Jornbyte
Hi Jornbyte! Danke für die Antwort! Das ist mir schon klar aber es mag trotzdem nicht! Listing sieht in etwa so aus: PortD ist D0 bis D7 PortC.7 ist E, PortC.6 ist RS . init-Teil. . . PortC=128 'E=1, RS=0 => es kommt ein Befehl delay 'sicherheitshalber warten PortD=192 'DDRamadr=H40 = 1Stelle 2. Zeile delay 'sicherheitshalber warten PortC=0 'E=0 RS=0 => Daten von Bus lesen u. verarbeiten delay 'sicherheitshalber warten PortC=192 'E=1, RS=1 => es kommen Daten delay 'sicherheitshalber warten PortD=65 '"A" delay 'sicherheitshalber warten PortC=0 'E=0, RS=0 => Daten von Bus lesen und anzeigen . . . So sollte es doch funken oder??? Wie gesagt, alles was ich ans Display sende kommt auf die erste Zeile, somit weiss ich, dass der Rest OK ist. Aber das mit der DDRamAddr. krieg ich nicht hin! Sonst noch ne Idee??
Hi! Wie hast du es denn initialisiert? 1 oder 2 zeilig, 5x7Dots? 5x10 Dots geht nur einzeilig. Das Init für 8-Bit Datenlänge lautet: $30 -> Pause 4,1ms ->$30->Pause >0,1ms ->$30 -> Pause0,04ms->$38(8Bit/2Zeilen) ->0,04msPause->$0C/$0E(Disp/Displ+Kursor ein)->0,04msPause->$01(Displ+RamAdr.=0) Alles mit RS/RW = 0 Nun kannst du Zeilenadr. ausgeben. Ich sehe gerade was! Hast du $40 geschrieben? Du musst DB7 auf 1(=$80) setzen, der Adressbereich lautet dann $C0-$CF. Übrigens in der Codesammlung gibt es ein DCF77-Teil, da ist das alles verarbeitet.Leider nur ASM Ich hoffe aber es gelingt jetzt. Gruss Uwe
HI Uwe! Danke für die Antwort! Das mit dem Init funzt alles! 2 Zeilen 5x7 Dots Clear geht Cursor aus/ein geht Blink ein/aus geht Alles geht bis auf 2 Zeile! Deshalb meine Frage ob es sein kann das in der Doku ein Fehler ist und evt. die Codes f. 5x7 und 5x10 vertauscht sind. Kann aber fast nicht sein, da die Zeichen alle 5x7 sind. Addresse C0 ist dez. 192! Das hab ich! Gibts einen bestimmten Grund das du $30 3 x schickst? Danke f. den Tip mit DCF77 , schaus mir mal an!
Hi! $30 dreimal weil's in der Dock so steht, habe aber festgestellt wenn die Initzeit für das 1.mal hoch genug ist reicht einmal. Ist aber nicht belegt, es geht auch gleich mit $38. Gruss Uwe
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.