Forum: Mikrocontroller und Digitale Elektronik probleme mit mcp23s17


von Matthias K. (mensch0815)


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?

von Alex E. (alex_e)


Lesenswert?

kann zu deinem Problem leider nichts sagen, bei mir läuft der MCP noch 
nicht.
Wäre aber dankbar, wenn du deine Ansteuerungsroutinen bereitstellen 
könntest, bin schon fast am verzweifeln...

Edit: ich weiß schon 4 Jahre her;-)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.