Forum: Mikrocontroller und Digitale Elektronik Warum, geht die zweite Displayzeile nicht? PIC Assembler


von paul (Gast)


Lesenswert?

Erst mal Hallo hab mal eine Verständnisfrage
Warum, geht die zweite Displayzeile nicht
Orginal

_LCD_init_4bit                   ; 4-bit-mode
     bcf     PORTB, LCD_RS       ; control in
     movlw   b'00100000'   ; Set->8 bit
     call    _write_high_nibble
     call    _delay_40u
     movlw   b'00101000'   ; Set->4 bit
     call    _write_4bit   ; 2 Z. 5x8 Dot
     movlw   b'00001100'         ; On/Off
     call    _write_4bit   ; Control
     movlw   b'00000110'         ; Entry Mode Set
     call    _write_4bit   ;
     bsf     PORTB,LCD_RS        ; data_in
     return

So geht es
_LCD_init_4bit                   ; 4-bit-mode
     bcf     PORTB, LCD_RS       ; control in
     movlw   b'00100000'   ; Set->8 bit
     call    _write_high_nibble
     call    _delay_40u
     movlw   b'00101000'   ; Set->4 bit
     call    _write_4bit   ; 2 Z. 5x8 Dot
;------------------------------------------------
     movlw   b'00101000'   ; Set->4 bit
     call    _write_4bit   ; 2 Z. 5x8 Dot
;------------------------------------------------
     movlw   b'00001100'         ; On/Off
     call    _write_4bit   ; Control
     movlw   b'00000110'         ; Entry Mode Set
     call    _write_4bit   ;
     bsf     PORTB,LCD_RS        ; data_in
     return

aber warum? kann mir da mal einer auf die Sprünge helfen?

von spess53 (Gast)


Angehängte Dateien:

Lesenswert?

HI

Wäre mal interessant, um welchen Displaycontroller es sich handelt. 
Falls es ein HD44780-Kompatibler sehen beide Inits komisch aus. Im 
Anhang mal der übliche Ablauf einer 4-Bit-Init.

MfG Spess

von paul (Gast)


Lesenswert?

Danke für die Hilfe
es ist ein HD44780-Kompatibler, Source ist aus dem Buch Elektrotechnik 
Geräte- und Systemtechnik PIC16-Microcontroller von westermann
hab mal getestet ein 0 bit über den Hi_Nibble gesendet geht auch
ich merke aber schon lieber alles selber schreiben da weis man was man 
hat ^^

_LCD_init_4bit                   ; 4-bit-mode
     bcf     PORTB, LCD_RS       ; control in
     movlw   b'00100000'   ; Set->8 bit
     call    _write_high_nibble
;---------------------------------------------
     movlw   b'00000000'   ; Set->8 bit
     call    _write_high_nibble
;---------------------------------------------
     call    _delay_40u
     movlw   b'00101000'   ; Set->4 bit
     call    _write_4bit   ; 2 Z. 5x8 Dot
     movlw   b'00001100'         ; On/Off
     call    _write_4bit   ; Control
     movlw   b'00000110'         ; Entry Mode Set
     call    _write_4bit   ;
     bsf     PORTB,LCD_RS        ; data_in
     return

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

paul schrieb:
> call    _delay_40u

Das ist doch viel zu kurz. Sieh dir nochmal das PNG von spess an. Meine 
Eselbrücke für das setzen des 4-bit Mode ist 'Ich sags dreimal, dann ist 
es wahr' :-)

von Ottmar K. (wil1)


Angehängte Dateien:

Lesenswert?

Hallo Paul,

beiliegend meine LCD-Initialisierungdatei. Vergleiche diese mal mit der 
Deinen!
P.S. Ich habe mir diese mit Hilfe der PIC-Seiten von www.sprut.de 
erarbeitet und die Initialisierung/LCD-Ausgabe flutscht seit Jahren 
einwandfrei.

mfG Ottmar

von Georg G. (df2au)


Lesenswert?

Ottmar K. schrieb:
> flutscht seit Jahren

Der HD44780 wird von n+1 Firmen gebaut. Oder sollte man sagen, etwas, 
was diesen Namen trägt und vorgibt kompatibel zu sein? Es gibt immer 
wieder Displays, die mit einer Sparinitialisierung zufrieden sind. Aber 
man muss sich nur einmal die Zahl der Threads hier im Forum ansehen, bei 
denen über Probleme berichtet wird.

Lange Rede, wenig Sinn: Die von Spess53 gezeigte Routine sieht 
umständlich aus. Aber es ist imho die einzige, die wirklich 
funktioniert. Also nicht alles selbst erfinden wollen, sondern in diesem 
Fall einfach sklavisch abkupfern.

Noch ein letzter Hinweis: Es sind auch Displays im Handel, die im Timing 
extrem anspruchsvoll sind. Wenn das Datenblatt sagt "Flankensteilheit 
des E-Signals maximal 50ns", dann ist das ernst gemeint. Dann sind 20cm 
Flachbandleitung u.U. schon tödlich. Schüttgut von der Resterampe 
("Datenblatt gibt es nicht, das Display ist kompatibel zum 
Industriestandard") kann zu einer Abendfüllenden Beschäftigung führen.

von Ottmar K. (wil1)


Lesenswert?

Georg G. schrieb:
> Lange Rede, wenig Sinn: Die von Spess53 gezeigte Routine sieht
> umständlich aus. Aber es ist imho die einzige, die wirklich
> funktioniert.

Spess zeigt eine Kopie aus dem Datenblatt von Hitachi "HD44780U (LCD-II)
(Dot Matrix Liquid Crystal Display Controller/Driver)" S. 223.

Genau daran orientiert sich die von mir übermittelte Datei .....

Nochmals: HD44780-kompatible Displays unterschiedlichster Herkunft 
machten mir bisher keine Probleme...

mfG Ottmar

von michael "meikel" D. (meikel)


Lesenswert?

Ottmar K. schrieb:
> Georg G. schrieb:
>> Lange Rede, wenig Sinn: Die von Spess53 gezeigte Routine sieht
>> umständlich aus. Aber es ist imho die einzige, die wirklich
>> funktioniert.
>
> Spess zeigt eine Kopie aus dem Datenblatt von Hitachi "HD44780U (LCD-II)
> (Dot Matrix Liquid Crystal Display Controller/Driver)" S. 223.

Im Bild ist ein Programmablaufplan zu sehen.

1. wenn dort steht, daß Du nach dem Einschalten der Spannung erst mal 40 
MILLI-Sekunden warten sollst, dann sind 40 MICRO-Sekunden viel zu kurz.

2. wo es einen Fehler gibt, gibt es meist noch mehr Fehler.

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.