Hi, ich habe ein Problem mit dem Pin Change Interrupt beim Atmega. Ich habe folgendes laut Datenblatt gemacht: // Interrupt PCICR |=(1<<PCIE1); // PCIE1 pin change interrupt auf 8 bis 14 aktiviert PCMSK1|=(1<<PCINT11); // pcint11 aktivieren EICRA |=(1<<ISC10) | (1<<ISC11); // auf steigende Flanke stellen sei(); Der Pin Interrupt soll auf steigende Flanke reagieren, doch er kommt immer auf beiden Flanken. Folgendes habe ich schon probiert: -EICRA garnicht anrühren (default soll ja 0 sein) -EICRA = 0 gesetzt -EICRA = 0xF gesetzt Hilft alles nicht, reagiert wird immer auf steigende und fallende. -überprüft ob programm auch wirklich aktuell (anhand ausgabe am display) Das Signal ist sauber, und prellfrei, es wird eine Variable im Interrupt hochgezählt, und diese erhöht sich reproduzierbar immer genau um 1 bei fallender sowie steigender Flanke, wie kann das sein? Dank Euch, Thorsten
Hi
>Hilft alles nicht, reagiert wird immer auf steigende und fallende.
Das ist die Eigenart von PIN-Change-Interrupts. EICRA gilt nur für INT0,
INT1....
MfG Spess
Hallo spess, wenn ich recht verstehe gilt er also nicht für die Gruppe, sondern die EICRA Einstellungen sind (bei Atmega168) für die Pins INT0 und INT1, mehr EICRA bits gibt es dort ja nicht... verstehe ich das richtig? Gruß, T.
Thorsten S. schrieb: > Hallo spess, > > wenn ich recht verstehe gilt er also nicht für die Gruppe, sondern die > EICRA Einstellungen sind (bei Atmega168) für die Pins INT0 und INT1, > mehr EICRA bits gibt es dort ja nicht... verstehe ich das richtig? > > Gruß, > T. jap
Hi
>verstehe ich das richtig?
Ja. Wenn du mit dem PC-Interrupt nur auf eine bestimmte Flanke reagieren
willst, dann in der ISR nachsehen, welchen Pegel das Pin hat und beim
falschen gleich wieder raus.
MfG Spess
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.