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?
Hallo R.S. Mir fällt da im Moment nur ein - falls Du kein busyflag abfrägst, das timing zu überprüfen, ob die Abarbeitungszeiten der einzelnen HD44780-Befehle eingehalten sind. mfG Ottmar
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.
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.
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.
Ich kann dir mal ein Beispiel Code schicken Dann siehste ob die Hardware ok ist
Hallo, vielen Dank für das Angebot. Aber ich habe es nun hinbekommen. War echt ein dämlicher Fehler. das nop war in Großbuchstaben und anstatt RB7 musste DDRBbits.RB7 sein. Das hat den ganzen Kram verursacht Danke an alle die geholfen haben. PS das Skript konnte ich zwar kompilieren aber noch nicht testen - ich bin gespannt
Hallo zusammen, ich konnte den Quelltext nun testen. Es läuft leider nicht. Micha - steht dein Angebot noch? Ich benutz den 45k20 mit internem Oszillator auf 64 MHz. Die LCD Pins kann ich aber auch an jeden erdenklichen Port anlöten. Im Moment stecken die Datenleitungen 4-7 an den Ports RB0-RB3. RS,RW und E stecken an PORTD 1-3. Danke!
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...
Hier ein Testfile für den Pic 18f26K22. Poste mal einen Schaltplan, wie das Display angeschloßen ist. Also alle Pins, wie angeschloßen sind.
Danke! bekomme jetzt den Text klar und deutlich angezeigt. "das ist" in der ersten Zeile - die zweite bleibt blank. Da habe ich wohl den 45k20 zerstört..... Ärgerlich.... Ich bedanke mich nochmals! Hat mir viel Zeit gespart. Dann werde ich jetzt mal den Code von der Beispielseite auf meinen 26k22 ummünzen. Danke!
Hi
>Da habe ich wohl den 45k20 zerstört..... Ärgerlich....
Wenn eine Zeile angezeigt wird, kann dein Controller nicht defekt sein.
MfG Spess
Da sollte eigemntlich " das ist ein test", stehen. Scheint nicht ganz zu dem HD44780 kompatible zu sein.
R. S. schrieb: > Was läuft schief und wo sollte ich noch nach Fehlern schauen? Wo ist die Definition von NOP() aus LCD.h hin?
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.