Hallo Leute :) Ich versuche schon seit einigen Tagen mein EA DOGM 162 an meinem PIC 18F1330 zum laufen zu kriegen! Bisher allerdings ohne Erfolg. So dachte ich, ich frage hier mal nach Rat. Habe im Forum schon einige Threads darüber gefunden aber keine der Lösungen hat bei mir funktioniert. Ich denke, ich habe eher ein Grundlegender Denkfehler denn ich bin noch nicht sehr erfahren mit LCD's!! Also das Problem liegt bereits bei der Initialisierung des LCDs. Ich betreibe ihn übrigens an 5V und im 4-Bit Modus. Ich würde gerne einfach mal den LCD soweit initialisieren, damit der Cursor im ersten Segment blinkt! Das ist jedoch schwerer als ich gedacht habe :S Im Anhang findet ihr mein C-Code. Ich weiss, er ist noch eine einzige Baustelle. Die Initialisierung ist im Moment noch ganz einfach aufgebaut damit ich das Grundprinzip besser anwenden kann. Aber ich bitte euch trotzdem mal einen Blick rein zu werfen. Speziell in die init_LCD(); Da scheint ja der Fehler zu liegen! Ich hoffe ihr könnt mir ein wenig auf die Sprünge Helfen. :) Danke bereits im Voraus!! glg
p.s. Bei der Initialisierung bin ich nach dem Datenblatt des Controllers ST7036 (s.41) vorgegangen!! :)
Anstatt nen Kommentar zu schreiben, welcher Pinne wohin geht, benenne sie doch einfach. Was ein #define ist, weißt Du? Hier mal ein kleines C-Beispiel: http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=102296 Die Anpassung an Deinen C-Compiler sollte nicht schwer fallen. Peter
oh mann dem code ist relativ schwer zu folgen, habe auch mal pics programiert aber irgendwie sieht das bisschen komplizierter aus. der übersicht würde es dienen wenn du die bitmuster am port in der binärschreibweise als ganzes byte angibts, also zb. 0b10101010 oder sowas. es ist auch noch sinnvoll, die pins zu benennen. #define lcd_enable pinnummer #define lcd_rw pinummer ... was auch noch gut ist, das programm erstmal einfach zu halten, also alles was du nicht brauchst erstmal rauswerfen und nur auf das ansteuern des LCDs konzentrieren.
Ich glaube du hast ihn an den falschen pins angeschlossen.Im Datenbat steht, wenn im 4bit Betrieb, dann pins db7, db6, db5, db4 benutzen.
Ich weiss ich weiss... :D Hab ja gesagt der Code ist eine Baustelle. Und natürlich weiss ich was ein #define ist! ;) Danke für den Link. Ich werde mich mal damit beschäftigen. Nächste Woche werde ich mich nochmal melden mit vereinfachtem Code! Vielen Dank
Programist schrieb: > Ich glaube du hast ihn an den falschen pins angeschlossen.Im Datenbat > > steht, wenn im 4bit Betrieb, dann pins db7, db6, db5, db4 benutzen. Nönö die Pins stimmen schon! Schau mal oben bei der Pinnbelegung. Aber Danke für die Antwort. Zum Allgemeinen Verständnis: Wenn ich den LCD korrekt initialisiere müsste schon der Cursor blinken oder? Ohne das isch schon etwas rausschreibe. Wie gesagt LCDs sind rechtes Neuland für mich! Habe bisher nur mit Touch Displays gearbeitet! glg
wenn du den cursor einschaltest und auf blinken stellst, dann siehst was.
das Teil braucht man nicht LATBbits.LATB0 = 1; LATBbits.LATB1 = 0; LATBbits.LATB2 = 0; LATBbits.LATB3 = 1; Für was ist das?
Ausserdem in dem Datenblat ist ein Beispiel in ASM.Da kannst du doch nachschaue wenn was nicht klar ist.
Zum Beispiel diese routine wird da wevendet das heisst folgendes: WRINS_ONCE: -- label ANL A,#F0H -- weiss nicht genau CLR RS -- rs = low CLR RW -- rw = low SETB E -- weiss nicht MOV P1,A -- p1 wird nach A kopiert CLR E -- E = low MOV P1,#FFH -- P1 nach FFH kopieren For Check Bus Flag RET -- exit
Aber hier kannst noch nachschauen was die befehle bedeuten. http://www.keil.com/support/man/docs/is51/is51_setb.htm
Ich habe jetzt selber nachgeschaut WRINS_ONCE: -- label ANL A,#F0H -- summiert A und F0H , dann speichrt das resultat in A CLR RS -- rs = 0 oder low CLR RW -- rw = 0 oder low SETB E -- E = 1 oder high MOV P1,A -- A wird nach P1 kopiert CLR E -- E = low MOV P1,#FFH -- FFH nach P1 kopieren For Check Bus Flag RET -- exit
Danke für die Antwort aber leider habe ich keine Ahnung von ASM. Ich programmiere ausschliesslich in C! Aber ich denke ich werde mich mal ein wenig damit beschäftigen. Scheint mir noch nützlich zu sein :) Welches von den beiden meinst du? Es kommen 2 vor! LATBbits.LATB0 = 1; LATBbits.LATB1 = 0; LATBbits.LATB2 = 0; LATBbits.LATB3 = 1; Ich habe diese Schritte exakt nach dem Datenblatt gemacht. Ich komme leider erst am Dienstag wieder zum Programmieren. Werde mich dann nochmals melden ob es funktioniert hat!
Ich weiss ja was ich da mache. Habe einfach kein ASM gelernt und arbeite ausschliesslich mit C :)
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.