Forum: Mikrocontroller und Digitale Elektronik LCD Display 2-te Zeile in c aktivieren


von janosch (Gast)


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!

von test (Gast)


Lesenswert?

Du musst mit dem Befehl "DD RAM Address Set" (Datenblatt) die Adresse 
der 2.Zeile auswählen, diese sind meist wie folgt:

1. Zeile: 0x00
2. Zeile: 0x40

Müsste aber auch im Datenblatt stehen.

http://sprut.de/electronic/lcd/index.htm#adressen

von janosch (Gast)


Lesenswert?

Danke für die schnelle Antwort!

Also das ich da 0x40 reinschreiben muss weiß ich aber nicht wie der 
Befehl genau aussehen muss!?!

Set DDRAM address = (0x40) ????

von spess53 (Gast)


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

von janosch (Gast)


Lesenswert?

Hi ja stimmt scho ich dachte ich muss das direkt auf den Port schreiben!
Also eigentlich möchte nur wissen wie der Befehl lautet um 0x40 in das 
Register zu schreiben!?!

mfg

von spess53 (Gast)


Lesenswert?

Hi

>Also eigentlich möchte nur wissen wie der Befehl lautet um 0x40 in das
>Register zu schreiben!?!

Im Befehlssatz des Displaycontrollers ist es der zum setzen der 
DDRAM-Adresse.

MfG Spess

von janosch (Gast)


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'

von spess53 (Gast)


Lesenswert?

Hi

Tut mir leid. Ich programmiere nicht in C. Aber bist du sicher, das du 
nur auch nur annähernd weißt, was du machst?

MfG Spess

von janosch (Gast)


Lesenswert?

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!!

mfg

von test (Gast)


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

von Michael U. (amiga)


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

von Karl H. (kbuchegg)


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.

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.