Forum: Mikrocontroller und Digitale Elektronik PIC16F877A - Problem mit LCD


von hb9tzw (Gast)


Lesenswert?

Hallo zusammen

Ich habe bei einem 16f877A (auf einer einfachen Platine testweise 
montiert) das Problem, dass das LCD-Display nichts anzeigt. Beim Anlegen 
von Versorgungsspannung leuchtet die Hintergrundbeleuchtung auf, 
angezeigt wird aber nichts.

Den Code habe ich in Picbasic Pro geschrieben, ohne Fehler compiliert 
und mit IC-PROG per ICSP auch ohne Fehlermeldung auf das PIC 
geschrieben. Der Programmer ist eine Kopie eines Olimex-Programmers auf 
JDM-Basis.

Vorher hatte ich die Software noch mit Proteus VSM simuliert, dort hat 
sie zwar auch noch nicht das getan was sie schlussendlich tun sollte, es 
wurde jedoch wenigstens etwas auf dem Display angezeigt.

Die Belegungen der Anschlüsse habe ich mehrmals kontrolliert, ich kann 
hier nach bestem Wissen und Gewissen keine vertauschten Pins finden. Als 
ich mit dem Voltmeter nachgemessen habe fiel mir jedoch auf, dass 
RB4-RB7 (DB4-DB7 am Display) sowie RB3 (RS am Display) hohes Niveau 
haben (also 5V) und RB2 (Enable) 2 Volt hat. Obwohl ich es nicht weiss, 
ahne ich dass hier etwas nicht ganz stimmt. Besonders Enable sollte doch 
wohl nicht irgendwo zwischendrin hängen.

Kann mir jemand Tipps geben zur Fehlersuche?

Gruss
Martin

von Jens (Gast)


Lesenswert?

Richtung der Ports richtig eingestellt?

Sieht so aus, als ob in Zeile 13 deines Codes der Fehler liegt.

von Sven H. (Gast)


Lesenswert?

Wenn, kannst du höchstens mit einem Oszi mal gucken, ob die Ports was 
ausspucken.

Hälst du deine Zeiten ein? Manche LCDs brauchen die Wartezeiten bei der 
Initialisierung, die im Datenblatt stehen.

Weiterhin gibt es Hochtemperaturdisplays, die für die Kontrastregelung 
eine negative Spannung benötigen, evtl ist dir so eins untergekommen?

Viel Erfolg!

von hb9tzw (Gast)


Lesenswert?

Jens

Die Richtung der Ports habe ich mit trisb = %00000001 definiert, meines 
Wissens sollte das rb1-rb7 auf Output und rb0 auf Input stellen. Kannst 
du mir bitte erklären, warum du den Fehler auf Zeile 13 vermutest? Zeile 
13 ist

symbol pwm_dutycycle = 50


Sven

Das mit dem Oszi ist eine gute Idee, kann ich aber nicht jetzt gleich 
machen. Im Datenblatt steht nichts über Zeiten bei der Initialisierung, 
das Datenblatt findest du hier:

http://www.powertip.com.tw/product/PC%20SERIES/PC%201602-K-Y4.PDF

Momentan führen Pin 2 und Pin 15 des LCDs 5V, an Pin VO (Kontrast) habe 
ich einen einfachen Festspannungsteiler aus 2 10k Widerständen 
angeschlossen (statt eines Potentiometers), wenn ich bei eingeschaltetem 
LCD an VO messe liegen aber trotzdem 5V an.

Danke euch vielmals, für weitere Hilfe bin ich dankbar.

Gruss
Martin

von Michael U. (Gast)


Lesenswert?

Hallo,

>"Kannst du mir bitte erklären, warum du den Fehler auf Zeile 13 vermutest?"

Weil es ihm wie allen anderen hier mitlesenden geht: sie habe keine 
Glaskugel...

Du hast Deinen Sourcecode nicht gepostet, Du hast keine Beschaltung 
gepostet, Du hast irgendwas gemacht, das geht nun nicht und wir sollen 
hellsehen können.

