I2C Bus Problem (MultiSlave)

Hallo erstmal :).

Ich habe ein kleines Problem mit einer Seko Futtermisch Maschine für Rinder. Hier ist das LCD Display defekt, welches mittels 4 PCF8576CT IC´s angesteuert wird. Diese IC´s werden über den I2C Bus angesprochen.

Da ein neues Display leicht 500 Euro kosten wird, dachte ich mir, ich könnte doch mit dem Arduino den Bus "abhören" und mir die interessierenden Daten somit beschaffen um diese auf einem neuen Display auszugeben.

Aus dem Datenblatt weiss ich nun, das es maximal 16 verschiedene Addressen geben kann. es wird also wohl kein grosses Problem die richtigen 4 herauszufinden. Jedoch weiss ich nicht wie ich mir mit einem Arduino die Informationen dieser 4 Bus Teilnehmer beschaffen soll.

Das Original System will ich eigentlich nicht anfassen. Habe die SDA und SCL Pins lokalisiert und mich an diese angehängt. Jedoch kann ich mit der Wire Library soweit ich das verstanden habe nur eine Adresse benutzen.

Hat villeicht jemand von euch eine Idee oder einen kleinen Tipp hierzu? :-) Vielen Dank im voraus :)

Hallo Hieronymus,

das wird so wie du dir das denkst, nicht gehen. Zwar kannst du die Kommunikation an SDA/SCL überwachen, aber mehr als 0 und 1 wirst du dort nicht sehen.

Diese stehen erst einmal in keinem ersichtlichen Zusammenhang mit den gesendeten Sensordaten.

Hi sschultewolter. Vielen Dank für deine schnelle Antwort.

Wenn ich als Busteilnehmer beispielsweise die gleiche Adresse habe wie ein anderer Slave, Dann bekomme ich ja theoretisch schon die Meldungen, die eigentlich für den IC gedacht wären. Darauf müsste sich doch extrapolieren lassen, was der Kontroller dem IC damit sagen wollte nehme ich an?

Das Problem ist meiner Meinung nach nur, das ich mit einem Arduino mehrere I2C Slaves realisieren will.

Bei 16x2 LCDs könnte man viel Mühe und Zeit versuchen, den Stream entsprechend zu dekodieren. Bei grafischen TFTs, was das hier wohl bei der Anzahl an Expanders zu sein scheint, sehe ich das als fast ausgeschlossen.

Hast du bereits die Datenblätter von den Display durchschaut? Ggf. gibt es eine günstigere Bezugsquelle, insofern auf derm TFT nicht auch noch eine zusätzliche Software aufgespielt ist.

Es könnte evtl gehen, dass du die Infos bekommst, die an der IC gehen sollen. Das ist keinesfalls eine empfohlene Notlösung. Ggf. mit einem Logik Analyser an die Schnittstelle gehen. Das Problem ist, dass du das ganze so nicht dekodiert bekommst. Wenn die Steuerung auch noch auf Rückmeldungen vom Display wartet, dann sieht das ganze nicht besser aus.

Ich gehe mal ganz einfach davon aus, dass selbst wenn du dir die Arbeitsstunden auf Mindeslohn ansetzt, dass ganze bei weitem die Anschaffung eines neuen Gerätes (Displays) übersteigt. Hast du den Hersteller bereits kontaktiert, oder wie kommst du auf 500€?

Hi. Ein Händler hat mir ein neues Display für 500 Euro angeboten. :)

Der IC selbst kann keine Kommunikation über den I2C Bus versenden. Das einzige was dieser senden kann ist ein ACK Signal. Daher scheint zumindest in dieser Richtung recht wenig zu passieren.

Das Display selbst besteht aus 8 alphanumerischen Zeichen (also kein Punktmatrix sondern die Erweiterung der 7 Segment Anzeige).

die http://www.nxp.com/documents/data_sheet/PCF8576C.pdf sind LCD Pannel driver di direkt die segments ansteuern. Ich glaube es ist kein Problem den Arduino so zu programmieren damit er sich als ein PCF8576C ausgibt. Damit er sich als 4 PCF8576C ausgibt wird schwieriger. Ich weiß nicht ob Du die Biblithek so verändern kannst daß der Arduino auf mehrere Adressen anspricht. Du könntest 4 Arduini nehmen zb Arduino MINI. Das kostet dann immernoch weniger als die Ersatzplatine.

Ein anderes Problem ist die Zuordnug der gesetzten Segmente mit dem Segmenten auf dem Display. Du muß wissen welcehs Bit welchem Pixel entspricht damit Du eine Konvertierungstabelle machen kannst zb der Wert x entspricht einer 1, der Wert y einer 2 ecc. Grüße Uwe

Hi uwefed. Vielen Dank für deine Antwort. Ich hatte einen ähnlichen Plan.

Momentan überlege ich ob ich nicht soll 4 MSP430 Mikrokontroller der Marke TI verwenden soll. Hier gibt es eine Arduino sehr ähnliche Programmierumgebung. Ein MSP430 kostet 10 Dollar und es gibt neben der eigentlich programmier Platine 2 Mikrokontroller dazu (DIL Bauform). https://store.ti.com/MSP-EXP430G2-MSP430-LaunchPad-Value-Line-Development-kit-P2031.aspx

