Forum: Mikrocontroller und Digitale Elektronik I2C-"Slave-master" - Unternetzwerk


von Marcel P. (souko)


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

von (prx) A. K. (prx)


Lesenswert?

Marcel P. schrieb:
> - gibt es hierfür vielleicht eine einfachere Idee/Alternative

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

Beitrag "Re: Soft I2C Master"

: Bearbeitet durch User
von Marcel P. (souko)


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.

von (prx) A. K. (prx)


Lesenswert?

Marcel P. schrieb:
> - lieber ein anderes Bussystem zwischen Hauptcontroller und Anzeigemodul

Wie soll denn die Kabelei aussehen? Entfernung, wieviele Nodes, ...

Der Klassiker für einen Master wär ja RS485. Deine Displaynodes 
brauchen dann nur 1xUART (Hardware) und 1xI2C (Hard/Software). Da wären 
z.B. 2313 und 861 im Rennen.

: Bearbeitet durch User
von Marcel P. (souko)


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...

: Bearbeitet durch User
von (prx) A. K. (prx)


Lesenswert?

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

RS485 geht mit 2 Adern in beide Richtungen. Half-Duplex. Wobei es bei 
den paar Zentimetern auch ohne Transceiver geht (open drain per Diode).

: Bearbeitet durch User
von Marcel P. (souko)


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 ??

von (prx) A. K. (prx)


Lesenswert?

Marcel P. schrieb:
> Ausserdem brauche ich den UART des Hauptcontroller für Kommunikation mit
> anderen Devices...

Die Diskussion läuft grad in eine unangenehme Richtung, weil du zwar 
nach Alternativen suchst, dann aber alle Alternativen auszuschliessen 
scheinst und nur I2C in Frage kommt.

von Wolfgang (Gast)


Lesenswert?

Marcel P. schrieb:
> 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.

Dafür gibt es I2C-Multiplexer, z.B. den PCA9554. Bei Einsatz eines davon 
könntest du schon mal 64 von den PCA9532 ansteuern.

von (prx) A. K. (prx)


Lesenswert?

Marcel P. schrieb:
> 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...

Ist aber auch UART-basiert und du schriebst doch, dass keine UART frei 
ist?!

von Ulrich F. (Gast)


Lesenswert?

vielleicht suchst du auch was mit dem: PCA9548A

von Marcel P. (souko)


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

von Ulrich F. (Gast)


Lesenswert?

Marcel P. schrieb:
> Ich dachte, es fällt vielleicht
> jemandem eine andere alternative ein,


Ulrich F. schrieb:
> PCA9548A
;-)

von Karl (Gast)


Lesenswert?

Wie wäre es mit eine Atmega8 als Slave und Multiplexing, dann kannst du 
die Portextender sparen.

Oder ein Tiny13A und Schiberegister.

von Marcel P. (souko)


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 !

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.