Forum: Mikrocontroller und Digitale Elektronik LCD 4x20 DDRAM Adresse S6A0069


von spacemikel (Gast)


Lesenswert?

Hi Leute kann mir einer verraten wie ich an meinem 4x20LCD die Adressen
anspreche? Ich  möchte nicht immer nur in der linken oberen Ecke (DDRAM
00H) anfangen zu schreiben.

Auf dem LCD befinden sich zwei S6A0069.

Die DDRAM Adressen sind

1Zeile: 00H-13H
2zeile: 40H-53H
3Zeile: 14H-27H
4Zeile: 54H-67H

Es gibt nur ein E und das Display mit 2Controlern, wird als eins
verwaltet.

Die Initialiierung läuft 1a. Nur ich schaffe es nicht den Text an eine
beliebige Position zu schreiben.

Bsp:
// jetzt wird die Adresse ausgewählt
CLEAR_BIT(PORTA, PINA7);////RW=0,Daten werden in das Modul
geschrieben
CLEAR_BIT(PORTA, PINA6);//RS=0,Daten werden als Befehl interpretiert
PORTA|=(1<<PINA5);  //setzt E
PORTC=0xa;  // 10
PORTA&=~(1<<PINA5);  //übernahme der Daten E löschen

//Zeichen schreiben z.B. 8 0b00111000;
busy();
PORTA|=(1<<PINA6);  //RS=1 Daten werden als Text interpretiert
PORTA&=~(1<<PINA7);  //RW=0, daten werden in das Modul geschrieben
PORTA|=(1<<PINA5);  //setzt E
PORTC=0b00111000;  // 8
PORTA&=~(1<<PINA5);  //übernahme der Daten E löschen


Help, hat einer eine Idee, warum ich jetzt nicht an der Stelle 10(0aH)
des Displays schreibe, sondern immer noch in der linken oberen Ecke?

Danke

Ciao Spacemikel

von peter (Gast)


Lesenswert?

Hallo Spacemikel

wie hast Du das LCD angeschlossen? 4 Bit oder 8 Bit Mode?

Wenn Du wie ich vermute im 8 Bit Mode arbeitest, so must du DB7 bei der
Adressierung setzen. Also für Zeichen an Zeile 0, Spalte 10

0b10001010 0x8A

Für Zeile 3, Spalte 2 0b10001111 0x8F
Zeile 2 Spalte 10 0b11001010 0xCA

Gruß
Peter

von spacemikel (Gast)


Angehängte Dateien:

Lesenswert?

Hi Peter,

danke für deine Tip, doch leider klappt es so auch nicht.

Ich habe das Display im 8Bit Modus angeschlossen.
DB7 habe ich auch schon gesetzt und auch nicht, ich komme einfach nicht
von der 1 Position weg (00h).
Mein vorletzter Schritt in der LCD_INIT ist Clear Display, dann hänge
ich an der Position, ohne Clear Display springt der Cursor zufällig auf
dem LCD rum.

Hast du noch einen Tip für mich?

Im Anhang befindet sich meine LCD_INIT

Danke.

Ciao Spacemikel

von Hannes L. (hannes)


Lesenswert?

Ich weiß zwar nicht, ob es daran liegt, aber ich lege zuerst die Daten
an den Datenport des LCDs und generiere anschließend den Impuls von 7
Takten Impulsdauer. Ich arbeite allerdings in ASM.

...

von peter (Gast)


Lesenswert?

Hallo Spacemikel
wie lange wartest Du nach dem setzen der Cursorposition? Ich kann kein
wait sehen. Probier es mal mit 64 ms und dann einem display.

Gruß
Peter

von Hannes L. (hannes)


Angehängte Dateien:

Lesenswert?

Das Setzen der Cursorposition mit dem Kommando "Set DD-RAM Adress"
braucht keine besondere Wartezeit, das dauert 42µs, so wie die meisten
Kommandos ("Read Data" und "Write Data" dauern 46µs).

Was richtig lange dauert und was man nach der Initialisierung tunlichst
vermeidet, das ist "Display Clear" und "Return Home" mit 1,64ms.

Viele LCDs benötigen nach dem Anlegen der Betriebsspannung eine längere
Pause, bis man sie ansprechen kann. Im Datenblatt (des 4x20) steht 15ms,
nachdem die Betriebsspannung 4,5V überschritten hat. Etwas mehr schadet
bestimmt nicht.

Ich hänge mal eine halbfertige, aber funktionierenden
LCD-Routinensammlung an, ist zwar für 4 Zeilen mit 20 Zeichen, in
AVR-Assembler und im Nibble-Mode, aber ich denke, dass man dort die
Initialisierung nachvollziehen kann.

...

von spacemikel (Gast)


Lesenswert?

Erfolg!!

Hi Leute, des Problems Lösung lag in der DB7=1 + der zusätzlichen
Wartezeit nach der LCD_INIT.

Danke für eure guten Tips :-)


Ciao Spacemikel

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.