Forum: Mikrocontroller und Digitale Elektronik Initialisierung Display EA DIP204-4 (KS0073)


von Thomas W. (thomas-w)


Lesenswert?

Guten Morgen,

auch auf die Gefahr hin, dass das Thema bereits irgendwo abgehandelt 
ist, ich habe neben der Forensuche auch Google bemueht, leider 
erfolglos, erlaube ich mir hier, ein paar Details zur Initialisierung 
o.g. Displays zu erfragen (bevor ich noch durchdrehe)

Mir geht es darum, ein Display mit KS0073 so zu initialisieren, dass es 
mit 4 Bit angesteuert wird und 4 Zeilen darstellt (muss aber 
zwischendrin auch mal auf 2 Zeilen und zurueck eingestellt werden)

Ich habe mehrere Routinen im Netz gefunden und keine keine davon 
funktioniert bei mir, deshalb ein paar detailierte Fragen:

1. Wenn ich auf 4Bit-Uebertragung umschalte, dann lege ich ja das 
Bitmuster 0010 xxxx an D7-D0 an (die unteren 4 Bit sind ja nicht 
aufgelegt also ist deren Zustand erstmal egal... oder nicht). Wenn ich 
nun den Pin E kurz auf 1 lege, erwartet da der Controller danach das 
untere Nibble an D7-D4 (xxxx) oder den naechsten Befehl, welcher ja dann 
4Bit-maessig abgearbeitet wird?

2. In vielen Beispielen ist die Rede davon, dass man vor dem 
Initialisieren das Display loeschen soll. "Clear Display" ist folgendes 
Bitmuster: 0000 0001. Wie soll ich das an den Controller bringen, wenn 
D3-D0 nicht aufgelegt sind und sich der Controller im 8-Bit-Modus 
befindet?

3. Was hat es mit dem RE-Bit auf sich? In der Befehlstabelle ist es wie 
ein Pin aufgefuehrt, allerdings kommt es auch im "Function Set" vor. Wie 
ist mit diesem Bit zu verfahren? Nach laengerem Ueberlegen verstehe ich 
das so, dass es mit dem "Function Set" gesetzt werden muss, um dann 
anderswo zur Verfuegung zu stehen. Ganz dahinter gestiegen bin ich 
jedoch nicht.

Ueber sachdienliche Hinweise freue ich mich sehr,

vielen Dank schonmal im Voraus,

Thomas

von gast (Gast)


Lesenswert?

überlege mal wie man 8 bit daten über 4bit interface senden kann
......ich geb dir nen tip ... nacheinander !!

die steuerleitungen bestimmen ob gerade ein befhel oder ob Daten 
gesendet werden ... woher soll der LCD controller das auch wissen wenn 
man es ihm nicht sagt
Enable sagt den LCD ebenso das jetz die daten übernommen werden können 
...


aber da sieht man mal das programmieren doch was anderes ist als sich 
quelltexte zu suchen und den mist per copy und paste zusammenzuklatschen

von Thomas W. (thomas-w)


Lesenswert?

>überlege mal wie man 8 bit daten über 4bit interface senden kann
......ich geb dir nen tip ... nacheinander !!

Das ist mir schon klar. Allerdings befindet sich der Controller nach 
meinem Verstaendnis zunaechst im 8 Bit-Modus. Meine erste Frage war, was 
er nach dem ersten E erwartet. Das untere Nibble oder wird dieses 
Kommando noch im 8 Bit-Modus abgearbeitet, also das untere Nibble 
verworfen?

>die steuerleitungen bestimmen ob gerade ein befhel oder ob Daten
gesendet werden ..

Ist mir auch klar. Als Steuerleitungen sind mir RS und R/W bekannt und 
auch verdrahtet. Das RE-Bit kenne ich dagegen nicht.

>Enable sagt den LCD ebenso das jetz die daten übernommen werden können

Ja

>aber da sieht man mal das programmieren doch was anderes ist als sich
quelltexte zu suchen und den mist per copy und paste zusammenzuklatschen

Deshalb habe ich auch detailierte Fragen gestellt und nicht nach einem 
Quellcode gefragt...

Trotzdem Danke

von Gast (Gast)


Lesenswert?

Und auch bei LCDs hilft http://sprut.de/electronic/lcd/index.htm.

