LCD Profis gesucht

Hallo Group :o) Ich habe mir ein AVR 2313 Board gebastelt welches auch wunderprächtig funktioniert. Nun wollte ich pfiffig sein und Leitungen sparen und habe mir diese Lösung reingezogen und nachgebaut.

formatting link
anschluss und programmierung
formatting link
passende lib Hardware scheint mir in Ordnung zu sein, doch habe ich einen Fehler den ich nicht begreife. Alle Funktionen mit setzten des Cursurs funktionieren, nur eine Funktion nicht. Das senden von Text. Es sieht (kurzzeitig) danach aus als würde es zwar übertragen aber nicht angezeigt. Wie kann das sein? Begreife ich nicht ...desweiteren bin ich noch Newbie in AVR und umgebung. Kann jemand helfen ?

Reply to
Carsten Tröller
Loading thread data ...

Carsten Tr=F6ller schrieb:

n

ar

e in

Hallo,

lies mal das Datenblatt der LCD ganz genau. Die Anschlussleitungen d=FCrfen nicht zu lang sein, oft nur weniger als 1=

0 cm. Die Wartezeiten nach bestimmten zeitintensiven Befehlen an die LCD=20 m=FCssen eingehalten werden, miss die Zeiten mal nach, geht am einfachste= n=20 mit dem Logikanalysator wenn man einen hat.

Wenn Du den 4 Bit Modus benutzt musst Du eine spezielle Initialisierung=20 f=FCr diesen Modus einhalten, die ist =FCber doppelt so lang wie die f=FC= r 8 Bit. Es gibt oft auch einen Display On/Off Befehl, damit kann man den Text=20 auch unsichtbar machen.

Da Du ja nicht verraten hast welches LCD Du benutzt bin ich mal von=20 einem HD44780 LCD Controller IC ausgegangen.

Bye

Reply to
Uwe Hercksen

Hallo Uwe Der Controller ist ein ks0066 (4 bit Modus) welcher kompatibel mit dem HD44780 ist. Logik analyser steht mir nicht zur verfügung.leider. Das was mir wirklich spanisch vorkommt,ist, das der Controller die Befehle ja annimmt und auch ausführt wie Cursor setzen,shift links/rechts,donwline und upper line.Den Cursor habe ich ja gesetzt, somit kann ich festellen das das LCD auf sichtbar steht.Was die anschluss Leitungen angeht,dürfte ich nicht zu lang sein,weil das Signal ja über den PCF 8574 reinkommt und dieser ist direkt mit dem LCD verbunden.Also nicht mal 5 mm. Sobald ich aber Text mit dem 'LCD' Befehl ans LCD schicke, sieht man nur wie von links nach rechts ein Schatten übers LCD geht.Über alle vier Zeilen. Als wenn die Position des Cursors einmal komplett durch das Display rast. Vielleicht muß man das Pferd anders herum aufzäumen. Wo liegt der unterschied zwischen der Textausgabe und dem normalen Cursor setzten ? Mfg Troelli

Hallo,

lies mal das Datenblatt der LCD ganz genau. Die Anschlussleitungen dürfen nicht zu lang sein, oft nur weniger als 10 cm. Die Wartezeiten nach bestimmten zeitintensiven Befehlen an die LCD müssen eingehalten werden, miss die Zeiten mal nach, geht am einfachsten mit dem Logikanalysator wenn man einen hat.

Wenn Du den 4 Bit Modus benutzt musst Du eine spezielle Initialisierung für diesen Modus einhalten, die ist über doppelt so lang wie die für 8 Bit. Es gibt oft auch einen Display On/Off Befehl, damit kann man den Text auch unsichtbar machen.

Da Du ja nicht verraten hast welches LCD Du benutzt bin ich mal von einem HD44780 LCD Controller IC ausgegangen.

Bye

Reply to
Carsten Tröller

Carsten Tr=F6ller schrieb:

Hallo,

schau dazu doch in den Befehlssatz des HD44780. Fragst Du vor jedem Schreib- und Lesezugriff das Busy Flag BF auf 0 ab? Im 4 Bit Mode ist die Busy Abfrage vor jedem Bytezugriff n=F6tig.

H=E4lst Du die vorgeschriebene Initialisierung ein?

Wenn Du keinen Logikanalysator hast, kannst Du die Zeiten wenigstens mit =

einem Oszi =FCberpr=FCfen? Dabei ist oft hilfreich mit einem freien=20 Portausgang interessante Software Ereignisse zu markieren, z.B. Ausgang=20 bei Beginn des Delays f=FCr das LCD setzen, danach wieder l=F6schen, dann= =20 braucht man nur diesen Ausgang zu messen. Ohne einen Speicheroszi mu=DF=20 man nat=FCrlich eine periodische Schleife programmieren.

Bye

Reply to
Uwe Hercksen

Hallo Uwe In den Befehlssatz habe ich natürlich geschaut.Doch wirklich klüger bin ich nicht geworden. Das Problem ist sicher das es ein nachbau ist, so wie die Soft.Beides nicht von mir. Intitialisierung: ja in 2 Schritten.

[_Init_LCD] _Init_LCD: *BASIC: waitms 50 'erster part ldi r16,&hc0 ; this is to make the initialization on both halfs of a 4-line LCD Ldi _temp1, &h03 ; at init-time I call all routines before _lcd_e is loaded into r16 Rcall _Send_to_LCD *BASIC: waitms 4 ,zweiter part Rcall _Send_to_LCD Rcall _Send_to_LCD Ldi _temp1, &h02 Rcall _Send_to_LCD Ldi _temp1, &h28 Rcall _Write_lcd_byte ;RS flag should to be 0, so jump directly to write byte Ldi _temp1, &h08 Rcall _Write_lcd_byte Ldi _temp1, &h0c Rcall _Write_lcd_byte Ldi _temp1, &h01 Rjmp _Write_lcd_byte [END]

eigentlich müßte es noch eine dritte mit 100 micro sek geben , jedoch hat der Verfasser ist wohl für nicht wichtig empfunden. Ich begreife auch nicht was in dieser Lib abgeht, derweil ich diese Sprache nicht kenne oder besser, sie programmieren kann.

Tja ... das kann ich Dir nicht mal sagen.Denn ich habe es nicht dem code hinzugefügt.Weiß aber das es enorm wichtig ist. Oszi? Steht mir unglücklicherweise nicht zu verfügung. Mein Code:

$regfile = "2313def.dat" 'AT90S2313 $crystal = 4000000 $lib "Lcd_i2c.lib" 'My i2c driver for the LCD Ddrd = &B0011000 Const Pcf8574_lcd = &H40 'Defines the address of the I/O expander for LCD 'Für Bit 3 Von Portd Config I2cdelay = 1 Config Scl = Portb.3 'Configure i2c SCL Config Sda = Portb.2 'Configure i2c SDA Dim _lcd_e As Byte 'Needed to control 4 line LCD _lcd_e = 128 'Upper half of

4-line display is selected Config Lcd = 16 * 4 'configure lcd screen Wait 1 Cursor On Blink Display On

Do Cls 'clear the LCD display

Portd.4 = 1 'LED (Pin PD3) an Portd.3 = 0 'LED (Pin PD2) aus Waitms 500

Lcd "Hello world." 'display this at the top line 'select the lower line Wait 1 Lcd "Otter" 'display this Wait 1

Portd.4 = 0 'LED (Pin PD3) aus Portd.3 = 1 'LED (Pin PD2) an Waitms 500

Loop End

Mfg Troelli

Reply to
Carsten Tröller

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.