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ß
@alex: ja, weil auch die CS-Leitung des µC musst ju ja im Masterbetrieb vor dem SPI-Befehl "von Hand" umsteuern.... greetz Danny
>Wird das eingentlich bei HW-SPI funkntionieren?
Ja das würde gehen. Du könntest auch alle Slaves in Reihe schalten, und
einfach durchtakten
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!!
> 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.
du könntest so ein rieeeeeeeeeeeeeeeesen schieberegister bauen und mit cs auf einmal aktivieren
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...
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
@ 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
@ 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
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
@ Benjamin A. (beni0664)
>Das heißt, I2C wär gescheiter?
Sag doch einfach mal, ws du KONKRET machen willst.
MFG
Falk
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
@ 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
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
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.
@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
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
ja: billig, fast keine Bauteile, einfach, zuverlässig, für Distanzen > 30cm entwickelt worden. Gruß, Stefan
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.