Forum: Compiler & IDEs LCD-Ansteurung


von Reda (Gast)


Lesenswert?

Hallo AVR-Famille,

Ich habe eine interssante Frage und zwar:

ich möchte nach dem Drücken der Eingabe-Taste die 2. Zeile eines LCD 
löschen und in die 1. Zeile kopieren.

Falls jemand eine Idee hat, bitte ab in die Tastatur :)

Danke und schönes Wochenende an alle

von Falk B. (falk)


Lesenswert?

@ Reda (Gast)

>Ich habe eine interssante Frage und zwar:

Naja, interessant ist was anderes . . .

>ich möchte nach dem Drücken der Eingabe-Taste die 2. Zeile eines LCD
>löschen und in die 1. Zeile kopieren.

LCDs haben doch gar jeine Eingabetasten . . .

>Falls jemand eine Idee hat, bitte ab in die Tastatur :)

Wenn du meinst, dass ein AVR oder anderer uC das LCD steuert, na 
DAAAANNN.

Man könnte den DDRAM des LCD auslesen (2. Zeile), in die erste kopieren 
und dann die Zweite löschen.
Meistens wird man aber in solchen Anwendungen ein Kopie der LCD Daten im 
RAM vom uC haben. Dort macht man dann das Gleiche, nur einfacher, man 
muss nicht das LCD langsam und aufwändig auslesen.

MFG
Falk

von Reda (Gast)


Lesenswert?

Hallo Falk,
danke für deine Antwort.

Es geht natürlich um eine LCD-Ansteurung und eine PC-Tastatur-Abfrage.
Das LCD ist über eine ATmega32 angesteurt.


 >Man könnte den DDRAM des LCD auslesen (2. Zeile), in die erste 
kopieren
und dann die Zweite löschen.
 Wie kann man den DD RAM Speicher auslesen ?

>Meistens wird man aber in solchen Anwendungen ein Kopie der LCD Daten im
RAM vom uC haben. Dort macht man dann das Gleiche, nur einfacher, man
muss nicht das LCD langsam und aufwändig auslesen.

Wie kann man eine Kopie der Daten des LCDs haben ?


Vielleicht noch mehr Erklärungen oder ein C-Code dafür !

 Danke für deine Antwort.

von Reda (Gast)


Lesenswert?

Hallo Falk,
danke für deine Antwort.

Es geht natürlich um eine LCD-Ansteurung und eine PC-Tastatur-Abfrage.
Das LCD ist über eine ATmega32 angesteurt.


>Man könnte den DDRAM des LCD auslesen (2. Zeile), in die erste
>kopieren und dann die Zweite löschen.

 Wie kann man den DD RAM Speicher auslesen ?

>Meistens wird man aber in solchen Anwendungen ein Kopie der LCD Daten im
>RAM vom uC haben. Dort macht man dann das Gleiche, nur einfacher, man
>muss nicht das LCD langsam und aufwändig auslesen.

Wie kann man eine Kopie der Daten des LCDs haben ?


Vielleicht noch mehr Erklärungen oder ein C-Code dafür !

von Karl H. (kbuchegg)


Lesenswert?

Reda wrote:

> Wie kann man eine Kopie der Daten des LCDs haben ?
> Vielleicht noch mehr Erklärungen oder ein C-Code dafür !

Ist eigentlich sehr simpel.
Du hast in deinem Programm 2 char Arrays, die die LCD Anzeige
repräsentieren.
Dazu hast du noch eine Funktion, die diese beiden Arrays immer
komplett an das LCD ausgibt.

Eine 'Ausgabe' gestaltet sich dann wie folgt.
Du machst deine Anzeigenmanipulationen in diesen beiden Arrays
und wenn du fertig bist, rufst du die eigentliche Ausgabefunktion
auf, welche das LCD komplett löscht und neu mit den Zeichen aus
den beiden Arrays befüllt.

Oft macht man das auch so, dass man diese Ausgabefunktion zb. mit
einem Timer regelmässig aufruft. Das hat dann den Vorteil, dass du
dich um die eigentliche Ausgabe auf das LCD im Programm so überhaupt
nicht mehr kümmern musst. Für dein Programm besteht das LCD einfach
nur aus den beiden char-Arrays in denen dein Programm die
Manipulationen macht welche dann 'magisch' irgendwann tatsächlich
am LCD sichtbar werden.

von Falk B. (falk)


Lesenswert?

@ Reda (Gast)

> Wie kann man den DD RAM Speicher auslesen ?

Steht im Datenblatt.

MFG
Falk

von Falk B. (falk)


Lesenswert?

@ Karl heinz Buchegger (kbuchegg) (Moderator)

>auf, welche das LCD komplett löscht und neu mit den Zeichen aus
>den beiden Arrays befüllt.

Es reicht, die Daten zu überschreiben. Ist wesentlich schneller.
Wozu zwei Arrays? Wir brauchen hier doch keinen Doppelpuffer, wie auf 
dem PC für flackerfreie Animationen.

MFG
Falk

von Reda (Gast)


Lesenswert?

Hallo Karl heinz Buchegger,

es geht nochmal darum die 2. Zeile des LCDs löschen und nach dem Drücken 
der Eingabe-Taste der Tastatur, die 2 Zeile löschen und in die 1. 
kopieren:



int main (void){

lcd_init();

char c ;
c = uart_getc();   // wenn ein Zeichen empfangen wurde, wird in c
                      // gespeichert


 Eingabe-Taste drücken wenn die 2. Zeile zu ende ist;

 set_cursor(0,2);   // Cursor auf die 1. Stelle der 2. Zeile
 lcd_clear();       // lcd komplett gelöscht

 set_cursor(0,1);   // Cursor auf die 1. Stelle der 1.zeile
 lcd_data(c);       // das zeichen an das lcd schicken


return 0;

}

MfG

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.