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??
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.
Hab das Timing im Datenblatt nicht so ganz verstanden, fand es irgendwie unlogisch.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.