Huhu,
ich habe ein kleines Problemchen zwecks dem MCP23017.
da an maneinem Rpi so langsam die Gpios ausgehen, habe ich mir 2 MCP23017 besorgt, einen für 16 eingänge (Adresse: 0x24), einen für 16 ausgänge (Adresse: 0x20)
das setzen der ein bzw ausgänge und das schalten der ausgänge (LED´s an den ausgängen) funktioniert einwandfrei.
nun jedoch zu dem der als eingänge dienen soll.
ich habe bisher nichts wirklich gefunden, wie ich zb per python die daran hängenden sensoren abfragen kann.
wenn ich nun zb einen MCP3208 zum messen von spannungen an den MCP32017 hänge, wie kann ich diesen per script abfragen?
an den pins des Rpi ist das ja kein hexenwerk.
ich hänge mal das script das ich für die Gpios am Pi nutze an, vll kann mir ja jemand erklären und/oder abändern, das dieses mit dem MCP23017 funktioniert.
import time;
import RPi.GPIO as GPIO
x = 10 # wieviele werte die schleife anzeigen soll
GPIO.setmode(GPIO.BCM) # GPIO-Pin Bezeichnungen verwenden
GPIO.setwarnings(False) # Warnungen deaktivieren
def readAnalogData(adcChannel, SCLKPin, MOSIPin, MISOPin, CSPin, delay):
""" Funktionsdefinition """
# Negative Flanke des CS-Signals generieren
GPIO.output(CSPin, GPIO.HIGH)
GPIO.output(CSPin, GPIO.LOW)
GPIO.output(SCLKPin, GPIO.LOW)
sendCMD = adcChannel
sendCMD |= 0b00011000 # Entspricht 0x18 (1: Startbit, 1: Single/ended)
# Senden der Bitkombination (Es finden nur 5 Bits Beruecksichtigung)
for i in range(5):
if(sendCMD & 0x10): # Bit an Position 4 pruefen.
GPIO.output(MOSIPin, GPIO.HIGH)
else:
GPIO.output(MOSIPin, GPIO.LOW)
# Negative Flanke des Clock-Signals generieren
GPIO.output(SCLKPin, GPIO.HIGH)
GPIO.output(SCLKPin, GPIO.LOW)
sendCMD <<= 1 # Bitfolge eine Position nach links schieben
# Empfangen der Daten des AD-Wandlers
adcValue = 0 # Reset des gelesenen Wertes
for i in range(13):
# Negative Flanke des Clock-Signals generieren
GPIO.output(SCLKPin, GPIO.HIGH)
GPIO.output(SCLKPin, GPIO.LOW)
adcValue <<= 1 # Bitfolge 1 Position nach links schieben
if(GPIO.input(MISOPin)):
adcValue |=0x01
time.sleep(delay) # Kurze Pause
return adcValue
def setupGPIO(SCLKPin, MOSIPin, MISOPin, CSPin):
""" GPIO-Pin Setup """
GPIO.setup(SCLKPin, GPIO.OUT)
GPIO.setup(MOSIPin, GPIO.OUT)
GPIO.setup(MISOPin, GPIO.IN)
GPIO.setup(CSPin, GPIO.OUT)
# Variablendefinition
ADCChannel = 2 # AD-Kanal
SCLK = 18 # Serial-Clock
MOSI = 16 # Master-Out-Slave-In
MISO = 20 # Master-In-Slave-Out
CS = 26 # Chip-Select
PAUSE = 0.15# Anzeigepause
THRESHOLD = 3 # Toleranzwert
actual_value = 0 # Speichert aktuellen analogen Messwert
prev_value = 0 # Speichert vorherigen analogen Messwert
setupGPIO(SCLK, MOSI, MISO, CS) # GPIO-Pin Setup
i = 0
a = 0
while i <= x:
i = i + 1
lesewert = readAnalogData(ADCChannel, SCLK, MOSI, MISO, CS, PAUSE)
a = a + lesewert
ds = float(a) / i
if i == x: break
durchschnitt = float(a) / i
print durchschnitt
Alles anzeigen
schonmal vielen dank im vorraus