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.
Soweit ich es verstehe verhält sich SPI bei keiner der 4 möglichen Kombinationen von CPHA und CPOL so wie der oben beschriebene Wandler.
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.
Scheint wohl niemand hier damit Erfahrungen gemacht zu haben. Ich dachte, der Wandler wäre verbreitet.
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.
> Sollte das eine 5V Auflösung sein, dann > dringend Pullups an die Leitung. Warum das?
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.
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.