Anschliessend könnte ich je nachdem welches zeichen ausgegeben werden soll ein Arduino (villeicht ein Mini oder Pro Mini) dieses vom MSP einlesen.

Da mich lediglich zahlen interessieren, müsste ich also für jeden MSP430 4 Bit am Arduino einlesen. Ich sollte also genug Schnittstellen am Pro Mini haben.

Das das Arduino nur wenig ausgelastet ist (nehmen wir an ich verwende ein Serielles Display) könnte ich villeicht noch ein XBee Modul einsetzen um eine Portable Version zu erstellen also sprich um neben dem neuen Display noch eine Handheld Version zu erstellen.

Bei MSP können wir Dir nicht helfen. Ich sehe aber keinen Grund die Kontrolerfamilien zu mischen auch wenn es funktioniern müßte. Grüße Uwe.

Hieronymus: Hallo erstmal :).

Ich habe ein kleines Problem mit einer Seko Futtermisch Maschine für Rinder. Hier ist das LCD Display defekt, welches mittels 4 PCF8576CT IC´s angesteuert wird. Diese IC´s werden über den I2C Bus angesprochen.

Da ein neues Display leicht 500 Euro kosten wird, dachte ich mir, ich könnte doch mit dem Arduino den Bus "abhören" und mir die interessierenden Daten somit beschaffen um diese auf einem neuen Display auszugeben.

Die PCF8576 ICs sind Standard-ICs, um HD44780-kompatible Textdisplays an einen I2C-Bus anzuschließen.

Wenn Du 4 PCF8576CT hast, werden wohl auch 4 HD44780-kompatible Textdisplays angesteuert. Sind die alle vier defekt?

Wenn die alle vier nichts mehr anzeigen, würde ich ja eher darauf tippen, dass etwas mit der Stromversorgung der Displays nicht funktioniert oder der PullUp-Widerstand für die SDA/SCL Leitung eine kalte Lötstelle hat.

Weshalb sollten vier Display-Controller auf einmal defekt werden? Hattest Du einen Blitzeinschlag mit Überspannungsschaden?

Hallo Jurs. Es handelt sich lediglich um eine Anzeige. Welche defekt ist, weil nunja sie halt gebrochen ist. Die 4 IC´s kommen zum einsatz um diese eine anzeige zu steuern.

Diese möglichkeit ist im Datenblatt ebenfalls vermerkt. Dem nach können 8 IC´s zusammen verwendet werden für eine anzeige. Es ist also kein wirklcher hardwarefehler nur ein fehler da das Display gebrochen ist.

Bem Addressieren habe ich jedoch probleme um die richtige Addresse herauszufinden. Dem Datenblatt nach können es die Hexadezimaladdressen

10 20 ... 60 70

oder 12 22 ... 62 72

sein. Die maschine steht mir jedoch momentan nicht zur verfügung um tests machen zu können

Hieronymus: Bem Addressieren habe ich jedoch probleme um die richtige Addresse herauszufinden. Dem Datenblatt nach können es die Hexadezimaladdressen

Solange Deine I2C-Slaves noch elektrisch funktionieren, könntest Du sie an einen Arduino als I2C-Master anschließen und mit einem "I2C-Scanner" Programm testen, auf welchen Adressen die angeschlossene Hardware arbeitet: http://playground.arduino.cc/Main/I2cScanner

Hallo Leute danke für die Tipps :-). Ich habe jetzt folgendes gemacht:

Mit meinem logic Analyser habe ich während verschiedenen Situationen (Start-up, Betrieb und Shut down) 10 Sekunden lang den Bus gemessen.

Das Anfängliche Problem mit den Adressen ist auch klar im Datasheet steht, das es insgesamt 2 addressen gibt und jeweils 8 dieser Ic's an einer Adresse hängen können.

Der Master sendelt also klare Steuerbefehle um einen IC speziell anzusprechen. Im Fall meines ICs, handelt es sich um einen Befehl wenn das MSB der Datenübertragung high ist.

Dies wiederum bedeutet, das nur jeweils 7 Bit pro Datenbyte zur übermittlung von Daten zur verfügung stehen.

Dies finde ich wiederum plausibel, da es sich um 14 Segment Anzeigen handelt ohne Punkte. Daher 2 Datenbytes würden also eine Stelle verändern.

Das System ist leider zu komplex um das Display abzubauen, an den arduino anzuschliessen und einfach drauf los zu probieren..

Es handelt sich um insgesamt 20 Pins, von denen Pins zur Subadress vergabe dazugehören.

Ich habe jedenfalls die mit der logik analyse gewonnen Daten extrahiert, in steuerbefehel und Daten getrennt und sie sollten eigentlich nun Transponierbar sein.. jedoch hapert es noch...

Jemand ne idee wie ich beim transponieren vorgehen soll?

Vielen Dank schonmal :-)