probleme mit mcp23s17

OP #951961
Lesenswert?

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?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren