www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Probleme mit PIC und LCD


Autor: Manuel (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Manuel (Gast)
Datum:

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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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&f...

Die Anpassung an Deinen C-Compiler sollte nicht schwer fallen.


Peter

Autor: mr. mo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Programist (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Manuel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Manuel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: mr. mo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wenn du den cursor einschaltest und auf blinken stellst, dann siehst 
was.

Autor: Programist (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das Teil braucht man nicht


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

Für was ist das?

Autor: Programist (Gast)
Datum:

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

Autor: Programist (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Programist (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aber hier kannst noch nachschauen was die befehle bedeuten.

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

Autor: Programist (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Manuel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Programist (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Egal C oder was anderes.Solltest aber wissen was du da machst.

Autor: Manuel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich weiss ja was ich da mache. Habe einfach kein ASM gelernt und arbeite 
ausschliesslich mit C :)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.