Hallo Heini,
Das Thema Adressen wäre hier eventuell die Lösung. Doch davon verstehe ich nichts.
es gibt bei einer Schnittstelle/Bus/Interface/... immer mehrere Dinge die man beachten muß und die man im Kopf und bei der Fehlersuche trennen sollte.
- Das elektronische der Schnittstelle (Anzahl Leitungen, Pegel/Spannungen, Welcher Pegel steht für 1 und welcher für 0, OpenCollector oder Tristate oder Gegentakt)
- die zeitliche Abfolge der Signale/Pegel/Bits (Start der Übertragung, Ende der Übertragung, Bestätigungen, Adressen, Daten, Abfolge der Bits - kleinstes oder größtes zuerst, ...)
- das logische Protokoll (wie wird schreiben/lesen durchgeführt - elektrisch mit einer Leitung oder mit einem Bit, wie werden Adressen aufgebaut, wie werden die Daten übertragen, ...)
I2C:
Das ist ein Bussystem mit 2 signalführenden Leitungen SCL Serial Clock + SDA Serial Data (TWI = Two Wire Interface) UND natürlich GND. Die Bausteine sind mit OpenCollector-Anschlüssen an das Bussystem gekoppelt. Damit man also nicht nur GND hat wenn die Ausgänge durchschalten benötigt man bei BEIDEN Leitungen an EINER Stelle am Bus JEWEILS einen PullUp-Widerstand. Ich nehme 4,7kOhm. Manche nehmen 10kOhm. Sollte für einen kurzen Bus beides funktionieren. Der RASPI kann nur 3,3V bei I2C vertragen. Der Atmel normalerweise 5V (kommt IMMER auf die Betriebsspannung ALLER Busteilnehmer an). Wenn man Teilnehmer mit verschiedenen Versorgungsspannungen verwenden möchte, dann benötigt man eine Pegelanpassung zwischen den 3,3V- und den 5V Busteilnehmern und für beide Zweige jeweils PullUps.
GND-Pegel heißt das Bit ist auf 0, positiver Pegel über die PullUps bedeutet eine 1. Die beiden Leitungen vom Bus sind im Ruhezustand beide auf High (3,3V oder 5V). Um die Start- oder Stop-Bedingung am Bus anzuzeigen, wird vom Master eine normalerweise nicht genehmigte Signalabfolge der beiden Leitungen verwendet. Im Normalfall, darf sich der Pegel der Datenleitung nicht ändern, wenn die Taktleitung auf High liegt. Die Startbedingung wird vom Busmaster erzeugt, wenn er die Datenleitung nach GND/Low zieht, wenn die Taktleitung noch auf High liegt. Die Stopbedingung erzeugt der Master, wenn er bei High auf der Taktleitung die Datenleitung wieder auf High wechseln läßt. Den Takt erzeugt im Normalfall der Busmaster.
Die Adressen und Daten sind alle 8Bit (also 1 Byte). Die Adressen sind dabei aber ein wenig speziell ...
Das unterste Bit (Bit0) der Adresse ist für die Meldung ob der Master vom Busteilnehmer lesen oder schreiben möchte. Die Bits 1-7 sind die eigentliche Adresse.
Beispiel ... PCF8574 - 8Bit paralleles Busregister/Portbaustein
Grundadresse hex 20 (für die oberen 7 Bits! also 7 bis 1) wenn A2, A1 und A0 am IC auf GND liegen (die beeinflussen die unten 3 Bits der Adresse!)
010 0000 = hex 20 (durchzählen! es sind 7 Bit!)
Das unterste Bit0 wird für Read/Write verwendet. Also Read = 1 und Write = 0. Das ergibt dann mit der 7Bit Adresse folgende 8Bit-Adressen ...
010 0000 0 = hex 40 für Write - Die 8Bit-Schreibadresse des Bausteins
010 0000 1 = hex 41 für Read - Die 8Bit-Leseadresse des Bausteins
Um die Verwirrung für den Benutzer komplett zu machen, geben manche Hersteller im Datenblatt als Adresse die obersten 7 Bits (Bit7-1) an und manche Hersteller die vollständigen 8Bit Schreib- und Leseadressen.
Die Adresse ist also folgendermaßen beim PCF8574 aufgebaut ...
0 - 1 - 0 - 0 - A2 - A1 - A0 - R/W
Die 7Bit Grundadresse (Bit 7-1) kann sich also zwischen hex 20 (A2-0 auf GND) und hex 27 (A2-0 auf +5V) bewegen. Damit kann man also 7 dieser ICs am Bus betreiben, da die Adressen nicht doppelt verwendet werden dürfen. Sieh dir mal das Datenblatt an ...
https://www.mikrocontroller.net/part/PCF8574 ... Seite 12 + 13
Das sollte für das erste Verständnis hoffentlich reichen.
Gruß
Dino