PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Sprut-Lernbeispiel "LCD-Display" fehlerfrei????



JayCool
18.05.2007, 14:18
Hallihallo,

Ich habe gestern begonnen, micht in die Benutzung von LCD-Displays einzuarbeiten.
Ich hab' mal das Beispiel von Sprut hergenommen unter "PIC-Lernbeispiel: LCD-Display", wobei das Wort "Hallo" auf dem Display erscheinen sollte. Leider tut es das bei mir nicht.
Ich wollte mal hier in die Runde fragen, ob jemand ebenfalls dieses Beispiel ausprobiert hat, und mir die Fehlerfreiheit des auf sprut.de publizierten Programmes bestätigen kann.

Ich verwende einen PIC 16F84A mit einem 10 MHz-Quarz. Ich habe den Assemblercode, der für einen 16F84 gilt, für den 16F84a umgestellt. Als Display verwende ich ein Goldentek GC-1602G0, 2x16 (Pollin-Bestellnummer 120385).
Das sollte eigentlich kompatibel zum HD44780 sein.

Gruß, Jan

PS: Das Lernbeispiel "LCD-Uhr (mit 10 MHz-Quarz)" habe ich ebenfalls mal ausprobiert. Es funktionierte jedoch nur zum Teil, d.h. auf meinem Display erschien die Zeichenfolge "00:00:00"
Diese blieb jedoch so bis in alle Ewigkeit bestehen.

djdune
19.05.2007, 20:16
Hi!

Ich habe das Beispiel schon mal ausprobiert. Hab ebenfalls einen 84A uC verwendet, jedoch 4MhZ Quarz. Hat auch bei einem 4 Zeiligen Display funktioniert (Bis auf das 2. und 4. Zeile nicht angesprochen wurden).

Was tut es generell wenn du das einfach Beispielprogramm testest? Evtl hast du irgendwelche Anschlüsse vertauscht?

JayCool
21.05.2007, 09:12
Hi,

das hört sich schonmal nicht schlecht an. Dann muss der Fehler wohl doch in meiner Schaltung liegen.

Einen 4 MHz-Quarz hab' ich leider nicht. Ich habe das stattdessen mit einem 20 MHz- und einem 10 MHz-Quarz ausprobiert.
Die Warteschleife habe ich entsprechend modifiziert.

Alternativ hätte ich noch einen 8-MHz Keramikresonator da, mit dem ich's auch noch mal probieren könnte.

Ich werd' mal diese Woche noch verschiedene Versuche unternehmen, ob ich es doch noch irgendwie gebacken kriege.

GoTo
26.05.2007, 11:58
Hallo,

ich beschäftige mich auch erst seit kurzem mit LCDs und habe mir dazu ebenfalls das einfache Beispiel von sprut angeschaut. Dieses funktioniert zumindest in Proteus bei mir einwandfrei.
Da ich zu Hause aber noch einen 16F877 rumfliegen habe, würde ich das Beispiel gerne für diesen modifizieren, nachdem ein komplett selbstgeschriebenes Programm nicht funktioniert hat. Ich möchte gerne mit einem 8-bit-Interface arbeiten; schließlich hat der 877er genug I/O-Leitungen. Also sollen später die drei Steuerleitungen an PE0..2 liegen und die Daten über PD0..7 verschickt werden. Ich habe damit begonnen den Quelltext zu modifizieren und habe es inzwischen immerhin geschafft die Daten(4-Bit) und Steuersignale alle über PortD laufen zu lassen. Dieser Code befindet sich in mod1.asm im ZIP-File. Er funktioniert in Proteus. In mod2.asm habe ich nichts verändert, außer dass die Steuerleitungen nichtmehr PD0..2 sind sondern PE0..2; im Code und natürlich auch in der Schaltung. Aber dieser Code funktioniert nicht mehr.
Ich suche jetzt schon seit zwei Tagen nach dem Fehler und finde einfach nichts. Vielleicht findet ja jemand von euch den Fehler. Der Code lässt sich einwandfrei assemblieren und laden. Nur er entlockt dem LCD keinen Ton mehr.
Danke für die Hilfe.

The Scientist

kalledom
26.05.2007, 12:38
Böse Falle:
movlw B'00000000' ; PortB alle outputs
movwf TRISD
movwf TRISE Nach diesem Befehl hat bei mir auch einiges nicht mehr funktioniert.
Jetzt benutze ich:

movlw 11111000b ; 0=Ausgang / 1=unverändert
andwf TRISE Bit<7...3> von PORTE dürfen aus mir unbekannten Gründen nicht verändert werden.

GoTo
26.05.2007, 15:21
danke, war mir jetzt net bewusst, dass man da nur die tatsächlich belegten bits ändern darf.

Hab das mal eingebaut geht aber trotzdem nicht. Da ich auch durch den Beispielcode nicht überall ganz durchsteige, hab ich hier mal meinen selbst geschriebenen code, der ja auch net geht. Vielleicht sind da ja auch so dumme Fehler drin.

picprogger
26.05.2007, 21:38
Hallo,
du solltest #include <P16F84A.INC> includen anstatt "#include <P16F77.INC>" und list p=16f84a und nicht "list p=16f877".

Probier es mal so!

Gruß

GoTo
27.05.2007, 11:38
warum? ich benutze doch einen 16f877.

picprogger
27.05.2007, 13:46
Hallo
ja sorry, aber du includest ja <P16F77.inc> und nicht <P16F877.inc>

Gruß

PICture
02.06.2007, 13:48
Hallo!

Ich habe gerade im "PIC Assembler" in Wiki ein einfaches Programm für Matrixdisplay im 4-bit Modus gepostet.

https://www.roboternetz.de/wissen/index.php/PIC_Assembler#Matrix_Display

Hoffentlich ist es genügend komentiert, sonst, bitte, fragen.

MfG :)

GoTo
04.06.2007, 13:11
Habe das Programm jetzt einwandfrei ans laufen gekriegt.

Außer dem Fehler in der include Anweisung (danke nochmal), hatte sich auch ein bug in die busy-routine eingeschlichen.

Danke für die Hilfe

mfg The Scientist