Moin moin an alle, ich hab eine Frage bezüglich des IRQHandler beim STM32F4 mit angeschlossenem Drehgeber. Und zwar sobald ich das Programm auf dem Board starte und es debuggen will springt er immer in EXTI3_IRQHandler obwohl ich den Drehimpulsgeber nicht bewege. Meine Frage ist, ob eventuell mir jemand ein Tipp geben kann wie ich den Fehler behandeln soll. An sich habe ich alles so programmiert und verkabelt wie es sein sollte. Den Quellcode für den InterruptController hab ich in den Anhang gestellt hoffe es lässt sich ohne weiteres öffnen. Mfg Kagegan
Tja, das ist eben immer so, wenn die Anfangs-Konditionen entsprechend sind, also welche Flanke, statisch oder auf Flanke reagieren usw. Ich lese jetz tnicht das Manual für dich, da mußt du schon selber reingucken. W.S.
Wer will denn da auf Schaltkontaktflanken enn IRQ werfen? Ganz schlechte Idee, macht man nicht! Denn Taster prellen. https://www.mikrocontroller.net/articles/Drehgeber
Mw E. schrieb: > Wer will denn da auf Schaltkontaktflanken enn IRQ werfen? > Ganz schlechte Idee, macht man nicht! Mein Prof will auf den Schaltkontaktflanken nen IRQ haben. Ich könnte auch über nen Timerinterrupt die Auswertung machen aber das ist nicht gefragt und leider auch nicht mein Problem. Naja schönen Abend noch ;)
Belch schrieb: > Ob das stimmt? Jedenfalls, Timer hat der STM32F4 genug an Bord.
1 | in .h |
2 | /*GLOBALES*/
|
3 | static volatile int count; |
4 | static volatile int8_t direction; // 1 order -1 |
5 | static int direct; |
Du musst dich entscheiden, entweder global oder static. Wo werden die Variablen initialisiert? Irgendwo hast du zweimal diegleiche nvic Prio verteilt. K.A, ob das so geht. mfg
Also Problem ist gelöst.. Und zwar fehlte beim Routing der Pins die negation. Vorher:
1 | SYSCFG ->EXTICR[0] &= (0xf << (4*pin1)); |
Nachher
1 | SYSCFG ->EXTICR[0] &= ~(0xf << (4*pin1)); |
Danke an euch für die Hilfe, hätte ich nie ohne euch geschafft :) und ja der prof wollte den interrupt über die Flanken, Timer wäre zwar ehr richtig aber ich muss mich ja an die richtlinien meines Prof halten... Auf jeden Fall schönen Abend noch
Philipp J. schrieb: > und ja der prof wollte den interrupt über die Flanken, Timer wäre zwar > ehr richtig aber ich muss mich ja an die richtlinien meines Prof > halten... Unsinn. Du dünkst dich schlauer als dein Professor, aber du bist es nicht. Du solltest eher darüber nachdenken, was eigentlich dir zu begreifen ansteht. Das Öffnen und Schließen eines der beiden Drehgeberkontakte ist ein Ereignis, was dir sagt, daß der Drehgeber bewegt wurde. Die Richtungs-Information hingegen bekommt man aus dem Zustand des anderen Signals zum Änderungszeitpunkt des ersteren Signals. Normalerweise ändert dieses zweite Signal seinen Zustand direkt im Rastpunkt (also möglicht weit weg von den Umschaltpunkten des ersteren Signals), weswegen das simple Abtasten im festen Timer-Raster eben grundfalsch ist, da man dann zwar das Ereignis als solches erkennen kann (wie bei einem Taster), aber nicht mehr die Richtungsinformation bekommt, da diese nur eine gewisse Zeit nach dem Ereignis zur Verfügung steht. Man müßte sehr häufig pollen, um das Abtasttheorem zu beachten und keinen Unfug zu dekodieren. Kapiert? Was tut man also? 1. die Signale konditionieren, also vom Rauschen befreien, was hier heißt, sie vom Prellen zu befreien - und zwar analog, da du ja wohl gelernt hast, daß man eine digitale Signalverarbeitung nur dann sauber praktizieren kann, wenn höhere Frequenzen als 1/2 Abtastrate nicht mehr vorkommen. 2. die zuvor analog konditionierten Signale ins Digitale übersetzen (sprich an einen Eingang legen, der signaltheoretisch als 1 Bit Wandler daherkommt) 3. diese digitalen signale auswerten. Da man den Zustand des zweiten Signals direkt nach dem Zustandwechsel des ersten Signals benötigt, kommt da eben nur der Interrupt auf den Zustandwechsel des ersten Signals in Frage. Alles Andere ist Pfusch, weil es sinnlos Rechenzeit verbraucht. Hast du auch dieses jetzt verstanden? Nochmal zum Mitschreiben: zuerst konditionieren, dann wandeln, dann auswerten. W.S.
W.S. schrieb: > 1. die Signale konditionieren, also vom Rauschen befreien, was hier > heißt, sie vom Prellen zu befreien - und zwar analog, Ach da ist ja wieder der Handelsreisende in Kondensatoren. Sind deine Umsätze so zusammengebrochen, daß du hier Werbung für den Einsatz von deinen Kondensatoren machen mußt? Hast du auch die passenden Drehkondensatoren im Angebot, die man bei alternden Kontakten nachregeln kann? MfG Klaus
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.