LCD im 4-bit-mode ansteuern

C

Christof Rueß

Guest
Hallo NG!

Ich möchte mein Ansteuerungsmodul für LCD-Displays (für Visual Basic) mit
einer Möglichkeit erweitern, das Display im 4-Bit-Modus zu verwenden.
Ich hab es schon einige Male versucht, aber immer ohne Erfolg. Ich schicke
folgendes an das Display:

(R/W und RS sind immer auf Low, bei jeder Ausgabe erfolgt natürlich das
Bestätigen mit Enable und danach eine Pause von 1ms)

00110000
20ms Warten

00110000
00110000 '4-bit-mode setzen

00100000 'Functionset

00100000
00100000 'Schrift setzen (8x5)

00000000
11000000 'Display an

00000000
00010000 'Display löschen

00000000
01000000 'Entry Mode set

Wisst ihr, was ich da falsch mache?
Das Display zeigt immer nur seine zwei Balken an und ist von der ganzen
Sache wenig beeindruckt.

MfG

Chris
--
http://www.hobby-elektronik.de.vu
ICQ: 176979879
Achtung: E-Mailadresse ungültig.
Benutzt hobbyelektronik {at} gmx {dot} net
 
Christof Rueß wrote:
Ich möchte mein Ansteuerungsmodul für LCD-Displays (für Visual Basic)
mit einer Möglichkeit erweitern, das Display im 4-Bit-Modus zu
verwenden. Ich hab es schon einige Male versucht, aber immer ohne
Erfolg. Ich schicke folgendes an das Display:

(R/W und RS sind immer auf Low, bei jeder Ausgabe erfolgt natürlich
das Bestätigen mit Enable und danach eine Pause von 1ms)

00110000
20ms Warten

00110000
00110000 '4-bit-mode setzen

00100000 'Functionset

00100000
00100000 'Schrift setzen (8x5)

00000000
11000000 'Display an

00000000
00010000 'Display löschen
Im Datenblatt des KS0070 wird hier eine Pause von 1,64ms gefordert.
Im Datenblatt des HD44780 ist bei mir keine Zeit angegeben.

Welcher Controller ist auf dem Display?

00000000
01000000 'Entry Mode set

Wisst ihr, was ich da falsch mache?
Das Display zeigt immer nur seine zwei Balken an und ist von der
ganzen Sache wenig beeindruckt.
Die Länge des Enable-Impulses könntest du noch kontrollieren.
Bei mir war die Verdrahtung schlecht und ich mußte ein paar NOPs
einfügen.

mfg
werner
--
VK: Z80 "NDR Klein Computer"
http://www.my-stuff.onlinehome.de
 
Hallo Werner!

Code:
[QUOTE]Im Datenblatt des KS0070 wird hier eine Pause von 1,64ms gefordert.
Im Datenblatt des HD44780 ist bei mir keine Zeit angegeben.

Welcher Controller ist auf dem Display?
[/QUOTE]
Es ist ein Samsung, also KS0070 und ein Bruder von ihm (16x4)

[QUOTE]
00000000
01000000 'Entry Mode set

Wisst ihr, was ich da falsch mache?
Das Display zeigt immer nur seine zwei Balken an und ist von der
ganzen Sache wenig beeindruckt.

Die Länge des Enable-Impulses könntest du noch kontrollieren.
Bei mir war die Verdrahtung schlecht und ich mußte ein paar NOPs
einfügen.
[/QUOTE]
Ich habe die Pausen zwischen Ehigh -> Elow und Elow-> nächster Befehl
testweise auf 20ms gestellt. Hilft leider nichts.

Wenn ich das Display an meine Funkuhr (PIC16F84) anschließe funzt das
Display wie eines mit dem HD44780.

MFG

Chris
 
Hallo!

On Sun, 28 Sep 2003 09:36:48 +0200, "Christof Rueß" <me@privacy.net>
wrote:
Ich möchte mein Ansteuerungsmodul für LCD-Displays (für Visual Basic) mit
einer Möglichkeit erweitern, das Display im 4-Bit-Modus zu verwenden.
Ich hab es schon einige Male versucht, aber immer ohne Erfolg. Ich schicke
folgendes an das Display:
00110000
20ms Warten

00110000
00110000 '4-bit-mode setzen
Der Kommentar muß 8-bit mode heißen, denn hier ist das Display im
8Bit-Modus. Die dreimalige Wiederholung stellt sicher, daß das unter
allen Umständen (auch im 4bit-Modus) so ist, damit beim nächsten
Befehl klar ist, ob man beim Low oder High-Nibble des 4bit-Modus ist.
00100000 'Functionset
ok. setzt 4bit-Modus

00100000
00100000 'Schrift setzen (8x5)
Ungewöhnliche Initialisierung, 22h. Einzeiliges Display mit
integrierten Spannungsinverter?!
Üblich wäre: 28h => 0010xxxx 1000xxxx für zweizeilig ohne eingeb.
Spannungsinverter, oder manche langen einzeiligen
22h => 0010xxxx 0010xxxx für einzeilig mit eingeb.
Spannungsinverter
20h => 0010xxxx 0000xxxx für einzeilig ohne eingeb.
Spannungsinverter
2Ah => 0010xxxx 1100xxxx für vierzeilig oder lange
zweitzeilige ohne eingeb. Spannungsinverter

also Bit 2+3: 1/2/4Zeilig oder 1/2Zeilig+Schriftart
Bit 1: Spannungswandler an/aus (wenn vorhanden, sonst undefiniert)

00000000
11000000 'Display an
ok.

00000000
00010000 'Display löschen
ok.

00000000
01000000 'Entry Mode set
ok.

Wisst ihr, was ich da falsch mache?
Das einzig Auffällige ist das SystemSet von 22h. Wenn der stimmt oder
eine Änderung nix bewirkt, schreib doch mal Deine Routine, die ein
Datenbyte ins Steuerregister ausgibt.

Gruß

Tassilo
--
ľC Assembler-IDE für AVR, 8051, Z80, 8048 =>
http://www.theeg.de/aside/index.html
================================================================
de.sci.electronics FAQ: http://dse-faq.elektronik-kompendium.de/
 
Hallo Tassilo!

Das einzig Auffällige ist das SystemSet von 22h. Wenn der stimmt oder
eine Änderung nix bewirkt, schreib doch mal Deine Routine, die ein
Datenbyte ins Steuerregister ausgibt.
*Kopfantischkantehau*

Mann, jetzt kann ich nichteinmall mehr ein Datenblatt lesen.
Danke, jetzt wird alles initialisiert!

MfG

Chris

--
http://www.hobby-elektronik.de.vu
ICQ: 176979879
Achtung: E-Mailadresse ungültig.
Benutzt hobbyelektronik {at} gmx {dot} net
 
In article <bl632u$887i6$1@id-193171.news.uni-berlin.de>,
"Christof Rueß" <me@privacy.net> writes:
Hallo NG!

Ich möchte mein Ansteuerungsmodul für LCD-Displays (für Visual Basic) mit
einer Möglichkeit erweitern, das Display im 4-Bit-Modus zu verwenden.
Ich hab es schon einige Male versucht, aber immer ohne Erfolg. Ich schicke
folgendes an das Display:

(R/W und RS sind immer auf Low, bei jeder Ausgabe erfolgt natürlich das
In meinem Datenblatt steht 0 0 1 dl 1 0 x x . Das würde ich auch so machen,
weil der erste Transfer manchmal als 4 bit(initialisiertes Display) und
manchmal als 8 bit (Neustart) erkannt wird. Deshalb schicke ich alles so
als ob das Display schon 4 bit läuft.

Aber was meinst du mit RS immer auf Low?

Zum senden von Daten muß RS umgeschaltet werden. Falls das schon machst
versuchs mal mit einem 3K Pullup an Enable.

Außerdem verwende ich zum Initialisieren im 4-bit mode diesen Initstring.
lcdinitstring[]={0x28,0x28,12,6,1,0}

--
MFG Gernot
 
Hallo Gernot!

In meinem Datenblatt steht 0 0 1 dl 1 0 x x . Das würde ich auch so
machen,

Steht in meinem auch. Aber ich bin auf beiden Augen blöd ;)