Für die Umschaltung auf den 4-bit Modus werden nur die oberen 4 Bit 
benötigt (0010 ----). Die unteren 4 Bit liest das LCD zwar ein, solange 
es noch im 8 bit Modus ist. Die haben aber dann keine Bedeutung. Bei 
manchen LCD must du die unteren 4 Bit auch mit GND verbinden.

Das RE-Bit ist ein Sofwarebit. Es muss erst mit einem Befehl gesetzt 
werden. Danach gelten dann die Befehle mit gesetztem RE-Bit. Solange bis 
du es wieder zurücksetzt. Zuhause habe ich auch eine Init für dieses 
LCD. Allerdings in PIC-Assembler.

von Thomas W. (thomas-w)


Lesenswert?

Hi,

der Link ist sehr interessant, danke dafuer :)

Allerdings fehlt mir darin vermutlich das wichtigste:
>Der Controllerchip KS0073
>...
>4-Bit-Initialisierung
>Die Initialisierung des 4-Bit-Datenbus-Modes weicht etwas vom
>HD44780-Standard ab.

Mist, vielleicht ist genau das mein Problem? Genau hier stelle ich 
naemlich bei den Befehlstabellen keinen Unterschied fest...

Zum Rest Deiner Antwort tausend Dank, das bringt mich weiter und das mit 
dem RE-Bit ist nun auch verstaendlicher ;-)

Wenn jetzt noch jemand mehr zu den zitierten Abweichungen haette... 
super

von Gast (Gast)


Lesenswert?

Ich such heute abend mal meine Init raus. Ich glaube mich zu erinnern, 
dass man das RE-Bit einschalten musste um in den 4-Zeilen Mode zu 
kommen. Auch wenn es PIC-Assembler ist, kannst du den Initroutinen 
entnemen, wann welches Byte zum LCD geschickt wird und welche Pausen 
dazwischen sind. Damit solltest du eigentlich weiter kommen.

von derKoch (Gast)


Lesenswert?

..aus meinen Versuchen mit dem Init von Displays kann ich sagen dass es 
meistens ein Timing-Problem ist wenns nicht klappt. Mach einfach paar 
längere Pausen zwischen den einzelnen Befehlen (zwischen den 2 Nibbles 
natürlich nicht nötig) - die kannst du wenns läuft ja schrittweise 
wieder verringern. Die Abfrage des BusyFlags, wann das Display fertig 
fürs nächste Kommando ist, funktioniert bei manchen Displays auch nicht 
richtig -> das Flag wird einige ms zu früh gesetzt...  da gabs auch 
schon mal einen Thread dazu. => Also während des Inits FESTE Timings 
verwenden...

von Thomas W. (thomas-w)


Lesenswert?

Hi,

nochmals vielen Dank, vielleicht bekomme ich ja heute noch das erste 
Zeichen auf mein verd.... Display ;-)

Ich fasse mal kurz zusammen:

Das erste Kommando wird auf jeden Fall wie 8 Bit abgearbeitet. Will ich 
also das RE-Bit einschalten muss ich folgendes senden:

Kommando 1: 0010 0000 E (Wird auf 4 Bit umgeschalten)
Kommando 2: 0010      E (oberes Nibble des zweiten Kommandos, nochmal 4 
Bit Modus)
Kommando 2: 0100      E (unteres Nibble, RE-Bit gesetzt)

Das mit dem RE-Bit ist auch klar, ich muss es, sofern benoetigt mit 
einem extra Kommando setzen oder loeschen.

Die Timing-Geschichte ist auch ein guter Hinweis, da werde ich auch mal 
handeln.

Na, dann schau ma mal... dann seh ma scho... nochmals vielen Dank

von Klaus (Gast)


Lesenswert?

;LCD_Port                     DATA     P2
;LCD_EN                       BIT      LCD_Port.4
;LCD_RW                       BIT      LCD_Port.5
;LCD_RS                       BIT      LCD_Port.6
;LCD_Backlight                BIT      LCD_Port.7
;LCD_D4                       BIT      LCD_Port.0
;LCD_D5                       BIT      LCD_Port.1
;LCD_D6                       BIT      LCD_Port.2
;LCD_D7                       BIT      LCD_Port.3

