Forum: Mikrocontroller und Digitale Elektronik Debounce Funktion


von avr-fan (Gast)


Lesenswert?

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



von Hannes L. (hannes)


Lesenswert?

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.

...

von Paul Baumann (Gast)


Lesenswert?

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

von Michael G. (glunzl)


Angehängte Dateien:

Lesenswert?

Anbei meine Schulaufgaben als Beispiel.

Gruß
glunzl

von Marko (Gast)


Lesenswert?

nein, debounce kümmert sich nicht um Interrupt.
Der Interrupt springt sofort, dafür ist er auch da ;o)

von gast (Gast)


Lesenswert?

kann ich in einer ISR auch die debounce funktion verwenden? werden die 
interrupts automatisch disabled wenn ich in einer ISR bin?

von Hannes L. (hannes)


Lesenswert?

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

...

von Michael G. (glunzl)


Lesenswert?

Wird bei Bascom eigentlich auch die Rücksprungadresse und das 
Statusregister auf den Stack gelegt?

Gruß
glunzl

von Peter D. (peda)


Lesenswert?

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

von gast (Gast)


Lesenswert?

die interrupts werden aber disabled wenn ich in einer isr bin oder? 
merkt sich das der AVR oder werden die einfach ignoriert?

von Michael G. (glunzl)


Lesenswert?

Die Ausführung ist disabled, die Flags werden, sollte ein weiterer 
Interrupt auftreten, gesetzt und nach dem Wiedereinschalten der 
Interrupts abgearbeitet.

Gruß
glunzl

von gast (Gast)


Lesenswert?

also wenn 10 interrupts während einer ISR auftreten werden diese 
nacheinander abgearbeitet?

von Michael G. (glunzl)


Lesenswert?

Es sei denn, die Interrupts treten mehrfach auf, dann bekommst Du nur 
einmal mit.

von Hannes L. (hannes)


Lesenswert?

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
Noch kein Account? Hier anmelden.