www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Hilfe mit LCD Hitachi 44780!


Autor: E. L. (robo-man)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!!! Ich habe ein Problem mit meinem LCD. Weil ich keine buchstaben 
oder zahlen darstellen kann. Ich habe schon alles was ich konnte 
ausprobiert. Denn Cursor hin-und herbewegen klappt alles aus -und 
einschalten..... Aber wenn ich möchte das was angezeigt wird, dann führt 
er anstatt was anzuzeigen lieber ein commando aus. Meiner Meinung nach, 
muss es mit diesem Code klappen. Das schema ist aus dem Datenblatt. Aber 
er schreibt nicht sondern springt in die zweite zeile und 8en platz.


_delay_ms(200);         //Vor dem start ein bisschen warten
e_enable();
LCD=0x38;               // 8-Bit-Modus, zwei zeilen, 5x8
e_disable();
_delay_ms(5);
e_enable();
LCD=0x0E;               //Display an, Cursor an, kein Blinken
e_disable();
_delay_ms(5);
e_enable();
LCD=0x06;               //Entry Mode
e_disable();
_delay_ms(5);
e_enable();            // E aktivieren
LCD=0x01;              // Display löschen
e_disable();           // E deaktivieren
_delay_ms(5);          // 5ms Warten
rs_enable();           //RS aktivieren
e_enable();            // E aktivieren
LCD=0x48;              // Hier sollte ein buchstabe 'H' angezeigt werden
e_disable();           // E deaktivieren


Ich hoffe ihr könnt mir helfen.
Danke im Vorrraus!!!!

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Aber wenn ich möchte das was angezeigt wird, dann führt
>er anstatt was anzuzeigen lieber ein commando aus. Meiner Meinung nach,
>muss es mit diesem Code klappen. Das schema ist aus dem Datenblatt. Aber
>er schreibt nicht sondern springt in die zweite zeile und 8en platz.

Dann könnte man glatt auf die Idee kommen
das mit dem RS Pin etwas nicht stimmt.

Autor: E. L. (robo-man)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die schnelle Antwort. Aber am RS-Pin liegt es nicht, auf 
jedenfall nicht in der Verdrahtung. Kann natürlich intern kaputt sein. 
Und was ist mit dem Code? Ist doch eigentlich richtig oder? Ich hab 
jetzt leider keinen anderen LCD da, um es auszuprobieren.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Aber am RS-Pin liegt es nicht, auf
>jedenfall nicht in der Verdrahtung.

Dann wird es wohl die Software sein
die den RS Pin steuert.

Autor: E. L. (robo-man)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab aber keine Ahunug, was an der software falsch sein könnte. Den 
RS pin hab ich mit nem Spannungsmesser gemessen und er funktioniert.

Autor: E. L. (robo-man)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Problem gefunden. Hab jetzt den RS-Pin per hand ( Drahtbrücke) 
geschalten. Und es ging. Der Controller setzt den pin wieder auf 0 
obwohl ich es ihm nicht befohlen habe. Vielleicht braucht der LCD so 
viel strom, dass deshalb der Controller abstürzt.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Der Controller setzt den pin wieder auf 0
>obwohl ich es ihm nicht befohlen habe.

Buhaha ;)

>Vielleicht braucht der LCD so
>viel strom, dass deshalb der Controller abstürzt.

Nö, du setzt den Pin vermutlich selber wieder auf 0.
An welcher Stelle des Programmes musst du noch rausfinden.

Autor: hownottobeseen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich würde mal tippen...


rs_enable();           //RS aktivieren
e_enable();            // E aktivieren *<--- hier*

Autor: E. L. (robo-man)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke stimmt. Aber warum?? Bei mir war es so definiert:

#define rs_enable()    PORTB |=(1<<PB1);
#define  rs_disable()          PORTB &=~ (1<<PB1);
#define  e_enable()    PORTB |=(1<<PB0);
#define  e_disable()    PORTB &=~ (1<<PB0);


und jetzt hab ichs so geschrieben und es funktioniert:

_delay_ms(5);
PORTB=(1<<PB0)|(1<<PB2);
PORTD=0x48;                  // Jetzt kommt ein 'H' heraus
PORTB &=~(1<<PB0);
_delay_ms(300);

Vielen Dank!!!
Ich glaub ich wäre nie draufgekommen. oder erst in ein paar jahren :)

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alex L. schrieb:
> Danke stimmt. Aber warum?? Bei mir war es so definiert:
> #define rs_enable()    PORTB |=(1<<PB1);
> #define  rs_disable()          PORTB &=~ (1<<PB1);
> .[..]
> PORTB=(1<<PB0)|(1<<PB2);

Fällt Dir was auf?  Der funktionierende Code verwendet PB2, nicht PB1.

Hättest Du
#define LCD_RS PB2
...
#define RS_ENABLE PORTB |= 1<<LCD_RS
genommen, wäre das nicht passiert ...

Autor: E. L. (robo-man)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oh man bin ich blöd!!!

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.