Forum: Mikrocontroller und Digitale Elektronik I2C Slave mit 2 Adressen


von Ben S. (theben)


Lesenswert?

Hallo Leute,

ich möchte 2 Sensoren mit UART Schnittstelle an einen I2C (TWI) Bus 
anbinden.
Der I2C ist im System bereits vorhanden. Pins um die 2 UART Sensoren 
anzubinden habe ich leider keine mehr frei. Daher würde ich gern einen 
ATtiny1626 nehmen, um eine I2C-UART Brücke zu konstruieren.
Man könnte sich jetzt ein Protokoll überlegen, wo unterschiedliche I2C 
Kommandos die beiden Sensoren ansprechen. Aus systemtechnischer Sicht 
fände ich den Ansatz mit 2 I2C Adressen jedoch eleganter (da leichter 
erweiterbar).

Was ich Suche ist eine Möglichkeit den ATtiny als I2C Slave zu 
betreiben, der bei 2 unterschiedlichen Adressen antwortet. Als HW I2C 
wird das wohl kaum gehen aber hat vielleicht jemand so ein Problem schon 
mal mit einem BitBang I2C gelöst oder kennt Beispiele dafür?

Gruß Ben

von Falk B. (falk)


Lesenswert?

Man kann das auch mit einer I2C Adresse lösen, indem man einfach die 
Register der Sensoren über das übergeordnete Protokoll anspricht.

von (prx) A. K. (prx)


Lesenswert?

Ben S. schrieb:
> ich möchte 2 Sensoren mit UART Schnittstelle an einen I2C (TWI) Bus
> anbinden.

Das TWI einiger AVRs, wie ATtiny1634 und ATtiny417, ATtiny814, 
ATtiny816, ATtiny817 kann auf einen Adressbereich oder 2 Adressen 
reagieren.

Wer oder was ist der Master? Manche Master kommen nicht mit 
Clock-Stretching zurecht, was einen µC als Slave zum Problem werden 
kann.

: Bearbeitet durch User
Beitrag #7016646 wurde vom Autor gelöscht.
von H.Joachim S. (crazyhorse)


Lesenswert?

Schneller am Ziel: SC16IS741 o.ä.

von STK500-Besitzer (Gast)


Lesenswert?

Ben S. schrieb:
> Was ich Suche ist eine Möglichkeit den ATtiny als I2C Slave zu
> betreiben, der bei 2 unterschiedlichen Adressen antwortet.

https://ww1.microchip.com/downloads/aemDocuments/documents/MCU08/ProductDocuments/DataSheets/ATtiny1624-26-27-DataSheet-DS40002234B.pdf
Kapitel 26.5.14 Client Address Mask

Man kann Bits ausmaskieren...

von Oliver S. (oliverso)


Lesenswert?

STK500-Besitzer schrieb:
> Kapitel 26.5.14 Client Address Mask
>
> Man kann Bits ausmaskieren..

TWAMR – TWI (Slave) Address Mask Register

Das hat eigentlich jeder AVR mit TWI, der moderner als die Genration 
Mega8-128 ist, nicht nur die o.a. ganz neuen Typen.

Oliver

von Peter D. (peda)


Lesenswert?

Den ATtiny1626 kenne ich nicht, steht dazu nichts im Datenblatt?

Die ATtiny mit USI müssen die Adresse in SW auswerten, können also 
mehrere.
Die ATmega48 usw. haben ein TWAMR – TWI (Slave) Address Mask Register, 
können also auch mehrere Adressen.
Der ATmega328PB hat 2 I2C, die könnte man parallel schalten.

von STK500-Besitzer (Gast)


Lesenswert?

Oliver S. schrieb:
> Das hat eigentlich jeder AVR mit TWI, der moderner als die Genration
> Mega8-128 ist, nicht nur die o.a. ganz neuen Typen.

Ich bezog mich einfach nur auf den vom OP genannten.
Manche tun sich schwer mit dem Lesen von Datenblättern.

von Ben S. (theben)


Lesenswert?

Falk B. schrieb:
> Man kann das auch mit einer I2C Adresse lösen, indem man einfach die
> Register der Sensoren über das übergeordnete Protokoll anspricht.

genau das wollte ich nicht, da es sich um 2 identische Sensoren handelt. 
Man müsste also speziell für diesen fall eine Register Map aufbauen. 
Eine Wiederverwendbarkeit wäre nicht gegeben.

H.Joachim S. schrieb:
> Schneller am Ziel: SC16IS741 o.ä.

Diese Art von Lösung habe ich mir auch schon angesehen. Nachteil ich 
bräuchte mehrere dieser Bausteine, die auch noch teurer sind und bei den 
aktuellen miesen Verfügbarkeiten der IC Branche wäre ich an diesen Typ 
gebunden.

STK500-Besitzer schrieb:
> Man kann Bits ausmaskieren...

Da steht noch mehr:
If the ADDREN bit is written to ‘1’, the Client Address Mask 
(TWIn.SADDRMASK) register can be loaded with a
second client address in addition to the Client Address (TWIn.SADDR) 
register. In this mode, the client will have two
unique addresses...

Danke STK500-Besitzer, ich glaube das ist das was ich gesucht habe

von Peter D. (peda)


Lesenswert?

Ben S. schrieb:
> Aus systemtechnischer Sicht
> fände ich den Ansatz mit 2 I2C Adressen jedoch eleganter (da leichter
> erweiterbar).

Ob die Sensorauswahl mit einen Adreßbyte oder einem Datenbyte erfolgt, 
ist doch nur eine Namenssache. Bei EEPROMs (AT24C512) sind doch auch die 
ersten beiden Datenbytes die Adresse.

von Alois (Gast)


Lesenswert?

Peter D. schrieb:
> Ben S. schrieb:
>> Aus systemtechnischer Sicht
>> fände ich den Ansatz mit 2 I2C Adressen jedoch eleganter (da leichter
>> erweiterbar).
>
> Ob die Sensorauswahl mit einen Adreßbyte oder einem Datenbyte erfolgt,
> ist doch nur eine Namenssache. Bei EEPROMs (AT24C512) sind doch auch die
> ersten beiden Datenbytes die Adresse.

Du vergleichst Äpfel mit Birnen - bzw. Tomaten mit Gurken.

Wieso sollte ein Gemüsehänder nicht unter 2 Adressen firmieren? Gleiches 
Gebäude: Vordertür in der Lessingstraße 17, Hintertür in der 
Schillerstraße 28. Gehst du zur Vordertür rein, gibt's da Tomaten - beim 
Laden an der Hintertür nur Gurken. Also, ein wirkliches Problem sehe ich 
da nicht.

Außer vielleicht, wenn sich der gute Mann entschließt, auch noch mit 
Äpfel und Birnen zu handeln ...

von Alois (Gast)


Lesenswert?

Ich hab die Lösung!!!
Der gute Mann kauft sich noch die Schlossallee - und baut da ein Hotel.

von Vorname N. (mcu32)


Lesenswert?


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.