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
Es gibt auch I2C-Multiplexer oder Du hängst 5 kleine Controller als Adressmanager mit an den I2C.
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?
Bierschinken schrieb: > Mit Multiplexer hatte ich i²c-Multiplexer gemeint. Wieso soll der mehr Platz brauchen als der I²C-Proxi?
> 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
... ... ... 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... ;-)
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
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.
ok, danke ich werde mal mein glück damit versuchen.....
> 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
Schau dir mal die MAX7356, MAX7357 bzw. MAX7358 an. Die sollten passen. Mit deinen 9 verschiedenen Adressen kannst du dann 72 ADCs ansteuern.
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?
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
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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.