ich habe nun schon mehrere Tutorials ( leider alle auf Englisch ) versucht zu verstehen, wie man den MCP23017 ohne aufwendige und kompliziert zu nutzende Bibliothek verwenden kann.
Mein eigentlich einfaches Ziel ist es die Ports des Registers A dazu zu verwenden mehrere Gate-Treiber für MOSFET geschaltete Ausgänge als OUTPUT zu verwenden. Sowie über die Ports des Registers B dazu verwenden, den Schaltzustand der Ports A via LED zu visualisieren.
Ich weiß leider nicht, ob mir die Google Übersetzung hierzu alles korrekt übersetzt hat. So wie ich daraus entnehmen konnte, kann man den Schaltzustand der Port-Register ( alle zusammen ) zurrücklesen, und diesen Wert gleich wieder dazu verwenden dieses Schaltmuster ( Bit-Muster ) in den PortB zu schreiben.
Dazu möchte ich eine kleine schlanke Class schreiben, welche nur die notwendigsten Inhalte umfasst.
Alle Ports der Register A und B auf Ausgang. Einen kleinen internen Buffer, welcher die Schaltzustände des Ports A als einfache LIST mit True und False beinhaltet, damit ich den Schaltstatus wieder in das Programm zurück bekomme. Dann drei einfache Ergänzungsfunktionen,.
Einmal zum ON-Schalten, eine zum OFF Schalten einzelner Ports, und eine Funktion, welche als all_off alle Ports wieder auf Low setzt.
Wünschenwert wäre es wenn man die Übertragung mittels Try / Except OSError überwachen könnte, und im Falle einer Fehlfunktion, via eines weiteren GPIOs am PICO eine Reset auslösen könnte. Dazu habe ich den Reset-Pin am MCP23017 über einen Pullup-Widerstand (10 kOhm ) mit der Vcc verbunden.
Code: Alles auswählen
from machine import Pin, I2C
class MCP23017():
def __init__(self, i2c_bus, addr = 0x20, reset = None):
self.i2c = i2c_bus
self.address = addr
if reset != None:
self.reset = Pin(reset, Pin.OUT, value = 1)
self.state = [False] * 8
def setup(self):
pass
def pin_on(self, pin):
pass
def pin_off(self, pin):
pass
def all_off(self):
pass
i2c = I2C(0, sda = Pin(0), scl = Pin(1), freq = 1_200_000)
mcp = MCP23017(i2c, reset = 4)
Ich hoffe mir kann hier einer mit einigen guten Tips und Ratschlägen weiterhelfen.
Danke im Voraus