LCD Display 2-te Zeile in c aktivieren

Gast #1756792
Lesenswert?

Hallo!

Ich möchte bei meinem LCD Display die zweite zeile ansteuern! Das 
Problem ist, das ich es im 4 bit Modus betreibe. Leider weiß ich nicht 
wie ich das Register beschreibe!?! hab meinen Code mal angehängt. Schon 
mal vielen Dank im Vorraus!

void lcd_Zeile(void)
{
    PORTB &= ~(1<<PB2);  //RS-Register auf Command setzen
    PORTB &= ~(1<<PB1); //Display auf READ setzen

    PORTA &= (0xC0);  //wie steuere ich im 4-bit Modus die 2te Zeile 
an???

    timer_wait(5);
    enable();

}

Achso...alles was geschrieben werden soll definiere ich woanders! In der 
ersten Zeile schreibt er alles wunderbar und ich komm auch, wenn ich 
genug zeichen schreibe, in die 2te zeile!
Gast #1756832
Lesenswert?

Hi

>void lcd_Zeile(void)
>{
>    PORTB &= ~(1<<PB2);  //RS-Register auf Command setzen
>    PORTB &= ~(1<<PB1); //Display auf READ setzen
>    PORTA &= (0xC0);  //wie steuere ich im 4-bit Modus die 2te Zeile an?
>    timer_wait(5);
>    enable();
>}

Und was hat das mit der Ansteuerung eines LCDs im 4-Bit-Mode zu tun?

MfG Spess
Gast #1756860
Lesenswert?

Also ich hab jetzt geschrieben (laut anderer Foreneinträge):

Set DDRAM address : 0b11000000;

bekomme jetzt Fehler:



error: 'Set' undeclared (first use in this function)
error: (Each undeclared identifier is reported only once
error: for each function it appears in.)
expected ';' before 'DD'
Gast #1757276
Lesenswert?

Moin,
im 4 Bit Modus musst du immer erst das obere Nibble deines Befehls 
senden und dann das untere, schau mal die Initialisierung im 4 Bit Modus 
an, da wirds vielleicht klarer:
http://sprut.de/electronic/lcd/index.htm#init

hast du deine 4 Datenpins zB an Port A an Pin 0-3
könnte ein Befehl so aussehen (wörtlich beschrieben):

uint8_t befehl = 0b11000000;

- PORTA = (befehl >> 4) & 0xf (oberes nibble)
- SET/RESET ENABLE_PIN
- PORTA = (befehl) & 0xf (unteres nibble)
- SET/RESET ENABLE_PIN
#1757284
Lesenswert?

Hallo,

janosch schrieb:
> Dankeschöön! Geht scho! ;)
> Es liegt halt einfach nur an dem Register bzw das ich halt nicht weiß
> wie ich draufzugreife/schreibe!
>
> Naja trotzdem Danke für die Hilfe ich probier mal weiter!!

Ähm.. Du schreibst oben, daß die Ansteuerung funktioniert.
Du schreibst, daß Du Text ausgeben kannst.

Du hast also das Display initialisiert bekommen und kannst Daten zum 
Display schicken.

Mehr als Kommandos (beim Initialisieren) und Daten (die Zeichen) zum 
Display schicken braucht man normalerweise nicht.

Wo ist also Dein Problem, das Kommando SetDDRam mit dem passenden Werten 
zum Display zu schicken?
Beim Init geht es bei Dir doch auch mit den Kommandos???

Deine Displayfunktionen hast Du ja nicht verraten...

Gruß aus Berlin
Michael
#1757285
Lesenswert?

janosch schrieb:
> Dankeschöön! Geht scho! ;)
> Es liegt halt einfach nur an dem Register bzw das ich halt nicht weiß
> wie ich draufzugreife/schreibe!

Normalerweise hat man eine Funktion, die einem die Details der 
Übertragung eines Wertes an das LCD abnimmt. Diese Funktion weiß darüber 
Bescheid, wie ein 8-Bit Wert an ein LCD geschickt wird, das im 4-Bit 
Modus betrieben wird.

Aufbauend auf dieser Funktion, müssen sich dann die weiteren Funktionen, 
wie zb eine Funktion die den Cursor in die 2te Zeile setzt, nicht mehr 
um die Details der Übertragung oder des Portzugriffs kümmern. Sie 
übergeben einfach dieser Funktion das Kommando und die Funktion (welche 
sich wiederrum einen feuchten Kehrricht darum kümmert was das Byte 
bedeutet, welches sie gerade überträgt) spielt diesen Wert dem LCD zu.

Vielleicht solltest du dir erst mal andere LCD-Code Sammlungen ansehen, 
ehe du mit minimalem Wissen darüber, wie man Basislibraries schreibt, 
daran gehst dir selbst den Tag zu versauen.

Insofern hat spess53 nicht so unrecht, wenn er frägt ob du auch nur 
annähernd weißt was du da machst.
Obwohl: dieses Posting 
Beitrag "Re: LCD Display 2-te Zeile in c aktivieren" ist dann auch ganz 
schön starker Tobak. Wenn es das tatsächlich das bedeutet, was ich im 
Moment denke, dann dürfte wohl auch die Aussage "Ich programmiere in C" 
nicht sehr viel mehr als Wunschdenken sein.

Studiere den Code in
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/LCD-Ansteuerung

Er ist zwar auch kein Musterbeispiel wie man so etwas macht, aber 
zumindest dieses Detail macht er 100% richtig.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren