Hallo Leute, ich habe versucht die Harwareentprellung mit dem Schmitt-Trigger aus dem Artikel "Entprellung" nachzubauen, doch wenn ich den Taster einmal betätige geht er trotzdem noch zwei mal in den Interrupt. Ich habe mein Quelltext sowie ein Bild der Schaltung beigefügt. Wodran liegt das? Vielen Dank schonmal! Gruß Marc
Marc Herrmann schrieb: > doch wenn ich den Taster einmal > betätige geht er trotzdem noch zwei mal in den Interrupt. Uups. Dann hast du einen pegelgetriggerten Interrupt. Manche µC wie auch der olle 8051 unterscheiden zwischen Flankentriggerung und Pegeltriggerung.
>Uups. Dann hast du einen pegelgetriggerten Interrupt.
Und ich hab, glaube ich, gerade ein Brett vor dem Kopf.
Wie kommst Du zu dem Schluss?
Selbst wenn er einen Interrupt auf High-Pegel aktiv hat,
dann sollte der doch nur einmal auftreten, vorausgesetzt er sperrt den
nach dem ersten Auftreten bzw. ändert ihn auf Low-Pegel.
Oder habe ich was falsch verstanden.
Hmm schrieb: > Und ich hab, glaube ich, gerade ein Brett vor dem Kopf. > Wie kommst Du zu dem Schluss? Na ja. Der pegelgesteuerte Interrupt kommt immer wieder, wenn die Pegelbedingung stimmt. Das ist zumindest beim 8051 so.
>Na ja. Der pegelgesteuerte Interrupt kommt immer wieder, wenn die >Pegelbedingung stimmt. Ah. Doch kein Brett. Danke :-)
Hmm schrieb: > Vor dem Kopf. Leider hilft sowas jetzt hier gar nicht, und paßt irgendwie auch gar nicht...
>Leider hilft sowas jetzt hier gar nicht.
Hä? Du hast mich doch danach gefragt.
Und ich denke doch, das meine Nachfrage und Deine Antwort geholfen hat.
Denn Du hast ja erst nur Deine Schlussfolgerung geschrieben. Und dann
kam Deine Bestätigung der Herleitung (aus meiner Frage).
Zum Entprellen kannst du doch auch einen Tiefpass (RC) nehmen, welcher die höher frequenten Anteile des Schaltsignals (Prellen) herausfiltert. Wozu nimmt man denn so eine komplizierte Schaltung für ne einfache Taste? ^^ PS: Tasten kommen nie an den Interrupteingang! Das ist schlechter Stil. Tasten werden gepollt. lg stm
stm schrieb: > Zum Entprellen kannst du doch auch einen Tiefpass (RC) nehmen, welcher > die höher frequenten Anteile des Schaltsignals (Prellen) herausfiltert. > > Wozu nimmt man denn so eine komplizierte Schaltung für ne einfache > Taste? ^^ Die Hardwareentprellung per Schmitt-Trigger stammt wohl aus einem älteren Thread. > PS: > Tasten kommen nie an den Interrupteingang! Das ist schlechter Stil. > Tasten werden gepollt. Nein. Für den Single-Step am 8051 beispielsweise ist das elementar wichtig.
void EXTI2_IRQHandler(void) { uint8_t ucStatus = 0; ucStatus = GPIO_ReadOutputDataBit(GPIOC, GPIO_Pin_3); ints++; if(ucStatus == 1) { GPIO_ResetBits(GPIOC, GPIO_Pin_3); } else { GPIO_SetBits(GPIOC, GPIO_Pin_3); } EXTI_ClearITPendingBit(EXTI_Line2); } ---------------------------------------------------------------- Tu die letzte Zeile wo du das PendingBit clearst ganz an den Anfang der Interrupt Routine und dann berichte was passiert! also so: void EXTI2_IRQHandler(void) { uint8_t ucStatus = 0; EXTI_ClearITPendingBit(EXTI_Line2); ucStatus = GPIO_ReadOutputDataBit(GPIOC, GPIO_Pin_3); ints++; if(ucStatus == 1) { GPIO_ResetBits(GPIOC, GPIO_Pin_3); } else { GPIO_SetBits(GPIOC, GPIO_Pin_3); } }
Hallo, vielen Dank für den Hinweis. Ich werde es im Laufe des Tages mal versuchen. Was soll es denn bringen, das zu Beginn zu clearen?
Marc Herrmann schrieb: > Hallo, > > vielen Dank für den Hinweis. Ich werde es im Laufe des Tages mal > versuchen. > > Was soll es denn bringen, das zu Beginn zu clearen? ist nur ein Verdacht. Es gab zu einem ähnlichen Thema mal einen Thread: Da ging es um das Interrupt-Flag, welches noch kurz aktiv war, nachdem die Interrupt Routine verlassen wurde. Beitrag "Timer Interrupt Problem"
Sau geile Sache funktioniert nun 1a :D Wodran liegt das? Ist der Interruptbaustein zu langsam getaktet?
Marc Herrmann schrieb: > Sau geile Sache funktioniert nun 1a :D > > Wodran liegt das? Ist der Interruptbaustein zu langsam getaktet? Frag mich was Leichteres ^^ So wie ich das verstanden habe liegt es daran, dass das Interruptflag noch einige Takte nach dem Rücksetzbefehl aktiv bleibt, so dass nach verlassen des Interrupts dieser direkt wieder ausgeführt wird. Habe aber auch mal irgendwo gelesen, dass man vor dem Rücksetzen des Flags keine GPIO Befehle ausführen darf. Warum auch immer. Muss man halt nur wissen ^^
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.