Forum: Mikrocontroller und Digitale Elektronik Probleme mit SPI


von Falk B. (falk)


Angehängte Dateien:

Lesenswert?

Hallo liebe Gemeinde,

hier mal ein Lehrbeispiel zum leidigen Thema Übertragungsprobleme mit 
SPI und Reflektionen.

Auf einer kleinen Platine steuert ein ATmega328PB einen ADC vom Typ 
TLV2553. Leitungslänge ca. 40mm mit ca. 15mm Stichleitung zum 
ISP-Stecker. Siehe Anhang, das eingeblendete Raster sind 10mm, die helle 
Leitung SCK.

Bei der Inbetriebnahme kam es zu Übertragungsfehlern auf einigen 
ADC-Kanälen. Logikfehler wurden geprüft und ausgeschlossen (Messung mit 
dem Oszi am Bus). Dabei zeigte sich, daß mit angeschlossenem 10:1 
Tastkopf an SCK die Übertragung stabil und auf allen Kanälen OK war. 
Uuups! Also mal genau messen. Erstmal mit 10:1 Tastkopf und kurzer 
Massefeder.

https://www.mikrocontroller.net/articles/Oszilloskop#Tastk.C3.B6pfe_richtig_benutzen

Dann nochmal mit selbstgebautem Z0-Tastkopf und 1k Eingangswiderstand. 
Beide Bilder sind leicht verschieden, aber in beiden Fällen läuft die 
Übertragung fehlerfrei! Nach einer Weile wurde klar, das ISP-Kabel ist 
Schuld, denn dort hängen ca. 40cm Flachbandkabel als Stichleitung dran. 
Entfernt man dies, läuft die Übertragung auch ohne Tastkopf am Signal 
fehlerfrei. Aber das ist unpraktisch für's Debuggen. Also was tun? Ganz 
einfach. Man entkoppelt das Taktsignal mit einem 1k Widerstand direkt an 
X15 von der SCK Leitung. Der ISP-Programmer und der AVR sind gutmütig 
genug, um mit dem höheren Ausgangswiderstand und etwas langsameren 
Flanken umzugehen. Damit läuft die SPI-Übertragung auch mit angestecktem 
ISP-Kabel und ohne Tastkopf am Signal. Man sieht bei der Messung an SCK 
keinen Unterschied, ob das Kabel angesteckt ist oder nicht.

Anbei noch ein paar Screenshots. Bei der Messung war es nur sehr schwer 
möglich, das gestörte Signal aufzuzeichnen, erst mit dem extrem 
hochohmigen Z0-Tastkopf mit 40kOhm war es ansatzweise möglich, das 
Signal zu messen und gleichzeitig die Störung noch zu beobachten. 
Allerdings waren die Meßwerte anders, d.h. auch hier war die Störung 
durch den Tastkopf verfälscht.

1.png Original, 1k Z0-Tastkopf
2.png Original, 15pF 10:1 Tastkopf
3.png Original, 10k Z0-Tastkopf
4.png Original, 40k Z0-Tastkopf
5.png modifiziert, 15pF 10:1 Tastkopf
6.png modifiziert, 1k, Z0-Tastkopf
7.png modifiziert, 40k, Z0-Tastkopf

Die starken Überschwinger bei den Messungen mit 40k Z0-Tastkopf würde 
ich mit Vorsicht genießen wollen. Ob die echt sind oder ein Meßfehler 
ist unklar.

P.S. Ok, das Layout ist nicht ganz lehrbuchartig, man hätte wenigstens 
SCK etwas vorsichtiger behandeln und ohne Löcher in der Masse verlegen 
können.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Falk B. schrieb:
> Man entkoppelt das Taktsignal mit einem 1k Widerstand direkt an X15 von
> der SCK Leitung.
Der Widerstand ist für eine Serienterminierung (nichts anderes hast du 
da gemacht) im Prinzip zu hochohmig. 100 Ohm reichen da aus. Und der 
gehört eigentlich so dicht wie möglich an den Sender. Aber wem erzähle 
ich das... ;-)

Du hast da ja so ziemlich genau den Aufbau wie dort im 
Beitrag "Re: Serienwiderstand bei Hochfrequenz"

: Bearbeitet durch Moderator
von Falk B. (falk)


