Forum: Mikrocontroller und Digitale Elektronik I2C-Bus Adressproblem bei 50 identischen Slaves


von Bierschinken (Gast)


Lesenswert?

Hallo,

ich möchte auf einen i2C-Bus mehrere (~50) identische ADCs als Slave 
hängen.

Problematisch ist, dass es geeignete ADCs nur mit maximal 9 
verschiedenen Adressen zu kaufen gibt.

Multiplexer ist ungünstig, da sich der Verkabelungsvorteil des 
Bus-System durch die dann notwendige parallelverkabung minimiert.

1.)
Eine option wäre ein ADC mit frei wählbarer adresse.
Der ADC sollte 10 Bit haben, min. 2 Kanäle gegen Masse, 2 differentielle 
wären besser,

2.) Alternativ wäre auch ein Bauteil denkbar welches die Signale 
durchschleift, aber die Adresse ändert (Funktionsweise wie ein Proxy)

Vielen Dank im Voraus

von Kevin K. (nemon) Benutzerseite


Lesenswert?

wie sind denn die Wandler räumlich verteilt?

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Es gibt auch I2C-Multiplexer oder Du hängst 5 kleine Controller als 
Adressmanager mit an den I2C.

von Bierschinken (Gast)


Lesenswert?

Der räumliche Abstand der einzelnen Wandler ist gering <1m, allerdings 
sollen aus platzproblem keine kabelpeitschen verbaut werden.

Mit Multiplexer hatte ich i²c-Multiplexer gemeint.

Die Variante mit den 5 kleinen Controllern würde mich interessieren, wie 
kann man sich das vorstellen?

von ... ... ... (Gast)


Lesenswert?

Bierschinken schrieb:
> Mit Multiplexer hatte ich i²c-Multiplexer gemeint.
Wieso soll der mehr Platz brauchen als der I²C-Proxi?

von Frank K. (fchk)


Lesenswert?

> Der räumliche Abstand der einzelnen Wandler ist gering <1m,

Das heißt aber doch, dass der Bus insgesamt 50m lang wird, und dafür ist 
i2c nicht gemacht. Selbst 5 m Buslänge würde ich keinesfalls wagen 
wollen.

fchk

von ... ... ... (Gast)


Lesenswert?

... ... ... schrieb:
> Bierschinken schrieb:
>> Mit Multiplexer hatte ich i²c-Multiplexer gemeint.
> Wieso soll der mehr Platz brauchen als der I²C-Proxi?
Abgesehen davon, dass es den I²C-Proxi wohl gar nicht gibt... ;-)

von Christian (Gast)


Lesenswert?

ADC mit 10Bit Auflösung, dazu I2C.. das klingt nicht so, als müsste es 
garzu schnell sein.. Ich bin zwar eigentlich kein Freund davon, aber man 
könnte da doch einen kleinen Mikrocontroller mit integriertem ADC statt 
dem I2C-ADC verwenden.. die Adressen kann man sich ja dann 
programmieren, wie man lustig ist (das Protokoll evtl. auch)..

Grüße
Christian

von Michael S. (Gast)


Lesenswert?

Der Hinweis von Christian sollte Erfolg versprechen.

Nimm einen ATtiny mit USI-Schnittstelle und 10-Bit ADC's (z.B. 
ATtiny26).
Mit Hilfe der USI-Schnittstelle kann ein TWI-Slave nachgebildet werden,
dazu gibt es sogar App-Notes bei Atmel.

Der Slave könnte seine eigene TWI-Adresse aus seinem Eeprom lesen.

Dann könnten alle Slave mit dem selben Code programmiert werden,
lediglich die TWI-Adresse muss auf geeignete Weise ins Eeprom 
geschrieben werden.

Michael S.

von bierschinken (Gast)


Lesenswert?

ok, danke ich werde mal mein glück damit versuchen.....

von Olaf (Gast)


Lesenswert?

> Abgesehen davon, dass es den I²C-Proxi wohl gar nicht gibt... ;-)

Ich glaub ich habe vor kurzem so ein Teil gesehen. Leider weiss
ich nicht mehr wo. Entweder Maxim oder NXP.

Es war jedenfalls extra ein Umsetzer falls man mehere Geraete hat
die nur eine Adresse haben koennen.

Olaf

von Remote O. (remote1)


Lesenswert?

Schau dir mal die MAX7356, MAX7357 bzw. MAX7358 an. Die sollten passen.
Mit deinen 9 verschiedenen Adressen kannst du dann 72 ADCs ansteuern.

von Muxer (Gast)


Lesenswert?

Schau Dir mal PCA9548A von TI an, ist ein 8-Kanal I2C-Switch.

