Forum: Mikrocontroller und Digitale Elektronik AVR I2C Adresskonflikt


von Daniel K. (h3x4g0n)


Lesenswert?

Hallo,

ich habe momentan einen ATmega2560 und einen Lichtsensor am I²C 
angebungen. Soweit klappt alles mit dem Auslesen und dem Einstellen des 
Lichtsensors (Single Conversion, Genauigkeit, ..).

Ich wollte nun gerne mehrere dieser Sensoren an einen ATmega2560 hängen.

Dabei habe ich nur ein Problem:

Die Lichtsensoren haben eine vom Werk her fest eingebrannte I²C-Adresse 
(bei allen Sensoren dieses Typs die gleiche Adresse!). Damit kann ich 
natürlich nicht von beiden Sensoren die einzelnen Werte (ohne Probleme) 
auslesen, da ich ja keinen einzeln adressieren kann und der ATmega nur 
einen I²C-Treiber hat...

Gibt es eine Möglichkeit beide (oder noch mehr) Sensoren unabhängig 
voneinander zu betreiben, ohne für jeden einen eigenen ATmega zu 
benötigen?

Gruß Daniel

von Cyblord -. (cyblord)


Lesenswert?

Du kannst ja I2C über jeden Pin machen. Also nimm mehrere Pins.
Oder du schaltest jeden Sensor über einen Portpin ein und aus. Dann 
machst du immer nur den Sensor an, mit dem du grade Messen willst. I2C 
Leitungen gehen zu allen. Solche Sensoren sollten ja so wenig Strom 
ziehen dass du die direkt per Portpin schalten kannst. Der Aufwand ist 
also gering.

gruß cyblord

von Timmo H. (masterfx)


Lesenswert?

Kannst dir ja einen Software I2C einbauen und dann hast du zwei I2C 
Schnittstellen.

von Maier (Gast)


Lesenswert?

Welcher Sensor? Datenblatt...
Normal haben die doch 2 oder 3 Adressleitungen wo du den Rest der 
Adresse hardwareseitig festlegen kannst. Oder du musst eine Sub-Adresse 
programmieren.

von Norbert T. (atos)


Lesenswert?

Es gib noch I2C Multiplexer, wie z. B. PCA9544 mit 4 Kanälen, da können 
4 Chips drankommen und die kann man dann umschalten...

von Daniel K. (h3x4g0n)


Lesenswert?

@Maier: Es handelt sich dabei um den TSL4531 von AMS (Link: 
http://ams.com/eng/content/download/250085/975413/142835). Er hat 
keinerlei Hardware-Adressierung sost wäre das ja kein Problem. Die 
komplette Adresse (0x29) ist bei allen Sensoren identisch!

@cyblord: Inwiefern kann ich I²C über jeden Pin machen? Per Software 
I²C?
Das mit dem Umschalten habe ich schon probiert aber iwie haut das mit 
der Hardware nicht so ganz hin... Also halt nur den anschalten den ich 
messen will...

von B. S. (bestucki)


Lesenswert?

Daniel K. schrieb:
> Das mit dem Umschalten habe ich schon probiert aber iwie haut das mit
> der Hardware nicht so ganz hin... Also halt nur den anschalten den ich
> messen will...

Das wird nicht zuverlässig funktionieren, da die Sensoren dann über die 
Datenleitungen versorgt werden.

von Sven B. (scummos)


Lesenswert?

Es gibt Bausteine, die 3 oder 4 Pins haben, über die man dann 8+ 
Adressen auswählen kann, für jeden Baustein extra, je nach dem, ob man 
den Pin an Gnd oder Vdd anschließt. Wenn ich mehrere an den selben Bus 
hängen wollte, würde ich mir welche suchen, die das können.

Grüße,
Sven

von Oliver J. (skriptkiddy)


Lesenswert?

Sven B. schrieb:
> Wenn ich mehrere an den selben Bus
> hängen wollte, würde ich mir welche suchen, die das können.

... da es ja "so viele" I2C Lichtsensoren am Markt gibt.

Gruß Oliver

von Oliver J. (skriptkiddy)


Lesenswert?

Daniel K. schrieb:
> Inwiefern kann ich I²C über jeden Pin machen? Per Software
> I²C?

Per Bit-Banging.

Gruß Oliver

von Daniel K. (h3x4g0n)


Lesenswert?

Ja das ist mir klar, dass es auch andere Lichtsensoren gibt, aber ich 
soll genau diesen nutzen. Daher ;)

von Oliver J. (skriptkiddy)


Lesenswert?

Daniel K. schrieb:
> Ja das ist mir klar, dass es auch andere Lichtsensoren gibt, aber ich
> soll genau diesen nutzen.

Ich bezweifle, dass du einen finden würdest, bei dem die Adresse 
einstellbar ist. Wozu sollte man so etwas in der Regel auch brauchen.

Gruß Oliver

von Sven B. (scummos)


Lesenswert?

Oliver J. schrieb:
> Sven B. schrieb:
>> Wenn ich mehrere an den selben Bus
>> hängen wollte, würde ich mir welche suchen, die das können.
>
> ... da es ja "so viele" I2C Lichtsensoren am Markt gibt.
Der hier hat schonmal zwei mögliche Adressen: 
http://rohmfs.rohm.com/en/products/databook/datasheet/ic/sensor/light/bh1710fvc-e.pdf

Aber gut, wenn es genau dieser sein soll, fällt die Möglichkeit 
natürlich weg. :)

von c-hater (Gast)


Lesenswert?

Daniel K. schrieb:

> Gibt es eine Möglichkeit beide (oder noch mehr) Sensoren unabhängig
> voneinander zu betreiben, ohne für jeden einen eigenen ATmega zu
> benötigen?

Bus muxen.

Ein 4052 für ein paar Cent erlaubt dir z.B. vier Sensoren mit gleicher 
Adresse. Zur Auswahl des anzusprechenden Sensors benötigst du zwei 
zusätzliche Pins für die Kanalwahl des 4052.

Mit 2x4051 und drei Pins für die Kanalwahl wären dann 8 Sensoren nach 
der gleiche Methode möglich und mit einem 4067 und vier Pins 16.

von hp-freund (Gast)


Lesenswert?

Norbert T. schrieb:
> Es gib noch I2C Multiplexer, wie z. B. PCA9544 mit 4 Kanälen, da können
> 4 Chips drankommen und die kann man dann umschalten...

Wäre auch meine Empfehlung. Wird selbst über I2C gesteuert und braucht 
keinen zusätzlichen µC Pin.

von uC (Gast)


Lesenswert?

von dem Lichtsensor gibt es zwei verschiedene Typen mit 
unterschiedlichen Slave-Adressen.

von amateur (Gast)


Lesenswert?

Ich würde es mit einem Analogmultiplexer (DA) und einem einfachen 
Digitalen (CL) Mux. versuchen. Vielleicht kannst Du Dir auch letzteren 
auch sparen und allen einen Einheitstakt spendieren.

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.