SPI-ADC gibt mir nur CH0 aus

Gast #5613899
Lesenswert?

Mahlzeit,

hänge mal wieder an meinem geliebten ADC ( ADS7961SDBT  von TI ) fest.
Programmiere mit Python aufm dem PI. Der sch... ADC gibt mir aber immer 
nur CH0 aus. Habe auf jedem Channel zu Testzwecken etwas angeschlossen. 
Aber wie gesagt nur CH0 wird (wenigstens korrekt) ausgegeben.
Wo ist mein Fehler in der Programmierung?
Jaja ich weiß das Problem sitzt immer davor :)
Hier der wichtige Schnipsel ausm Programm

spi.xfer2([0x8])
spi.xfer2([0x00, 0x00, 0x00, 0x2]) #Zum testen für CH1

Randinfo: spi.xfer2 hält während dem Byte-Senden den CS-Pin dauerhaft 
auf low. spi.xfer ohne 2 würde nach jedem Byte CS wieder auf high 
ziehen.

Sieht jemand meinen Fehler?

Im Anhang der Mode, der programmiert werden soll.

Vielen Dank im Voraus!
Angehängte Dateien:
Gast #5614213
Lesenswert?

Scope hab ich leider erst in nem Monat wieder zur Verfügung.

Den ersten Frame mit Dummies zu füllen hab ich schon getestet. Also:
spi.xfer2([0x8, 0x00, 0x00, 0x00]) //Erster Frame

Leider auch nur CH0.
Ich schau mal, dass ich von irgendwo nen Scope abgreifen kann.
Gast #5617557
Lesenswert?

M. K. schrieb:
> Chris schrieb:
> spi.xfer2([0x8])
> spi.xfer2([0x00, 0x00, 0x00, 0x2]) #Zum testen für CH1
>
> Wenn ich das recht sehe, in deinem angehangenen Bild, erwartet das
> Device immer 16 bit. Mit dem ersten spi.xfer2 schickst du aber nur 8
> bit. Kann das eventuell der Fehler sein?

Chris schrieb:
> Den ersten Frame mit Dummies zu füllen hab ich schon getestet. Also:
> spi.xfer2([0x8, 0x00, 0x00, 0x00]) //Erster Frame

Das sind dann aber 32 Bit?

Gleiches bei der kanalwahl. Wundert mich eigentlich,  das ch0 nicht 
abgeschaltet ist, danach?
Gast #5618269
Lesenswert?

Lt. Datenblatt springt der ADC nach dem Start in den manuellen Modus und 
hat als Default immer CH0 gewählt. Da sich wirklich gar nichts ändert, 
wird irgendwas mit der Kommunikation falsch sein.
Werde mir einen Analyzer kaufen und dann mal von den Ergebnissen 
berichten.
Alles andere ist, wie schon gesagt, nur in der Luft herumgestochert.
Trotzdem danke für die Tipps!
Gast #5618527
Lesenswert?

Achso und selbstverständlich ist es 16Bit. Meine Konfiguration von oben 
gehört in die Rubrik "Hand an die Stirn klatschen".
Leider hat die neue Konfiguration auch nichts gebracht.
Habs auch mal in Bitschreibweise abgeändert. Jetzt ist es noch 
deutlicher.

spi = spidev.SPIDev()
spi.open(0,1)
spi.max_speed_hz = 500000
spi.mode = 0
spi.xfer2([0b10000000, 0b00000000])
while True:
 Antwort = spi.xfer2([0b00000000, 0b00000010]) #Testen für CH1
 print (Antwort)
 time.sleep(1)

Habe jegliche Varianten mit in der Schleife und außerhalb der Schleife 
schon probiert.. Bleibt weiterhin bei CH0.
Naja wie gesagt.. Abwarten..
#5621204
Lesenswert?

So der Analyzer kam an. Hab ihn angeschlossen und bekomme die im Anhang 
angefügten Ausgaben.
Zwischen beiden Frames ging der CS wieder auf High. Ist auf den 
Screenshots nicht zu erkennen.
Für mich ist jetz die Frage: Wieso spuckt der ADC während der 
Modus-Konfiguration schon was aus? und Wieso spuckt er seinen Wert von 
CH0 ebenfalls bevor CH0 überhaupt gewählt wurde aus?

Bin noch ziemlich neu mit SPI unterwegs, falls ich hier nen Vogel 
abgeschossen habe, bitte nicht gleich mit Steinen auf mich werfen :-)
Angehängte Dateien:
#5622430
Lesenswert?

Er läuft! Das Problem saß wie immer davor.
Man sollte das Datenblatt gründlich lesen, dann wird man auch 
feststellen, dass der ADC bevor er im AUTO-Mode die Channels auslesen 
soll, überhaupt mal gesagt bekommen will, dass er im AUTO-Mode laufen 
soll. Klassischer Fall von Hand an die Stirn schlagen.

Falls jemand mal ähnliche Probleme damit haben sollte, hier der 
funktionierende Code:

Auto-1: Scant in jedem Schleifendurchlauf einen Channel aufsteigend ab

spi.xfer2([0b10000000, 0b00000000)]
spi.xfer2([0b11111111, 0b11111111)] #alle
#spi.xfer2([0b00000000, 0b00000001)] #nur CH0
#spi.xfer2([0b00000000, 0b00000010)] #nur Ch1

while True:

antwort = spi.xfer2([0b00101000, 0b00000000)]
print (antwort)


Damit gibt er den Bitwert der analogen Spannung des gewählten CH's aus.
Nun noch in Volt umrechnen und Voilá, wie geplant funzt alles.
Fazit: Erst lesen dann coden
Fazit2: Wer lange dran bleibt und sich damit auseinander setzt kommt 
immer zum Ziel

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren