Forum: Mikrocontroller und Digitale Elektronik lcd 2te zeile


von Jochen (Gast)


Lesenswert?

Hallo, kann mir bitte jemand helfen?

Ich habe die LCD Schaltung aus dem Tutorial aufgebaut und sie geht
auch, nur habe ich ein Problem, wie komm ich in die 2te zeile?

Die erste kann ich wunderbar beschreiben aber in die 2te,naja da fängt
mein Problem an.

PS: Ich verwende AVR-Studio und den 4433.

Jochen

von matthias reiter (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Jochen,

wenn Du dir die anliegende pdf-Datei durchliest, wirst du merken,dass
Du das LCD richtig initalisieren musst (system-set).
Die zweite zeile erreichst du dann, wenn Du z.B. einen passenden
set-DD-Ram Befehl an das LCD sendest.
Anschliesend gibt das LCD die zeichen ab der Adresse aus, die du vorher
über den set-LCD-RAM befehl gesetzt hast.

z.B.:
MOV A, #127+64+11 ;An Spalte 11 2. Zeile springen (set_LCD_RAM)
call LCD_send_b    ; "

die zweite möglichkeit zum prinzipiellen ausprobieren ist die, dass du,
nachdem du das LCD mit dem system-set befehl für ein mehrzeiliges LCD
initialisiert hast, einfach einen ganz langen text in das lcd
schreibst. Ab dem 65ten Zeichen müsste die zweite Zeile beschrieben
werden.

mFG Matthias

von matthias reiter (Gast)


Lesenswert?

Hallo Jochen,

wenn du LCD-Test.asm aus dem tutorial verwendest, kannst du mal
folgendes ausprobieren:

Füge vor "loop:" folgendes ein:

           ldi temp1, #192     ;set LCD Ram Befehl
           rcall lcd_command   ; ans LCD senden

           ldi temp1, '2'     ;Zeichen anzeigen
           rcall lcd_data

Dann müsste eine 2 in der Zweiten Zeile erscheinen
Gruß Matthias

von matthias reiter (Gast)


Lesenswert?

Hallo Jochen,

der zu sendende LCD Ram Befehl heist natürlich "Set DD-RAM adress",
also
        1     A6   A5   A4   A3   A2   A1   A0
       Bit7  Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
über die Bits A0 bis A6 wird die Stelle angegeben, an die im LCD
gesprungen werden soll.

Die zweite Zeile geht bei zweizeiligen LCDs oft ab Ram adresse 64 los,
daß heist man muß #192 als Befehl an das LCD senden (rcall lcd_command)
um an die 2te Spalte der Zweiten Zeile zu gelangen.

Bit 7 des Befehls muß eins sein:             127
Die zweite Zeile fängt ab RAM-Stelle 64 an: + 64
Um von der ersten Spalte zur zweiten zu
gelangen, muß man eine Stelle weitergehen:  +  1
------------------------------------------------
                                            =192
                                            ====
Matthias

von matthias reiter (Gast)


Lesenswert?

Hallo Jochen,

der Fehlerteufel hat zugeschlagen, da 2^7 =128 muß es heißen:

Die zweite Zeile geht bei zweizeiligen LCDs oft ab Ram adresse 64 los,
daß heist man muß !! #193 !! als Befehl an das LCD senden (rcall
lcd_command)
um an die 2te Spalte der Zweiten Zeile zu gelangen.

Bit 7 des Befehls muß eins sein:      !!!    128 !!!
Die zweite Zeile fängt ab RAM-Stelle 64 an: + 64
Um von der ersten Spalte zur zweiten zu
gelangen, muß man eine Stelle weitergehen:  +  1
------------------------------------------------
                                        !!  =193 !!!
                                            ====
Matthias

von Jochen (Gast)


Lesenswert?

Hallo Matthias Reiter,

Erstmal danke für die schnelle Hilfe, jetzt klappt es. Nur konnte ich
#193 nicht senden ich musste es dann in Hex "C1" umwandeln und dann
War ich in der 2ten Zeile auf position 2 um auf position 1 zu kommen
musste ich einfach 192 oder C0 wie du am anfang sagtest an das lcd
senden.

Nochmals Dankeschön, Jochen Tontch.

von matthias reiter (Gast)


Lesenswert?

Hallo Jochen,

danke, dass du eine Rückmeldung gegeben hast, dass es jetzt
funktioniert.

Ich habe in letzter zeit nur mcs51'er programmiert.
Deshalb komme ich mit der Schreibweise vom AVR-Assembler immer
durcheinander. Ich glaube es müsste aber auch ohne Umwandlung in Hex
gehen. Nur die Raute muß, gelaube ich, weggelassen werden. Das ist mir
aus der mcs51'er Schreibweise reingerutscht. Probier doch mal
folgendes:

====================================================================
Anstatt #192 einfach nur 192
====================================================================

Füge vor "loop:" folgendes ein:

           ldi temp1, 192     ;set LCD Ram Befehl
           rcall lcd_command   ; ans LCD senden

           ldi temp1, '0'     ;Zeichen anzeigen
           rcall lcd_data

Ich bilde mir ein, das es so funktionieren müsste.
Möglicherweise funktioniert sogar das:

           ldi temp1, 128+63+8     ;set LCD Ram Befehl
                                   ;Zweite Zeile und 8te Spalte
                                   ; 1-2-3-4-5-6-7-8 wenn man mit 1
                                   ; zu zählen anfängt
           rcall lcd_command   ; ans LCD senden

           ldi temp1, '8'     ;Zeichen anzeigen
           rcall lcd_data

Tschüß Matthias

von Daniel S. (Gast)


Lesenswert?

hallo, hatte das selbe problem

jetzt:

           ldi temp1, 192     ;set LCD Ram Befehl
           rcall lcd_command   ; ans LCD senden

           ldi temp1, 'x'     ;Zeichen anzeigen
           rcall lcd_data

Funktioniert!

Danke auch.

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.