Lesenswert?

Lothar M. schrieb:
> Falk B. schrieb:
>> Man entkoppelt das Taktsignal mit einem 1k Widerstand direkt an X15 von
>> der SCK Leitung.
> Der Widerstand ist für eine Serienterminierung (nichts anderes hast du
> da gemacht)

Nö. Nochmal genau lesen und hinschauen. Ich habe die Stichleitung + 
Flachbandkabel am ISP durch 1k HF-mäßig entkoppelt. Das ist KEINE 
Terminierung! Das 1k wirkt nahezu als HF-mäßig offenes Ende.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Falk B. schrieb:
> Ich habe die Stichleitung + Flachbandkabel am ISP durch 1k HF-mäßig
> entkoppelt.
Schon gesehen.

> Das ist KEINE Terminierung!
Richtig, das sehe ich ja auch so. Allerdings frage ich mich, ob da eine 
"regelgerechte" Terminierung am µC-Pin nicht auch "geholfen" hätte.
Und man dann im Betrieb mit 40cm Kabel zum Programmer die paar mm zum 
ADC als "nicht weiter schlimmen" Stub betrachten könnte.

Falk B. schrieb:
> Die starken Überschwinger bei den Messungen mit 40k Z0-Tastkopf würde
> ich mit Vorsicht genießen wollen. Ob die echt sind oder ein Meßfehler
> ist unklar.
Löte doch mal in die Taktleitung beim µC einen 0402 100 Ohm Widerstand. 
Platz ist ja genug da. Mich würde interessieren, was dann passiert.

: Bearbeitet durch Moderator
von Falk B. (falk)


Angehängte Dateien:

Lesenswert?

Lothar M. schrieb:

>> Ich habe die Stichleitung + Flachbandkabel am ISP durch 1k HF-mäßig
>> entkoppelt.
> Schon gesehen.
>
>> Das ist KEINE Terminierung!
> Richtig, das sehe ich ja auch so.

Hast du aber nicht geschrieben!!!

"Der Widerstand ist für eine Serienterminierung (nichts anderes hast du
da gemacht)"

> Allerdings frage ich mich, ob da eine
> "regelgerechte" Terminierung am µC-Pin nicht auch "geholfen" hätte.
> Und man dann im Betrieb mit 40cm Kabel zum Programmer die paar mm zum
> ADC als "nicht weiter schlimmen" Stub betrachten könnte.

Hmmm.

> Löte doch mal in die Taktleitung beim µC einen 0402 100 Ohm Widerstand.
> Platz ist ja genug da. Mich würde interessieren, was dann passiert.

Sagen wir 0603, 0402 tu ich mir nur an, wenn es denn WIRKLICH sein muss.

Ok, siehe Anhang. UFFFF! Das ist so ziemlich das ungünstigste Signal, 
das man sich wünschen kann, gemessen mit 10:1 Tastkopf und Massefeder. 
Und trotzdem arbeitet der ADC korrekt!!! Das verstehe wer will!

Ich bau das jetzt wieder zurück, mit 1K am ISP-Stecker sah das DEUTLICH 
besser aus!

Beitrag #5707138 wurde vom Autor gelöscht.
von Falk B. (falk)


Angehängte Dateien:

Lesenswert?

Hier nochmal das Signal mit 100 Ohm Serienterminierung am AVR ohne
gestecktes ISP-Kabel! Astrein!

: Bearbeitet durch User
von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Falk B. schrieb:
> Hier nochmal das Signal mit 100 Ohm Serienterminierung am AVR ohne
> gestecktes ISP-Kabel! Astrein!
Das ist jetzt wie im Eröffnungsthread das Bild 2? Oder das Bild 5?
Kurios.
Was passiert, wenn du nur das 40cm-Kabel (ohne hochohmigen Treiber am 
SCK) einsteckst?

Falk B. schrieb:
> Ok, siehe Anhang. UFFFF! Das ist so ziemlich das ungünstigste Signal,
> das man sich wünschen kann
Ja, sieht böse aus. Das ist direkt am ADC?

: Bearbeitet durch Moderator
von Falk B. (falk)


Lesenswert?

