Forum: Analoge Elektronik und Schaltungstechnik LTC1857: MISO Serial Clock Polarität ändern (RPi)


von I. M. (isi)


Lesenswert?

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
von I. M. (isi)


Lesenswert?

Hi Leute,
okay ... ich verwende einfach einen Inverter!
Softwarelösung wäre schöner, aber ...

von Jim M. (turboj)


Lesenswert?

Hat der keinen SPI Mode Switch? Es gibt ja 4 SPI Modi, und 2 davon haben 
MISO auf der fallenden Flanke.

von NerdGirl (Gast)


Lesenswert?

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.

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


Lesenswert?

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.

von I. M. (isi)


Angehängte Dateien:

Lesenswert?

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)

von Checker (Gast)


Lesenswert?

Also ich sehe das die Daten immer bei steigender Flanke gelesen und 
gesendet werden. Am SPI Mode änderst du demzufolge nichts.

von Checker (Gast)


Lesenswert?

okay verguckt, nur in der 3. Bildzeile ist es bei fallender Flanke

von Isi (Gast)


Lesenswert?

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!

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


Lesenswert?

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
von Isi (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.