Forum: Mikrocontroller und Digitale Elektronik Bascom LCD an I2C AN118


von Karl-walter W. (kwalter)


Lesenswert?

Hallo zusammen,

bin fast am verzweifeln, habe laut AN118 von mcs ein I2C Interface für
ein LCD Display aufgebaut und die lcd_i2c.lib ins Bascom Lib
Verzeichnis
kopiert.

Das Demoprogramm geladen und compiliert - OK.

Auf der Anzeige des Display's erscheint aber nur ein blinkender
Cursor.

Habe schon mehrere Display's getestet, 16*4, 16*2, 27*4.

Bei allen das gleiche.

Die Hardware scheint zu funktioneren, Messungen an den Portausgängen
des PCF8574A zeigen aktivität.

Was mache ich verkehrt, oder stimmt irgendetwas mit der Library nicht?

Gruß
Karl-Walter

von Oliver (Gast)


Lesenswert?

Moin Karl-Walter,

stimmt die Adresse vom Port IC und ist der Bus nicht zu schnell ?
200kHz sollten gehen, je nach Länge und Aufbau der Leitung.

Ansonsten kann man ohne Dein Code nix dazu sagen.

mfg
Oliver

von Karl-walter W. (kwalter)


Lesenswert?

Moin Oliver,

ne, das ist alles ok, habe keinen eigenen Code verwendet, sondern nur
das Demoprogramm aus der AN118 von MCS und dort die Adresse von &H40
auf &H70 für den PCF8574A angepasst.

Gruß
Karl-Walter

von Oliver (Gast)


Lesenswert?

Moin Karl-Walter,

also hier gehts mit &H40 und ca 2,5m kabel mit 400kHz,
aber zu langsam darf es nicht sein. Ein I2cdelay unter 4-7 kann
ärger machen.

Und nur der Pin 3 vom PCF ist auf low, 1,2 auf High bei %h70 ja ?

Und wenn Du wirklich den A Typ nimmst, ist h70 eh falsch, dann müsste
es eher h76 sein, da der A-Typ ein anderes Anfangsbitmuster hat.
(0111A2,A1,A0,0 und nicht 0100A2,A1,A0,0

Evt liegts nur daran ?? Siehe Datenblatt Seite 9.

mfg
Oliver

von kwalter (Gast)


Lesenswert?

Moin Oliver,

verstehe ich nicht wie Du das rechnest,
wenn ich mich nicht täusche, dann ist &H70 für den A Typ
korrekt, wenn a2, a1, a0 auf 0 liegen.

Binär sieht das doch so aus:
01110000 das sind dann 16 + 32 + 64 = 112 dezimal
und das macht 70 hexadezimal.

Oder rechne ich da falsch?

Und wie schon gesagt, mit dem Oszi sind an den
Ausgängen 0-3 (Pin 4-7) und auch am Ausgang 5,7,8 (Pin 9,11,12)
ganz eindeutig Signale zuerkennen.

Die Hardware arbeitet also korrekt.

Vermute irgendwo Timingprobleme bei der Initialsierung des Display's
etc., verwende einen Mega16 mit 15Mhz Takt.

Gruß
Karl-Walter

von Oliver (Gast)


Lesenswert?

Moin,

Yo haste recht, hatte mich verkuckt !
Mit welchen Takt arbeitest Du denn ? Und wie lang ist die Leitung ?
LAN-Kabel geht dafür nicht !!

Sind auch die Ports definiert ?

Config Scl = Portc.5
Config Sda = Portc.4   zum Bleistift

mfg
Oliver

von kwalter (Gast)


Lesenswert?

Hallo Oliver,

ich arbeite mit 16 MHz Prozessortakt und z. Zt. mit 100KHz I2C Takt.

Ja, die Steuerleitungen hab ich definert.

Du sagtest doch das Du so eine Anzeige am laufen hast?
Hast Du dafür die Lib aus der AN118 von MCS verwendet, oder wie
hast Du deine Ansteuerung gemacht?

Gruß
Karl-Walter

von kwalter (Gast)


Lesenswert?

Sorry Oliver,

hab noch was vergessen, die Leitung ist ca. 20 cm lang.

Gruß
Karl-Walter

von Oliver (Gast)


Lesenswert?

Nimm mal 200-300kHz !!! 100khz ist evt etwas zu knapp.

Yo, habe die org Lib und sonst nach Demo laufen, aber mit 2,5m
Kabel (Einzelschirm).
Hier der Beweis, dass es geht =>
http://www.dg7xo.de/selbstbau/dc-power-display.html :-))

mfg
Oliver

von Karl-walter W. (kwalter)


Lesenswert?

Hallo Oliver,

sieht ja verdammt gut aus, was Du da gebaut hast!

Bin eben dabei, mir erst mal ordentliche Platinen herzustellen,
damit der verdammte Drahtverhau mal aufhört.

Im Endeffekt so das ganze eine Steuerung für ein Meerwasseraquarium
werden, der komplette Steuerteil (DCF77, RTC, 16 Steckdosen über Triac
die über Optokoppler an 2 PCF8574 hängen) und noch so einige diverse
Messwerte (PH, Salinität, Leitwert und 4 * Temperatur via LM75).

Tja und dann wollte ich das ganze, gerne auf 4 Displays mit je 4*27
Stellen sichtbar machen und siehe da, der einfachste Teil macht die
grössten Probleme.

Aber wenn Du sagst und wie Deine Dokumentation ja auch beweist, muß es
zu schaffen sein.

Werde morgen, sobald ich die 4 Anzeigeplatinen fertig habe, weiter
testen und dann auchmal den Takt erhöhen.

Werde dann berichten, ob sich was getan hat.

Gruß
Karl-Walter

von Karl-walter W. (kwalter)


Lesenswert?

Hallo Oliver,

leider hat der Platinenaufbau das Problem auch nicht gelöst!

Habe inzwischenzeit mit dem i2cdelay herum getestet, ohne jeden
Erfolg.

Glaube ich hol mir einen Strick und erschieß mich!

Gruß
Karl-Walter

von Oliver _. (verleihnix)


Lesenswert?

Moin,

also wenn das die Pollin LCDs sind, nimm erstmal ein Standard 2x16
zum testen ! Die 4x27 von Pollin haben 2 E Leitungen und ob
das die LIB kann weiß ich jetzt nicht. Zumindest müssten die ersten
beiden Zeilen laufen. Sonst mal in der Config 4x40 angeben
und nur die ersten 27 Zeichen verwenden !!
Und schau, dass die 5-Regler kein Mist machen, die haben hier
wohl etwas Mist gemacht, habe org von ST genommen und dann gings, davor
nur wirre Zeichen. Man kann manchmal nicht so blöd denken, wie was
schief gehen kann. Ein 7805 ist eben nicht immer ein 7805, manchmal
auch Schrott, Fr. Reichelt. :-)

