Hallo; ich habe ein paar Probleme zu verstehen wie Interupts ineinander greifen. Mit dem Systick interupt habe ich mir eine Delay Routine aufgebaut. Der Timer triggert jede mssec einen Interupt. Delay(300) erzeugt also eine 300 ms Verzögerung. Ich habe ausserdem einen Taster der einen Externen Interupt auf eine steigende Flanke erzeugt. Ich möchte mit dem taster wechselweise eine LED toggeln. Hierzu muß ich den Taster jedoch entprellen. Ich dachte: --> Taster triggert Externen event. in der Interupt Routine "Taster": --> lies Taster zustand, Speicher Zustand A --> Time Delay -300ms --> Ließ Tastenzustand, Speichere Zustand B Wenn Zustand A = B = 1 dann Toggle LED Problem: Sobald der Tasten Interupt ausgeführt wird, scheint meine Interupt Routine des Systick, welche die Delay Routine aufruft nicht mehr zu arbeiten. Frage: Wei kann ich eine Zeitverzögerung innerhalb der Tasten Interrupt Routine ausführen um den Taster zu entprellen ?? Danke.
In Interupt Routinen gehören keine Delays. Und im Hauptprogramm brauchst du die auch nicht. Für die Tasterabfrage brauchst du auch keine extra Interruptroutine. Frag den doch einfach in der Systick-Routine ab.
Marc Rupprath schrieb: > Wei kann ich eine Zeitverzögerung innerhalb der Tasten Interrupt Routine > ausführen um den Taster zu entprellen ?? Das ist die falsche Frage. Deine eigentliche Frage lautet: >>> Wie kann ich den Taster entprellen ?? Und dann hast du ein ziemlich simples Problem, das viele tausend vor dir schon hatten und das bereits gelöst ist. Den Code findest du hier im Forum. Such einfach mal nach "Taster entprellen": https://www.mikrocontroller.net/search?query=taster+entprellen Und hier einer der neueren Threads: Beitrag "Tastenentprellung" Lies den einfach mal durch... > Delay(300) erzeugt also eine 300 ms Verzögerung. Sieh der brutalen Wahrheit ins Auge: delay(300) blockiert dir den uC für 300ms. Das ist einfach nur vergeudete Rechenleistung... BTW: welcher Taster prellt 300ms?
Ach so, die Systick-ROutine wird nicht mehr ausgeführt, weil der Interrupt für den Taster vermutlich eine höhere Priorität hat. Solange diese Routine abktiv ist sind damit ISRs geringerer Priotität gesperrt.
Lothar Miller schrieb: > BTW: welcher Taster prellt 300ms? ein fliegender Draht auf dem Steckbrett. DuckUndWech!
> Sieh der brutalen Wahrheit ins Auge: > delay(300) blockiert dir den uC für 300ms. Das ist einfach nur > vergeudete Rechenleistung... > > BTW: welcher Taster prellt 300ms? Die brutale Wahrheit ist das die 300 ms nur ein Beispiel sein sollten.
Marc Rupprath schrieb > > Die brutale Wahrheit ist das die 300 ms nur ein Beispiel sein sollten. Die brutale Wahrheit ist aber auch, dass ein delay von 300ms Dauer selten sinnvoll ist. Eher - überhaupt nie. Und da spielt es dann auch keine Rolle mehr, ob du diesen delay mit Warteschleifen oder mit Timer realisierst. Kurze Delays können manchmal sinnvoll sein, wenn man kurze Pulse erzeugen muss (zb Kommunikation mit einem DS1820), aber abgesehen davon delay ist selten die Lösung. delay ist aber oft das Problem und da geht es nicht darum, wie der delay realisiert wird, sondern um den Einsatz eines delay an sich - egal ob mit Timer oder ohne.
Marc Rupprath schrieb: > Hierzu muß ich den Taster jedoch entprellen. > > Ich dachte: Jeder kann gerne von neuem losdenken und alle bisherigen Millionen Artikel zum Entprellen ignorieren. Bloß bitte dann nicht erwarten, daß andere sich Fusseln am Mund reden, um zum Millionsten mal alles zu erklären.
Vielleicht hatte er ja so ein sicheres Haendchen, dass er sich aus den Tausenden von Posts gerade den rausgepickt hat der trotz der vielen Diskussionen immer noch an delays oder Interrupts als die Superwaffe zum Tasten entprellen glaubt. Da hilft nur alles lesen und nicht nur das rauspicken was einem in den Kram passt. Oder er meint das die Dannegger Entprellung nicht auf einem ARM(geraten) laeuft, weil es zu schwer ist die DDR's und PORT's auf GPIOn->XXX anzupassen.
Hallo; es geht nicht immer darum bekannte Lösungen einfach nachzubauen sondern, und wenn auch nur zum Zwecke des Lernens und Vergleichens, andere Wege zu beschreiten. Ob dieser Weg besser oder schlechter ist mag dann jeder selber beurteilen dürfen. Ich erwarte nicht dass jeder seinen Kommentar abgibt. Was ich jedoch erwarte, das jeder seine Mund hält der zur Konkreten Fragestellung keine Konkrete Antwort geben mag. Auf überflüssiges Selbstdarstellungsgefasel "Duck und wech" , kann ich gerne verzichten. Ich hatte nicht gefragt, "wie entprellt man einen Taster". Ich hatte konkret gefragt: "Ist es auf die von mir beschriebene Weise möglich und wo steckt in der konkreten Implementierung der handwerkliche Fehler. Also: Die Frage lautete: Wie muß ich den Systick Timer von der Priorität her konkret einstellen damit es überhaupt möglich ist innerhalb der Interupt routine des GPIO Pins einen, Vom Systick getriggerten DelayCounter aufzurufen." Es geht also um die Schachtelung von Interupts und dehren Prioritäten und wie diese für einen STM32 Microcontroller konfiguriert werden. Dennoch danke
Hallo ; wenn Sie von "er" von mir Reden ist es hilfreich wenn Sie auf die dritte Person verzichten würden ! Da hier statt konkrete Antworten lieber Wert auf überflüssige Belehrungen gelegt wird einmal eine Belehrung von mir: Lesen Sie sich die einmal selber die Vielzahl der Forenbeiträge durch und streichen einmal unsachliche überflüssige Beiträge heraus. Guten Tag. PS: An den Moderator: Sie haben recht, dieser Thread ist überflüssig und eine Zeitverschwendung Schliessen und löschen, Danke sehr
Aber holla, gleich ganz hübsch angesäuert... :-o > Was ich jedoch erwarte, das jeder seine Mund hält der zur Konkreten > Fragestellung keine Konkrete Antwort geben mag. Du solltest an deiner Kritiktoleranz arbeiten. Marc Rupprath schrieb: > Die Frage lautete: > Wie muß ich den Systick Timer von der Priorität her konkret einstellen > damit es überhaupt möglich ist innerhalb der Interupt routine des GPIO > Pins einen, Vom Systick getriggerten DelayCounter aufzurufen." Die Antwort lautet: sie muss höher sein. Mehr kann man erst sagen, welchen geheimen Controller du verwendest... > Ich hatte nicht gefragt, "wie entprellt man einen Taster". Ich meine, da ganz am Anfang so was gelesen zu haben: >>> Ich möchte mit dem taster wechselweise eine LED toggeln. >>> Hierzu muß ich den Taster jedoch entprellen. Und da taucht in keiner brauchbaren Lösung mehr als 1 Interrupt auf. >>> Frage: >>> Wei kann ich eine Zeitverzögerung innerhalb der Tasten Interrupt >>> Routine ausführen um den Taster zu entprellen ?? Antwort: am einfachsten mit einer Zählschleife. So funktioniert z.B. das allseits bekannte und beliebte _delay_ms() > An den Moderator: Es waren da gleich mehrere Mods beratend beteiligt... > Sie haben recht, dieser Thread ist überflüssig Er kann immer noch als schlechtes Beispiel dienen. Denn eines solltest du erkennen: du bist hier in einem Forum (= Besprechungszimmer), und hast einen Thread eröffnet (= zur Sitzung eingeladen). Jetzt hast du als Threaderöffner (= Sitzungsleiter) zuerst die Aufgabe, allen die selbe eine Wissensbasis zu schaffen und über das Besprechungsziel zu informieren. Und dann hast vorrangig du selber die von dir einberufene Sitzung zu moderieren. Einen Moderator zu holen/brauchen, ist dann wie den Chef zu rufen... > Schliessen und löschen, Danke sehr Das ist wie beleidigt umdrehen und rausgehen. Das wird im echten Leben nicht oft gehen... > Schliessen und löschen Threads werden hier nur geschlossen, wenn nichts sinnvolles mehr nachkommt und nur dann gelöscht, wenn es purer Nonsens oder politsch ist, oder in alle Richtungen beleidigt wird. Das ist in diesem Thread nicht der Fall.
Marc Rupprath schrieb: > für einen STM32 Microcontroller Ich glaub, das ist ein neuer Rekord, so spät wenigstens den MC-Hersteller anzugeben. Den genauen Typ und Deine Programmierumgebung kennt aber immer noch keiner. Da brauchst Du Dich auch nicht zu wundern. Auf unkonkrete Fragen kann es nur unkonkrete Antworten geben. Keiner kann in Deinen Kopf hineinsehen.
Marc Rupprath schrieb: > STM32 Microcontroller Da lag ich nicht mal so falsch mit meiner Vermutung. Bleibt noch zu raten, welcher der Cortex-M Kerne jetzt speziell zum Einsatz kommt. Zwischen den einzelnen Cortex-M gibt es Unterschiede im Interrupt Handling und ist im Datenblatt zum jeweiligen Kern unter Interrupt priority registers beschrieben.
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.