PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : 2 I2C Buße an einen µC



Haveaniceday
06.03.2009, 12:02
Hallo zusammen,
kann ich 2 I2C Buße über einen µC an 2 verschiedenen Ports laufen lassen?
Und zwar will ich mehrere (9 oder 10) DS1631 Temperatursonoren über I2C auslesen, allerdings sind aufgrund der 3 Adressbits nur 8 Sensoren möglich.

Vorweg, ich nutze die I2C Libary von Peter Fleury.
Ich hab mir folgendes überlegt:
Der SDL & SCL sollen Beispielweise an PB0 & PB1 und die 2. SDL & SCL Leitungen an PD0 & PD1 angeschlossen werden.
Die Deklaration der Ports & Pins steht in der "i2cmasterPB.h" und in der "i2cmasterPD.h"

Oder muss ich dafür auch noch alle anderen Variablen wie z.B. „i2c_start“ in „i2c_startPB“ und „i2c_startPD“ usw. ändern?

Danke schon mal

Gruß Hannes

theborg
06.03.2009, 12:43
Hi du könntest entweder einmal i²c ins Sw realisieren.

oder du baust ne Umschaltung das die einfach 2 Stränge machst die du dann dementsprechend auf die schnitstelle schaltest

Netzman
06.03.2009, 12:51
die Software-Lösung hat einen geringen Hardware-Aufwand, allerdings ist der MC während der Kommunikation beschäftigt. Macht aber bei nicht-zeitkritischen Aufgaben (wie zb. Temperaturen auslesen) nichts aus solange der MC nichts anderes noch tun muss.

Hardwaremäßig umschalten könnte man zb. mit einem Bus-Switch wie dem 74125 oder einem bidirektionalen Analogschalter wie dem 4066. Oder auch einfach Transistoren bzw. FETS... noch ein klein wenig Logikschaltung und man kann mit einem MC-Pin zwischen 2 I²C-Subnetzen hin- und herschalten.

mfg

Haveaniceday
06.03.2009, 13:30
Ist nicht Zeitkritisch. Ein Messwert pro Sekunde reicht locker. Kann ich das Softwaremäßig den so realisieren wie ich mir das vorbestelle? Oder muss dafür noch mehr geändert werden?

bapitz
06.03.2009, 19:15
Hallo,

ich könnte mir auch eine andere Lösung und schneller umzusetzende Lösung an Stelle der 2 Busse vorstellen.

Zum Beispiel folgende:

1. Sensorengruppe
Bei 4 Sensoren werden die Adresspins für A2 hardwaremäßig auf low gelegt

2. Sensorengruppe
Bei 4 Sensoren werden die Adresspins für A2 an einen Output-PortX gelegt (je nach Abfrage auf low oder high)

3. Sensorengruppe
Bei 4 Sensoren werden die Adresspins für A2 an einen Output-PortY gelegt (je nach Abfrage auf low oder high).



Wenn die 1. Sensorengruppe angesprochen werden soll, müssen PortX und PortY auf high sein.

Wenn die 2. Sensorengruppe angesprochen werden soll, müssen PortX auf high und PortY auf low sein.

Wenn die 3. Sensorengruppe angesprochen werden soll, müssen PortX auf low und PortY auf high sein.

Die jeweiligen Adressen innerhalb der Sensorengruppe lassen sich ja einfach berechnen.

Pro Sensorengruppe können bei entsprechender Adressierung 4 Sensoren abgefragt werden. Die Lösung sollte einfach umsetzbar sein. Ob sie funktioniert, weiss ich nicht, doch die Gefahr des Scheiterns scheint mir gering zu sein, wenn vor der Umschaltung der Adresspins jeweils ein TWISTOP erfolgt.
Per Breadboard sollte das zügig zum Testen umsetzbar sein.

Ob vor dem Ansprechen der Chips ein TWIINIT gesendet werden muss, wäre auszuprobieren.

Bis 16 Sensoren bei 3 Port-Pins wäre das sicher ein interessanter Ansatz. Danach sind Schieberegister sicher die bessere Wahl.

Mit freundlichen Grüssen,


Bernd Apitz

:-k

Haveaniceday
06.03.2009, 21:34
Danke für die Antwort, aber denke nicht das es klappen würde, da die Adressierung immer 2 mal vergeben werden würde.
Wäre Z.b. Port Y auf high, wäre Port X auf low und der Hardware auf low gesetzte Gruppe auf low und somit hätten beide die selben Adresse.
Mit deiner Variante setze ich ja nur bestimmte Adressierungen, aber kann ja nicht sagen welche Gruppe ausgelesen werden soll.

bapitz
06.03.2009, 21:49
Hallo,

ich denke, man kann die Gruppe eindeutig ansprechen, bei der die Adressen nicht doppelt vergeben wurden. Bei dieser Gruppe sind für die 4 zugehörigen Chips die Adressen ja eindeutig.

Die Chips mit den doppelt angegebenen Adressen dürften nicht angesprochen werden, da die Adresse ja nicht eindeutig ist.

Durch entsprechende Einstellungen der Port-PinX und Port-PinY ist eine Gruppe immer eindeutig definiert. Und nur die eindeutig definierte Gruppe darf ausgelesen werden! Durch die verschiedenen Kombinationen der Einstellmöglichkeiten für Port-PinX und Port-PinY kann jede der oben genannten 3 Sensorengruppen eindeutig definiert und damit eindeutig angesprochen werden.

Einen Versuch wäre es sicherlich Wert, das mal auszuprobieren.

Mfg,

Bernd Apitz
:-k