Hallo,
ich lese 8 DIP Schalter mittels MCP23008 ein. Durch ein Versehen sind die Schalter nun "verkehrt" herum, d.h. oben ist Null (Schalter geschlossen) und unten Eins (offen). Ich könnte den Schalterblock auslöten und umdrehen, aber geht das auch softwaremäßig?
byte readSwitchPort() {
byte val;
Wire.beginTransmission(0x24); // address of input port
Wire.write(0x09);
Wire.endTransmission();
Wire.requestFrom(0x24,1);
while (Wire.available()) {
val = Wire.read();
}
return val;
}
Der MCP23008 hat als Beschreibung: " Polarity Inversion register to configure the polarity of the input port data"
Im IPOL Register (Adresse 01) kannst Du für jeden Eingang definieren ob ein HIGH am Eingang als HIGH (bzw ein LOW als LOW) gesehen wird, oder invertiert wird:
The IPOL register allows the user to configure the polarity on the corresponding GPIO port bits. If a bit is set, the corresponding GPIO register bit will reflect the inverted value on the pin.
[/quote] Quelle: https://ww1.microchip.com/downloads/en/DeviceDoc/21919e.pdf
Es hat zumindest den Vorteil, daß Du es einmal (im setup()) einstellst und nicht jeden gelesenen Wert in Software umdrehen musst.
Sind zwar nur ein paar Zyklen, aber Kleinvieh macht auch Mist.
wenn ich es so schreibe, funktioniert es nicht richtig:
/* initialize input port (SWITCHES) */
Wire.beginTransmission(0x24); // address of input port
Wire.write(0x00); // IODIR
Wire.write(0xff); // set as inputs
Wire.write(0x01); // IPOL
Wire.write(0x00);
Wire.endTransmission();