PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : I2C LCD- problem



bergowitch
22.11.2004, 19:40
Hallo,
Ich habe die angefügte Schaltung aufgebaut und das 16*2 LCD angeschlossen (das zumindest richtig die oberen 4 pins und e,rs,gnd,vcc). Dann habe ich das Beispielprogramm von der http://www.mcselec.com/an_118.htm Seite angepasst (an den Mega16) spirch die Ports verändert (C0 und C1) und alle keyboard Befehle herausgenommen. Das LCD zeigt einen schwarzen Balken. Das ganze ist an das rn-controlboard angeschlossen und zwei lcd´s blinken auf. Nur auf dem Display verändert sich nichts. Ist die Schaltung falsch?
Danke Gruß Stefan

bergowitch
22.11.2004, 20:03
Hier nochmal das Programm

tobimc
22.11.2004, 20:14
HI

Die Schaltung sieht gut aus.
Allerdings das Programm...
Kannst du die "Lcd_i2c.lib" posten?

Ohne die können wir keine genauen Aussagen treffen...
Allerdings wird das wohl in ASM sein.

Sonst musst du das LCD eben über normalen I²C steuern.
Das ist kein großes Problem, funzt bei mir auch.

Grüße,
Tobi

bergowitch
22.11.2004, 20:30
Hallo,
danke für deine Antwort. Die lib ist auf der oben genannten HP zu finden http://www.mcselec.com/an_118.htm und sollte es eigentlich tun...

bergowitch
23.11.2004, 15:18
hallo,
kannst du mir mal dein i2c programm zur ansteuerung des lcd´s schicken?
vielleicht kann ich dan ja den fehler eingrenzen!
gruß
Stefan

edgar
27.11.2004, 10:59
HI

Die Schaltung sieht gut aus.
... das LCD eben über normalen I²C steuern.
Das ist kein großes Problem, funzt bei mir auch.

Grüße,
Tobi

@ tobi wie hast du es denn genau gemacht ?
@Stefan hast du es jetzt schon zum laufen gebracht?

gruß Werner...

bergowitch
28.11.2004, 13:34
@ edgar: ja weitgehend, scheint mir ein Wackelkontakt oder ein ein anderer doofer Fehler gewesen zu sein. Allerdings leuchtet nur eine Hälfte des LCD´s auf!? Ich muss das Ganze noch einmal nachbearbeiten und ein anderes LCD ausprobieren...

tobimc
28.11.2004, 14:20
Hi ihr!

Ich habe diesen Thread in der letzten Zeit irgendwie vernachlässigt, sorry.

Hier mein Quelltext:

Function Clearlcd() As Byte

I2csend Lcddataaddr , 1 'Clear
Waitms Default_i2c_delay_time


I2csend Lcdcntrladdr , 1 'Enable...
Waitms Default_i2c_delay_time

I2csend Lcdcntrladdr , 0 'Enable...
Waitms Default_i2c_delay_time


End Function



Function Startlcd() As Byte

I2csend Lcddataaddr , 56 'Mit 2 Zeilen initialisieren...
Waitms 5


I2csend Lcdcntrladdr , 1 'Enable...
Waitms 5

I2csend Lcdcntrladdr , 0 'Enable...
Waitms 5



I2csend Lcddataaddr , 12 'Einschalten, kein Cursor, kein blinken, siehe Datenblatt LCD für Werte...
Waitms 5


I2csend Lcdcntrladdr , 1 'Enable...
Waitms 5

I2csend Lcdcntrladdr , 0 'Enable...
Waitms 5



I2csend Lcddataaddr , 2 'Cursor HOME
Waitms 5


I2csend Lcdcntrladdr , 1 'Enable...
Waitms 5

I2csend Lcdcntrladdr , 0 'Enable...
Waitms 5


End Function



Function Lcdprint() As Byte
Dim Sign As String * 1 'Variablendeklaration
Dim Prnt As Byte
Dim Schlvar3 As Byte 'Schleifenvariablen...
Dim Schlvar4 As Byte



For Schlvar3 = 1 To 20 'Schleife für die ersten 20 Zeichen...

Sign = Mid(lcdupline , Schlvar3 , 1) '1 zeichen auslesen, mittels mid
Prnt = Asc(sign) 'Zeichen in ASCII-Wert umwandeln...


I2csend Lcddataaddr , Prnt 'Per I²C an den Datenchip legen (PCF8574)
Waitms Default_i2c_delay_time 'Besteimmte Zeit warten...


I2csend Lcdcntrladdr , 4 'Enable...
Waitms Default_i2c_delay_time

I2csend Lcdcntrladdr , 5
Waitms Default_i2c_delay_time

I2csend Lcdcntrladdr , 4
Waitms Default_i2c_delay_time

Next



I2csend Lcddataaddr , 192 'Steuerzeichen 192 für Zeilenwechsel...
Waitms Default_i2c_delay_time


