Hallo Leute, Bin gerade dabei einen DMS-Sensor aus zu lesen. Die Elektronik für Sensor, Verstärker und ADC sind aus einer Waage und funktionieren in sich. Ich möchte den ADC über SPI am Raspberry ein und auslesen. Das funktioniert soweit (SIgnale mit Oszi kontrolliert). Ich kann über MOSI senden und empfange auch etwas ünber MISO. Allerdings muss ich den Seriellen-Clock umpolen, da ich auf steigender Flanke sende und auf fallender Flanke empfange. Daher bekomme ich nur Mist zurück. Problem: MOSI auf steigender Flanke und MISO auf fallender Flanke. Sprache: Python Programmteil: ... import spidev import time ... def WR_ADC(cmd): spi.mode=0b00 spi.xfer2([cmd,0x00]) spi.mode=0b01 sleep(DELAY) val=spi.readbytes(2) print(val) .... WR_ADC(0x84) Über spi.mode sollte sich die Polarität ändern, allerdings funktioniert das nur für MOSI und auf MISO hat das keine Auswirkung! Danke für die Hilfe.
:
Bearbeitet durch User
Hi Leute, okay ... ich verwende einfach einen Inverter! Softwarelösung wäre schöner, aber ...
Hat der keinen SPI Mode Switch? Es gibt ja 4 SPI Modi, und 2 davon haben MISO auf der fallenden Flanke.
Danke Jim, aber ... ich hab mit spi.mode alle Varianten probiert. Es ändert nur MOSI aber die eingehenden Signale werden nicht beeinflusst -> immer auf steigender Flanke. Habe es mit dem Oszi gemessen! Versuche es mit einem Inverter CDC203 sollte funktionieren.
NerdGirl schrieb: > ich hab mit spi.mode alle Varianten probiert. Es ändert nur MOSI > die eingehenden Signale werden nicht beeinflusst Natürlich resulitert in der Umprogramierung des SPI-Mode im Master keine Änderung der Ausgangssignale am Slave. Aber (und jetzt kommts!): mit CPHA und CPOL bestimmst du, wann der Einlesezeitpunkt ist. Und deshalb muss der Master im selben Modus kommunizieren wie der Slave. Und GENAU das ist im Grunde dein Problem. Sei dir sicher: mit dem richtigen SPI-Modus funktioniert das... > Habe es mit dem Oszi gemessen! Zeig doch mal, dann kann man bewerten, was da abgeht.
Hallo Lothar, Danke für deine Antwort. Anbei sende ich ein Bild. Da mein Oszi nur zwei Eingänge hat, habe ich jeweils eine Aufnahme von MOSI mit SLK und MISO mit clock gemacht. Im Bild linke Spalte ist MOSI recht MISO und je Zeile ein anderer Modus. Angesteuert wird ein LTC1857 (http://www.analog.com/media/en/technical-documentation/data-sheets/185789fb.pdf) Man erkennt, dass der Modi nur auf MOSI einfluss hat. Beim invertiertem Signal (0b01 und 0b11) kommt bei MOSI nichts zurück oder Mist! Das Signal wird vom Raspi über ein Differenzialwandler übertragen und dann wieder umgewandelt in Single-Ended und dann erst auf den LTC übertragen. Ich werde morgen versuchen einen Schaltplan zu posten ... Vielleicht ist diese Differenzialwandlung das Problem (obwohl ich das nicht glaube)? Danke lg. Isi (NerdGirl hat meine Freundin geschrieben ... meinte lustig)
Also ich sehe das die Daten immer bei steigender Flanke gelesen und gesendet werden. Am SPI Mode änderst du demzufolge nichts.
okay verguckt, nur in der 3. Bildzeile ist es bei fallender Flanke
zweite Zeile ist doch auch fallend ... Ich überbrücke diese Differenzialwandlung und gehe direkt auf den DAC! Übrigens, das mit dem Inverter funktioniert nicht, da ich den Clock nicht einfach invertieren kann ... und wenn ich das MISO Signal invertiere kommen falsche WErte raus!
Isi schrieb: > und wenn ich das MISO Signal invertiere kommen falsche WErte raus! Und wenn du das MISO-Signal nicht invertierst, dann kommen richtige Werte? Was ist denn das eigentliche Problem? Mit dem falschen SPI Mode sind deine (oder die vom Slave) empfangenen Daten um 1 Bit verschoben. Ist das dein Problem? I. M. schrieb: > Problem: MOSI auf steigender Flanke und MISO auf fallender Flanke. Laut dem Datenblatt liest der ADC bei der Steigenden Flanke die Daten ein und ändert sie nach der fallenden Flanke. Du brauchst also den SPI-Mode 0 oder 3. Und weil schon mit der ersten Taktflanke gesampelt wird, bleibt davon nur der Mode 0 übrig: http://www.lothar-miller.de/s9y/archives/15-SPI.html Und somit ist beim Screenshot mit dem Mode 0 offenbar soweit alles korrekt... > Daher bekomme ich nur Mist zurück. Wie sieht dieser Mist aus? Was erwartest du und was bekommst du stattdessen?
:
Bearbeitet durch Moderator
Hallo Lothar, der Differenzialwandler auf der Slaveseite war defekt! Der Clock-Ausgang hat keine richtigen Signale gesendet. spi.mode=0b00 ist der richtige Modus! Daten werden auf steigend zu Slave gesendet und fallend zurückgesendet. Danke für deine Hilfe und Bemühung. lg.I.
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.