weil der erste Transfer manchmal als 4 bit(initialisiertes Display) und
manchmal als 8 bit (Neustart) erkannt wird. Deshalb schicke ich alles so
als ob das Display schon 4 bit läuft.

Aber was meinst du mit RS immer auf Low?
Weil man RS nur dazu braucht, wenn man Zeichen in den DD-Ram und CG-Ram
braucht?

Zum senden von Daten muß RS umgeschaltet werden. Falls das schon machst
versuchs mal mit einem 3K Pullup an Enable.
Verwechselt du RS und E?

Außerdem verwende ich zum Initialisieren im 4-bit mode diesen Initstring.
lcdinitstring[]={0x28,0x28,12,6,1,0}
Hex und Binär vermischt?
Das sieht komisch aus!

MfG

Chris
 
In article <bl6vej$7v9lg$1@id-193171.news.uni-berlin.de>,
"Christof Rueß" <me@privacy.net> writes:
Hallo Gernot!

Aber was meinst du mit RS immer auf Low?

Weil man RS nur dazu braucht, wenn man Zeichen in den DD-Ram und CG-Ram
braucht?

Zum senden von Daten muß RS umgeschaltet werden. Falls das schon machst
versuchs mal mit einem 3K Pullup an Enable.

Verwechselt du RS und E?
Nein mit Daten meinte ich Zeichen. Das andere sind für mich Kommandos ;-)

Außerdem verwende ich zum Initialisieren im 4-bit mode diesen Initstring.
lcdinitstring[]={0x28,0x28,12,6,1,0}

Hex und Binär vermischt?
Das sieht komisch aus!
Mein Compiler schluckt das ohne murren. Ich bin halt tippfaul. Ist aber so
gemeint wie es dasteht.

--
MFG Gernot
 
Hallo Gernot!

Zum senden von Daten muß RS umgeschaltet werden. Falls das schon machst
versuchs mal mit einem 3K Pullup an Enable.

Verwechselt du RS und E?
Nein mit Daten meinte ich Zeichen. Das andere sind für mich Kommandos ;-)
Unter Daten verstehe ich beides!
Daten sind eben Daten, egal ob Zeichen, Commands oder sonst irgendwas!

Außerdem verwende ich zum Initialisieren im 4-bit mode diesen
Initstring.
lcdinitstring[]={0x28,0x28,12,6,1,0}

Hex und Binär vermischt?
Das sieht komisch aus!

Mein Compiler schluckt das ohne murren. Ich bin halt tippfaul. Ist aber so
gemeint wie es dasteht.
Dann machs ich halt bisschen übersichtlicher ;)
lcdinitstring[]={0x28,0x28,0x0A,0x06,0x01,0x00}

MfG

Chris
 
In article <bl73je$8mgns$1@id-193171.news.uni-berlin.de>,
"Christof Rueß" <me@privacy.net> writes:

={0x28,0x28,12,6,1,0}
Dann machs ich halt bisschen übersichtlicher ;)
lcdinitstring[]={0x28,0x28,0x0A,0x06,0x01,0x00}
12=0x0C
Ach ja, die Null wird nicht gesendet.

--
MFG Gernot
 
={0x28,0x28,0x0A,0x06,0x01,0x00}

12=0x0C
Ach ja, die Null wird nicht gesendet.
Ich hatte C im Kopf, warum ich A geschrieben hab, weiß ich nicht.

Mfg

Chris
 

Welcome to EDABoard.com

Sponsor

Back
Top