www.mikrocontroller.net

Forum: Compiler & IDEs LCD-Ansteurung


Autor: Reda (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Reda (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Reda (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 !

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Reda (Gast)

> Wie kann man den DD RAM Speicher auslesen ?

Steht im Datenblatt.

MFG
Falk

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Reda (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.