PIC SPI mehrere Slaves

Gast #4358935
Lesenswert?

Hallo,
ich plane gerade ein kleines Projekt.
Hierbei habe ich einen 32 Bit Haupt PIC(Master) und 6 weitere(Slaves), 
teilweise 8, 16 oder auch 32 Bit PICs.
Jetzt brauche ich ja für jeden Slave eine weitere SS Leitung aber die 
MOSI, MISO und SCLK Leitungen kann ich an alle anschließen, quasi wie 
ein Bus.
Um noch mehr PIN´s zu sparen würde ich die SS Leitungen über einen 
Demultiplexer ansteuern.
Soweit der Plan, jedoch bin ich mir nicht sicher ob ich die MOSI, MISO 
und SCLK Leitungen einfach an alle Slaves anschließen kann oder ob ich 
so etwas wie einen Tristate Buffer für jeden Slave, der abhängig von der 
SS Leitung durchschaltet, dazwischen setzen sollte?
Ich würde eigentlich denken ja, da ja der MISO Pin jedes Slaves immer 
den Zustand LOW oder HIGH haben würde wodurch es ja zu Kurzschlüssen 
kommen würde wenn die alle an der Selben Leitung mir unterschiedlichen 
Zuständen hängen.
Reicht es vielleicht auch einfach den MISO Pin jedes Slaves einfach auf 
input zu setzten solange die entsprechende SS Leitung HIGH ist?
(Hier würde ich mir aber auch sorgen machen, dass durch einen Software 
Fehler trotzdem ein Kurzschluss zustande käme)
Und wie lang sollten die Bus Leitungen maximal sein, währen 30cm unter 
Umständen ein Problem?
#4358953
Lesenswert?

@ Osccon (Gast)

>Jetzt brauche ich ja für jeden Slave eine weitere SS Leitung aber die
>MOSI, MISO und SCLK Leitungen kann ich an alle anschließen, quasi wie
>ein Bus.

SPI IST ein Bus.

>Um noch mehr PIN´s zu sparen würde ich die SS Leitungen über einen
>Demultiplexer ansteuern.

74HC138

>Soweit der Plan, jedoch bin ich mir nicht sicher ob ich die MOSI, MISO
>und SCLK Leitungen einfach an alle Slaves anschließen kann

Ja, alles parallel verdrahten.

> oder ob ich
>so etwas wie einen Tristate Buffer für jeden Slave, der abhängig von der
>SS Leitung durchschaltet, dazwischen setzen sollte?

Nein.

>Ich würde eigentlich denken ja, da ja der MISO Pin jedes Slaves immer
>den Zustand LOW oder HIGH haben würde wodurch es ja zu Kurzschlüssen
>kommen würde wenn die alle an der Selben Leitung mir unterschiedlichen
>Zuständen hängen.

Nein. Wenn die Slave nicht aktiviert sind, müssen sie MISO auf Tristate 
schalten. Auf MISO darf immer nur einer "reden".

>Reicht es vielleicht auch einfach den MISO Pin jedes Slaves einfach auf
>input zu setzten solange die entsprechende SS Leitung HIGH ist?

Das macht das SPI-Modul in den Slaves eigentlich allein.

>(Hier würde ich mir aber auch sorgen machen, dass durch einen Software
>Fehler trotzdem ein Kurzschluss zustande käme)

Dadurch geht die Welt nicht unter.

>Und wie lang sollten die Bus Leitungen maximal sein, währen 30cm unter
>Umständen ein Problem?

30cm sind schon OK, aber trotzdem kann man sich Probleme einfangen, wenn 
man das ganze zu wild verdrahtet. Im Idealfall zieht man den Bus 
linienförmig mit minimalen Stichleitungen zu jedem Slave und packt an 
das Ende eine AC-Terminierung, siehe Wellenwiderstand.
Gast #4359042
Lesenswert?

Falk B. schrieb:
>>Reicht es vielleicht auch einfach den MISO Pin jedes Slaves einfach auf
>>input zu setzten solange die entsprechende SS Leitung HIGH ist?
>
> Das macht das SPI-Modul in den Slaves eigentlich allein.

Ok, also kümmert sich das SPI Modul darum, dass weder HIGH noch LOW auf 
die Leitung gelegt wird, wenn SS nicht LOW ist?


Falk B. schrieb:
>>(Hier würde ich mir aber auch sorgen machen, dass durch einen Software
>>Fehler trotzdem ein Kurzschluss zustande käme)
>
> Dadurch geht die Welt nicht unter.

Aber angenommen es passiert, dass 5 Slaves MISO auf LOW haben und der 6. 
auf HIGH, könnten bei diesem Kurzschluss nicht gleich mehrere PICs 
kaputt gehen abgesehen vom Netzteil(Weiß nicht wie es reagiert, wenn es 
einen Kurzschluss hat).
Das wäre schon ärgerlich wenn ich mir auf einmal mehrere PICs kaputt 
mache.
Wie könnte man sich für so einen Fall absichern?


Vielen Dank für die Antworten :)
#4359047
Lesenswert?

@ Osccon (Gast)

>Ok, also kümmert sich das SPI Modul darum, dass weder HIGH noch LOW auf
>die Leitung gelegt wird, wenn SS nicht LOW ist?

Das hoffe ich. Genaues kennt dein Datenblatt.

>Aber angenommen es passiert, dass 5 Slaves MISO auf LOW haben und der 6.
>auf HIGH, könnten bei diesem Kurzschluss nicht gleich mehrere PICs
>kaputt gehen

Eher nicht.

> abgesehen vom Netzteil(Weiß nicht wie es reagiert, wenn es
>einen Kurzschluss hat).

Dieser "Kurzschluß" läßt bestenfalls ein paar Dutzend mA fließen, das 
zwingt kein Netzteil in die Knie.

>Das wäre schon ärgerlich wenn ich mir auf einmal mehrere PICs kaputt
>mache.

Lehrgeld.

>Wie könnte man sich für so einen Fall absichern?

Wenn du einen Dekoder ala 74HC138 nutzt, kann immer nur ein CS aktiv 
sind. Wenn dann die Slaves sauber initialisiert sind, passt das schon. 
Man kann die ja Schritt für Schritt in Betrieb nehmen.
Gast #4359064
Lesenswert?

>Aber angenommen es passiert, dass 5 Slaves MISO auf LOW haben und der 6.
>auf HIGH, könnten bei diesem Kurzschluss nicht gleich mehrere PICs
>kaputt gehen

Ich habe 15 PIC18 Slaves an einem PIC32 Master angeschlossen.
Jeweils 3 Slaves haben eine gemeinsame SS Leitung.
Um bei einem Softwarefehler zu verhindern, dass wenn 2 oder mehrere 
Slaves zeitgleich senden wollen, 2 Ausgänge sich gegensinnig 
aufeinanderprallen, habe ich einen 100 Ohm Widerstand in die MISO 
Leitung bei jedem Slave eingefügt....
#4359092
Lesenswert?

@ Tom E. (Gast)

>> Nein, das kann er nicht, denn SPI ist nur in Ausnahmefällen als Daisy
>> Chain Struktur nutzbar.

>Dann wäre es Zeit, das mal zu klären oder zu überlegen, ob nicht I2C
>oder CAN dann doch besser geeignet wären.

GESCHWÄTZ! Nur weil ein kleines Mädchen Angst vor Programmierfehlern 
hat! Millionen Schaltungen nutzen mehrere ICs am SPI-Bus!

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