Forum: Mikrocontroller und Digitale Elektronik (wieder) LCD mit HD44780


von Keith Grünberger (Gast)


Lesenswert?

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!

von Jornbyte (Gast)


Lesenswert?

Hallo Scotty

Du mußt erst den Cursor auf die Adresse H40 stellen und dann das Zeichen 
Schreiben.

mfg Jornbyte

von Keith Grünberger (Gast)


Lesenswert?

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??

von Uwe (Gast)


Lesenswert?

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

von Scotty (Gast)


Lesenswert?

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!

von Uwe (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.