LCD_INIT:

   CALL  LCD_Pause_15ms
   MOV   A,#30h
   CALL  LCD_Intialisieren
   CALL  LCD_Pause_4ms
   MOV   A,#30h
   CALL  LCD_Intialisieren
   CALL  LCD_Pause_4ms
   MOV   A,#30h
   CALL  LCD_Intialisieren
   CALL  LCD_Pause_4ms
   MOV   A,#20h                    ; Ab hier 4-Bit Modus eingestellt
   CALL  LCD_Intialisieren
   CALL  LCD_Pause_4ms
   MOV   A,#_LCD_Schnitstellenbreite
   CALL  LCD_Komando
   MOV   A,#_LCD_AUS
   CALL  LCD_Komando
   MOV   A,#_LCD_Loeschen
   CALL  LCD_Komando
   CALL  LCD_Pause_15ms
   MOV   A,#_LCD_ReturnHome
   CALL  LCD_Komando
   MOV   A,#_LCD_Betriebsart
   CALL  LCD_Komando
   MOV   A,#_LCD_EIN
   CALL  LCD_Komando
RET

Hier mal ein kleiner Auszug wie mans machen könnte!

LCD_Intialisieren sendet nur das Highbyte von 30h.
LCD_Komando gibt das im Akku stehende Zeichen im 4-Bit-Modus aus.
Also Highbyte wird zu erst gesendet dann das Lowbyte.

von Gerd Wolf (Gast)


Lesenswert?

Hallo,

ich versuche seit einiger Zeit auch ein 4 Zeilen Display zur Anzeige zu 
bringen.

Die Initialisierung funktioniert soweit auch, aber ich scheitere immer
wieder an dem Erweiterungsbit um in den 4 Zeilen Modus zu schalten.

Ich habe bisher noch nichts gefunden (Datenblatt des LCD's / Foren etc.)
wo das Ein und Ausschalten des RE Bits im Beispiel dargestellt wird.

Zeichen und Strings kann ich zwar anzeigen, aber nur, wenn ich für die 
Zeilenanfangspositionen $06/$C0/$94/$D4 (je für Zeile 1-4) als Zeilen 
code sende. Mit $0/$20/$40/$60 springt der Cursor an undefinierte 
Stellen bzw. es werden wirre Zeichen angezeigt oder die 
Zeichenhintergründe werden hell.

Bin sicher noch nicht im 4 Zeilen-Modus

Ich wollte erst mal anfragen, kann aber auch die betreffenden 
Code-Zeilen
hochladen. Bin neu im Forum, weiß noch nicht, wie das funktioniert.

Vielen Dank im Voraus

PS. Ich programmiere in Assembler mit Studio-4

von Alexander S. (alesi)


Lesenswert?

Gerd Wolf schrieb:
> Hallo,
>
> ich versuche seit einiger Zeit auch ein 4 Zeilen Display zur Anzeige zu
> bringen.

Hallo,

vorab: Du hast einen alten Thread von Dez. 2009 ausgegraben.
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.

Welches Display und welchen Mikrocontroller verwendest Du?

Für AVRs und HD44780 Controller wird die Ansteuerung im AVR-Tutorial
https://www.mikrocontroller.net/articles/AVR-Tutorial:_LCD
beschrieben.

von Dieter F. (Gast)


Lesenswert?


von Harry (Gast)


Lesenswert?

Steuer das Display via SPI an, denn es hat, im Gegensatz zu seinem 
Vorgänger -3, Probleme mit der parallelen Ansteuerung.

von Gerd W. (gerd_w)


Lesenswert?

Danke für die schnelle Antwort,

Habe noch ein paar Infos vergessen. Ich verwende das o.g. Display über 
einen TWI-Portexpander PCF 8574. Die Initialisierung funktioniert m.E.
nach, denn ich kann wie geschrieben Zeichen und Strings am LCD-Display 
ausgeben.

Nur die Einstellung des 4-Zeilen Modus gelingt mir nicht ?????.

Das Tutorial und die Foren Beiträge habe ich auch schon gefunden und 
studiert, nur bisher nicht den entscheidenden Hinweis auf dieses ominöse 
RE-Bit. Finde ich irgendwo ein Codebeispiel in ASS. Die TWI-Ansteuerung 
ist nicht das Problem

Ich habe auch gelesen, das der Thread älter als 6 Monate ist. (ich bin 
über 60 ;-)), aber ich wollte auf das Thema antworten. Bitte vergebt 
mir.
Wie auch gesagt, ich bin neu in diesem Forum.

Vielleicht kann mir trotzdem jemand weiterhelfen

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.