Das Datenblatt des Displays sagt alles und nichts. Welcher Kontroller 
ist da verwendet? HD44780 kompatibel?
Hast Du Deine Routinen nach dem Datenblatt des Kontrollers programmiert?
Abläufe, Timing usw.?
4-Bit-Mode (den scheinst Du ja zu benutzen) richtig initialisiert? 
Fragst Du Busy ab oder benutzt Du Wartezeiten?
Das Display zeigt ohne Ansteuerung nach PowerOn in der oberen Zeile 
einen schwarzen Balken, wenn der Kontrast richtig eingestellt ist.
Wäre ein großer Zufall, wenn Dein Spannungsteiler da gerade den 
richtigen Wert liefert. Heißt ja nicht ganz umsonst Kontrast Adjust, der 
Pin...

Gruß aus Berlin
Michael


von Schoasch (Gast)


Lesenswert?

Hi

>>Sieht so aus, als ob in Zeile 13 deines Codes der Fehler liegt.

Das sollte als kleine anspielung darauf gedacht sein, dass man ohne den 
Programmcode auch keinen fehler im Code finden kann ;-). Also häng den 
einmal an.

Es sieht mir ganz danach aus, das dieses LCD eine HD44780-Controller 
drinn hat. Und diese braucht sehrwohl bei der initialisierung eine 
gewisse Wartezeit.Also füg doch nach jeden Schreibzugriff in der 
Initialisierung ein delay von ein paar Millisekunden ein.
Und zeig uns einmal deinen Code.

Und wieso ist RB0 als Input?

mfg Schoasch

PS.: Hast du vl auch einen Schaltplan deiner Schaltung?

von Sven H. (Gast)


Lesenswert?

Also 5V als Kontraststpannung ist, vermute ich mal, entschieden zu hoch. 
Bei meinen Displays liegt die so zwischen 0,6 bis 0,8 Volt, wenn ich mit 
der Anzeige zufrieden bin. Änder da mal den Spannungsteiler entsprechend 
wenn du kein Poti hast... (10k und 2,2k sollten etwa hinkommen für nen 
groben Test).


+5V---  R 10k --- R 2,2k --- GND
               |
               |
           z.LCD Kontrast

Sven

