www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Übersprechen auf SPI Leitung


Autor: Martin Lang (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich bastele an einer SPI Verbindung zwischen einem Freescale 
Microcontroler (HCS12 Familie) und einem Spartan-3 FPGA von Xilinx.

Leider habe ich anhaltende Probleme mit Bitfehlern auf der Leitung, die 
für mich wie Übersprechen aussehen.

Der FPGA ist über einen Pegelwandler mit dem Microcontroler verbunden. 
Die Anschlüsse sind jeweils an einer normalen Stiftleiste aufgelegt. Am 
FPGA 4 in Reihe und am Microcontroler 4 in einem Quadrat auf einer 2 
reihigen Stiftleiste.

Der FPGA fungiert dabei als SPI Master.
Zum testen habe ich derzeit ein Programm auf dem Microcontroler, dass 
die letzten Empfangenen Daten wieder an den FPGA zurückschickt. Dieser 
sendet über Schalter einstellbare Werte an die MCU.

Schalte ich nun die Bits vom höchstwertigsten nach unten hin an und 
übertrage jeweils nach dem Einstellen (der letzte Wert wird ja zurück 
übertragen) so kipppt jeh nach dem wie die Kabel gelegt sind ein 
benachbartes Bit. Dieser Effekt ist auch nach langem probieren immer 
wieder reproduzierbar.

Werden jedoch nur Nullen von der MCU zum FPGA übertragen, so kommen alle 
Werte korrekt durch.

Ich habe nun schon versucht die Einzeladern durch ein Flachbandkabel zu 
ersetzen, dass auf jeder 2ten Ader geerdet ist. Jedoch habe ich auch 
damit jeh nach dem wie es gerade da liegt dieses Problem. Es scheint 
also direkt im Bereich der Steckverbindung am Microcontroler 
aufzutreten.
Auch zum Teil geschirmte Kabel (jeweils eine Datenleitung mit entweder 
SCK oder /SS zusammen) bringen keinen Erfolg.

Hat jemand von euch vielleicht noch einen Rat, was ich probieren könnte 
um das Problem loszuwerden? Auch ein starkes herunterschalten der 
Taktrate verändert die Gesamtsituation nicht.

Mit einem ATmega16 habe ich beim gleichen Versuchsaufbau übrigens keine 
Probleme. Der AT empfängt und sendet stets korrekte Werte, während 
hingegen alle 3 SPI Ports am Freescale (MC9S12DP512) das gleiche 
Verhalten zeigen.

Gruß,

Martin

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist dein Text kürzer oder länger als das Kabel?

Autor: Martin Lang (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ungefähr gleich lang ;)

Autor: Martin Lang (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nein Spass ...

das Kabel ist ungefähr 20cm lang. Viel kürzer kann ichs auch aufgrund 
der Platinenanordnung nicht gestalten

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Martin Lang (Gast)

>Schalte ich nun die Bits vom höchstwertigsten nach unten hin an und
>übertrage jeweils nach dem Einstellen (der letzte Wert wird ja zurück
>übertragen) so kipppt jeh nach dem wie die Kabel gelegt sind ein
>benachbartes Bit. Dieser Effekt ist auch nach langem probieren immer
>wieder reproduzierbar.

Klingt für mich wie eine falsche Einstellung der 
Taktphase/Taktpolarität.

>Werden jedoch nur Nullen von der MCU zum FPGA übertragen, so kommen alle
>Werte korrekt durch.

Keine Kunst ;-)

>Hat jemand von euch vielleicht noch einen Rat, was ich probieren könnte
>um das Problem loszuwerden? Auch ein starkes herunterschalten der
>Taktrate verändert die Gesamtsituation nicht.

Logisch, wenn du gerade auf der Flanke abtastest.

MfG
Falk

Autor: Martin Lang (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zu 1:

Das habe schon überprüft. Wenn ich die CPHA Einstellung auf einer Seite 
ändere so kommt nichts korrekt durch.

Zu 2:
Nein. Was gemeint war ist, dass die Übertragung korrekt ist, wenn in 
eine Richtung nur Nullen übertragen werden.
Davon abgesehen kann ich den Fehler durch Wackeln an der Verkabelung ein 
bzw Ausschalten. Ich hätte es nur gerne Dauerhaft stabil.

Gruß,

Martin

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Martin Lang (Gast)

>Davon abgesehen kann ich den Fehler durch Wackeln an der Verkabelung ein
>bzw Ausschalten. Ich hätte es nur gerne Dauerhaft stabil.

???
Du hast einen Wackelkontakt!!! Stell mal ne ordentliche Kabelverbindung 
her.
Leute gibts.

MfG
Falk

Autor: Martin Lang (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
an Kopf pack

Ich habe daran zig verschiedene neue Kabel mit ordentlichen 
Steckverbindern ausprobiert. Außerdem passen alle restlichen Anzeichen 
ganz und garnicht zu einem Wackelkontakt.

Warum sorgt ein Wackelkontakt dafür, dass Daten, die auf einer 
Rückleitung übertragen werden, die Übertragung stören?

Warum kann man jeh nach Lage der Kabel durch einfache Abschirmung mit 
einem Stück geerdeter Alu Folie das Problem beheben und es tritt wieder 
auf, soblad man die Alufolie nicht mehr erdet?

Das Wackeln sorgt lediglich dafür, dass sich die Lage der Kabel 
verändert. Besonders an der Stelle, wo ich das Flachbandkabel getrennt 
hab, so dass es mit 2 2er Steckkontanten an den Microcontroler passt.

Ich bastel daran nun schon seit mehreren Tagen herum und habe schon 
einiges ausprobiert um das Problem zu verringern. Das Flachbankabel 
sorgt auch schon für eine deutliche Verbesserung im Vergleich zu den 
Einzeladern, aber ein Wackelkontakt ist das nun sicher nicht mehr.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Martin Lang (Gast)

>Warum sorgt ein Wackelkontakt dafür, dass Daten, die auf einer
>Rückleitung übertragen werden, die Übertragung stören?

Woher weisst du, in welcher Ader der Wackelkontakt ist? Und wenn er in 
der Masse ist, na dann Prost.

>Warum kann man jeh nach Lage der Kabel durch einfache Abschirmung mit
>einem Stück geerdeter Alu Folie das Problem beheben und es tritt wieder
>auf, soblad man die Alufolie nicht mehr erdet?

Voodoo. Da reichen die kleinsten Erstütterungen.

>Ich bastel daran nun schon seit mehreren Tagen herum und habe schon

Genau, "basteln" ist das Stichwort. Versuch das Problem mal systematisch 
und solide anzugehen.

>Einzeladern, aber ein Wackelkontakt ist das nun sicher nicht mehr.

Wenn das mal kein Irrtum ist.

MFG
Falk

Autor: Martin Lang (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe danach schon am totalen Anfang gesucht und nichts dergleiche 
gefunden. Der gemessene Widerstand der Steckverbindungen ist denkbar 
gering. Auch die Masseleitung steckt absolut fest. Ich habe das gleiche 
Kabel für dem  ATMega verwendet, wie ich sie nun auch für den Freescale 
Prozessor benutze. Weiterhin tritt das Problem an allen Masseanschlüssen 
auf dem Board, sowie auch an allen 3 SPI Ports des Microcontrolers in 
ähnlicher Weise auf.

Ich habe nun schon wirklich einiges Probiert und hatte hierrein gepostet 
um anregungen für neue Fehlerquellen zu finden, die ich bisher noch 
nicht probiert hab (deshalb auch das lange einstiegsposting). Aber ich 
werde wohl nur auf Dinge aufmerksam gemacht die ich schon zig mal 
überprüft habe oder zu systematischem Arbeiten aufgefordert, wobei über 
meine vorgehensweise nichts weiter bekannt ist. Aber ok ...

Wenn jemand noch Ideen hat was es für Fehlerquellen bei einer solchen 
Schaltung geben kann, die kein Wackelkontakt sind, so wäre ich sehr 
dankbar für weitere Anregungen.

Gruß,

Martin

Autor: Dirk Broßwick (sharandac)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

hast du schom mal probiert inwieweit die Störung von der Datenrate 
abhängig ist? Konntest du das Übersprechen schon mal mit einen Oszi 
verfolgen? Stimmen die Versorgungspannungen?

MfG Dirk

Autor: Frank N (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
VHDL (oder was auch immer) Problem? Z.B. relative Lage Takt und Daten 
OK? Reflexionen?

Autor: Martin Lang (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
soo ....
nachdem ich heute nachmittags nochmals die Verbindung kleinlich 
kontrolliert habe, hat sich immer noch keine Besserung eingestellt. 
Insbesondere ist für mich noch nicht ersichtlich in wiefern die 
einzelnen Puzzleteile zusammenpassen.

Zum einen scheint der Fehler irgendwie in der Kabelverbindung zu liegen 
- sei es nun durch schlechte Kontakte (wobei ich da nichtmehr wüsste in 
wiefern ich da noch etwas verbesser soll) oder durch irgendwelche 
Einstreuungen (was mir eigentlich aufgrund von 5V und geringen Strömen 
eigentlich eher unrealistisch vorkommt) oder auf sonst eine Art und 
Weise, die ich im Moment grad nicht sehe. Veränderungen an der 
Verkabelung (umlegen, bewegen der Kabel nahe des Steckverbinders) ändern 
das Auftreten des Fehlers.

Die Datenrate scheint ziemlich unabhängig zu sein. Ich habe den Fehler 
auch schon bei 1 Hz Bitrate gesehen. Er scheint jedoch nur dann 
aufzutreten, wenn Daten in beide Richtungen übertragen werden. Übertrage 
ich nur Nullen von der MCU zum FPGA so kommen die Daten korrekt bei der 
MCU an und umgekehrt. Nach Oszi ist die leere Datenleitung dann auch 
wirklich die ganze Zeit auf Masse, weshalb ich einen Kurzschluss 
ausschließe.

Ich bin fürs erste ratlos was ich damit machen soll. Aber zumindest mal 
danke für die Anregungen.

Gruß,

Martin

Autor: HildeK (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Probiers mal mit kleinen Serienwiderständen, ca. 25-40 Ohm, jeweils so 
nah wie möglich an den Ausgängen von Takt (auf jeden Fall!) und Daten um 
Reflexionen zu verhinden. Deine Beschreibung der Empfindlichkeit auf die 
Lage der Kabel oder das Berühren derselben könnten damit auch erklärt 
werden.

Autor: Roland (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auch wenn der Beitrag schon sehr alt ist, ich hatte heute das gleiche 
Problem und habe auch alle oben genannten Tipps versucht.
Da ich eine Lösung in meinem speziellen Fall gefunden habe, dachte ich, 
ich poste sie mal:
Ich habe an einem Master mehrere Slaves, also muss ich per CS den 
richtigen auswählen. In meiner SPI Lib werden aber (natürlich) nicht 
alle Pins automatisch high gesetzt. Also hatte ich beim Einschalten an 
dem cs-Pin, mit dem ich den Slave anspreche einen nicht definierten 
Zustand, der aber nach "Neustart" des controllers immer (sehr hochohmig) 
high war.
Somit klappte alles. Beim Berühren des Kabel hat sich der Zustand 
geändert und schon kam die Störung.
Ein manuelles high und low Setzen des cs-pins war die Lösung.
Mein Kabel ist ohne zusätzlichen Widerstand 30cm lang, als Kabel und 
Stecker nehme RJ25, das ist ein sechspoliger Stecker, der auch für ISDN 
benutzt wird.
Ich benutze die sechs Adern für Stromversorgung 5V, Masse, miso, mosi, 
cs und clk.
Das Kabel ist nicht abgeschirmt und ich arbeite mit 12MHz SPI 
Taktfrequenz.
Meine Controller (master und alle slaves) sind teensy3.1.

Diese Kombi arbeitet wesentlich schneller und störungsfreier als der 
vorher benutzte i2c.

Gruß
Roland

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.