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
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