von hb9tzw (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen

Ich war eine Woche abwesend, deshalb konnte ich auch nicht antworten.

Bevor wir uns mit der Software beschäftigen möchte ich nochmal auf die 
Hardware zurückkommen. Ich habe mittlerweile ein Potentiometer 
eingebaut, mit dem ich die Spannung an Vo regeln kann. Wann sollte jetzt 
auf dem Display ein Balken zu sehen sein? Trotz Verstellen der Spannung 
war bisher nie etwas zu sehen.

Anbei noch das Schema. Ich habe das auf einer Lochrasterplatine zum 
Ausprobieren aufgebaut.

Gruss
Martin

von Marco S. (masterof)


Lesenswert?

leg mal die Pins am LCD D0 bis D3 auf masse.

Das wird war scheinlich ein Display mit erweitertem Temperaturbereich 
sein.
Der muss mit negativer Kontrastspannung angesteuert werden (0V bis -5V).

von hb9tzw (Gast)


Lesenswert?

Marco, danke für den Tip, leider ändert es aber auch nichts wenn ich die 
Pins an Masse schalte.

Könnte es sein, dass 5V nicht als Betriebsspannung ausreichen? Aus dem 
Datenblatt (weiter oben) werde ich nicht ganz schlau.

Gruss
Martin

von hb9tzw (Gast)


Angehängte Dateien:

Lesenswert?

Hier habe ich noch den Programmcode bis zur Display-Initialisierung 
angehängt. Falls mir jemand sagen kann, ob das Hand und Fuss hat, dann 
bitte ich darum.

Gruss
Martin

von Marco S. (masterof)


Lesenswert?

und hast du das mit der negativen Kontrastspannung versucht?

von hb9tzw (Gast)


Lesenswert?

Nein, ich hatte keine negative Spannungsquelle zur Verfügung.

Dafür habe ich wie weiter oben vorgeschlagen am KO mal untersucht, ob 
Signale an den Pins anliegen. An allen Displaypins konnte ich nach dem 
Einschalten kurz ein Signal feststellen, ausser am Enable-Pin. Bisher 
konnte ich im Programmcode aber noch keine Ursache dafür finden.

Gruss
Martin

von Marco S. (masterof)


Lesenswert?

hast du ein max232 zur verfügung? an dem kannst du -10V abgreifen.

von hb9tzw (Gast)


Lesenswert?

Nein auch nicht aber ich gehe wahrscheinlich heute noch in ein Geschäft, 
dann nehme ich wenn vorhanden ein ICL7660 oder sonst nach deinem 
Vorschlag ein MAX232.

Ausserdem eine Frage an die PicbasicPro-Spezis: Soviel ich gelesen habe 
ist es bei PicbasicPro gar nicht nötig, eine Init-Prozedur zu schreiben, 
stimmt das oder ist das ein Gerücht?

Gruss
Martin

von HB9ZTW (Gast)


Lesenswert?

Hallo Leute

Scheinbar handelt es sich gar nicht um ein Problem des Displays, 
jedenfalls nicht vorderhand. Nachdem alles nicht funktioniert hat (auch 
die negative Kontrastspannung nicht) habe ich mal alles von vorne 
angefangen zu überprüfen.

Als auch ganz einfache Programme wie eins zum Ein- und Ausschalten einer 
Led nicht funktioniert haben, habe ich langsam angefangen anzuzweifeln, 
dass das Programm überhaupt auf das PIC geladen wird. IC-Prog 
programmiert immer ohne Fehlermeldung, aber wenn ich "Read All" 
ausführe, kommen nur Nullen raus.

Ich verwende einen Olimex PIC-PG1 Klon, der die PGM-Leitung automatisch 
auf Masse ziehen sollte, was beim 16F877A scheinbar ein bekanntes 
Problem ist.

Hat schon jemand ein ähnliches Problem gehabt oder kann mir sonstwer 
einen Tip geben?

Gruss
Martin

von Dieter Werner (Gast)


Lesenswert?

Nur Nullen deutet auf einen eingeschalteten Leseschutz hin, wenn der PIC 
leer ist, kommen beim Lesen lauter Einsen raus.

von Marco S. (masterof)


Lesenswert?

wenn das display frisch eingeschaltet wurd zeigt es in der ersten zeile 
einen balken und wenn der nicht da ist hängt es nicht am pic.

von HB9ZTW (Gast)


Lesenswert?

Das heisst möglicherweise, dass das Display tatsächlich ein Problem hat. 
Aber offenbar nicht nur, denn obwohl ich mittlerweile durch Anpassungen 
an der Schaltung das Pic programmieren und auch wieder auslesen kann, 
kommt beim Auslesen nicht derselbe Code zurück den ich eigentlich 
programmiert habe (aber auch nicht mehr nur Nullen).

Die Abweichungen fangen immer in der zweiten Zeile des 
IC-Prog-Program-Code Fensters an.

Erste Frage: Sehe ich das richtig dass hier etwas nicht stimmt?

Zweite Frage: Kann ein defektes Pic sowas verursachen, oder sind es eher 
Störeinflüsse oder sowas beim Programmieren? Welche könnten das sein?

Gruss
Martin

von LazyBee (Gast)


Lesenswert?

Hallo,

schmeiss den ICPROG weg. Ich hatte damit nur Probleme.

Kauf Dir einen vernünftigen Programmer und Du wirst Freude an Deinem 
Hobby haben.

PicbasicPro hat eigentlich alle LCD-Routienen on board, wie LCDOUT usw. 
Ist zwar schon lange her das ich damit gearbeitet habe. Guck mal auf der 
Homepage von Melabs, da gibt es Beispiele.

Rück mal den ganzen Code und die Einstellungen beim Programmer raus, 
dann kann "Sie" auch geholfen werden.


LazyBee

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.