Hallo zusammen, ich bin in diesem Forum schon oft hilfesuchend fündig geworden, hänge nun aber schon seit einiger Zeit an einem Problem, zu welchem ich weder hier noch woanders eine Lösung finde. Ich hoffe, es ist hier jemand bei, der einen Hinweis hat. Hier das Problem: SPI Kommunikation zwischen Feather M0 und LSM303 will nicht so recht. Der Sensor ist mit etwa 5cm langen Leitungen mit dem uC verbunden und es gibt 4k7 PullUp an den Datenleitungen sowie dem CS. Wenn ich nun den Sensor über den uC konfigurieren will, funktioniert dies leider nicht. Um den Fehler zu suchen, habe ich direkt am CS Pin des uC eine 30cm lange Leitung gehängt und an dessen Ende den Tastkopf des Oszilloskops und voila, es hat funktioniert. Danach wollte ich es ohne Tastkopf nochmal versuchen, Tastkopf entfernt (nicht die 30cm Leitung)und es hat zu meinem Erstaunen auch funktioniert. Nun habe ich unzählige Tests gemacht - mit Leitung, mit Tastkopf, mit verändertem PullUp, anderer Pin am uC, einfach mal 10s den CS auf Low ziehen bevor ich konfiguriere und es zeigt sich ein einheitliches Bild: sobald ich die etwa 30cm Schaltlitze an den CS hänge, funktioniert es. Die Litze läuft ins Leere, auch kein Tastkopf. 10x hintereinander nur mit Litze funktioniert, 10x ohne funktioniert nicht. Hat jemand Ähnliches schonmal gesehen? Ich drehe mich seit Tagen im Kreis... Vielen Dank im Voraus! Gerne schiebe ich Informationen nach, wenn etwas fehlt! Schöne Grüße SCM
Wozu Pullup ? Lass die weg. Allenfalls ein Schema, welche Pins, incl GND und Vcc wurde wo und wie angeschlossen. Wie schnell laeuft das Ganze ? Allenfalls ein Bild vom Aufbau. Allenfalls ein Bild vom Oszilloskop.
Allenfalls ist ddas Verhalten des chips auch nicht ganz Standard. Man muss das Datenblatt, speziell bei analog Devices sehr genau anschauen, wie das mit den Flanken genau gehen soll.
SPI ist recht empfindlich. Vermutlich koppelt SCK auf /CS über und die zusätzliche Kapazität mildert das ab. Versuche mal mit 100R Widerständen, die Flanken langsamer zu machen. Die Widerstände kommen unmittelbar an den Ausgang, d.h. für MOSI, SCK, /CS an den Master und für MISO an den Slave.
Vielen Dank @Peter D., das hat sehr geholfen! Ich habe nach und nach 100R Widerstände an die Ausgänge gehängt und getestet. SCK allein reichte nicht, auch zusammen mit CS hat es noch nicht funktioniert. Jetzt, wo an allen vier Ausgängen 100R Widerstände hängen, funktioniert es einwandfrei! Als ich die Schaltung entworfen habe, hing der Sensor an längeren Leitungen. Nur jetzt, im finalen Gehäuse mit kurzen Leitungen, traten die Probleme auf. Wieder eine lesson learned! Nochmals vielen Dank und einen schönen Abend!!
Michael S. schrieb: > Wieder eine lesson learned! Was hast du denn gelernt? Wenn eine Schaltung nicht geht, kippt man solange 100Ω Widerstände drüber, bis sie geht. Warum sind eigentlich Schaltungen von anderen nicht voll mit 100Ω Widerständen? Warum, wenn sie nötig sind, werden sie nicht gleich in den Chip integriert? Klär doch mal die Mitleser hier auf, ich will auch was lernen. MfG Klaus Peter D. schrieb: > SPI ist recht empfindlich. Vermutlich koppelt SCK auf /CS über und > die zusätzliche Kapazität mildert das ab. Der gängige Fehler ist, das die Daten mit der falschen Clockflanke übernommen werden. Ein Stück Kabel oder der Tastkopf schiebt den Clock soweit, das es gerade noch passt. MfG Klaus
Klaus schrieb: > Ein Stück Kabel oder der Tastkopf schiebt den Clock > soweit, das es gerade noch passt. Säääähr rischdisch!
Peter D. schrieb: > SPI ist recht empfindlich. SPI ist recht unempfindlich. Denn der Slave hat üblicherweise eine halbe Clock Periode Zeit die Daten vom Master zu übernehmen wenn SPI richtig konfiguriert ist. Die vielen Leute die SPI über 30 cm Steckbrett-Leitungen "erfolgreich" betreiben beweisen es dir.
Frickelfritze schrieb: > SPI ist recht unempfindlich. Denn der Slave hat üblicherweise > eine halbe Clock Periode Zeit die Daten vom Master zu > übernehmen wenn SPI richtig konfiguriert ist. Du kannst das SPI auch mit 100Hz betreiben, an dem kapazitiven Übersprechen ändert das genau 0,nix. Die SPI-Slaves sind in der Regel viel zu schnell (>=50MHz). Da man aber oft keine 50MHz braucht, kann man die Flankensteilheit mit nem Widerstand reduzieren. Wichtig ist auch eine getrennte Signalführung und eine gute GND-Verbindung. Nimmt man Flachkabel, sollte zwischen den 4 Signalen immer ein GND-Draht liegen.
Klaus schrieb: > Der gängige Fehler ist, das die Daten mit der falschen Clockflanke > übernommen werden. Dann helfen aber Reihenwiderstände nicht, da sie SCK und MOSI um den gleichen Betrag verschieben. Und ein Kondensator an /CS natürlich auch nicht.
Es geht eigentlich weniger darum, die Flanken zu daempfen wie die Reflexionen zu reduzieren.
Ohne ein Bild vom realen Aufbau und einer ECHTEN, HF-tauglichen Messung ist das alles nur Spekulation. Bei 5cm Leitungsläng müssen die Flanken schon SEHR steil sein, um Refletionen zu erzeugen, siehe Wellenwiderstand, so in der Liga 2ns und weniger. OK, moderne uCs und Logik-ICs schaffen das. Vermutlich ist es eher ein Problem der unsauberen, nicht hf-tauglichen Masseführung, sowohl auf dem Board als auch auf der Leitung.
Peter D. schrieb: > Du kannst das SPI auch mit 100Hz betreiben, an dem kapazitiven > Übersprechen ändert das genau 0,nix. Bei kurzen Kabeln wie es der TO beschreibt macht das Kabel- Übersprechen genau 0,nix. Denn bei diesen Verhältnissen trägt der niedrige Quellwiderstand des Ausgangstreibers entscheidend dazu bei dass alles stabil steht. Peter D. schrieb: > Nimmt man Flachkabel, sollte zwischen den 4 Signalen > immer ein GND-Draht liegen. Ja, besonders bei Michael S. schrieb: > etwa 5cm langen Leitungen
Peter D. schrieb: > Dann helfen aber Reihenwiderstände nicht, da sie SCK und MOSI um den > gleichen Betrag verschieben. Und ein Kondensator an /CS natürlich auch > nicht. Richtig, man sollte den SPI-Mode am µC einfach richtig einstellen. Und sich nach dem Datenblatt richten und nicht einfach solange rumprobieren, bis es mal geht. MfG Klaus
Es gibt bei CS verschiedene Modi für das Zusammenspiel von Clock, Daten und CS. https://de.wikipedia.org/wiki/Serial_Peripheral_Interface#Protokollablauf_und_Einstellm%C3%B6glichkeiten In der Regel funktioniert der richtige gut, und noch ein weiterer so gerade. Vodoo mit kurzen Leitungslängen oder 100R Widerständen sieht aus nach "so gerade". Nimm lieber die, die gut funktioinert.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.