PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : MCP23017 mit Python steuern



opc
29.12.2014, 22:50
Hallo lieber Forenmitglieder und Raspberry Pi Freunde,

ich möchte meinen Raspberry Pi mit dem MCP23017 Chip um ein paar I/O´s erweitern und bekomme keine vernünftige Interruptabfrage hin. Hat sich zufällig schonmal jemand mit der Portabfrage beim MCP beschäftigt mit Python?

Wie kann ich eigentlich nur EINEN definierten Ausgang schalten ohne die anderen zu beeinflussen durch das setzen der Bits?

Vlt. könnte mir das jemand erklären :)

Grüße
opc

Kampi
30.12.2014, 10:10
Hey,

das musst du in zwei Schritten machen. Als erstes musst du den aktuellen Zustand der IOs auslesen und dann in dieses Bitmuster den neuen Zustand des IOs, den du schalten willst, einbauen. Dann musst du das Muster wieder übertragen.

opc
30.12.2014, 10:43
Hey,

das musst du in zwei Schritten machen. Als erstes musst du den aktuellen Zustand der IOs auslesen und dann in dieses Bitmuster den neuen Zustand des IOs, den du schalten willst, einbauen. Dann musst du das Muster wieder übertragen.

Hallo Kampi,

genau das ist mein Vorhaben, mir fehlt es nur leider an der Umsetzung in den Python-Code. Programmierungen mit Python von den internen GPIO´s des Pi war bislang weniger das Problem aber mit dem MCP bekomm ich das einfach nicht hin.

Bis zum Auslesen der IO´s lief es bisjetzt immer... es scheiterte immer an dem Verarbeiten und zurückschreiben des Bitmusters :(

Hier mein Code bis zum Auslesen, den Rest hab ich gelöscht, da keine Funktion.


import smbus
import time


bus = smbus.SMBus(1)
mcp = 0x20 #MCP23017
iodira = 0x00 #Input/Output Bank A festlegen
olata = 0x14 #Werte IO/A schreiben
gpioa = 0x12 #Wert Bank A lesen


bus.write_byte_data(mcp,iodira,0x01) #GPA0 = Eingang, alle anderen Ausgang
bus.write_byte_data(mcp,olata,0x00) #alle Ausgänge auf 0 schalten

read = bus.read_byte_data(mcp,gpioa) #liest die Bits der Bank A

Kampi
23.01.2015, 09:03
Sorry nicht mitbekommen das es hier bereits eine Antwort von dir gab...
Also falls du das Problem noch nicht gelöst hast...
Hast du dir mal den Status der IOs ausgeben lassen und geprüft ob das stimmt? Und lassen sich die IOs dem Bitmuster entsprechend schalten?

PICture
23.01.2015, 09:43
Hallo!

Möglicherweise lassen sich gewünschte Bits per Verknöpfung mit OR setzen and AND löschen, aber ich über Python k.A. habe. ;)