Forum: Mikrocontroller und Digitale Elektronik 2. Zeile vom LCD beschreiben


von Malte P. (malte-cux)


Angehängte Dateien:

Lesenswert?

Hey,

ich habe anhand des AVR-Tutorials mich mit dem LCD EA DIP162-D 
beschäftigt.
Wenn ich so wie beschrieben vorgehe, erscheint auch in der ersten Zeile 
der Text.

Meine Frage ist wie ich nun etwas in die zweite Zeile schreiben kann.

Habe versucht die Adresse des Cursors zu verändern...
Aber ohne Erfolg.

Im Anhang das Datenblatt des LCD´s

Die Datei lcd-routines.asm ist unverändert zu dem Tut. Dort ist auf 4 
bit und eigentlich auch 2 Zeile eingestellt.
Warum muss ich diese Datei eigentlich am Ende meines Quellcodes 
"includen"?

Hier der Quellcode:

.include "m8def.inc"         ; Definitionsdatei für den Prozessortyp 
einbinden

.def temp1 = r16
.def temp2 = r17
.def temp3 = r18


           ldi temp1, LOW(RAMEND)      ; LOW-Byte der obersten 
RAM-Adresse
           out SPL, temp1
           ldi temp1, HIGH(RAMEND)     ; HIGH-Byte der obersten 
RAM-Adresse
           out SPH, temp1

           ldi temp1, 0xFF    ; Port D = Ausgang
           out DDRD, temp1

           rcall lcd_init     ; Display initialisieren
           rcall lcd_clear    ; Display löschen


     ldi temp1, ' '     ; Zeichen anzeigen
           rcall lcd_data

     ldi temp1, ' '     ; Zeichen anzeigen
           rcall lcd_data

     ldi temp1, ' '     ; Zeichen anzeigen
           rcall lcd_data

     ldi temp1, 'T'     ; Zeichen anzeigen
           rcall lcd_data

           ldi temp1, 'e'     ; Zeichen anzeigen
           rcall lcd_data

           ldi temp1, 's'     ; Zeichen anzeigen
           rcall lcd_data

           ldi temp1, 't'     ; Zeichen anzeigen
           rcall lcd_data

     ldi temp1, 0b10100001
     rcall lcd_command

     ldi temp1, 'T'     ; Zeichen anzeigen
           rcall lcd_data

           ldi temp1, 'e'     ; Zeichen anzeigen
           rcall lcd_data

           ldi temp1, 's'     ; Zeichen anzeigen
           rcall lcd_data

           ldi temp1, 't'     ; Zeichen anzeigen
           rcall lcd_data




loop:
           rjmp loop


.include "lcd-routines.asm"            ; LCD-Routinen werden hier 
eingefügt



Viele Grüße
Malte

von spess53 (Gast)


Lesenswert?

Hi

>     ldi temp1, 0b10100001
>     rcall lcd_command

Wie kommst du auf die DDRAM-Adresse $21. Normalerweise beginnt die 
2.Zeile an der Adresse $40.

MfG Spess

von Malte P. (malte-cux)


Lesenswert?

Wie kommst du auf $21 bzw $40?

habe jetzt mal folgendes draus gemacht:

ldi temp1, $40
rcall lcd_command

das ändert aber leider nichts an meiner Anzeige.

wer kann helfen?

Viele Grüße
Malte

von spess53 (Gast)


Lesenswert?

Hi

>habe jetzt mal folgendes draus gemacht:

>ldi temp1, $40
>rcall lcd_command

Du hast dir schon mal die Befehlsbeschreibung angesehen?

Der Befehl 'Set DDRAM Address' ist $1xxxxxxx. Wobei xxxxxxx die Adresse 
ist.

Also das so nichts werden.

MfG Spess

von Karl H. (kbuchegg)


Lesenswert?

Malte P. schrieb:
> Wie kommst du auf $21 bzw $40?

Das ist das Befehlsbyte von dir

>     ldi temp1, 0b10100001


also   0b10100001

Die linkste 1 ist konstant und kennzeichnet für das LCD das es sich um 
das Kommando "Set DDRAM Adress" handelt. Die muss also dort bleiben. 
Lässt du diese 1 daher mal links liegen

       0b.0100001

bzw ersetzt du Bits die du, da sie zur Kodierung des Befehls gebraucht 
werden und daher nicht zu den 'Daten' gerechnet werden können, durch 0 
dann bleibt

       0b00100001

und das ist nun mal Hex 21

> ldi temp1, $40

Da ist aber das 1 Bit an der Bitposition 7, welches das Kommando 'Set 
DDRAM Adress' kennzeichnet nicht gesetzt. Das musst du schon setzen.

Was auch immer du für eine Adresse willst, also zb hex 40

     0100 0000

du musst auch noch das 7 Bit setzen um den Befehl zu kennzeichnen

     1100 0000


Was musst du daher zum LCD schicken, um den Cursor an die DDRAM Adresse 
$40 zu setzen?

von Malte P. (malte-cux)


Lesenswert?

jo danke, jetzt läufts...

--> ldi temp1, 0b11000000

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.