I2C-"Slave-master" - Unternetzwerk

Gast #4250795
Lesenswert?

Hallo Leutle,

ich habe ein kleines Problem.
Ich habe vor, in meinem nächsten Projekt mehrere Anzeigemodule, 
bestehend aus je 8 7-Segment-Anzeigen und 4 PCA9532D, anzusteuern.

Als Hauptcontroller kommt erstmal ein Atmega8 zum Einsatz, was sich aber 
in Zukunft ändern kann, wenn das Projekt größer wird.
Das ganze soll auch einfach um weitere Module erweitert werden können, 
daher I2C zwischen Hauptcontroller und Anzeigemodulen.

Jetzt ist es so, das ich mindestens 3 aber auch mehr von diesen Modulen 
verbauen möchte, und so auf mindestens 12 I2C-Slaves kommen würde. 
Leider ist beim PCA9532D nur bis zu 8 gleiche Bausteine möglich.

Um das zu lösen würde ich jetzt auf jedes Modul einen µC setzen wollen, 
der seinerseits I2C vom Hautpcontroller empfängt, die Daten umsetzt und 
dann wieder über ein "Unternetzwerk" die Daten entsprechend aufbereitet 
an die 4 LED-Treiber auf dem Anzeigemodul selber weiter sendet. Ich 
dachte hierfür an einen Attiny im SO8-Gehäuse.

Hier müsste ich ja zwei I2C-Schnitstellen herstellen. Einmal Slave vom 
Hauptcontroller, was ich über USI machen würde und einmal I2C als Master 
für die 4 PCA9532D auf dem Anzeigemodul.

Der Tiny soll dann über I2C 4 byte empfangen (signed long) und diese 
dann über die LED-Treiber per I2C auf den 7-Segmentern anzeigen.

Die Anzeige soll ca. 5-10 mal pro Sekunde aktualisiert werden.

Hierzu meine Fragen:

- gibt es hierfür vielleicht eine einfachere Idee/Alternative
oder
- lieber ein anderes Bussystem zwischen Hauptcontroller und Anzeigemodul
- hat jemand ein Beispiel zur Hand, wie man I2C in Software auf einem 
Tiny implementiert ? (Links, AppNotes ?)
- wird dafür ein Tiny13A ausreichend sein ?

Bin für eure Meinungen dankbar !

Grüße, Marcel
Gast #4250817
Lesenswert?

A. K. schrieb:
> Mehrere I2C Busse auf dem Master. Ein I2C Master per Bitbanging ist kein
> Hexenwerk. Oder du nimmst einem Controller, der mehrere Busse hat.

das fällt leider raus, da der "Hauptcontroller" nicht immer der gleiche 
ist und an einigen nur ein Bus zur Verfügung steht.

Die Anzeigemodule sollen sozusagen "universell" sein.
Gast #4250829
Lesenswert?

Das Kabel wird ein 6 poliges Flachbandkabel mit RM 2.54 und 
Micromatch-SMD-Verbindern.

Die Anzeigemodule werden untereinander im Abstand von etwa 30mm 
angeordnet.

Über das 6-polige Kabel gehen I2C (SDA, SCL), 5V, GND, und eventuell 
zwei Interrupt-Leitungen für weitere Module mit anderen Aufgaben.

Maximale Buslänge sind in etwa 30 cm vom Hauptcontroller bis zum letzten 
Modul.

Insgesamt etwa 5 bis 8 Nodes, je nach Ausstattung.

Das ganze sizt zunächst in einem 3D-gedruckten Gehäuse und später dann 
in einem Alu-Profilgehäuse.

EDIT: Bei RS485 wäre ich doch aber schon bei 4 Adern, da andere Module 
auf Anfrage auch Daten zurück senden sollen.

Ausserdem brauche ich den UART des Hauptcontroller für Kommunikation mit 
anderen Devices...
Gast #4250840
Lesenswert?

LIN wäre natürlich auch ein Leckerli, habe ich aber noch nie benutzt...
Muss ich mir mal ansehen, vorallem weil ich hier einige LIN-Slaves 
(Sensoren, Schalter, etc) in greifbarer nähe habe...

Aber dein Link zu den I2C-Soft-Master hat mir auch schon sehr geholfen 
!!! Wieso hab ich den vorhin beim Suchen übersehen ??
Gast #4250860
Lesenswert?

@prx
Das ist nicht meine Absicht !
Und das der Master kein nativen LIN hat und somit den UART (+ eventuell 
Tranceiver) dafür braucht - garnicht dran gedacht... SORRY...

Und leider ist aktuell der UART belegt und SPI wird mir zu vieldrähtig 
bei mehreren Slaves.

Der Rest geht wohl alles über den UART. Ich dachte, es fällt vielleicht 
jemandem eine andere alternative ein, aber scheinbar bleibt da nicht 
mehr viel.

RS485, RS232, LIN, alle UART.. blöd...

und außer I2C  und SPI gibt es wohl keine anderen Busse am AVR, es sein 
denn man strickt sich selber was über Software...

@Wolfgang

Das wäre zwar auch eine Idee, aber dann wird die Verdrahtung wieder 
mehr, da jedes modul einen eigenen I2C bekommt...
Dann könnte ich wohl auch SPI nehmen.

Hmm.. so wie ich das sehe bleibt mir nur folgendes:

- mehr Drähte akzeptieren
- I2C-I2C-Bridge mit Tiny über Software
- UARTm irgendwie frei bekomm
Gast #4251024
Lesenswert?

@combie

Mit dem PCA9548A hab ich aber das selbe Problem wie bei WOlfgangs 
Vorschlag. Viel mehr Kabel...

@Karl
das ist ja prinzipiell das was ich auch gedacht hatte. Tiny13 und aber 
statt Schieberegister die Portextender, die sind eben vorhanden ;-)

Ich werde mich wohl an der Software-Implementierung von I2C auf dem Tiny 
bemühen...
Danke für eure Meinungen !

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