Forum: Mikrocontroller und Digitale Elektronik PIC 16F887 Display 4x20 Stellen ansprechen ASM


von Chris H. (Gast)


Angehängte Dateien:

Lesenswert?

Hi,

ich würde gerne auf einer LCD-Anzeige direkt auf andere Stellen 
schreiben.
Bisher habe ich es so gemacht, das ich einige Leerzeichen dazwischen 
geschoben habe um von der ersten Zeile in die Dritte zu kommen.
Gerne würde ich auch mitten in der Zeile schreiben ohne jedesmal 
Leerzeichen zu setzen. Es zieht so das Programm ziemlich in die Länge

Mir ist es auch nicht gelungen direkt in Zeile 3 anzufangen.
Ich muss immer Zeile 1 solange fortlaufen lassen bis ich in der Dritten 
bin.

Die Initialisierung habe ich nicht selber geschrieben.
Sie ist aus dem Buch(da von der CD) Elektrotechnik 
PIC16-Mikrocontroller.(auch nur für 2x20 gedacht)

Die ASM Datei hänge ich mit an. Vllt erkennen auch einige mein Problem, 
beim ausgeben der Buchstaben an die LCD-Anzeige.

Auf dem Display hätte ich gerne das ein Symbol sich im Kreis bewegt.(nur 
eine Spielerei ^^)
Das Programm wäre nach der Methode, von mir dann ziemlich groß.

von K. J. (Gast)


Lesenswert?

Moin normalerweise kannst du einstellen wo der text beginnt 
(Curserposition) du musst es nicht immer komplett beschreiben (steht im 
Datenblatt)

Zu dem Text senden mach das per Lockuptabelle dürfte für festen Text das 
einfachste/übersichtlichste sein

von spess53 (Gast)


Lesenswert?

Hi

>Mir ist es auch nicht gelungen direkt in Zeile 3 anzufangen.
>Ich muss immer Zeile 1 solange fortlaufen lassen bis ich in der Dritten
>bin.

Der Befehl 'Set DDRAM address' setzt die Schreibposition auf eine 
beliebige Stelle des Displays. Das nutzt du schon in _line_1 und 
_line_2. Du musst nur
an die Stelle

movlw   b'10000000'   ; 1. Zeile
           ^^^^^^^^

die Adressen 0x14 (3.Zeile) oder 0x54 (4.Zeile) einsetzen.

MfG Spess

von Chris H. (Gast)


Lesenswert?

> Zu dem Text senden mach das per Lockuptabelle dürfte für festen Text das
> einfachste/übersichtlichste sein

Davon habe ich noch nichts gehört. Werde mich mal genauer darüber 
informieren.


> Der Befehl 'Set DDRAM address' setzt die Schreibposition auf eine
> beliebige Stelle des Displays. Das nutzt du schon in _line_1 und
> _line_2. Du musst nur
> an die Stelle
>
> movlw   b'10000000'   ; 1. Zeile
>            ^^^^^^^^
>
> die Adressen 0x14 (3.Zeile) oder 0x54 (4.Zeile) einsetzen.

Das mit den Adressen habe ich noch nicht verstanden.


Habe ein bischen herumgespielt und herausgefunden
das es für  Zeile 3. b'10010100' und für Zeile 4. b'11010100' ist.
Funktioniert wunderbar. Die Beiden rechten Bits setzen die Schrift 1-3 
Kästchen weiter.
Allerdings habe ich noch nicht herausgefunden wie ich es 5 Kästchen 
weiter setzen kann.

von Karl H. (kbuchegg)


Lesenswert?

chris H. schrieb:

> Funktioniert wunderbar. Die Beiden rechten Bits setzen die Schrift 1-3
> Kästchen weiter.
> Allerdings habe ich noch nicht herausgefunden wie ich es 5 Kästchen
> weiter setzen kann.


Nicht die beiden "rechten Bits". Normalerweise zählt man das einfach 
zusammen. (UNd an dieser STelle ist Binärschreibweise nicht das gelbe 
vom Ei, siehs ganz einfach als Zahlen an. Denn was anderes ist das 
nicht)

Deine 3. Zeile beginnt bei 0x94.
D.h. die nächsten Zeichenpositionen sind 0x95, 0x96, 0x97, 0x98, 0x99, 
0x9A, 0x9B, etc. etc.

Einfach zur Zahl für den Anfang der Zeile (für die 3.te Zeile dann eben 
0x94) die Spaltennummer ( 0 bis n ) addieren.

von spess53 (Gast)


Lesenswert?

Hi

>Allerdings habe ich noch nicht herausgefunden wie ich es 5 Kästchen
weiter setzen kann.

Indem du zur Anfangsadresse einer Zeile 5 addierst

Also für die 4. Zeile: 0x54+$05 = 0x59 (b'01011001'). Dann den Befehl 
b'10000000' dazu. Ergibt b'11011001'.

MfG Spess

von K. J. (Gast)


Lesenswert?

chris H. schrieb:
>> Zu dem Text senden mach das per Lockuptabelle dürfte für festen Text das
>> einfachste/übersichtlichste sein
>
> Davon habe ich noch nichts gehört. Werde mich mal genauer darüber
> informieren.
>
http://www.pictutorials.com/Lookup_Table_Example.htm

mfg

von Ottmar K. (wil1)


Lesenswert?

Hallo chris,
Schau doch mal auf die Seite von Sprut [http://www.sprut.de/index.htm],
dort findest du gute Erklärungen zu den LCDs bezogen auf PICs:
[http://www.sprut.de/electronic/lcd/index.htm]
Sprut zeigt dort auch eine leicht verständliche und gut funktionierende 
Initialisierung für LCDs mit dem HD44780-chip:
[http://www.sprut.de/electronic/pic/programm/lcd.zip]
;
Ein 4x20 LCD hat diese Zeilenadressen
Zeile 1:  00h-13h
Zeile 2:  40h-53h
Zeile 3:  14h-27h
Zeile 4:  54h-67h

nehmen wir an Du willst in Zeile 3, Digit 4 (fängt bei Digit 0 an!) 
schreiben: Adresse ist dann 14h+4h = 18h

;Methode sinngemäß zu der LCD_INIT von sprut

movlw  0x18          ;copy DDRAM-adresse ins WREG
iorlw  b'10000000'   ;OR DDRAM-adress mit HD-Befehl "set DDRAM adress"
movwf   Lcd_Control   ;HD44780-Befehl für Adresse 0x18 in Übergabeparam.

;jetzt noch das zu übertragende Zeichen:
movlw    "1"          ;Zahl 1 im ASCII-code ins WREG
movwf   Lcd_Data      ;und in Übergabeparameter kopieren

; HD44780-Befehl und Zeichen ans LCD übertrgen
CALL Send_4Bit_Control;Adresse ans LCD senden
CALL Send_4Bit_Data   ;Zeichen ans LCD senden

damit ist das Zeichen "1" in Zeile 3, Digit 5 übertragen.

mfG Ottmar

von Chris H. (Gast)


Lesenswert?

Jetzt habe ich das soweit auch verstanden ^^ jetzt ergibt es für mich 
auch alles ein Sinn.
Vielen Dank für die Schnellen und Informativen antworten.
Die haben mir sehr geholfen ^^

MfG Chris

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.