I2C-"Slave-master" - Unternetzwerk

Gast #4250795
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
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.
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.
Gast
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
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
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.
Gast
@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
@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

Eine eigene Frage? Dieser Thread ist über 11 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.