Ich versuche erstmalig SPI zu verwenden. Leider tut sich bei mir absolut gar nichts, so dass ich einfach nicht sagen kann, ob die Schaltung/Platine fehlerhaft ist, oder ob ich schon bei der Software Fehler mache.
Ich habe jetzt einfach mal zu Beginn das Script von Erik Bartmann verwendet und angepasst:
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
# MCP23S17 Werte
SPI_SLAVE_ADDR = 0x40
SPI_IOCTRL = 0x0A
SPI_IODIRA = 0x00
SPI_IODIRB = 0x01
SPI_GPIOA = 0x12
SPI_GPIOB = 0x13
# MCP23S17-Pins
SCLK = 11 # Serial-Clock
MOSI = 9 # Master-Out-Slave-In
MISO = 10 # Master-In-Slave-Out
CS = 27 # Chip-Select
def sendValue(value):
# Value senden
for i in range(8):
if (value & 0x80):
GPIO.output(MOSI, GPIO.HIGH)
else:
GPIO.output(MOSI, GPIO.LOW)
# Negative Flanke des Clocksignals generieren
GPIO.output(SCLK, GPIO.HIGH)
GPIO.output(SCLK, GPIO.LOW)
value <<= 1 # Bitfolge eine Position nach links schieben
def sendSPI(opcode, addr, data):
# CS aktive (LOW-Aktiv)
GPIO.output(CS, GPIO.LOW)
sendValue(opcode) # OP-Code senden
sendValue(addr) # Adresse senden
sendValue(data) # Daten senden
# CS nicht aktiv
GPIO.output(CS, GPIO.HIGH)
def main():
# Pin-Programmierung
GPIO.setup(SCLK, GPIO.OUT)
GPIO.setup(MOSI, GPIO.OUT)
GPIO.setup(MISO, GPIO.IN)
GPIO.setup(CS, GPIO.OUT)
# Pegel vorbereiten
GPIO.output(CS, GPIO.HIGH)
GPIO.output(SCLK, GPIO.LOW)
# Initialisierung de MCP23S17
sendSPI(SPI_SLAVE_ADDR, SPI_IODIRB, 0x00) # GPPIOB als Ausgaenge programmieren
sendSPI(SPI_SLAVE_ADDR, SPI_GPIOB, 0x10) # Pin 5 soll eingeschaltet werden
if __name__ == '__main__':
main()
Alles anzeigen
Wenn ich dieses Script starte, passiert gar nichts.
Ist der letzte sendSPI-Befehl denn korrekt? Ich möchte hier einfach den Pin5 (GPB4) einschalten und von hier über einen ULN2803 ein 5V-Relais schalten.
Wie kann ich denn schon vorweg "testen", ob alle notwendigen Module geladen sind usw..? Vielleicht liegt das Problem ja ganz woanders.
Bei I2C-Schnittstellen kann ich ja mit i2cdetect anzeigen lassen, welche ICs angesprochen werden können. Gibt es vergleichbares bei SPI?