mfg
Oliver

von Karl-walter W. (kwalter)


Angehängte Dateien:

Lesenswert?

Moin Oliver,

es hilft alles nichts, laut Scope und Multimeter ist die
Spannungsversorgung ok, auch über einen Zeitraum von 1 Stunde
gemessen.

Nutze die Version 1.11.8.2 mit der Compiler Version 1.11.8.1 laut
"About".

Aktuell hab ich jetzt einen ATMega8 mit 16Mz Clock auf dem STK500.

An Port C.4 hab ich die SDA und an Port C.5 die SCL mit je 4.k nach
+5V.

Die Initialisierung des Display's kann man sehen aber danach nur leere
Zeilen.

Habe auch schon mit normalen 16*2 Display's getestet, immer das
gleiche.

Die Hardware scheint zu funktionieren, aber das Display zeigt nichts
an.

Muß ich eventl. irgendwelche Fuses setzen?
Oder vergesse ich sonst irgendwas?

Hast Du vieleicht mal einen Beispiel Code der bei dir läuft.

Als Anhang habe ich mal ein Beispielprog von mir drangehangen, was
keine LIB's nutzt, läuft aber auch nicht besser.

Gruß

Karl-Walter

von Karl-walter W. (kwalter)


Lesenswert?

Sorry Oliver,

bei den Widerständen sollte es natürlich 4.7K lauten.

Gruß
Karl-Walter

von Oliver _. (verleihnix)


Lesenswert?

Moin Karl-Walter,

schon sehr merkwürden, Kontrast am LCD ist aber richtig eingestellt ja
? Sehe ich das richtig, dass das LCD auch direkt im 4-Bit Modus
am uC nicht lauft ??
Sonst erstmal das LCD im 4-Bit Modus am uC anschließen und die
Software bauen. So habe ich das gemacht. Erst wenn alles läuft,
habe ich das auf I2C LCD umgestrickt.
Gib mal iMehl, dann schick ich Dir den Code zu.
Ich vermisse aber Enable Interrupts und siehe die 3 letzten Zeilen !
Aber eigendlich sollte das so gehen:

$regfile = "m8def.dat"
$crystal = 8000000                           'interner 8 MHz RC-Osz.
'$baud = 9600
$hwstack = 64
$swstack = 8
$framesize = 32

$lib "lcd_i2c.lib"                           'LCD über I2C Bus
Config I2cdelay = 2
Const Pcf8574_lcd = &H40                     'I2C Treiber für das LCD
Config Scl = Portc.5                         'Port SCL
Config Sda = Portc.4                         'Port SDA
Enable Interrupts                            'Einschalten für I²C-LCD
_lcd_e = 128                                 'Für LCDs mit 1
Controler
Waitms 300                                   'WICHTIG! ggf. erhöhen


mfg
Oliver

von Karl-walter W. (kwalter)


