Hallo zusammen,
hat jemand schom mal mit dem Wandler ADS8327 was gemacht? Ich teste den
gerade und stelle fest, dass er wohl nicht SPI-kompatibel ist. Der
schreibt die Daten auf SDO bei der fallenden Flanke und liest die
Input-Daten am SDI ebenfalls bei der fallender Flanke. Beim richtgen SPI
müsste er doch bei der steig. Flanke lesen, wenn er bei der fallender
schreibt, sehe ich es richtig?
Na ja, normalerweise kennt man bei SPI zwei Parameter, Clock Phase
(CPHA) und Clock Polarity (CPOL). Ich würde mal versuchsweise das
CPHA-Bit ändern, falls der verwendete Mikro dies unterstützt.
Servus,
noips schrieb:> Soweit ich es verstehe verhält sich SPI bei keiner der 4 möglichen
siehe Bild, so soll es sein. Laut Datenblatt hat der AD-Wandler ein
normales SPI Protokoll. Bei fallender Flanke werden MOSI/MISO ein- bzw.
ausgelesen.
Lege mal an CS/SS einen Widerstand mit ca. 10K gegen Plus und fahre den
CS/SS vor jeder Wandlung gegen Low. Nach erfolgter Wandlung (auto oder
per Software) wieder hoch. CLK Timing sollte bei 50 MHZ SPI-TAKT auch
kein Problem darstellen.
Kontrolliere mit einem Frequenzmesser oder OSZI ob am SCLK 16 Impulse
durchgeschoben wurden.
XMEGA schrieb:> Bei fallender Flanke werden MOSI/MISO ein- bzw.> ausgelesen.
Ja, so sollte das bei SPI sein. Aber das stimmt nicht überein mit der
folgenden Beschreibung im Dattenblatt auf Seite 29 Abschnitt DIGITAL
INTERFACE, 1. Absatz:
Output data are changed at the falling edge of SCLK so
that the host processor can read it at the next rising edge. Serial data
input is latched at the falling edge of
SCLK.
Entsprechend der Beschreibung im Datenblatt (siehe mein vorheriger
Beitrag) schreibt der Baustein die Daten auf SDO (MISO) bei fallender
Flanke und liest Daten auf SDI (MOSI) ebenfalls bei fallender Flanke.
Und das ist kein Standard-SPI. Bei SPI (siehe angehängtes Timing-Diagram
von Wikipedia) passiert das Lesen und Schreiben immer bei
unterschiedlichen Flanken, z.B. lesen bei fallender und schreiben bei
steigender Flanke oder umgekehrt. Somit ist der Baustein nicht von
Controllern mit Standard-SPI ansprechbar, obwohl unter Features sthet,
dass er SPI-kompatibel ist.
Der ADS8327 ist SPI kompatibel.
Die Figure-5 des Datenblatts enthält ein ausführliches SPI Timing
Diagramm, das hilft dir vielleicht mehr als die prosa Beschreibung.
Anstatt Wikipedia würde ich dir auch empfehlen in das Datasheet deines
SPI Masters zu schauen.
Ansonsten solange mit Clock Phase und Polarität spielen, bis es geht.
Sind ja nur vier möglichkeiten...
sepp schrieb:> Die Figure-5 des Datenblatts enthält ein ausführliches SPI Timing> Diagramm, das hilft dir vielleicht mehr als die prosa Beschreibung.
Figure-5 habe ich natürlich davor schon angeschaut. Das im Diagramm
gezeigte Verhalten stimmt aber auch genau mit Prosa-Beschreibung
überein. Man sieht eindeutig, dass SDO-Daten bei fall. Flanke geändert
werden und SDI-Daten ebenfalls bei fall. Flanke gelesen werden.
sepp schrieb:> Anstatt Wikipedia würde ich dir auch empfehlen in das Datasheet deines> SPI Masters zu schauen.
Da bestehen auch keine Unterschiede, SPI ist immer das gleiche
(abgesehen davon, dass manche Controller die Parameter (CPOL, CPHA)
invertiert interpretieren.
Servus,
noips schrieb:> Scheint wohl niemand hier damit Erfahrungen gemacht zu haben. Ich> dachte, der Wandler wäre verbreitet.
mach dir keine Gedanken über das Protokoll, das stimmt 100 prozentig!
Ich verwende mehrere AD-Wandlern(zuletzt den LTC2418 24 Bit, DAC
LTC1655) und da macht das SPI Protokoll auch kein Problem.
Der von dir geschilderte Text aus dem Datenblatt ist wo möglich falsch
interpretiert.
Die Initialisierung könnte da schon ein größeres Problem darstellen.
Die sind von Firma zu Firma unterschiedlich!
und... ich lese nichts von diversen Messungen oder Pegel an bestimmten
Pin's
Stimmt die Hardware? PORT-Init? usw.
Gruß XMEGA
Was sagt ihr denn zu diesem Scope-Bild. Das ist ein Screen-Shot der
Signale von dem ADS8327.
gelb - CS
grün - SCKL
rot - SDI
blau - SDO
Sind die Signale SPI-kompatibel? Und wenn ja, welche Werte für Parameter
CPHA und CPOL sind hier gültig?
Sieht aber allgemein sehr "unsauber" aus.. Welche Auflösung hast du denn
an deinem Scope eingestellt? Sollte das eine 5V Auflösung sein, dann
dringend Pullups an die Leitung.
Rubelus meint, weil HIGH nicht bis zur Rasterlinie geht. Möglicherweise
ist die Versorgung aber auch 3,3V, dann ist der Hinweis von Rubelus
sowieso hinfällig. Die Flanken schauen jedenfalls schnell genug aus.
Zur Frage: Nachdem CLK im Idle-Zustand LO ist, ist CPOL = 0. SDI (rot)
ist der Eingang des ADC, SDO ist der Ausgang des ADC. Die Daten müssen
mit der fallenden Flanke von CLK übernommen werden, also CPHA = 1. Das
ist dann Modus 1, was meiner Ansicht nach sehr häufig vorkommt.
Nachdem der SPI-Master (Controller) die SDO-Daten gleichzeitig mit der
fallenden CLK-Flanke (oder sogar kurz vorher) liest und der ADC die
SDO-Leitung frühestens nach der fallenden CLK-Flanke ändert, wird es
da keine Verständnisprobleme geben. Diese Feinheiten sieht man im
Oszillogramm natürlich nicht.
> Rubelus meint, weil HIGH nicht bis zur Rasterlinie geht. Möglicherweise> ist die Versorgung aber auch 3,3V, dann ist der Hinweis von Rubelus> sowieso hinfällig. Die Flanken schauen jedenfalls schnell genug aus.
Scope-Auflösung ist 5V/div
Versorgungsspannung ist aber 3,3V
> Nachdem der SPI-Master (Controller) die SDO-Daten gleichzeitig mit der> fallenden CLK-Flanke (oder sogar kurz vorher) liest und der ADC die> SDO-Leitung frühestens nach der fallenden CLK-Flanke ändert, wird es> da keine Verständnisprobleme geben. Diese Feinheiten sieht man im> Oszillogramm natürlich nicht.
OK, das ist einleuchtend, besten Dank! Mich irritierte, dass der Wandler
die Daten bei fall. Flanke liest und ebenso bei fall. Flanke
aktualiesiert. Bei Standard-SPI ist es ja so, dass wenn der Slave die
Daten bei fallender Flanke liest, so soll er bei steigender Flanke
aktualisieren, weil der Master ja auch bei fallender Flanke liest.
Vielen Dank allen für die Antworten!!
> Nachdem der SPI-Master (Controller) die SDO-Daten gleichzeitig mit der> fallenden CLK-Flanke (oder sogar kurz vorher) liest
Allerdings braucht der Controller ja eine Haltezeit (hold time),
innerhalb welcher die Daten nach der Taktflanke gehalten werden müssen,
damit der Controller sie noch einlesen kann. Wenn der ADC die Daten nach
der Flanke schneller ändert als diese Haltezeit des Controllers, dann
kann es sehr wohl Verständnisprobleme geben.
Du hast recht, im Datenblatt des ATmega84/88/168 (Atmel), den ich mal
als Beispiel herausgezogen habe, steht als Hold Time für die
Hardware-SPI 10 ns (typ) drin. Der PIC16F88 (Microchip) ist da mit 100
ns sogar noch schlechter. Dagegen kann der ADS8327 seine Ausgangsdaten
in 8 ns (min) ändern. Das kann tatsächlich knapp werden.
Ich bin also mit Dir der Ansicht, dass der ADS8327 (und der AD7949, den
ich selber einsetze, und möglicherweise auch noch andere Bausteine von
Analog Devices) nicht so arbeiten, wie es bei SPI üblich ist, d. h.
bei der einen Flanke die Daten einstellen, bei der anderen Flanke lesen.
Mit Software-SPI wäre man dabei fein raus, weil man dann wirklich vor
der Clock-Flanke lesen kann, aber schließlich will man ja die Hardware
nutzen, wenn sie schon da ist.
Edi R. schrieb:> Ich bin also mit Dir der Ansicht, dass der ADS8327 (und der AD7949, den> ich selber einsetze, und möglicherweise auch noch andere Bausteine von> Analog Devices) nicht so arbeiten, wie es bei SPI üblich ist, d. h.> bei der einen Flanke die Daten einstellen, bei der anderen Flanke lesen.
Danke schön! Endlich versteht jemand was ich meine und teilt meine
Ansicht! Davor haben ja alle "geschrieen", keine Sorge, der Baustein sei
100% kompatibel, ich soll es nur richtig machen.
noips schrieb:>> Ich bin also mit Dir der Ansicht, dass der ADS8327 (und der AD7949, den>> ich selber einsetze, und möglicherweise auch noch andere Bausteine von>> Analog Devices) nicht so arbeiten, wie es bei SPI üblich ist, d. h.>> bei der einen Flanke die Daten einstellen, bei der anderen Flanke lesen.
Genau das aber steht doch da:
noips schrieb:> Output data are changed at the falling edge of SCLK so> that the host processor can read it at the next rising edge. Serial data> input is latched at the falling edge of> SCLK.
Gelesen wird mit der fallenden Flanke, und die Daten werden so
ausgegeben, daß die Gegenseite sie mit der (folgenden) steigenden Flanke
übernehmen kann.
Das hier
> bei der einen Flanke die Daten einstellen, bei der anderen Flanke lesen
gilt gleichzeitig für Master und Slave, d. h. wenn der Master bei
steigend liest und bei fallend einstellt, so tut dies der Slave genauso.
Deswegen stimmt das mit dem hier
> Gelesen wird mit der fallenden Flanke, und die Daten werden so> ausgegeben, daß die Gegenseite sie mit der (folgenden) steigenden Flanke> übernehmen kann.
nicht überein. Denn wenn bei fallend gelesen wird, so müssen die Daten
so ausgegeben werden, dass die Gegenseit sie ebenfalls bei fallend
übernehmen kann.