mikrocontroller.net

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


Autor: janosch (Gast)
Datum:

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

Autor: test (Gast)
Datum:

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

Autor: janosch (Gast)
Datum:

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

Autor: spess53 (Gast)
Datum:

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

Autor: janosch (Gast)
Datum:

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

Autor: spess53 (Gast)
Datum:

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

Autor: janosch (Gast)
Datum:

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

Autor: spess53 (Gast)
Datum:

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

Autor: janosch (Gast)
Datum:

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

Autor: test (Gast)
Datum:

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

Autor: Michael U. (amiga)
Datum:

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

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

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

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

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.