www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Verständnissproblem LCD 4-Bit Mode


Autor: Stefan Winter (mobi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi und das leidige Thema LCD... NEIN

habe schon mehrere davon zum Laufen bekommen, doch nun habe ich nen 
kleinen Black out.

Das LCD ist an Port C
PC0-PC3 4-Bit Datenbus
PC4-PC7 Steuerbits und Backlight

So weit alles gut und schön.
Inn allen Sourcêcode beispielen findet mann, das die Bits geschoben 
werden und dann auf den Port Kopiert. Ist ja net, aber lösche ich damit 
nicht automatisch alle Steuerbits mit weg?

Sollte ich da richtig liegen, und dies kein Problem darstellen? Kann 
Sein.
Ist es ratsam die Steuerpins auf einen anderen Port zu legen?
Hat schon einer Negative Erfahrungen mit einer solchen Konstelation 
gemacht.


MfG
Mobi

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schau dir den Unterschied zwischen

PORTC = irgendwas;

und

PORTC |= irgendwas; bzw. PORTC &= irgendwas; an

http://www.mikrocontroller.net/articles/Bitmanipulation

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Stefan Winter

>Das LCD ist an Port C
>PC0-PC3 4-Bit Datenbus
>PC4-PC7 Steuerbits und Backlight

>werden und dann auf den Port Kopiert. Ist ja net, aber lösche ich damit
>nicht automatisch alle Steuerbits mit weg?

Nicht wenn man es richtig macht.

>Ist es ratsam die Steuerpins auf einen anderen Port zu legen?

Nicht nötig.

>Hat schon einer Negative Erfahrungen mit einer solchen Konstelation
>gemacht.

Ja, viele Anfänger die noch nicht verstanden haben wie man einzelne Bits 
in einem Port manipuliert ohne den Rest zu beeinflussen.

MfG
Falk

Autor: Stefan Winter (mobi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe es noch immer nicht zum 100% laufen bekommen.

Mit der Init das ist gelaufen... alle vier Zeilen sind als leichter 
schatten zu sehen und der Cursor blinkt.

Doch wenn ich nun was schreiben möchte geschieht was komisches.

der Courser bewegt sich beim ersten Zeichen, ohne dies darzustellen auf 
Zeile auf Position 20 bein nächsten auf Z4/P19 und danach Z4/P18 usw.

wenn man bei der Init Routiene das rechts link Bit nicht setzt ist das 
gleiche verhalten zu beobachten, nur das es nicht mit Zeile 4 sondern 
mit Zeile 3 passiert.

Die Anzahl der Cursorbewegungen stimmt mit den Sendebefehlten der 
Zeichen überein.

Gibt es bei den 4*20 mit einem HD44780A00 und 4*NJU6407CF eine 
Besonderheit, welche dies erklärt
Erst dachte ich es ist das LCD und nahm ein neues, was in einer 
schaltung seinen Dienst tat. Doch dieses verhielt sich gleich.

Mit den Zeiten beim Warten kann es nichts zu tun haben die sind völlig 
übertrieben.

MfG
Mobi

Autor: Philipp Burch (philipp_burch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zeig doch mal den Code, sonst wird das hier ein Rätselraten. Ich schätze 
mal, dass du irgendwo deine Steuerpins überschreibst. Und dann ist da 
nochwas: Probleme an PortC riechen nach JTAG aktiviert. Ist es evtl. ein 
ATmega16 oder so und du hast vergessen JTAG zu deaktivieren (Fuse)?

Autor: Stefan Winter (mobi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo und danke für alle Antworten bis Dato


Ich nutze einen Mega8535L mit 8MHz und 5V VCC


Es gibt neue Erkenntnisse.....

ich habe mal den Test gemacht und geschaut, was das LCD am Busypin 
eigendlich macht. Wärend  der Initroutiene läuft alles Super auch mit BF 
Abfrage.
Nach der Initroutine bleibt das BF nach dem ersten senden auf H. Dies 
ist selbst nach 30 Sek. nicht weg. (Bei jeder Abfrage blinkt die LED)

Bei der Initroutiene frage ich das BF vor jedem Schreibzugriff ab, und 
es macht, was es machen soll.

beim schreiben der Zeichen hingegen, bleibt es wie gesagt stehen.

Frage... ich muss um ein Zeichen ausgeben zu können das RS setzten, 
damit das LCD mitbekommt, das ich keinen Befehl sende sondern ein 
Zeichen?

MfG
Mobi

Autor: Stefan Winter (mobi)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier noch mal der Code ....Sorry

Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schau dir mal folgenden Thread an:

Beitrag "Wie mache ich eine Textausgabe 8Bit auf Display?"

Hier findest du eine Beschreibung zu BITs & Bytes als auch eine 
Beschreibung für eine 4 BIT display Ansteuerung. Am Schluß gibts auch 
den kompletten Code. Auf Dauer mag man das Thema LCD nicht mehr 
diskutieren, also, schaus dir an und stelle dann deine Fragen.

Autor: Stefan Winter (mobi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Danke Danke... für diese SEEEEEHHHHHRRRR Hilfreiche Antwort. ;-|

Möchte Hier keinen vor den Kopf stossen, aber ich benötige doch evektive 
Hilfe bei diesem LCD....
Alle schreiben das ein 4 Zeiliges mit HD4478.. Controller ist.
aber diese halt nicht, und davon habe ich zwei. im 8Bit mode läuft es 
ohne Prob. nur im 4 Bit mode komme ich bis zur init, welche OK geht.
Beim Zeichen ausgeben bleibt der BF hängen.

??? Ich fragte den BF auch mal nach jedem Transver ab, doch auch keine 
Besserung.

Mobi

Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Cursor nach rechts / kein Shift = 0x06 !?!?

Autor: Christoph (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du dir die erste Antwort in diesem Topic überhaupt mal zu Herzen 
genommen? Hab nur mal kurz in deinen Code reingeschaut, aber wenn du die 
Daten- und Steuerleitungen an Port C hast dann zerschießt du dir mit der 
Zeile

PORTC = data;     // Daten auf LCD port kopieren

natürlich deine Steuersignale.

Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Er hätte nur mal meiner Empfehlung folgen sollen, da sind mehrere Fehler 
vorhanden ;-))

War doch seeeeeeeeeehhhhhhhhhhhhhrrr hilfreich ;-))

Autor: Stefan Winter (mobi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen...

>Christoph:

Das war der Tipp, den ich Brauchte... im eigenen Code findet man meist 
die leichtesten Fehler nicht...Danke für dem Wink mit dem Zaunpfahl ;-))

mobi

PS.: Habe alle antw. sehr genau gelesen, aber der Fehler ist zu 
offensichtilch, als das man ihn da vermutet.


Autor: Michael U. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Du brauchst Hilfe? Dein RS steht falsch, wenn Du Busy in der 
Datenroutine abfragst...

Gruß aus Berlin
Michael

Autor: Stefan Winter (mobi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi und allen Helfern mit sindvollen Lösungen einen Herzlichen Dank

Auch an Michael U.:....

Danke hat mir suchen gespart. aber das Hauptproblem war eigentlich nur, 
das
beim abfragen des BF nach dem Senden von 0x1111 der Port beim 
inputschalten und lesen das D7 immer noch H hatte und ich damit die 
selbst gesetzte 1 an D7 gelesen habe. nun lösche ich erst den PORTC 
setze dan meine Register und lese anschließend D7 von LCD. und siehe da 
es Funktioniert.


Hurra und allen noch einmal herzlichen Dank.
Auch wenn das Thema LCD einigen lästig erscheint und ich auch nicht das 
erste LCD anschliesse und Proge., doch es gibt immer was neues zu 
entdecken.

Ich bin der Meinung alle solten allen Helfen und wenn es etwas länger 
dauert, na und der der Hilfe Braucht, freut scih immer wenn er effektive 
Hilfe bekommt. Manchmal, aber nur manchmal... hilft da auch das 
Tutorial/LCD nicht weiter, weil dort nicht jede möglichkeit abgearbeitet 
werden kann, die auftretten könnte.

Trotzdem allen Danke, Es geht nun.

Wer sich selbst hilft, dem sollte geholfen werden.

Mobi

Autor: Michael U. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe mir Deinen Code so genau nicht angeschaut. Für mich gibt es bei 
solchen Sachen einfach ein paar Grundregeln: wenn die Datenrichtung auf 
Eingang gewechselt werden muß, muß das Display in TriStae sein, also muß 
E auf L sein oder CS auf H bei anderen Displays. Sonst gibt es 
Busprügeleien, weil kurzzeitig 2 Ausgänge gegeneinander arbeiten können.
Wenn auf Ausgang gewechselt werden soll, gilt das gleiche, damit das 
Display keine undefinierten Daten einlesen kann.
Außerdem nutze ich immer die gleiche Reihenfolge: Port ist immer 
Ausgang, Daten setzen, RW setzen, RS passend setzen, E oder CS-Puls, RW 
zurück auf Lesen.

Beim Lesen Portrichtung ändern, RS passend setzen, E oder CS aktivieren, 
Daten einlesen, E oder CS inaktiv, Daten auswerten.

Wenn nötig, kommen da noch Verzögerungen oder ein NOP dazwischen (z.B. 
zwischen E/CS aktiv und dem Einlesen der Daten, der AVR setzt die 
Portbits erst im nächsten Zyklus.

Wenn man seinen eigenen Ablauf immer einhält und im Datenblatt des 
Controllers kontrolliert, melden sich auch für mich neue Controller sehr 
schnell wie gewünscht.

Das heißt nicht, daß ich nicht auch schon 2 Stunden gesucht habe, bis 
ich meinen Tippfehler gefunden habe...

Displays am Port sind recht unkritisch, weil man nur wenige Abläufe und 
das Timing einhalten muß. Diskussionen z.B. mit I2C-ICs konnen da mehr 
nerven, wenn man sich nicht 100% auf die I2C-Routinen verlassen kann und 
so mit mehreren Unbekannten kämpft.

Gruß aus Berlin
Michael



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.