Hallo, will auf einem Grafik LCD Display einfach nur testweise den Text "HALLO" anzeigen. Der Text wird zwar angezeigt, aber das ganze Display flackert halt und es ziehen Streifen durch das Bild: http://es.youtube.com/watch?v=3zM1OuI9040 Dass nach dem Beispieltzext die ganzen O's angezeigt werden ist nicht das Problem. Meine Frage ist nur ob ich irgendwas an der Software falsch gemacht habe, oder ob das Display im Ar*** ist. Achso der PIC sendet die Daten für den Grafikcontroller nur einmal. Dabnke schonmal für Eure Hilfe...
hans23 wrote:
> Achso der PIC sendet die Daten für den Grafikcontroller nur einmal.
Bist du sicher? Den Effekt mit dem Streifen, gibt es, wenn der Reset des
Display's angesteuert (lange) wird.
Gruß Sascha
Der Reset-Pin ist nur am anfang für ca 25 ms auf low, sonst ist er immer auf high und wird gar nicht mehr angefasst.
1 | main
|
2 | call lcd_config |
3 | call write_test |
4 | |
5 | done
|
6 | goto done |
Der Chip-Enabled-Pin bleibt nach dem letzten Befehl auf high. (wenn er auf low verblibt ändert sich auch nichts).
Macht der Controller vielleicht einen Reset?? Gruß Sascha PS. Schaltung und Code wären nicht schlecht
Du hattest Recht - hab nochmal mit dem Oszi nachgeschaut und der PIC macht in unregelmässigen Abständen Resets auf der Reset-Leitung. Aber der PIC selber macht keine Resets. Hab mal den Reset-Eingang vom LCD manuell auf high gesetzt - brigt auch nichts. Dann ist alles dunkel. Hab mal die sources angehägt.
write_command movwf command ;status check call read_status btfss STA0 goto main Was soll denn der Quatsch mit goto main da? Aus einer Subroutine geht man nur mit return raus. Sonst läuft dir irgendwann der Stack über, und bumm!
#define HALT_ PORTB,4 ; Stop the Oscillation of Clock Wofür wird das genutzt? Gruß Sascha
@Sacha: gute Frage - weiß auch nicht was das bringen soll, die Clock vom LCD Controller anzuhalten. @Holger: oh, stimmt - schlamprig programmiert. Aber das löst das Problem leider noch nicht :/. da sollte eigentlich
1 | goto write_command |
stehen. das return kommt weiter unten:
1 | write_command
|
2 | movwf command |
3 | ;status check |
4 | call read_status |
5 | btfss STA0 |
6 | goto write_command |
7 | btfss STA1 |
8 | goto write_command |
9 | |
10 | ;PORTC auf Ausgang umschalten |
11 | banksel TRISC |
12 | movlw d'0' |
13 | movwf TRISC |
14 | banksel PORTC |
15 | |
16 | movfw command |
17 | movwf DAT |
18 | bsf RD_ ;read disabled |
19 | bcf WR_ ;write enabled |
20 | bsf CD_ ;command |
21 | bcf CE_ ;chip enabled |
22 | nop
|
23 | bsf CE_ |
24 | return
|
>@Holger: oh, stimmt - schlamprig programmiert. Aber das löst das Problem >leider noch nicht :/. Das glaub ich gerne. Du hast ja auch noch ein paar mehr von diesen goto main drin ;)
naja hatte insgesamt 3 gefunden... aber wie gesagt, hatte nichts geändert.
Ich hab nochmal getestet ob der PIC überhaupt zum ende kommt, indem ich einfach PortB, 7 setze, nachdem er alle an das Display gesendet hat - Resultat: PIC resettet sich ca 10ms nachdem Portb,7 gesetzt wurde und dann geht das ganz spielchen von vorne los. Hab nur überhaupt kein plan wieso er das tut. Hab schon den pic getauscht - ohne Erfolg.
1 | main
|
2 | call lcd_config |
3 | call write_test |
4 | |
5 | bsf PORTB,7 |
6 | |
7 | done
|
8 | goto done |
>Hab nur überhaupt kein plan wieso er das tut. Hab schon den pic >getauscht - ohne Erfolg. Hört sich irgendwie nach Watchdog an. Könnte auch dein Netzteil sein.
hab jetzt mal nen 100nF Kondensator von VCC nach GND gesteckt. Jetzt resettet sich der PIC auch nicht mehr, flackert nicht mehr, aber display zeigt jetzt nur noch Datenmüll an - mein HALLO kommt gar nicht mehr. Komisch wobei ich doch sonst nichts an der SW geändert hab... Aber das eigentliche Problem ist gelöst. Aber denkt man gar nich was so eine fehlender 100nF C ausmacht. Auf der Leiterplatte wäre er drauf gewesen^^
Habs bis jetzt noch nicht hinbekommen, wieder irgendetwas anzuzeigen. Dachte, dass es evtl. am Display liegt, hab darum mal ein anderes 128x128 Display angeschlossen, das zeigt jetzt nur nen leeres Display an - also nichtmal Datenmüll. Aber soviel muss man doch gar nicht machen bei der Initialisierung. Vielleicht sind meine Schreib-/ Leseroutinen auch fehlerhaft (was ich eigentlich nicht glaube)? Ausserdem weiß ich nicht wofür Pin "MD2" ud Pin "FS1" zuständig sind. Wär nett wenn Ihr mal über den Code rüberschauen könntet.
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.