von bierschinken (Gast)


Lesenswert?

Danke für die Antworten bis hierher.

Eine weitere Frage:

Angenommen ich habe einen Master (ATmega32) und viele Slaves (ATtiny) 
auf dem TWI hängen. Die Slaves messen über den internen ADC eine 
Spannung und der Master "erfragt" diesen Messwert aller Slaves über TWI.

Ab Seite 183 im ATmega 32 sind sogenannte "Transmission Modes" 
aufgeführt.

Läuft der Master dann die ganze Zeit als "Receiver" und die Slaves immer 
als "Transmitter" oder gibt es im Rahmen der Kommunikation zwischen 
Master und Slave Szenarien wo beide die Rolle tauschen müssen?

von Sascha W. (sascha_w)


Lesenswert?

bierschinken schrieb:
> Ab Seite 183 im ATmega 32 sind sogenannte "Transmission Modes"
> aufgeführt.
>
> Läuft der Master dann die ganze Zeit als "Receiver" und die Slaves immer
> als "Transmitter" oder gibt es im Rahmen der Kommunikation zwischen
> Master und Slave Szenarien wo beide die Rolle tauschen müssen?

wenn der Master die Adresse oder Daten sendet, dann ist er im 
Master-Transmitter-Mode, wenn er dann die Daten vom Slave (ADC) liest 
dann ist er im Master-Receiver-Mode.

Sascha

von Bierschinken (Gast)


Lesenswert?

Sascha Weber schrieb:

> wenn der Master die Adresse oder Daten sendet, dann ist er im
> Master-Transmitter-Mode, wenn er dann die Daten vom Slave (ADC) liest
> dann ist er im Master-Receiver-Mode.
>
> Sascha

Meiner Meinung nach nicht ganz richtig, zum Adresse senden muss der 
Master nicht in den Transmitter mode, hier der Auszug aus dem 
Datenblatt, S187:

"After a START condition has been transmitted, the TWINT Flag is set by 
hardware, and the status code in TWSR will be $08 (See Table 74). In 
order to enter MR mode, SLA+R must be transmitted. This is done by 
writing SLA+R to TWDR. Thereafter the TWINT bit should be cleared (by 
writing it to one) to continue the transfer. This is accomplished by 
writing the following value to TWCR: When SLA+R have been transmitted 
and an acknowledgement bit has been received, TWINT is set again and a 
number of status codes in TWSR are possible. Possible status codes in 
master mode are $38, $40, or $48. The appropriate action to be taken for 
each of these status codes is detailed in Table 75. Received data can be 
read from the TWDR Register  hen the TWINT Flag is set high by hardware. 
This scheme is repeated until the last byte has been received. After the 
last byte has been received, the MR should inform the ST by sending a 
NACK after the last received data byte. The transfer is ended by 
generating a STOP condition or a repeated START"

Ist das Richtig?

von Ulrich P. (uprinz)


Lesenswert?

Werft bitte jetzt die logische Funktion nicht mit der physikalischen 
Funktion durcheinander. Wenn der Master die Adresse auf den Bus legt ist 
er physikalisch im Master-Transmit, da er die Clock und die Daten 
vorgibt.

Liest der Master dann nach dem Senden der Adresse die Daten, so gibt er 
ebenfalls die Clock vor und ist damit im Master-Receive.

Erst wenn es einen weiteren Master am Bus gibt, kann der o.A. Master als 
Slave angesprochen werden und wäre dann beim Empfang der Adresse im 
Slave-Receive und beim Senden der Daten im Slave-Transmit Modus, denn er 
bekommt von einem anderen Master die Clock vorgegeben.

Einige Hersteller vereinfachen das Handling des I2C Bus durch etwas mehr 
'Intelligenz' in der Hardware und automatisieren z.B. das Versenden der 
Adresse oder auch das Versenden der Chip internen Adresse ( z.B. EEPROM 
die Speicheradresse der zu schreibenden/lesenden Zelle). Das verwirrt, 
weil damit die Master-/Slave-Funktionen durch mehr oder weniger den 
gleichen Code / die gleiche State-Machine bearbeitet werden können. Aber 
trotzdem ist der I2C bus nicht in anderen Modi als in den zuerst 
genannten. Master / Slave unterscheidet sich nur durch die Tatsache, wer 
die Clock (SCL) vorgibt.

Es beeinträchtigt aber auch nicht das Recht, dass jeder Slave Bit- oder 
ACK-Stretching machen darf, also die Geschwindigkeit auf seine Fähigkeit 
herunter bremsen darf.

Gruß, Ulrich

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.