mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Debounce Funktion


Autor: avr-fan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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??



Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht 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.

...

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Michael Glunz (glunzl)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Anbei meine Schulaufgaben als Beispiel.

Gruß
glunzl

Autor: Marko (Gast)
Datum:

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

Autor: gast (Gast)
Datum:

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

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht 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...

...

Autor: Michael Glunz (glunzl)
Datum:

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

Gruß
glunzl

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: gast (Gast)
Datum:

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

Autor: Michael Glunz (glunzl)
Datum:

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

Gruß
glunzl

Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also wenn 10 interrupts während einer ISR auftreten werden diese 
nacheinander abgearbeitet?

Autor: Michael Glunz (glunzl)
Datum:

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

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht 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...

...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.