Hallo zusammen, ich bastel hier mit meinem STM32 Board, und habe als Pheripherie eine Platine geätzt, mit 4 Tastern und 4 LEDs. Ich kann alles ansteuern, wunderbar... Nur mir ist etwas aufgefallen... Ein Taster ist als EXTI IRQ eingestellt, und macht auch seine Arbeit... Da ich mit dem DebugModus nicht klar komme, nutze ich immer eine LED als optische Kontrolle... Nun blinken meine LEDs schön vor sich hin, und der EXTI Interrupt setzt ein... Der Interrupt hat programmiertechnisch keinen Einfluss auf die LEDs, und dennoch kommt es vor, dass eine plötzlich aus ist, oder aufeinmal permanent an ist (vorher PWM artig geleuchtet), der gedimmt. Habt Ihr eine Idee welche Ursachen das haben kann? Mir ist das schon beim sporadischen Testen, am Anfang meines Projektes aufgefallen. Alle 4 Taster als EXTI, mit einfachen LED an aus Funktionen, und dennoch wirds nicht so sauber gemacht wie gewollt, irgendwie alles willkürlich. Nun ja, als Laie wäre ich wirklich glücklich solche Phenomäne aus dem Weg gehen zu können.
Hi Taster und Interrupt.... dieses Thema ist so alt wie Methusalem. Aber gut, hier mein Tip: Lies die Eingänge von Kontaktbehafteten Schaltgliedern in einer eigenen Routine ein, die du am Anfang deine Programmschleife aufrufst. Sowas nennt sich pollen. Da die Kontakte in der Regel nach GND schalten, ist es besser, man Invertieret die Eingangsbits. Das erleichtert es dem Proggrammierer, denn irgendwie ist es in unseren Köpfen verankert: Taster gedrückt = "1"-Signal. Kommen wir zu einem weiteren Problem, dem Prellen von Kontakten. Ein Kontakt schließt oder öffnet nicht einfach, sondern das Signal beginnt zu flackern, bevor es eine stabile Lage hat. Dies bedeutet, rufst du eine Interruptroutine beim Schalten auf, so wird diese mehrfach aufgerufen. Um dieses "Prellen" der Kontakte abzufangen gibt es aber genug andere Beiträge. Auch in den Tutorials ist dies ein Thema. Kommen wir nun zu weiteren Problemen. Da sind bspw. die Pull-Up-Widerstände. Sind diese eingeschaltet ? Ist der Stack initialisiert ? In Abhängigkeit der Programmiersprache gibt es unterschiedliche Voraussetzungen. Während Hochsprachen bei einem Interrupt Registerinhalte von Hause aus sichern ist dies bei Assembler z.B. vom Programmierer vorzunehmen. Da du dich dazu ncht äußerst, kann ich nur daraf hinweisen Gruß oldmax
Moin Oldmax, um Deine Uhrzeit bin ich noch nicht so spontan zum schnellen Antworten ;) Also den Schalter nutze ich zur Simulation, da später ein Eingangssignal (Lichtschranke), diesen Interrupt auslösen soll. Vom Prellen hab ich schonmal gehört, nur folgendes, wie gesagt haben die Interruptroutine und die zu leuchtende LED, direkt nichts am Hut (also auch kein Programmeinfluss auf eine Routine wo die LED drin hängt) So müsste man meinen das, sollte der Schalter aufgehört haben zu schwingen, der Interrupt letztmalig einmal durchläuft, und das Hauptprogramm dannach normal durchläuft, somit leuchtet die LED wie sie soll. In der Zeit wo der Schalter getätig wird (Tastendruck kleiner 1sek) kann ich eine Störung durch das mehrmalige unterbrechen durch die Routine verstehen. Dannach sollte es doch wieder nromal laufen??? - Pull-Up/Down Widerstände sind aktiviert. Stack initialisieren? Davon hör ich das erste mal... aber ich nutze C, davon ausgehend wirds eh wahrscheinlich automatisch gemacht, oder? Danke erstmal für die Antwort
Ist der Interrupt flankengesteuert oder statisch? Im 2. Fall würde der Interrupt solange andauern/wiederholt werden, wie die Taste gedrückt ist. Gruß Dietrich
EXTI_Trigger_Rising also flankengesteuert... aber ändern tut es das Problem wohl nicht, oder?
Hi Ich bin zwar bei C raus, dennoch wird dein Problem wohl ohne ein wenig Code kaum lösbar sein. Gut, Stack ist bei C initialisiert und ich nehme auch an, das verwendete Register esichert sind. Evtl. ist die ISR nichtprogrammiert und bei einem Auftreten eines Interrupts läufst du praktisch in den Programmanfang, also in die Initialisierung. Die IVT liegt ja adressenmäßig im unteren Bereich. Aber wie gesagt, ich kenn mich mit C nicht aus. PS: was für eine frühe Morgenstunde ...? Da habe ich schon den halben Tag hinter mir gehabt... Gruß oldmax
Flo schrieb: > Alle 4 Taster als EXTI, mit einfachen LED an aus Funktionen, > und dennoch wirds nicht so sauber gemacht wie gewollt, > irgendwie alles willkürlich. Schon mal was von Tasterprellen/Schalterprellen gehört? Such einfach mal nach Interrupt Taster und Prellt hier im Forum: http://www.mikrocontroller.net/search?query=interrupt+taster+prellt
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.