Forum: Mikrocontroller und Digitale Elektronik SPI Signal des RPI scheint falsch zu sein


von Mathias D. (zugfunk)



Lesenswert?

Schönen guten Abend,

derzeit versuche ich die Kommunikation zwischen einem Raspberry PI 3 
Model B und einem MCP3008 I/SL ADC zu ermöglichen. Das Programm hab ich 
aus dem Buch PI Buch von Kofler abgeschrieben und ausprobiert, 
allerdings musste ich feststellen, dass der AD-Wandler keine Werte 
zurückgibt. Nach Messungen mit einem Oszilloskop konnte ich feststellen, 
dass sich das D0-Bit für die Konfiguration des AD-Wandlers auf der 
falschen Stelle befindet. Könnte mir bitte jemand einen Ausweg erklären?

Das Programm lautet wie folgt:
1
#!/usr/bin/python3
2
import spidev
3
import time
4
5
spi = spidev.SpiDev()
6
spi.open(0,0)
7
spi.max_speed_hz = 500000
8
9
while True:
10
    antwort = spi.xfer([1, 129, 0])
11
    if 0 <= antwort[1] * 256 <= 3:
12
        wert = ((antwort[1] * 256) + antwort[2]) * 0.00322
13
        print(wert, "V")
14
        time.sleep(1)

MfG Mathias

von Stefan F. (Gast)


Lesenswert?

Das Signal sieht auf deinem Oszilloskop grausam schlecht aus. Kannst du 
das nochmal mit ordentlicher Masse-Verbindung und Tastkopf messen, so 
dass man darauf ordentlich was erkennen kann?

Für diese Art von Signal eignet sich ein Logic Analyzer wesentlich 
besser. Nimm zum Beispiel diesen: 
https://www.amazon.de/AZDelivery-%E2%AD%90%E2%AD%90%E2%AD%90%E2%AD%90%E2%AD%90-Logic-Analyzer-gratis/dp/B01MUFRHQ2/ref=sr_1_13

Dann bekommst du solche Schicken Ausgaben: 
https://sigrok.org/blog/sites/default/files/20131010-logicport-bitbang.png

von void (Gast)


Lesenswert?

Mathias D. schrieb:
> Nach Messungen mit einem Oszilloskop konnte ich feststellen,
> dass sich das D0-Bit für die Konfiguration des AD-Wandlers auf der
> falschen Stelle befindet.

Mathias D. schrieb:
> antwort = spi.xfer([1, 129, 0])

Na du hast das "D0-Bit" auch an der falschen Stelle gesetzt.
Der zweite Wert für das zweite Byte lautet 129.
129 = 128 | 1
-> 128 = SGL/DIFF (Bit 9) auf '1' gesetzt
-> 1   = keine Funktion/Don't Care (Bit 16) auf '1' gesetzt.
Die Adress-Bits liegen aber auf
-> 64 = D2 (Bit 10)
-> 32 = D1 (Bit 11)
-> 16 = D0 (Bit 12)

Wenn du Adresse D0 setzten und Single Ended Messen möchtest,
hättest du also:
128 | 16 = 144
antwort = spi.xfer([1, 144, 0])
schreiben müssen.

von Forist (Gast)


Lesenswert?

Stefan F. schrieb:
> Das Signal sieht auf deinem Oszilloskop grausam schlecht aus.

Evtl. hilft schon ein kleiner Serienwiderstand gegen das Klingeln von 
SCL.

Mathias D. schrieb:
> IMG_20191122_190134.jpg

Wenn man das Bild um 90° dreht, wird das Signal zwar nicht schöner, aber 
man verrenkt sich beim Betrachten wenigstens nicht den Hals. ;-)

Tip: Die Verzerrungen entstehen, wenn man die Kamera nicht mittig über 
das Papier hält.

von Stefan F. (Gast)


Lesenswert?

Forist schrieb:
> Evtl. hilft schon ein kleiner Serienwiderstand gegen das Klingeln von
> SCL.

Ja. Oder es ist schlicht ein Messfehler (Oszilloskop falsch 
angeschlossen). Dem sollte man auf jeden Fall nachgehen. Es soll ja am 
Ende zuverlässig funktionieren, nehme ich an.

von void (Gast)


Lesenswert?

Forist schrieb:
> Wenn man das Bild um 90° dreht

Wo bin ich eigentlich hier gelandet? In letzter Zeit kommt mir das Forum 
öfters wie die Bildkritik Sektion von Fotocommunity vor.

Stefan F. schrieb:
> Oder es ist schlicht ein Messfehler

Wenn ein Bit 6 Stellen zu weit rechts steht ist das eher kein kein 
Messfehler des Oszis...

von Stefan F. (Gast)


Lesenswert?

void schrieb:
>> Oder es ist schlicht ein Messfehler
>
> Wenn ein Bit 6 Stellen zu weit rechts steht ist das eher kein kein
> Messfehler des Oszis...

Es geht mir bei der Aussage um die Amplitude, nicht die Zeit.

von N.N. (Gast)


Lesenswert?

Stefan F. schrieb:
> Es geht mir bei der Aussage um die Amplitude, nicht die Zeit.

Das ear nicht die Frage.

von Stefan F. (Gast)


Lesenswert?

N.N. schrieb:
> Das ear nicht die Frage.

Ja, ist mir klar.

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
Noch kein Account? Hier anmelden.