mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Störungsschutz auf der Slave-Select-Leitung bei SPI, geht es so?


Autor: noips (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Morgen!

Bei einer Datenübertragung per SPI über ca. 5 - 10 m werden die Signale 
CLK und SOMI/SIMO differentiell übetragen (RS485) und das Signal SS 
single ended. Zum Schutz des SS von Störungen (Spikes) ist folgendes 
vorgesehen:

 - abgeschirmtes Kabel
 - Tiefpass und Schmitt-Trigger vor dem SS-Eingang

Jetzt möchte ich euch um eine Beurteilung bitten, ob es so geht.

Und noch zur Dauer der Spikes, die ja zur Tiefpass-Dimensionierung 
bekannt sein soll. Gibt es da irgendwelche Orientierungswerte dazu, wie 
lange die Spikes sein können, oder kann man das allgemein überhaupt 
nicht sagen?

Für jede Hilfe bin ich sehr dankbar!

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
SPI über 5...10m ist nicht gut. Lieber eine andere externe 
Interface-Form wählen und SPI-Signale nur lokal auf der Platine 
verwenden. SPI kan u.U. sehr schnell sein, bis 66Mhz bei 
Flash-Bausteinen zum Beispiel.

Autor: noips (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>SPI über 5...10m ist nicht gut. Lieber eine andere externe
>Interface-Form wählen und SPI-Signale nur lokal auf der Platine
>verwenden. SPI kan u.U. sehr schnell sein, bis 66Mhz bei
>Flash-Bausteinen zum Beispiel.

SPI ist primär für platineninterne Kommunikation gedacht, aber es gibt 
Erfahrungen mit SPI-Datenübertragung über längere Entfernungen ( > 10m ) 
mit Bustreibern. Es muss mit SPI realisiert werden, daran wird nichts 
geändert.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warum eigentlich das SS Signal single Ended?

Wenn man sowieso RS485 macht, dann klatscht man auch gleich den Treiber
für das SS Signal mit rein. Dann sind alle Signale differentiell und 
relativ gut gegen Störungen gesichert. Außerdem muss man sich nicht den 
Kopf zerbrechen, was die Signallaufzeiten bzw. die Flankensteilheit 
betrifft....

Autor: noips (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Matthias

Wenn es nur ein Treiber für SS wäre :-(. Jeder Slave braucht ja ein 
eigenes Signal und bei vielen Slaves möchte man nicht unbedingt pro 
Slave einen Treiber und slaveseitig einen Receiver spendieren. Hinzu 
kommt noch das sich die Anzahl der Leitungen verzweifacht.

@ A. K.

Es tut mir leid für den neuen Thread, in dem alten schien sich niemand 
mehr zu melden und ich dachte ich mache einen neuen und frag noch 
zusätzlich wegen Spike-Dauer.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wieviele Slaves sind es denn?

Autor: noips (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Wieviele Slaves sind es denn?

Es können bis zu 10 werden aber es wurden 5 SS-Leitungen vorgesehen die 
dann mit Logik 2^5 = 32 Slaves erlauben.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was ist kritischer? Aufwand im Slave oder Aufwand im Kabel? Wenn Kabel, 
dann hätte ich eine Idee: Eine einzige SS Leitung verwenden, in jedem 
Slave in ein Schieberegister bei SS=1 die Daten takten, das Ergebnis auf 
Node-Adresse vergleichen und mit SS=0 für den eigentlichen Slave-Select 
verknüpfen. Seitens des Masters bedeutet dies, bei Wechsel des 
adressierten Slaves vor SS=0 erst einmal mit SS=1 die Adresse zu senden.

Autor: noips (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Braucht man dann nicht bei jedem Slave neben dem Schieberegister noch 
einen uC zum Auslesen und Vergleichen der Adresse? Das wäre etwas zu 
aufwändig. Als einfachste Slaves sind eigentlich nur SPI-fächige 
AD-Wandler geplant.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nö, nur nen '688. Was man beispielsweise für 6 Adressbits braucht:

1x 74HC174, plus AND-Gate (SCK&SS) vorneweg.
1x 74HC688, SS als Enable rein, Ausgang ist Slave-Select.

Vielleicht gibt's auch einen SIPO Shifter mit passendem Enable.

Autor: noips (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tut mir leid, ich komm nicht mit. Als Takt-Signal des Schieberegister 
wird SCK&SS verwendet? Wird in Schieberegister die 6-Bit Adresse 
eingelesen? Was ist an die Dateneingänge anzuschließen?

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, aber Grafik ist grad nicht drin, Prosa muss reichen.

Schieberegister, beispielsweise 74HC164, mit
mit CLK = SCK AND SS, also AND Gate davor.
und DIN = MOSI.
und CLR = 1
Da werden also bei SS=1 die SPI-Daten reingeschoben und parallel 
ausgegeben.

Die parallelen Ausgänge des Schieberegisters gehen an die eine Seite 
eines 74HC688 Komparators, dessen andere Seite geht an DIP-Switches oder 
ist fest verdrahtet. Das Enable des '688 geht an SS. Dessen Ausgang 
dient als eigentliches SS für den ADC oder was immer der SPI-Slave ist. 
Dieser Ausgang ist nur dann aktiv (0) wenn SS=0 ist, und die vorher bei 
SS=1 in das Schieberegister reingeschobene Adresse die Node-Adresse ist.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bingo! Wenn 16 Adressen ausreichen, dann geht das auch mit dem 74HC194. 
Erspart das AND Gate für den Takt. Das lässt sich so verschalten, dass 
bei SS=0 nichts passiert.

Also, in jeder SPI-Node:

CP'194  = SCK
DSL'194 = MOSI
S1'194  = SS (ein einziges SS für alle Slaves!)
S0'194  = 0
MR'194  = 1

Px'688  = Qx'194
Qx'688  = Node-Adresse
G'688   = SS
P=Q'688 = Select-Leitung für SPI-Slave, und RS485-Enable

Autor: noips (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK, jetzt bin ich mitgekommen. Gegenüber meiner Lösung bringt es also 
folgendes:

Vorteile:

 - nur 2 statt 5 Leitungen für SS
 - Einsparung von 5 Tiefpässen
 - Einsparung von 5 Schmitt-Trigger
 - SS besser geschüzt gegen Störungen

Zusätlicher Aufwand:

 - 74HC164 (oder 74HC194)
 - UND-Gatter
 - RS485-Treiber masterseitig
 - RS485-Receiver slaveseitig
 - Adresse statt auf 5 Port-Pins seriell über MOSI

Gibt es die Schieberegister auch mit 3.3 V Supply?

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
74HC geht ab 2V. Mit dem '194 entfällt das UND-Gatter. Dafür hast du das 
74HC688 vergessen. Wer hat bei deiner 2-aus-5 Version die beiden SSx 
kombiniert?

Autor: noips (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
74688 und DIP-Schalter hatte ich auch so schon zur Adresszuweisung bei 
den Slaves.

Das scheint eine gute Lösung zu sein! Vielen Dank, die werde ich mal 
vorschlagen.

Autor: noips (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Wer hat bei deiner 2-aus-5 Version die beiden SSx kombiniert?

2-aus-5 Version ???

5 SS-Signale single ended => 5 Leitungen

1 SS-Signal differentiell => 2 Leitungen

Also statt 5 nur 2 Leitungen nötig.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
noips schrieb:

> 2-aus-5 Version ???

Missverständnis. Bei 5 Signalen kann man auch mit einem einfachen 
2-Input Gate schon 10 verschiedene Adressen auseinander halten, braucht 
dafür keinen Komparator.

Autor: noips (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aber mit 74HC164 braucht man doch auch kein UND-Gatter. Er hat zwei 
Dateneingänge die miteinander verundet sind. An einen von beiden MOSI an 
den anderen SS. Und 32 Slaves möglich. So würde es doch auch gehen, 
oder?

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der doppelte Dateneingang nützt dir nichts. Man muss den Takt 
unterdrücken und damit verhindern, dass er bei SS=0 schiebt, sonst 
schiebt er auch in der normalen SPI-Phase bei SS=0 und das Select-Signal 
verschwindet mittendrin.

Autor: noips (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stimmt!

Noch was anderes. Mit der Lösung mit Shiftregister ist aber die 
SPI-Einstellung nicht mehr gegeben, bei der an der negativen SCK-Flanke 
eingelesen wird. Oder wenigstens nicht beim Übermitteln der Adresse, 
oder?

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist eine Frage des gewählten SPI-Mode. Passt jedenfalls zu Mode 0 
und 3, denke ich.

Den kann man in der Adressphase aber anders halten als in der 
Datenphase. Ich habe eine Anwendung mit 2 SPI-Slaves am gleichen Bus, 
die verschiedene Modi benötigen.

Nur muss man hier aufpassen, dass man bei der Mode-Umschaltung nach der 
Adressphase bei inaktivem SS keine positive Flanke produziert, denn die 
schiebt dann.

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.