Hallo, ich habe ein Problem mit der Debounce Funktion (ATMEGA 32 + Bascom)! Muss ich die Funktion in eine Schleife schreiben oder wird die mit einem Timer immer ausgeführt? Kann ich die Debounce Funktion auch für Interrupts verwenden??
Da wirst Du wohl den Programmierer des Compilers fragen müssen. Vermutlich hat er aber diese Frage bereits in der Doku oder Hilfe beantwortet. Ansonsten müsstest Du mal den vom Compiler generierten Maschinencode in ASM analysieren. ...
Debounce wir nicht mit einem Timer ausgeführt, sondern ist ein Stück Maschinenprogramm, was eine Verzögerung von 25ms erzeugt, um einen Eingang prellfrei abzufragen. Debounce Pind.0 , 0 , Paul , Sub Wenn Pin D.0 auf 0 geht, springe in´s Unterprogramm "Paul". MfG Paul
nein, debounce kümmert sich nicht um Interrupt. Der Interrupt springt sofort, dafür ist er auch da ;o)
kann ich in einer ISR auch die debounce funktion verwenden? werden die interrupts automatisch disabled wenn ich in einer ISR bin?
gast wrote: > kann ich in einer ISR auch die debounce funktion verwenden? Das wäre grober Unfug, denn die ISR sollte so kurz (so schnell) wie möglich sein, Debounce enthält aber eine Wartezeit. Tastenentprellung im (Timer-) Interrupt geht anders, da gibt es keine Wartezeiten. Siehe auch Tutorial und Wiki. > werden die > interrupts automatisch disabled wenn ich in einer ISR bin? In Assembler ja, es sei denn, man schaltet in der ISR das I-Bit wieder ein. Was Dein Compiler macht, weiß ich nicht. Zum Thema BASCOM und Interrupts solltest Du auch noch beachten, dass BASCOM beim Aufruf der ISR (unnötigerweise) alle 32 Register sichert um beim Rücksprung ins Programm wiederherstellt, das sind schonmal 128 Takte, in denen die CPU für die eigentliche Arbeit blockiert ist... ...
Wird bei Bascom eigentlich auch die Rücksprungadresse und das Statusregister auf den Stack gelegt? Gruß glunzl
Michael Glunz wrote: > Wird bei Bascom eigentlich auch die Rücksprungadresse und das > Statusregister auf den Stack gelegt? Ja. Alles andere wäre grober Unfug. Peter
die interrupts werden aber disabled wenn ich in einer isr bin oder? merkt sich das der AVR oder werden die einfach ignoriert?
Die Ausführung ist disabled, die Flags werden, sollte ein weiterer Interrupt auftreten, gesetzt und nach dem Wiedereinschalten der Interrupts abgearbeitet. Gruß glunzl
also wenn 10 interrupts während einer ISR auftreten werden diese nacheinander abgearbeitet?
Es sei denn, die Interrupts treten mehrfach auf, dann bekommst Du nur einmal mit.
gast wrote: > also wenn 10 interrupts während einer ISR auftreten werden diese > nacheinander abgearbeitet? Nein, das Interrupt-Flag des betreffenden Interrupts ist ein 1-Bit-Zähler und kennt nur die Zählerstände 0 und 1. Das kann man aber mit etwas logischem Verständnis alles aus dem Datenblatt des AVRs ableiten... ...
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.