Lesenswert?

Moin Oliver,

ja, das ist alles richtig, läuft im 4 Bit Modus ohne Probleme.
Kontrast ist auch ok.

E-Mail:karl.walter.weller@t-online.de

P.S. Wenn möglich auch ein Hex File, das ich direkt in Mega8 brennen
kann, damit irgendwelche Fehler im Bascom ausschließen kann.

Vielen Dank für Deine Mühe.

Gruß
Karl-Walter

von Uwe Z. (uwezensen)


Lesenswert?

Hallo,

ich habe genau das gleiche Problem.
Beschaltung nach Beispiel aufgebaut,

$regfile = "m16def.dat"
$crystal = 8000000
$lib "Lcd_i2c.lib"
 Const Pcf8574_lcd = &H40   'I2C Adresse
 Config Scl = Portc.0       'I2C SCL Pin
 Config Sda = Portc.1       'I2C SDA Pin
 Dim _lcd_e As Byte
 _lcd_e = 128               'LCD im 4-Bit Mode betreiben

 Cls                'loesche das LCD Display
 Locate 1 , 1       'Cursor auf 1 Zeile, 1 Spalte
 Lcd "Hello world." 'String auf Display anzeigen
 do
 Cls
 Lcd "Pappnase"
 Wait 1
 Loop
schaut seht übersichtlich aus,
aber es geht nicht.
ich verwende den PCF8574p, der Baustein ist OK, der arbeitet in anderer 
Schaltung einwandfrei.
Aber auch bei mir will es nicht.

Gruß

Uwe

von Thorsten F. (tfol)


Angehängte Dateien:

Lesenswert?

Hi,

der Beitrag ist ja schon ein paar Jahre alt, aber ich habe jetzt ein 
ähnliches Problem.

Ich nutze seid Jahren mehrere LCDisplay von ELECTRONIC ASSEMBLY mit 2*24 
Zeichen und blauer Hintergrundbeleichtung. Mehrfach gekauft seid 2006 
bei Reichelt. http://www.reichelt.de/?ARTICLE=53951;PROVID=1024

In meiner alten Schaltung mit der CControlII laufen die perfekt, in 
meiner neuen Schaltung nuzte ich den Atmega2560 mit 16Mhz. Die 
Ansteuerung erfolgt über I2C und dem PCF8574P.

Die alten Displays von 2006 und 2007 funktionieren super, nur sind 
später neue Displays dazu gekauft worden, die sich zwar initialisieren 
(Balken verschwinden), aber dann wird nichts mehr angezeigt.

Habe ELECTRONIC ASSEMBLY angeschrieben, und als Antwort nur erhalten, 
dass unterschiedliche Controller verwendet wurden ('Früher war das 
einmal Hitachi, dann Samsung und nun Sitronix.'), die aber alle 
kompatibel sein sollen. 'Achten Sie einmal auf den Enable-Eingang, und 
hier speziell auf das Timing und die Pegel bzw. Flanken.'

Habe hier 5 alte Displays, die super funktionieren und 6 neue, die 
nichts anzeigen.
Den Clockteiler durch 8 habe ich schon testweise aktiviert, bringt auch 
nichts.

Wo kann ich ansetzten? Wie ändere ich das Timing unter Bascom in der 
Lcd_i2c.lib? Habe meine veränderte Datei angehängt.

Gruß
Thorsten

von Thorsten F. (tfol)


Lesenswert?

Noch mal nach oben Schubs ;)

Ich bin seid 2h am testen und komme nicht weiter.

Thorsten

von Thorsten F. (tfol)


Lesenswert?

Hi,

einmal muss ich es noch hochschubsen.
Ich verstehe nicht, warum es bei bei einigen Displays nicht 
funktioniert.
Habe schon alles mögliche in der LIB ausprobiert.

Gruß
Thorsten

von Klaus D. (kolisson)


Lesenswert?

Thorsten F. schrieb:
> Habe hier 5 alte Displays, die super funktionieren und 6 neue, die
> nichts anzeigen.

Dann teste doch erstmal ob die neuen funktionieren wenn du
diese konventionell (also ohne diesen I2C Workaround) anschliesst

Klaus

von Thorsten F. (tfol)


Lesenswert?

Hi,

die neuen Displays funktionieren auf der gleichen Platine mit der alten 
Ansteuerplatine einwandfrei. Da ist aber der Prozessor eine C-Control.

Egal wie ich versuche in der Lib etwas zu verlangsamen, durch
 *BASIC: waitms 40
oder durch
NOP

es bringt nichts bei den neuen Displays, ausser das ich den Cursor an 
die richtigen Stellen springen sehe und es blinkt einmal das Feld.
Es wird aber nichts geschrieben.

Leider funktionieren die alten Displays dann nicht mehr 100%, es kommt 
da zu falschen Zeichen.

Ich versuche es einzugrenzen.

Thorsten

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.