www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik probleme mit mcp23s17


Autor: Matthias Kurz (mensch0815)
Datum:

Bewertung
0 lesenswert
nicht 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:
  
mcp_writeByte(mcp_adr[2], 0x0A, 0x4A); // bank=0, mirror_interrupt, hwadress, intpolarity=1
mcp_writeByte(mcp_adr[2], 0x08, 0xFF); // GPA0-GPA7 computed against def val
mcp_writeByte(mcp_adr[2], 0x09, 0x01); // GPB0 computed against def val
mcp_writeByte(mcp_adr[2], 0x06, 0xFF); // GPA0-GPA7 interrupt default val = 1
mcp_writeByte(mcp_adr[2], 0x07, 0x01); // GPB0 interrupt default val = 1
mcp_writeByte(mcp_adr[2], 0x04, 0xFF); // GPA0-GPA7 interrupt enabled  
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?

Autor: Alex E. (alex_e)
Datum:

Bewertung
0 lesenswert
nicht 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;-)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.