mikrocontroller.net

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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: I. M. (isi)
Datum:

Bewertung
0 lesenswert
nicht 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
Autor: I. M. (isi)
Datum:

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

Autor: Jim M. (turboj)
Datum:

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

Autor: NerdGirl (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Lothar M. (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: I. M. (isi)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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)

Autor: Checker (Gast)
Datum:

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

Autor: Checker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
okay verguckt, nur in der 3. Bildzeile ist es bei fallender Flanke

Autor: Isi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Lothar M. (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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
Autor: Isi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

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.