I2C Slave mit 2 Adressen

OP #7016628
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
#7016644
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.
Beitrag #7016646 wurde von einem Moderator gelöscht.
#7016668
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.
OP #7016674
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
Gast #7017920
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 ...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren