Forum: Mikrocontroller und Digitale Elektronik Probleme mit PIC und LCD


von Manuel (Gast)


Angehängte Dateien:

Lesenswert?

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

von Manuel (Gast)


Lesenswert?

p.s. Bei der Initialisierung bin ich nach dem Datenblatt des Controllers 
ST7036 (s.41) vorgegangen!! :)

von Peter D. (peda)


Lesenswert?

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

von mr. mo (Gast)


Lesenswert?

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.

von Programist (Gast)


Lesenswert?

Ich glaube du hast ihn an den falschen pins angeschlossen.Im Datenbat 
steht, wenn im 4bit Betrieb, dann pins db7, db6, db5, db4 benutzen.

von Manuel (Gast)


Lesenswert?

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

von Manuel (Gast)


Lesenswert?

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

von mr. mo (Gast)


Lesenswert?

wenn du den cursor einschaltest und auf blinken stellst, dann siehst 
was.

von Programist (Gast)


Lesenswert?

das Teil braucht man nicht


  LATBbits.LATB0 = 1;
  LATBbits.LATB1 = 0;
  LATBbits.LATB2 = 0;
  LATBbits.LATB3 = 1;

Für was ist das?

von Programist (Gast)


Lesenswert?

Ausserdem in dem Datenblat ist ein Beispiel in ASM.Da kannst du doch 
nachschaue wenn was nicht klar ist.

von Programist (Gast)


Lesenswert?

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

von Programist (Gast)


Lesenswert?

Aber hier kannst noch nachschauen was die befehle bedeuten.

http://www.keil.com/support/man/docs/is51/is51_setb.htm

von Programist (Gast)


Lesenswert?

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

von Manuel (Gast)


Lesenswert?

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!

von Programist (Gast)


Lesenswert?

Egal C oder was anderes.Solltest aber wissen was du da machst.

von Manuel (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.