SPI und mehrere Slaves

Gast #620449
Lesenswert?

SPI funktioniert so:

--------         -----------        -----------        -----------
Master |         | Slave_1 |        | Slave_2 |        | Slave_n |
       |         |         |        |         |        |         |
   MOSI|---->----|DI     DO|---->---|DI     DO|--//->--|DI 
DO|-------
       |         |         |        |         |        |         | 
|
       |         |         |        |         |        |         | 
|
    SCK|-->--o---|>Clk     |    ----|>Clk     |    ----|>Clk     | 
|
       |     |   -----------    |   -----------    |   ----------- 
|
       |     |                  |                  | 
|
       |     -------------------o---------------//-- 
|
   MISO|---<------------------------------------//-----------------------
--------

Zwischen DI und DO ist immer ein Slave-SPI-Schieberegister. Die 
Bitbreite spielt keine Rolle. Der Master muss jetzt exakt soviel 
Bits/Bytes herausschieben, wie alle Slaves zusammen haben. Somit können 
mit einem "Durchlauf" die Slaves mit neuen Werten gefüttert werden und 
zugleich Informationen von den Slaves an den Master übertragen werden.
Das ist ja das Geniale an SPI...
#997524
Lesenswert?

Hallo!

Ja ich weiß, dieser Thread ist schon etwas alt, aber ich hab nur noch 
eine kleine Frage...

Wie ist das bei den AVRs und mit der SS Leitung???

Man könnte ja theoretisch eine SS Leitung für alle Slaves verwenden und
dann eine 2. Leitung an alle Slaves hängen, mit der signalisiert wird, 
dass jetzt das richtige Byte im Register ist!

mfg beni
#999447
Lesenswert?

@ Benjamin A. (beni0664)

>Wie ist das bei den AVRs und mit der SS Leitung???

So wie bei allen anderen SPI ICs auch.

>Man könnte ja theoretisch eine SS Leitung für alle Slaves verwenden und
>dann eine 2. Leitung an alle Slaves hängen, mit der signalisiert wird,
>dass jetzt das richtige Byte im Register ist!

Nöö, dann würden ja alle ICs das gleiche bekommen. Geh mal davon aus, 
dass du  für jeden Slave ein separates SS Signal brauchst. Wenn dir das 
zuviele Pins sind, nimm I2C.

MFG
Falk
#999968
Lesenswert?

Konkret geht es um eine große LED Matrix Anzeigetafel, welche aus 
Untermodulen mit 6x64 LEDs besteht... Diese 6x64 LEDs werden mit 6 
MAX7219 angesteuert und diese wiederum von einem ATMega8 gefüttert.

Die Koordination der einzelnen Module erfolgt über einen 
Mastercontroller, welcher die Bilddaten und Steuersignale auswertet und 
weitergibt!

Und jetzt ist die Frage welches Interface ich zwischen Mastercontroller 
und Modulen verwenden kann um möglichst flexibel zu sein!

Es sollten event. Videos (Animationen) übertragen werden, d.h. es sollte 
nicht zu langsam sein!

Die Anzahl der Module ist nicht so wichtig, aber unter 30-50 Module 
sollte es nicht sein (zwecks Skalierbarkeit nach oben)...


In einem anderen Thread (irgendwie anderer Zusammenhang) wurde mir von 
I2C schon abgeraten, ich solle SPI nehmen!
Weil ja I2C so langsam ist...

mfg beni
#1000041
Lesenswert?

@ Benjamin A. (beni0664)

>Untermodulen mit 6x64 LEDs besteht... Diese 6x64 LEDs werden mit 6
>MAX7219 angesteuert und diese wiederum von einem ATMega8 gefüttert.

>Es sollten event. Videos (Animationen) übertragen werden, d.h. es sollte
>nicht zu langsam sein!

Tja, mal rechnen.

6x64 =384 LEds/Modul. Wenn man mal von 25 Bildern/s ausgeht, macht das 
9600Bit/s. Noch recht human. Bei 50 Modulen sind es aber schon 
480KBit/s. Das nenn ich mal flott!

Mein Tipp. Nimm DMX512, das macht 250kb/s, ist einfach, robust und 
bereits etabliert. Damit kannst du 25 Module mit 25 Bildern/s steuern. 
Bei DMX nennt man das Universum, also einenn DMX Kabelstrang. Für die 
nächsten 25 odule brauchst du halt eien zweiten Strang. Und das alles 
braucht nur 2 Adern + Masse.

MFG
Falk
#1002959
Lesenswert?

Vielleicht helfen diese Argumente bei der Entscheidung:

I²C heisst ausgeschrieben: Inter-IC Bus, d.h. er wurde vorgesehen IC AUF 
EINER LEITERPLATTE mit ein paar wenigen (2) Leitungen miteinander zu 
verbinden. Wenn Du off-Board gehst, ist der also eigentlich ungeeignet 
(und hat speziell in EMV-verseuchtem Umfeld so seine Probleme (weil er 
keine vernünftige Resetmöglichkeit hat). Nur weil viele das machen 
wird's nicht richtiger ;-)

SPI verwendet nur unidirektionale Leitungen (so man keine dynamische 
Master/Slave-Umschaltung macht) und kann daher z.B. auch mit Buffern 
versehen werden wenn's mal etwas weiter weg gehen muss. Ausserdem wird 
in den Slaves mit Wegnehmen der CS-Leitung üblicherweise die interne 
Statemachine resettet, so dass das Ganze wesentlich robuster gegenüber 
Störungen ist.
#1002997
Lesenswert?

@Benjamin A. (beni0664)

>Das Problem bei DMX512 ist ja, dass man wieder RS485 Treiber braucht...

Ja und?

>Mit 400kBit/s bei I2C würd ich ja eh eine Weile auskommen!

Milchmädchenrechnung.

>Und wenn nicht, es gibt ja massenhaft uC´s, welche mit 2 oder mehr I2C
>Schnittstellen ausgerüstet sind!

Milchmädchenrechung^3

>Also soll ich jetzt eurer Meinung nach SPI oder I2C nehmen?

Weder noch. Hab ich geschrieben. Lass mal den "Geiz ist Geil" stecken, 
sonst wirst du schnell bereuen.

MFG
Falk

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