Forum: Mikrocontroller und Digitale Elektronik PIC SPI mehrere Slaves


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Osccon (Gast)


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?

von Falk B. (falk)


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.

von Tom E. (Gast)


Lesenswert?

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.

von Osccon (Gast)


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 :)

von Falk B. (falk)


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.

von Dirk F (Gast)


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

von Osccon (Gast)


Lesenswert?

Einfach einen 100 Ohm Widerstand dazwischen klingt auch nach einer ganz 
guten Lösung.

Echt vielen Dank für eure Antworten :)

von Tom E. (Gast)


Lesenswert?

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

Du könntest ...

Tom E. schrieb:
> ... MOSI/MISO als Serienschaltung verdrahten

von Falk B. (falk)


Lesenswert?

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

von Tom E. (Gast)


Lesenswert?

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.

von Falk B. (falk)


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

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]
  • [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.