mikrocontroller.net

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


Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.
mc_left:          call  delay         ;kleine Zeitschleife
      call  portb_in      ;PortB auf Input, PullUP aus
      bsf  portc,0        ;RS  auf High legen
      bsf  portc,1        ;RW  auf High legen
      call  Pulse_E       ;E-Leitung vom LCD auf 1 -> 0
      movfw  portb         ;Portb nach Reg. Cursor 
      movwf  cursor        ;sichern
      bcf  portc,0        ;RS  auf Low legen
      bcf  portc,1        ;RW  auf Low legen
      decf  cursor,1      ;Cursor Wert minus 1
      movfw  cursor        ;Cursor Wert ins Work      
      bcf  portc,0       ;RS & RW auf LOW
      bcf  portc,1       ;
      movwf  portb         ;Work zu PortB
      call  Pulse_E        ;E-Leitung vom LCD auf 1 -> 0
      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

Autor: SiO2 (Gast)
Datum:

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

Autor: Sebastian (Gast)
Datum:

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

Autor: Karl heinz Buchegger (kbucheg)
Datum:

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

Autor: SiO2 (Gast)
Datum:

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

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ SiO2

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

Autor: unsichtbarer WM-Rahul (Gast)
Datum:

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

Autor: Michael U. (Gast)
Datum:

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

Autor: Karl heinz Buchegger (kbucheg)
Datum:

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

Autor: Florian (Gast)
Datum:

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

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.