Forum: Mikrocontroller und Digitale Elektronik PCA 8574 und Interuptleitung


von Stefanie (Gast)


Lesenswert?

Hallo,
ich habe an den PCA8574 I2C-Expander Taster angeschlossen und möchte
mir nun über die Interrupt (an PE6) abfragen, wann ein Taster gedrückt
ist.
Nun wollte ich folgendes Programm testen:

...
/* Auslesen des PCA8574 */

    DDRE  &= ~(1<<DDE6);  /* Pin PE6 als Eingang */
    PORTE |= (1<<PE6);    /* internen Pull-Up an PE6 aktivieren */


    if ((PORTE & (1 << 6)))
  {
...
  }


komischerweise wird bei mir die Schleife immer ausgelesen, egal ob ich
eine Taste drücke, oder nicht.

Was mach ich falsch??

von Daniel M. (sierra)


Lesenswert?

Ich glaub mich zu erinnern, dass der Interrupt-Pin dauerhaft High führt,
bis sich was an den IO-Pins ändert und der PCF ausgelesen wurde, denn da
 führt der Low. Kann aber auch sein dass ich mich irre. Schua lieber
nochma im Datenbaltt nach.

von Stefanie (Gast)


Lesenswert?

Hab das Timing im Datenblatt nicht so ganz verstanden, fand es irgendwie
unlogisch.

von Daniel M. (sierra)


Lesenswert?

Jo passt was ich geschrieben hatte. Der Int-Ausgang ist erst dann low,
wenn sich der Zustand an den IOs ändert und geht wieder auf High
zurück, wenn der Chip ausgelesen wurde. Bei deinem Programm müsstest du
entweder  den low-Zustand abfragen oder das Signal invertieren.

von Stefanie (Gast)


Lesenswert?

Habe es invertiert

...
   if (!(PORTE & (1 << 6)))
...

Nun wird die Schleife gar nicht mehr abgefragt, egal ob ich einen
Taster drücke oder nicht

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.