Forum: Mikrocontroller und Digitale Elektronik LCD-Adressen


von Kurt (Gast)


Lesenswert?

Benötige für ein 4x16 Display die Adressen der Zeilen:


1. Zeile Pos.1: 0x80
2. Zeile Pos.1: 0xc0
3. Zeile Pos.1: ?????
4. Zeile Pos.1: ?????

Bitte helft mir weiter, mit dem Datenblatt des HD's komme ich leider 
nicht weiter (ist nicht meine Stärke)

von Ingo B. (Gast)


Lesenswert?

Hi,

 0 = 0x80
 1 = 0xC0
 2 = (0x80 + 20)
 3 = (0xC0 + 20)

Bis dann,
Ingo.

von Kurt (Gast)


Lesenswert?

Danke für die schnelle Antwort!  Werde es gleich ausprobieren!

cu Kurt

von Pierre (Gast)


Lesenswert?

Kann man das lc-display auch im simulatot simulieren oder muss man den 
programmspeicher immer neu "brennen" um es zu testen??

von Kurt (Gast)


Lesenswert?

Habe es ausprobiert, funktioniert aber noch nicht.....
mein Display lässt sich nach wie vor nur für die erste und zweite Zeile 
adressieren

Die einzige Möglichkeit um in die dritte Zeile zu kommen ist momentan, 
die erste Zeile mit Zeichen zu überfüllen.

von Kurt (Gast)


Lesenswert?

Ein Auschnitt meines Programmes:

init_lcd();

   instruction(0x82); //cursor Line 1
   data('a');         //Zeichen ausgeben
   instruction(0xC2); //cursor Line 2
   data('b');         //Zeichen ausgeben
   instruction(0xA2); //cursor Line 3
   data('a');         //Zeichen ausgeben
   instruction(0xE2); //cursor Line 4
   data('b');         //Zeichen ausgeben

von Phagsae (Gast)


Lesenswert?

Das "Geheimnis" mit den Adressen ist eigentlich keines

Ich gehe mal von einem KS0070 aus
Der kann 80 Zeichen darstellen
Also von 0 bis 0x4F
Wenn man jetzt 2 Zeilen hat teilt man das einfach
also 0..39 und 40..80
macht dann 0 bis 27h und 27h bis 4fh
Ganz simpel oder ????

Tja leider F a l s c h !!!!!!
Hier denkt ein Dezimalwesen und will einem DIGITAL Alien
Befehle erteilen ........zzzzzzzzz

Verwirrend wird das weil die Zeilen bitweise organisiert werden
Also 128 64 32
obwohl nur 80 Zeichen Dargestellt werden

Wenn mehr zeilen benutzt werden teilt man einfach 128/n
Also 2 Zeilen je 64 oder 4 je 32 oder eben 1*128

Warum ? weil dann der Controller einfach die
jeweilig gesetzten bits auswertet

( Wir versetzten uns in dumpfe 1 und null welt )

Der Controller schläft und saugt zufrieden die Batterie leer
Plötzlich Aufruhr im Gemach
Irgend ein Sack tritt vehement gegen die Enable Tür
Der Controller brauch ca 60us um aus seinem Tiefschlaf zu erwachen
Verärgert schaut er auf seine Ratgeber
RS pennt ( wie üblich der faule wicht )
Aber hoppla RW ist auch nicht wach----strange!
Der Controller wartet noch die eine oder andere us ab
watt mutt datt mutt denkt er sich und schaut mal was sich am Datenport
( Audienzsaal ) so abspielt
Klarer Fall:
Ist D5 gestetzt --> Klaro nächste Zeile
Ist D6 gesetzt ---> nochne Zeile dazu  ... usw
Son Controller wills halt auch einfach haben ( verstehe ich gut )
binn jetzt doch ein kleinwenig ins schwafeln gekommen
:-)


rechnung 0+64=40h
rechnung 0+32=20h
rechnung 0+32+32=40h
rechnung 0+32+32+32=60h

Soweit alles einfach Warum startet dann ein Display bei
80h ????????

Ganz simpel um dem Controller zu signalisieren hier kommen DDRAM
und nicht CGRAM Daten werden die D7 bzw D7D6 Datenbits
Ausgewertet

D7 =1 -> DDRAM Adresse
D7=0 D6=1 ->CGRAM Adresse

Das setzten des D7 bits entspricht aber
Na ???
Was Wohl ????
Richtig die 80h

Also die Null ist in Wirklichkeit eine 80h
Die Adressen laufen nicht 0..80 sondern 0..31 32..63 64..tbc

Na was will der Labersack mir sagen ?
Wie sag ichs meinem LCD ???

Ich will die dritte Zeile 1 position
3. Zeile also 64 also 40h im DDRAM

Damit der dooofe Flussig Stein Anzeigeplatt ( hab ich schon so gelesen )
das kapiert:

Addiere D7 bit als 80h dazu

kommt man also auf 80h+40h = C0h


Alles klar ?


Phagsae

von Kurt (Gast)


Lesenswert?

Bitte keine Antworten wie

"es war einmal ein uC, ....Irgend ein Sack tritt vehement gegen die 
Enable Tür
Der Controller brauch ca 60us um aus seinem Tiefschlaf zu erwachen
Verärgert schaut er auf seine Ratgeber
RS pennt ( wie üblich der faule wicht )
Aber hoppla RW ist auch nicht wach----strange!"

Ich kenne eine Anstalt, die.........



Ich möchte nur wissen, wie die vier Adressen für die vier Zeilen bei 
einem 4x16 Zeichendisplay lauten! Kann mir jemand weiterhelfen?

von Ingo B. (Gast)


Lesenswert?

Hi,

Du hast falsch gerechnet:
 0x80 (hex) + 20 (dez) ist nicht 0xA0 !
sondern 0x94 (hex)!

Genauso mit der 4. Zeile....

Ich hoffe das hat geholfen.

Bis dann,
Ingo.

von Phagsae (Gast)


Lesenswert?

A$80
B$C0
C$90
D$D0

Bitte bitte is ja n selbstbedienungsladen hier

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Mann Kurt,

da gibt sich jemand die Mühe eine ausführliche Anleitung zu schreiben, 
und du beschwerst dich auch noch. Warum probierst du nicht einfach aus 
wo die anderen Zeilen anfangen?

MfG
Andreas

von Kurt (Gast)


Lesenswert?

Danke Ingo!

Durch deine Ratschläge und ein paar Tests habe ich nun die richtigen 
Adressen herausgefunden.

Hier die richtigen Adressen für ein 4x16 Display ohne langes Schnick 
Schnack, falls noch jemand diese benötigt:

0x80  1. Zeile 1.Pos
0xC0  2. Zeile 1.Pos
0x90  3. Zeile 1.Pos
0xD0  4. Zeile 1.Pos

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.