Hallo,
ich habe 9 Buttons an einen mcp23s17 angehängt, und möchte jetzt
auslesen welcher button gedrückt wurde.
die buttons hängen an porta[0-7] und portb[0] und werden bei drücken auf
low gezogen.
aus diesem Grund würde ich gerne einen Interrupt auslösen wenn ein knopf
gedrückt wurde (also der entsprechende gpio auf null geht), anhand der
intcap-register könnte ich dann sehen welcher knopf es war.
soweit so gut, nur leider funktioniert das ganze mit der defval-funktion
nicht, dabei wird portb[0] im intcapb register immer als null angegeben,
auch wenn ein anderer knopf gedrückt wurde, außerdem werden immer zwei
interrupts ausgelöst, obwohl ja das genau durch den vergleich mit defval
vermieden werden sollte.
hier mal meine konfiguration beim start:
1 |
|
2 | mcp_writeByte(mcp_adr[2], 0x0A, 0x4A); // bank=0, mirror_interrupt, hwadress, intpolarity=1
|
3 | mcp_writeByte(mcp_adr[2], 0x08, 0xFF); // GPA0-GPA7 computed against def val
|
4 | mcp_writeByte(mcp_adr[2], 0x09, 0x01); // GPB0 computed against def val
|
5 | mcp_writeByte(mcp_adr[2], 0x06, 0xFF); // GPA0-GPA7 interrupt default val = 1
|
6 | mcp_writeByte(mcp_adr[2], 0x07, 0x01); // GPB0 interrupt default val = 1
|
7 | mcp_writeByte(mcp_adr[2], 0x04, 0xFF); // GPA0-GPA7 interrupt enabled
|
8 | mcp_writeByte(mcp_adr[2], 0x05, 0x01); // GPB0 interrupt enabled
|
wenn ich hingegen die defval und intcon register auf den por-werten
belasse und stattdessen nach jedem knopfdruck den interrupt 2 mal
abfrage (für low und anschliessendes high nach release des knopfes) geht
alles perfekt.
hat jemand schonmal ein ähnliches problem gehabt?