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?
@ 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.
Osccon schrieb:> aber die MOSI, MISO und SCLK Leitungen kann ich an alle anschließen,> quasi wie ein Bus.
Du kannst auch SCLK an alle Bausteine legen und MOSI/MISO als
Serienschaltung verdrahten.
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 :)
@ 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.
>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....
@ Tom E. (Gast)
>Du könntest ...>Tom E. schrieb:>> ... MOSI/MISO als Serienschaltung verdrahten
Nein, das kann er nicht, denn SPI ist nur in Ausnahmefällen als Daisy
Chain Struktur nutzbar.
Falk B. schrieb:> 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.
@ 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!