I2csend Lcdcntrladdr , 0
Waitms Default_i2c_delay_time

I2csend Lcdcntrladdr , 1 'Enable...
Waitms Default_i2c_delay_time

I2csend Lcdcntrladdr , 0
Waitms Default_i2c_delay_time



For Schlvar4 = 1 To 20 '2te Schleife für die 2ten 20 Zeichen, untere Linie...

Sign = Mid(lcdlowline , Schlvar4 , 1) 'Zeichen holen...
Prnt = Asc(sign) 'Wie oben umwandeln...


I2csend Lcddataaddr , Prnt 'Siehe oben...
Waitms Default_i2c_delay_time


I2csend Lcdcntrladdr , 4
Waitms Default_i2c_delay_time

I2csend Lcdcntrladdr , 5
Waitms Default_i2c_delay_time

I2csend Lcdcntrladdr , 4
Waitms Default_i2c_delay_time

Next


End Function

Lcddataaddr it ein define, das die Addresse des 8574ers angibt, an dem von 0-7 DB0-DB7 hängen;
lcdcntrladdr ist das gleiche für den Baustein mit RS/RW und E.

Und i2cdelay ist die wartezeit.

Ich glaube aber kaum, dass ihr daraus schlau werdet...

Liebe Grüße und viel Glück!

x-ryder
08.12.2004, 19:39
hi,

ich misch mich ja nicht gern in anderer beiträge ein :cheesy: aber könnte man die i2c-lib wohl so umschreiben, das man damit nicht mit nem i2c portexpander sondern mit nem serial in/parallel-out shiftregister das display betreibt?

muss ich da nicht nur statt dem i2cwrite nen shiftout... schreiben?

Martin

tobimc
08.12.2004, 20:33
HI

Jao rein theoretisch... Wenn du asm kannst...
Ich meine irgendwo gelesen zu haben, dass man als lib nur asm-code einbinden kann.
Aber würde ich nicht drauf schwören.

Warum willst du das in ne Lib packen? Ich habe dass im 'Anhang' vom Hauptprogramm, wo auch die restlichen Funktionen sind. Das vereinfacht die Fehlersuche ein bisschen... :D

Grüße, Tobi

x-ryder
08.12.2004, 20:53
hmmm kannste denn mal deinen anhang posten denn ich habs selber schon einmal versucht (nach datenblatt) und es funzt nicht

tomkeule
23.04.2005, 10:48
Hallo,

ich hänge mich mal an dieses alte Thema ran.

Mein Problem ist das auf dem LCD nur sinnlose Zeichen dargestellt werden. Bei dem LCD handelt es sich um ein CMC420L01 welches ich hier erstanden habe http://www.ledblinker.de/p151.html.

Wenn ich das LCD normal mit 4-Bit über einen Mega8 oder über einen 2313 ansteuere funktioniert es. ich habe auch schon mehrere PCF8574 ausprobiert.

Ich benutze die Version 1.11.7.4

mfg

Tomkeule

tobimc
23.04.2005, 21:03
Hi!

10€ FÜR EIN 4x20 ZEICHEN HINTERGRUNDBELEUCHTETES LCD!?!?!?!?!?!

Sendest du die richtigen Initialisierungssequenzen? -> Datenblatt!

Grüße,
Tobi

23.04.2005, 22:25
Hallo,

ein Datenblatt von dem LCD habe ich leider noch nicht gefunden.

Aber wie schon geschrieben funktioniert es wenn ich das LCD direkt an den Mega8 oder 2313 hänge. Sobald ich aber das ganze über I2C und der lcd_i2c.lib versuche bekomme ich nur Müll angezeigt. Über die Initialisierungssequenzen habe ich mir bisher keine Gedanken gemacht. Hat ja bisher auch immer funktioniert.

mfg

Tomkeule

tobimc
24.04.2005, 08:55
HI

Hm.
Du brauchst unbedingt ein Datenblatt!
Da kann man das auch sehr genau nachlesen!

Du kannst ja einen 2313 oder So das LCD ansteuern lassen, und den über I²C (UART wäre besser) laufen lassen.... (Ist nur so ne Idee...)

Grüße,
Tobi

tomkeule
24.04.2005, 11:13
Hallo Tobi,

danke für deine Hilfe. Jetzt gehts.

Ich habe versucht das LCD über Bascom ohne LCD-Befehle zu initialisieren.
Nachdem das funktioniert hatte habe ich das Ganze mit der lcd_i2c.lib verglichen und entsprechend abgeändert.

Wie du vermutet hattest war die Initialisierungssequenzen nicht i.O.

mfg

Tomkeule


Über einen 2313 mit I2C habe das LCD auch schon angesteuert. War damit aber nicht zufrieden weil mann dann die internen LCD-Befehle nicht verwenden kann. 8-[