Zitat von
sterngleiter
Hallo,
ich habe eine Schaltung aufgebaut wo der Raspberry SPI-Master und ein PIC-Controller ein Slave ist. Soweit so gut. Mein Problem liegt dadrin dass ich auf eine anfrage bei Slave mehrere Anworten heben möchte. Beispiel Master sendet 1 Byte und Slave anwortet mit 4 Bytes zurück.
spi.writebytes(0x12)
antwort=spi.readbaytes(0);
print antwort[0]
print antwort[1]
print antwort[2]
print antwort[3]
ich finde ein Anwort nur im antwort[0] aber da ist nur der Letze Wert drin der von Slave gesendet wurde.
Ich bitte um Hilfe
hallo,
ein paar Fragen und Anmerkungen:
1.) die verwendete Programmiersprache gehört eigentlich immer in den Titel oder wenigstens klar erkennbar genannt im ersten Post (TOP). Bei dir also: "PYTHON".
- welche Version aber? 2 oder 3?
2.) Dann ist es immer hilfreich, den kompletten Code zu sehen, nicht nur ein Schnipsel.
3.) Dann gibt es gefühlt 100 verschiedene Raspberry Pis, welchen Pi benutzt du?
4.) Dann gibt es gefühlt 1000 verschiedene Betriebssysteme für Raspberries (z.B. Raspbian Jessie oder Raspbian Stretch oder auch v.a.m.)
- welches benutzt du, in welcher genauen Version?
5.) Dann unterscheiden sich oft bei SPI die Codes, je nachem welches Gerät dran hängt - was hast du dran? --- EDIT: sah gerade: ein PIC, ok! ---
6.) Dann scheint es sich bei deinem Code um einen Tippfehler zu handeln, denn es heißt readbytes und nicht readbaytes.
7.) spi.readbytes könnte ein befehl aus einem Python module namens "py-spidev" sein, aber jedes Modul ist anders - ist dies deines, oder welches sonst?
8.) Die Zahl hinter readbytes ist wschl die Anzahl der zu lesenden Bytes, wie schon Klebwax richtig erwähnt hat. willst du 4 lesen, muss dort auch 4 stehen.
Steht 0 dort, liest du auch nur 0. Siehe: https://github.com/doceme/py-spidev
9.) Außerdem wäre noch wichtig zu wissen, wie dein SPI Port konfiguriert ist und welchen SPI Port du benutzt (der Raspi hat 2 verschiedene) - und ob er überhaupt enabled ist.
Ich bin nun kein Python-Nutzer, aber probiere doch mal testweise diesen Code, falls meine Vermutungen soweit stimmen:
Code:
#!/usr/bin/env python
import spidev
def dmp(A):
s = ""
cnt = 0
for a in A:
s+="%0.2X " % a
cnt=(cnt+1)%6
if cnt == 0:
s+="\n"
print s
spi = spidev.SpiDev()
spi.open(0,0)
b = [0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x40, 0x00, 0x00, 0x00, 0x00, 0x95, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDE, 0xAD, 0xBE, 0xEF, 0xBA, 0xAD, 0xF0, 0x0D]
print "testing read/write bytes"
spi.writebytes(b)
dmp(spi.readbytes(len(b)))
print "testing xfer"
dmp(spi.xfer(b))
print "testing xfer2"
dmp(spi.xfer2(b))
spi.close()
wenn er läuft, ists schon mal gut, dann können wir deinen Code berichtigen - bitte posten!
- ansonsten stimmt möglicherweise was bei deinen Pi Enstellungen nicht - dann guck mal hier in der Diskussion:
https://github.com/doceme/py-spidev/issues/19
PS,
Anm.: ich nutze selber kein SPI für eigene Programme, weil ich SPI für extrem schwierig halte, schon gar nichts für Anfänger.
Lesezeichen