Forum: Mikrocontroller und Digitale Elektronik LCD <----> µC | Cursor vom Display mit dem µC abfragen


von Sebastian (Gast)


Lesenswert?

Guten Morgen,

Ich möchte mit einem PIC 16F872 und meinem 20x4 LCD eine Menuführung 
aufbauen (Hoch,Runter,Links,Rechts und OK Taste).

Und zwar muss der µC bei der Menuführung ja wissen an welcher Stelle der 
Cursor im LCD steht. Ich rufe dann mit dem folgenden Programm den Stand 
des Cursors.
1
mc_left:          call  delay         ;kleine Zeitschleife
2
      call  portb_in      ;PortB auf Input, PullUP aus
3
      bsf  portc,0        ;RS  auf High legen
4
      bsf  portc,1        ;RW  auf High legen
5
      call  Pulse_E       ;E-Leitung vom LCD auf 1 -> 0
6
      movfw  portb         ;Portb nach Reg. Cursor 
7
      movwf  cursor        ;sichern
8
      bcf  portc,0        ;RS  auf Low legen
9
      bcf  portc,1        ;RW  auf Low legen
10
      decf  cursor,1      ;Cursor Wert minus 1
11
      movfw  cursor        ;Cursor Wert ins Work      
12
      bcf  portc,0       ;RS & RW auf LOW
13
      bcf  portc,1       ;
14
      movwf  portb         ;Work zu PortB
15
      call  Pulse_E        ;E-Leitung vom LCD auf 1 -> 0
16
      return

mit diesem Programmabschnitt sollte es Das LCD so ansprechen das es dem 
PIC
die Cursor Stellung senden und der PIC speichert diese im Cursor 
Register.
und dann soll vom Cursor Register eins abgezogen werden und dann der 
veränderte Wert soll wieder zum LCD geschickt werden so das sich halt 
die Cursor Stellung am LCD um eins nach Links verändert.

aber es funktioniert nicht der PIC bekommt glaube ich die Daten nicht 
vom LCD. bzw irgentwas läuft da schief.

Gibt es einen einfacheren Weg oder ist es so schon in Ordnung und der 
Fehler liegt im Detail.

Vieleicht kann mir ja Jemand helfen. vieleicht hat ja einer auch einen 
Programm schnippsel aus seinem Programm mit einer Abfrage von einem LCD

Schönen Tag

Sebastian

von SiO2 (Gast)


Lesenswert?

Mann kann doch auch die Position im Ram vom PIC speichern. x/y-position. 
Ist auch schneller abgefragt. War jetzt nur nen Tipp, hab mit pic keine 
Erfahrung. Aber warum fragst du nicht das busybit ab? wenn du eh 
bidirektional arbeitest, ist das doch der sicherere weg statt timing

von Sebastian (Gast)


Lesenswert?

:o) Hab noch nie mit dem Busy Flag gearbeitet hab gedach ich könnte das 
einfach mit einer Großzügigen Zeitschleife von ca 50ms umgehen. :o) ich 
gucke mir das mal an. Danke


Hat noch jmd vieleicht eine Lösung ?

von Karl heinz B. (kbucheg)


Lesenswert?

Halt dir den aktuellen Cursor nicht am LCD sondern im PIC.
Dann brauchst du ihn auch nicht abfragen.
Wozu auch? Wenn du den Cursor in Zeile 2, Spalte 5 haben willst,
dann schick ihn einfach dorthin. Dazu brauchst du nicht wissen,
wo der Cursor zur Zeit ist.

von SiO2 (Gast)


Lesenswert?

@karl heinz
ich glaube, es geht darum zu wissen in welcher position im menue er 
gerade ist.

von Sebastian (Gast)


Lesenswert?

@ SiO2

Ja genau Darum gehts. Ich kann glaub ich nicht immer im PIC mitloggen in 
welcher Zeile/Spalte ich grade bin

von unsichtbarer WM-Rahul (Gast)


Lesenswert?

>Ich kann glaub ich nicht immer im PIC mitloggen in
>welcher Zeile/Spalte ich grade bin

Wirst du aber besser können müssen.

von Michael U. (Gast)


Lesenswert?

Hallo,

ich glaube aber schon, daß Du das mitloggen kannst, schließlich bist Du 
es ja in Deinem Programm, der den Cursor dahin schickt.
Das Display ändert diesen ja nicht ohne Dein zutun...

Gruß aus Berlin
Michael

von Karl heinz B. (kbucheg)


Lesenswert?

> ich glaube, es geht darum zu wissen in welcher position im menue er
> gerade ist.

OK. Dann soller sich eben die in einer Variablen merken.
Ist doch wesentlich simpler als das von der LCD-Cursor
Position abzuleiten. Das sparen dieses einen Bytes im Speicher
erkaufst du dir mit ner Menge Code.

von Florian (Gast)


Lesenswert?

Wenn Du die Busy Leitung nicht abfragst, dann kommt der Verdacht auf, 
daß Du das Display im gängigen 4-Bit Modus betreibst, dann hast Du auch 
keine Möglichkeit, Daten vom LCD auszulesen.

Aber wie schon angesprochen: auch nicht nötig: Die Tastendrücke, die den 
Cursor ja bewegen, gehen über deinen µC. Also kann der auch in einer 
Variablen ablegen, wo sich der Cursor befinden müßte.

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.