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
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
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
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
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
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
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
Sorry Oliver, hab noch was vergessen, die Leitung ist ca. 20 cm lang. Gruß Karl-Walter
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
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
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
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
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
Sorry Oliver, bei den Widerständen sollte es natürlich 4.7K lauten. Gruß Karl-Walter
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
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
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
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
Noch mal nach oben Schubs ;) Ich bin seid 2h am testen und komme nicht weiter. Thorsten
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.