Forum: Mikrocontroller und Digitale Elektronik SPI und mehrere Slaves


von Alex (Gast)


Lesenswert?

Hallo,
 bei mehreren Slaves bekommt der eine die CS\ Leitung von der SPI 
Schnittstelle des uCs, die anderen steuere ich einfach mit anderen Pins.
Wird das eingentlich bei HW-SPI funkntionieren?

Gruß

von Miu (Gast)


Lesenswert?

Ja

von Danny P. (Gast)


Lesenswert?

@alex: ja, weil auch die CS-Leitung des µC musst ju ja im Masterbetrieb 
vor dem SPI-Befehl "von Hand" umsteuern....

greetz
Danny

von Matthias L. (Gast)


Lesenswert?

>Wird das eingentlich bei HW-SPI funkntionieren?

Ja das würde gehen. Du könntest auch alle Slaves in Reihe schalten, und 
einfach durchtakten

von Alex (Gast)


Lesenswert?

Vielen Dank für die Antworten.

@Matthias:
1
Du könntest auch alle Slaves in Reihe schalten, und
2
einfach durchtakten
habe es leider nicht so ganz verstanden!!

von Andreas K. (a-k)


Lesenswert?

> Ja das würde gehen. Du könntest auch alle Slaves in Reihe schalten, und
> einfach durchtakten

Das geht nur sehr einfach gewirkten SPI-Slaves wie Schieberegistern. Bei 
intelligenten Slaves wie CAN-Controller, Dataflash etc funktioniert das 
nicht.

von sakrament (Gast)


Lesenswert?

du könntest so ein rieeeeeeeeeeeeeeeesen schieberegister bauen
und mit cs auf einmal aktivieren

von Matthias L. (Gast)


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

von Benjamin A. (beni0664)


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

von Benjamin A. (beni0664)


Lesenswert?

Push...

von Falk B. (falk)


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

von Benjamin A. (beni0664)


Lesenswert?

Geht dann vlt. "Daisy Chain" mit den AVR´s???

Wenn ja, wie?

mfg beni

von Falk B. (falk)


Lesenswert?

@  Benjamin A. (beni0664)

>Geht dann vlt. "Daisy Chain" mit den AVR´s???

Nicht wirklich. Ist auch nicht sinnvoll bei SPI. Nur weil JTAG das 
macht, heisst das nicht, dass es sonstwo noch viel Sinn macht.

MFG
Falk

von Benjamin A. (beni0664)


Lesenswert?

Das heißt, I2C wär gescheiter?

Die max. Geschwindigkeit ist ja (wenn man nur AVR´s an der Leitung 
hängen hat) praktisch nur durch die Taktfrequenzen der Slaves begrenzt 
oder sind die 400kBit/s wirklich die Obergrenze?

Es gibt ja auch die HighSpeed Normen mit 1,5MBit/s...

mfg beni

von Falk B. (falk)


Lesenswert?

@ Benjamin A. (beni0664)

>Das heißt, I2C wär gescheiter?

Sag doch einfach mal, ws du KONKRET machen willst.

MFG
Falk

von Benjamin A. (beni0664)


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

von Falk B. (falk)


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

von Benjamin A. (beni0664)


Lesenswert?

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

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

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

mfg beni

von Benjamin A. (beni0664)


Lesenswert?

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

mfg beni

von Stefan W. (wswbln)


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.

von Falk B. (falk)


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

von Stefan K. (_sk_)


Lesenswert?

Räusper ... so ein RS485 Treiber kostet unter einen Euro ...

DMX512 wäre auch meine Wahl.
Kleiner Nebeneffekt:
zum Testen kannst Du ganz locker den PC nehmen  ...

Gruß, Stefan

von Benjamin A. (beni0664)


Lesenswert?

Das heißt du meinst, ich solle DMX512 nehmen???

mfg beni

von Stefan K. (_sk_)


Lesenswert?

ja:
billig, fast keine Bauteile, einfach, zuverlässig,
für Distanzen > 30cm entwickelt worden.

Gruß, Stefan

von Benjamin A. (beni0664)


Lesenswert?

OK, danke für die Infos

mfg beni

von Pfiffikus (Gast)


Lesenswert?

Wie siehts eigentlich mit de rSPI programmierung der einzelnen AVR`s aus 
wenn mehrere per SPI verschaltet sind. Klappt das dann noch?

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.