Lothar M. schrieb:
> Falk B. schrieb:
>> Hier nochmal das Signal mit 100 Ohm Serienterminierung am AVR ohne
>> gestecktes ISP-Kabel! Astrein!
> Das ist jetzt wie im Eröffnungsthread das Bild 2? Oder das Bild 5?

2.

> Kurios.

In der Tat!

> Was passiert, wenn du nur das 40cm-Kabel (ohne hochohmigen Treiber am
> SCK) einsteckst?

Hab ich nicht probiert, werde ich auch nicht mehr tun. Ich muss fertig 
werden. Trotzdem würde ich den ADC als relativ empfindlich einstufen. 
Vermutlich ist der in einem relativ modernen, sauschnellen 
Halbleiterprozess gefertigt und hat an seinen Takteingängen DEUTLICH 
mehr Bandbreite als die max. spezifizierten 15 MHz für den SPI-Takt. Das 
ist eher kontraproduktiv. Das Datenblatt spricht auch von einer internen 
Entprellung des CS Signals mit ca. 25ns, das deutet schon auf solche 
Effekte hin. Warum zum Geier kann man dem Takt oder auch CS nicht 
einfach einen rustikalen Schmitt-Trigger verpassen? Bei 15 MHz brennt da 
doch rein gar nichts an.

>> Ok, siehe Anhang. UFFFF! Das ist so ziemlich das ungünstigste Signal,
>> das man sich wünschen kann
> Ja, sieht böse aus. Das ist direkt am ADC?

Ja.

von Achim S. (Gast)


Lesenswert?

Lothar M. schrieb:
> Kurios.

Eigentlich nicht. Die Serienterminierung sorgt dafür, dass am Ende des 
Flachbandkabels das Signal gut aussieht. Direkt hinter der 
Serienterminierung  (also praktisch da, wo der ADC sitzt), muss sich 
diese ungünstige Signal ergeben.

Bei Loslaufen der Welle wird wegen der Serienterminierung erst mal nur 
der halbe Pegel erreicht. Wenn die reflektierte Welle dann vom Ende des 
Flachbandkabels zurück kommt, wird der volle Pegel erreicht. Genau das 
sieht man am ADC-Eingang.

von Falk B. (falk)


Lesenswert?

Achim S. schrieb:
> Lothar M. schrieb:
>> Kurios.
>
> Eigentlich nicht. Die Serienterminierung sorgt dafür, dass am Ende des
> Flachbandkabels das Signal gut aussieht. Direkt hinter der
> Serienterminierung  (also praktisch da, wo der ADC sitzt), muss sich
> diese ungünstige Signal ergeben.
>
> Bei Loslaufen der Welle wird wegen der Serienterminierung erst mal nur
> der halbe Pegel erreicht. Wenn die reflektierte Welle dann vom Ende des
> Flachbandkabels zurück kommt, wird der volle Pegel erreicht. Genau das
> sieht man am ADC-Eingang.

Jetzt wo du es sagst klingt es logisch.
Klassisches Wald und Bäume Problem.
;-)

von Dirk F (Gast)


Lesenswert?

Falk B. schrieb:
>> Bei Loslaufen der Welle wird wegen der Serienterminierung erst mal nur
>> der halbe Pegel erreicht. Wenn die reflektierte Welle dann vom Ende des
>> Flachbandkabels zurück kommt, wird der volle Pegel erreicht. Genau das
>> sieht man am ADC-Eingang.

Deshalb auch für jeden Teilnehmer einen eigenen Serien-Widerstand und 
eine eigene Leitung für Clock ziehen.

von Impedanzfanatiker (Gast)


Lesenswert?

Falk B. schrieb:
> Ok, siehe Anhang. UFFFF! Das ist so ziemlich das ungünstigste Signal,
> das man sich wünschen kann, gemessen mit 10:1 Tastkopf und Massefeder.
> Und trotzdem arbeitet der ADC korrekt!!! Das verstehe wer will!

Das Signal ist super! *1)
Die Impedanz der Leitung passt.

Was du siehst, sind ganz normale Leitungseffekte. Da die Harken zu 
Beginn und Ende mittig sind, also passt die Impedanz zur 
Serienterminierung.

Miss am Ende der Leitung, da sollte daher ein schöner Rechteck 
rauskommen.

*1) vorausgesetzt, es ist am Beginn der Leitung gemessen ;-)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.