Hallo
Für ein neues Projekt versuche ich bei einem MCP23017 auf einem Port 2xTaster und 4xLED gleichzeitig zu betreiben. Wenn ich jeden taster einzeln betreibe gibt es keine Probleme. Wenn ich beide Taster nutzen will leuchten alle Taster und werden bei Betätigung nur etwas dunkler.
CodeBox C
Noch die Abfrage für die beiden Taster. Wenn ich einen Taster auskommentiere funktioniert der andere korrekt.
CodeBox C
Hat jemand eine Idee dazu?
achim
Für ein neues Projekt versuche ich bei einem MCP23017 auf einem Port 2xTaster und 4xLED gleichzeitig zu betreiben. Wenn ich jeden taster einzeln betreibe gibt es keine Probleme. Wenn ich beide Taster nutzen will leuchten alle Taster und werden bei Betätigung nur etwas dunkler.
CodeBox C
// setzt Port B alle R mit GPPUB als Eingang i2c_start(MCP23017_ADDR); // Angabe Adresse i2c_write(MCP23017_GPPUB); // aktivierung der internen Pullups Widerstände i2c_write(0b00001100); // schalte alle Eingänge auf 5V i2c_stop(); // Alle Eingänge Port B invertieren i2c_start(MCP23017_ADDR); // Angabe Adresse i2c_write(MCP23017_IPOLB); // Taster schalten Masse (active-low) i2c_write(0x00); // alle Eingänge invertieren i2c_stop();
Noch die Abfrage für die beiden Taster. Wenn ich einen Taster auskommentiere funktioniert der andere korrekt.
CodeBox C
// Abfrage der Eingänge am MCP i2c_start(MCP23017_ADDR); // Angabe Adresse i2c_write(MCP23017_GPIOB); i2c_stop(); i2c_start(MCP23017_ADDR+1 ); // Auslesen Adresse + 1 Data = i2c_readNak(); // liest Eingänge ein i2c_stop(); // Abfrage Taster if (!(Data & 0b00000100)) // Abfrage DATA, welcher Taster 0c beide, T1-4, T2-8 0x04 { // Angabe Taster mit 0x05 i2c_start(MCP23017_ADDR); // Angabe Adresse //i2c_write(MCP23017_OLATA); // Schalte Ausgang A i2c_write(MCP23017_OLATB); // Schalte Ausgang B i2c_write(0x30); // Auswahl der LED i2c_stop(); } else { i2c_start(MCP23017_ADDR); // Angabe Adresse //i2c_write(MCP23017_OLATA); // Schalte Ausgang A i2c_write(MCP23017_OLATB); // Schalte Ausgang B i2c_write(0x03); // Auswahl der LED i2c_stop(); } if (!(Data & 0b00001000)) // Abfrage DATA, welcher Taster 0c beide, T1-4, T2-8 0x0 { // Angabe Taster mit 0x05 i2c_start(MCP23017_ADDR); // Angabe Adresse //i2c_write(MCP23017_OLATA); // Schalte Ausgang A i2c_write(MCP23017_OLATB); // Schalte Ausgang B i2c_write(0xc0); // Auswahl der LED i2c_stop(); } else { i2c_start(MCP23017_ADDR); // Angabe Adresse //i2c_write(MCP23017_OLATA); // Schalte Ausgang A i2c_write(MCP23017_OLATB); // Schalte Ausgang B i2c_write(0x0c); // Auswahl der LED i2c_stop(); }
Hat jemand eine Idee dazu?
achim