LCD HD44780 und PIC18F45k20

#3007564
Lesenswert?

Hallo zusammen,
ich bin hier am verzweifeln.
Habe den Code im Anhang geschrieben (Bis auf den Config Kram 
größtenteils zusammenkopiert) und das LCD (von Pollin HMC16223SG 2 
Zeilen 16 Zeichen) im 4 Bit Modus an den PIC angeschlossen.
Dazu habe ich PortD benutzt.
PD0-frei
PD1-E
PD2-RW
PD3-RS
PD4-D4
PD5-D5
PD6-D6
PD7-D7
Sonst liegt an dem PIC und dem LCD lediglich Betriebsspannung an. Das 
LCD zeigt auch zunächst eine Reihe schwarze Blöcke an, jedoch lässt es 
sich nicht initialisieren. Wenn die Init_Lcd() Routine ausgeführt wird 
sehe ich an allen Stellen (in beiden Zeilen) lediglich schwach 
leuchtende Blöcke.

Es ist mittlerweile der (gefühlt) tausendste Versuch das Ding zum Laufen 
zu bekommen. Ich habe viele Beispielskripte ausprobiert - aber keins 
konnte mir helfen. Im Prinzip haben auch alle Skripte das gleiche 
gemacht. Ich habe mit dem PICKit3 auch im debug-Modus geschaut ob alles 
planmäßig ausgeführt wird...
Was läuft schief und wo sollte ich noch nach Fehlern schauen? Und läuft 
der Code vielleicht bei jemandem anders hier?
Angehängte Dateien:
#3007759
Lesenswert?

R. S. schrieb:
> PD4-D4
> PD5-D5
> PD6-D6
> PD7-D7

Ich kenn die HD44780 Befehle nicht auswendig, aber bist du sicher, dass 
der von dir kopierte Code mit den ganzen Port-Schreibbefehlen auch die 
richtigen Pins anspricht?

Wer sagt, dass der Autor des Codes die High-Nibble und nicht PD0-PD3 
benutzt hat?

Ich benutz beinah 1:1 diese Lib hier 
http://www.piclist.com/techref/member/IMB-yahoo-J86/HD44780-tty.htm mit 
einem sehr ähnlichen Prozessor (45K22). Da dort quasi nur ein paar 
defines im .h Files abgeändert werden müssen, würde ich dir diese 
Vorlage ans Herz legen. Ist somit auch viel flexibler als der von dir 
gepostete Code.
Gast #3007801
Lesenswert?

Das Display benötigt 5V Betriebsspannung. Der Controller kann aber max. 
3,6V verdauen. Das funktioniert so schon mal nicht.  Ansonsten ist bei 
zweizeiligen Displays nach Power-On nur eine Zeile eingeschaltet. Das 
sieht man bei stark eingestellten Kontrast recht gut (schwarze Balken). 
Nach der erfolgreichen Initialsierung werden beide Zeilen schwarz.

Die Timings sind manchmal etwas doof. Ich füge da oftmals ein paar NOPs 
oder Delays ein damit es stabil läuft.
#3050175
Lesenswert?

Hallo,
vielen Dank für die Antworten. ich habe mich für die Variante 
vorgeschlagen von Vincent entschieden. Dazu habe ich ein Projekt in 
MPlab erstellt.
Source Files: LCD.c
Header Files: LCDcfg.h, pic18f45k20.h
Linker Skript: 18f45k20_g.lkr
Im LCDcfg.h habe ich die Zeile
#include <pic.h> durch
#include <p18f45k20.h> ersetzt --> Das war doch so gedacht oder?
Beim compilieren bekomme ich immer die folgenden Fehler:


LCD.c:94:Error [1105] symbol 'RB6' has not been defined
LCD.c:94:Error [1101] lvalue required
LCD.c:96:Error [1105] symbol 'RB5' has not been defined
LCD.c:96:Error [1101] lvalue required
LCD.c:99:Error [1105] symbol 'RB7' has not been defined
LCD.c:99:Error [1101] lvalue required
LCD.c:101:Warning [2058] call of function without prototype
LCD.c:105:Error [1105] symbol 'RB7' has not been defined
LCD.c:105:Error [1101] lvalue required
LCD.c:107:Warning [2058] call of function without prototype
LCD.c:114:Error [1105] symbol 'RB7' has not been defined
LCD.c:114:Error [1101] lvalue required
LCD.c:116:Warning [2058] call of function without prototype
LCD.c:118:Error [1105] symbol 'RB7' has not been defined
LCD.c:118:Error [1101] lvalue required
LCD.c:120:Warning [2058] call of function without prototype
LCD.c:125:Error [1105] symbol 'RB6' has not been defined
LCD.c:125:Error [1101] lvalue required
LCD.c:155:Error [1105] symbol 'RB6' has not been defined
LCD.c:155:Error [1101] lvalue required
LCD.c:157:Error [1105] symbol 'RB5' has not been defined
LCD.c:157:Error [1101] lvalue required
LCD.c:162:Error [1105] symbol 'RB7' has not been defined
LCD.c:162:Error [1101] lvalue required
LCD.c:164:Warning [2058] call of function without prototype
LCD.c:166:Error [1105] symbol 'RB7' has not been defined
LCD.c:166:Error [1101] lvalue required
LCD.c:168:Warning [2058] call of function without prototype
LCD.c:174:Error [1105] symbol 'RB7' has not been defined
LCD.c:174:Error [1101] lvalue required
LCD.c:176:Warning [2058] call of function without prototype
LCD.c:178:Error [1105] symbol 'RB7' has not been defined

Ich verstehe aber überhaupt nicht warum. RB7 ist doch in dem 
pic18f45k20.h definiert.
#3079636
Lesenswert?

Super - vielen Dank erst Mal!
ich habe mein Board entsprechend umgelötet und das Hex-File getestet.
Leider bleibt mein Display hier blank. Aber dann habe ich während des 
Betriebes die Daten-Leitungen abgezogen und siehe da - ich konnte etwas 
wie "das ist" oder "das hier" lesen. Der Text war aber extrem schwach, 
weshalb ich auf eine falsche Kontrastspannung geschlossen habe. Die kann 
es aber nicht sein, da das Display an einer Schaltung mit einem 16f886 
in asm funktioniert.
Vielleicht hat der PIC ja einen weg!?
Ich habe hier noch einen 18f26k22 liegen. Ich werde mal eine Schaltung 
für diesen zusammenlöten und daran weiter testen. Der hat ja auch einen 
internen Oszillator...
#3080084
Lesenswert?

Bernd schrieb:
> Wo ist die Definition von NOP() aus LCD.h hin?

Eine gute Frage. Soweit ich mich erinnern kann, hat der Compiler hier 
gemeckert. Wie ich nun in den letzten Tagen herausgefunden habe, hätte 
ich hier einfach _asm und _endasm verwenden müssen.
Aber offensichtlich habe ich das Ausgeklammert und stattdessen "Nop()" 
verwendet. Hier spuckt der Compiler keine Fehler aus und ich dachte das 
"Nop()" ist dem asm NOP ähnlich bzw. gleich. Ist dem nicht so?

Habe jetzt versucht den empfohlenen Code auf den 18f26k22 zu portieren. 
Hat leider nicht geklappt. Hier ist also auch noch was falsch. Ich weiß 
aber auch nicht wo

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren