Hallo zusammen,
ich versuche mit meinem Raspby 3B ein Evaluation Board über die SPI Schnittstelle zu steuern. Die Bits möchte ich selbst einlesen. Ich habe das mit folgendem Beispiel versucht und möchte dieses Programm etwas abändern auf mein Board:
https://gist.github.com/m0xpd/4578261
ich habe dies folgendermaßen abgeändert:
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setwarnings(False)
# Define GPIO pins, s. S.9 Data Sheet
SCLK = 23 # M6
SDO = 21 # M4
SDIO = 29 # M5
CSB = 24 # M3
GPIO.setup(SCLK, GPIO.OUT) # Serial Clock Input
GPIO.setup(SDO, GPIO.IN) # Serial Data Output
GPIO.setup(SDIO, GPIO.OUT) # Serial Data Input and Output
GPIO.setup(CSB, GPIO.OUT) # Chip Select Input
GPIO.output(SCLK, False) # initialize everything to zero...
GPIO.output(SDIO, False)
GPIO.output(CSB, False)
GPIO.input(SDO, False)
pulseHigh(CSB) # start-up sequence to see measurements (except DATA or SDIO)
pulseHigh(SCLK)
pulseHigh(SDO)
def pulseHigh(pin): # Function to send a pulse
GPIO.output(pin, True) # do it a few times to increase pulse width
GPIO.output(pin, True)
GPIO.output(pin, True)
GPIO.output(pin, False) # end of the pulse
return
# Funktion zur Übermittlung der Anweisungen
def tfr_byte(data): # Function to send a byte by serial "bit-banging"
GPIO.output(CSB,false) # Pull the CSB low to enable the SPI port
for i in range (0,24): # clock in the 16 preceding address bits
GPIO.output(SDIO, data & 0x80) # Mask out MSB and put on GPIO pin "SDIO"
pulseHigh(SCLK) # pulse the clock line
data=data<<1 # Rotate left to get next bit
GPIO.output(CSB,true) # Pull the CSB high to disable the SPI port, CSB goes high, serial data is loaded into the register
return
Anbei habe ich das Datenblatt von den Signalen, die ich erreichen möchte.
Meine Frage nun: Wie würdet ihr CSB einbauen? und generell Read and Write? Ich weiß nicht genau, wie ich zb Anweisungen wie 0x180064 übermitteln soll....
Dies ist das Datenblatt: https://www.analog.com/media/e…/data-sh ... AR1000.pdf
Raspberry Pi 3B über SPI Schnittstelle
Bitte in Zukunft Code-Tags verwenden. Dazu im vollstaendigen Editor den </> druecken, nachdem man den Code markiert hat.
Und welchen Sinn soll das haben, SPI selbst zu machen? Der PI hat dafuer eine Schnittstelle, und damit kanns du dann auch deine Anweisung zB als Byte-Sequenz uebermitteln. Das ist schneller, stabiler, bequemer. Warum machst du dir das Leben schwer?
Und welchen Sinn soll das haben, SPI selbst zu machen? Der PI hat dafuer eine Schnittstelle, und damit kanns du dann auch deine Anweisung zB als Byte-Sequenz uebermitteln. Das ist schneller, stabiler, bequemer. Warum machst du dir das Leben schwer?
das tut mir Leid, nächstes Mal werde ich die Einrückungen nutzen.
https://www.analog.com/media/en/technic ... AR1000.pdf
Ich habe den Link nochmal eingefügt und hoffe, dass dies funktioniert.
Ich denke, wenn es es selbst übermittle, dann ist der Lerneffekt deutlich höher...Hättest du einen Tipp? Ich denke mein Ansatz ist nicht ganz falsch...
https://www.analog.com/media/en/technic ... AR1000.pdf
Ich habe den Link nochmal eingefügt und hoffe, dass dies funktioniert.
Ich denke, wenn es es selbst übermittle, dann ist der Lerneffekt deutlich höher...Hättest du einen Tipp? Ich denke mein Ansatz ist nicht ganz falsch...
- __blackjack__
- User
- Beiträge: 13937
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@Raspyy123: Naja, wenn der Lerneffekt höher sein soll, dann musst Du es halt auch selbst implementieren. Problem ist: Wenn Du dann auf ein Problem stösst, musst Du jemanden finden der das schon mal selbst implementiert hat, oder sich damit auseinandersetzen möchte.
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
— Scott Bellware
Ich wuerde es wirklich, wirklich nicht so machen. Es dauert laenger, produziert schlechteren und langsameren Code, und im allerschlimmsten Fall (ungewoehnlich bei SPI, aber nicht unmoeglich) funktioniert der Chip nicht. Weil timing constraints nicht eingehalten werden.
Wenn du drauf bestehst, dann sind Bitoperationen wie & und << deine Freunde. Damit musst du die Bits der Bytes anschauen, und nach Bedarf toggeln.
Wenn du drauf bestehst, dann sind Bitoperationen wie & und << deine Freunde. Damit musst du die Bits der Bytes anschauen, und nach Bedarf toggeln.
hm okay, wenn man es nicht bitweise machen würde, dann würde man sich das mit spidev machen...wie würdest du dort aber zb eine Adresse 0x180064 mit ihrem Content 64 übermitteln?
Das hat ja nun mit der Frage nach Bit-Weise oder nicht nix zu tun. Da geht es darum, dass du das Datenblatt nicht verstehst. Ich habe angefangen mir das anzuschauen, aber das ist nicht trivial. Die Addressierung ist etwas verzwickt, weil da wohl auch noch daisy-chaining von mehreren Chips dazu kommt (so interpretiere ich das zumindest). Eine Adresse 0x180064 gibt's aber ganz bestimmt nicht.
So wie ich das sehe sind das ueblicherweise 3 Bytes, in big endian order, mit MSB first. Mehr Zeit habe ich im Moment nicht. Ich wuerde mal schauen, ob du aus dem Datenblatt Anwendungsbeispiel schlauer wirst.
So wie ich das sehe sind das ueblicherweise 3 Bytes, in big endian order, mit MSB first. Mehr Zeit habe ich im Moment nicht. Ich wuerde mal schauen, ob du aus dem Datenblatt Anwendungsbeispiel schlauer wirst.
Wie ich sehe laesst du dir ja hier helfen: https://forum-raspberrypi.de/forum/thre ... post388981
Dann viel Erfolg beim Bitschubsen.
Dann viel Erfolg beim Bitschubsen.