Hallo,
ich nutze den MCP3208 am Raspberry PI über SPIDEV, ich muss analogen Sensoren Abfrage, speziell einen Drucksensor [Anzeige].
Ich nutze einen Level Shifter. [Anzeige] Im Test habe ich nur Chanel 0 Drucksensor und Chanel 7 Photocelle abgefragt, alles prima.
Im Test alles mit Referenz Spannungen vom PI, ich weiß die Genauigkeit. Im Test sollte es reichen.
Aber jetzt habe ich die anderen 4 Drucksensoren angeschlossen und da ging es los, merkwürdige Werte.
Also habe ich mit einem Testscript versucht den Fehler zu finden.
Hier mein Testscript.
#!/usr/bin/python
from __future__ import division
import spidev # SPI-Dev Library
from time import sleep # sleep importieren
spi = spidev.SpiDev()
spi.open(0,0)
def ReadInput(Sensor):
adc = spi.xfer2([4 + (Sensor >> 2), (Sensor & 3) << 6, 0])
data = ((adc[1] & 15) << 8) + adc[2]
return data
def main():
ch = 0 # ADC-Kanalnummer
delay = 3 # Pausenwert
start = 1
while True:
value0=ReadInput(0)
value1=ReadInput(1)
value2=ReadInput(2)
value3=ReadInput(3)
value4=ReadInput(4)
value5=ReadInput(5)
value6=ReadInput(6)
value7=ReadInput(7)
print ("%4d |D0:%4d/4096 |D1:%4d/4096 |D2:%4d/4096 |D3:%4d/4096 |D4:%4d/4096 |D5:%4d/4096 |D6:%4d/4096 |D7:%4d/4096" % (start,value0,value1,value2,value3,value4,value5,value6,value7))
start+=1
sleep(delay)
if __name__ == '__main__':
main()
Alles anzeigen
Was ist merkwürdig?
Wenn ich benachbarte Kanäle belege also 0 und 1 haben beide die identischen Werte.
Hier die Ausgabe:
pi@raspberrypi:~ $ /usr/script/mcp3208_spidev.py
1 |D0:3875/4096 |D1: 0/4096 |D2: 0/4096 |D3: 6/4096 |D4: 0/4096 |D5: 5/4096 |D6: 0/4096 |D7: 589/4096
2 |D0:4035/4096 |D1: 0/4096 |D2: 2/4096 |D3: 0/4096 |D4: 5/4096 |D5: 0/4096 |D6: 0/4096 |D7: 570/4096
3 |D0:3990/4096 |D1: 0/4096 |D2: 0/4096 |D3: 0/4096 |D4: 0/4096 |D5: 0/4096 |D6: 0/4096 |D7: 529/4096
4 |D0:2086/4096 |D1: 0/4096 |D2: 0/4096 |D3: 21/4096 |D4: 0/4096 |D5: 25/4096 |D6: 0/4096 |D7: 460/4096
5 |D0:2949/4096 |D1: 0/4096 |D2: 0/4096 |D3: 51/4096 |D4: 0/4096 |D5: 44/4096 |D6: 2/4096 |D7: 397/4096
6 |D0:3052/4096 |D1: 0/4096 |D2: 727/4096 |D3: 0/4096 |D4: 0/4096 |D5: 18/4096 |D6: 0/4096 |D7: 470/4096
7 |D0:3668/4096 |D1: 0/4096 |D2:3725/4096 |D3: 0/4096 |D4: 0/4096 |D5: 13/4096 |D6: 0/4096 |D7: 525/4096
8 |D0:3910/4096 |D1: 0/4096 |D2:3908/4096 |D3: 0/4096 |D4: 0/4096 |D5: 5/4096 |D6: 0/4096 |D7: 589/4096
9 |D0:4035/4096 |D1: 0/4096 |D2:4032/4096 |D3: 0/4096 |D4: 5/4096 |D5: 0/4096 |D6: 0/4096 |D7: 570/4096
10 |D0:3932/4096 |D1: 0/4096 |D2:4011/4096 |D3: 0/4096 |D4: 5/4096 |D5: 0/4096 |D6: 0/4096 |D7: 528/4096
11 |D0:3117/4096 |D1: 0/4096 |D2:3734/4096 |D3: 0/4096 |D4: 0/4096 |D5: 8/4096 |D6: 0/4096 |D7: 493/4096
12 |D0:[b]1293/4096 |D1:1293/4096[/b] |D2:3694/4096 |D3: 0/4096 |D4: 0/4096 |D5: 13/4096 |D6: 0/4096 |D7: 519/4096
13 |D0:1293/4096 |D1:1293/4096 |D2:3581/4096 |D3: 0/4096 |D4: 0/4096 |D5: 19/4096 |D6: 0/4096 |D7: 469/4096
14 |D0:1293/4096 |D1:1292/4096 |D2:3709/4096 |D3: 0/4096 |D4: 0/4096 |D5: 14/4096 |D6: 0/4096 |D7: 516/4096
15 |D0:1293/4096 |D1:1293/4096 |D2:3678/4096 |D3: 0/4096 |D4: 0/4096 |D5: 183/4096 |D6: 0/4096 |D7: 594/4096
16 |D0:1293/4096 |D1:1293/4096 |D2:[b]1292/4096 |D3:1292/4096[/b] |D4: 108/4096 |D5: 0/4096 |D6: 0/4096 |D7: 469/4096
17 |D0:1292/4096 |D1:1293/4096 |D2:1292/4096 |D3:1291/4096 |D4: 0/4096 |D5: 5/4096 |D6: 0/4096 |D7: 527/4096
18 |D0:1293/4096 |D1:1292/4096 |D2:1292/4096 |D3:1291/4096 |D4: 0/4096 |D5: 10/4096 |D6: 0/4096 |D7: 535/4096
19 |D0:1293/4096 |D1:1292/4096 |D2:1293/4096 |D3:1293/4096 |D4: 0/4096 |D5: 18/4096 |D6: 0/4096 |D7: 504/4096
20 |D0:1292/4096 |D1:1291/4096 |D2:1293/4096 |D3:1293/4096 |D4: 0/4096 |D5: 18/4096 |D6: 0/4096 |D7: 476/4096
Alles anzeigen
Zeile 1-5 Ch0 = 3,3 V Ch1-6 keine Belegung Ch7=Photocelle
Zeile 6-12 Ch0 = 3,3 V Ch1=keine Belegung Ch2=3,3V Ch3-6 keine Belegung Ch7=Photocelle
Zeile12-16 Ch0 = 3,3 V Ch1=3,3V Ch2=3,3V Ch3-6 keine Belegung Ch7=Photocelle
Zeile16-20 Ch0 = 3,3 V Ch1=3,3V Ch2=3,3V Ch3=3,3V Ch4-6 keine Belegung Ch7=Photocelle
Ich habe gesucht aber nichts gefunden.
Hier gibt es einen Hinweis https://gpiozero.readthedocs.io/en/v1.3.1/api_…-converters-adc
ZitatAlles anzeigen[font="Courier New"]differential[/font]¶
If
True
, the device is operated in pseudo-differential mode. In this mode one channel (specified by the channel attribute) is read relative to the value of a second channel (implied by the chip’s design).
Please refer to the device data-sheet to determine which channel is used as the relative base value (for example, when using an
MCP3008
in differential mode, channel 0 is read relative to channel 1).
Frage, könnte der 3208 defekt sein?
Wo ist der Fehler im Script?
Fehlt eine Parameter?
Im Moment bin ich verwirrt und ratlos.
Danke und schöne Grüße aus Schönow