mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik SPI und mehrere Slaves


Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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ß

Autor: Miu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja

Autor: Danny P. (Gast)
Datum:

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

greetz
Danny

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank für die Antworten.

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

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: sakrament (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
du könntest so ein rieeeeeeeeeeeeeeeesen schieberegister bauen
und mit cs auf einmal aktivieren

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Benjamin A. (beni0664)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Benjamin A. (beni0664)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Push...

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Benjamin A. (beni0664)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Geht dann vlt. "Daisy Chain" mit den AVR´s???

Wenn ja, wie?

mfg beni

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Benjamin A. (beni0664)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Benjamin A. (beni0664)

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

Sag doch einfach mal, ws du KONKRET machen willst.

MFG
Falk

Autor: Benjamin A. (beni0664)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Benjamin A. (beni0664)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Benjamin A. (beni0664)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also soll ich jetzt eurer Meinung nach SPI oder I2C nehmen?

mfg beni

Autor: Stefan Wimmer (wswbln)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Stefan Kleinwort (_sk_)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Benjamin A. (beni0664)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das heißt du meinst, ich solle DMX512 nehmen???

mfg beni

Autor: Stefan Kleinwort (_sk_)
Datum:

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

Gruß, Stefan

Autor: Benjamin A. (beni0664)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK, danke für die Infos

mfg beni

Autor: Pfiffikus (Gast)
Datum:

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.