www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Interrupts


Autor: Steffen Burr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ich habe meinen uC erst seit ein paar Tagen am laufen .... deshalb bin 
ich noch nicht sehr erfahren.

Ich versuche gerade einen Schalter in ASM zu programmieren. Bei 
einmaligem betätigen des Tasters (an PD2) soll die LED an gehen, und bei 
erneutem betätigen wieder aus gehen.

Ich habe versucht, das Problem mit Interrupts zu lösen - es funktioniert 
auch ganz gut, nur dass während der Zeit, während der ich den Taster 
gedrückt halte, die LED (ganz schnell) ímmer aus und an geschaltet wird. 
JE nachdem, wann man los lässt wird quasi zufällig entschieden, ob die 
LED nun an oder aus ist.

Wie kann ich nun erreichen, dass der Interrupt bei einmaligem betätigen 
auch nur einmal aufgerufen wird ??

Danke für eure Hilfe!

Steffen

Autor: mikki merten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Interrupt auf negative Flanke und Routine zum Entprellen nicht 
vergessen.

Autor: Steffen Burr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gut, auf negative Flanke hab ich den Interrupt gestellt - Entprellen ... 
Sorry, ich habs im Forum schon oft gelesen, aber bisher noch nicht 
verstanden.
Was ist das und wie macht man 's ?? Vielleicht ghast du ein einfaches 
Beispiel.

Danke nochmal für deine Antwort!

Steffen

Autor: Thomas H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Steffen,

zum Prellen: Wenn ein Schalter ein bzw. ausgeschaltet wird, dann macht 
er keine scharfe Pegel-Trennung zwischen "ein" und "aus", sondern 
"zittert" ein wenig waehrend des Schaltvorganges zwischen beiden 
Zustaenden hin und her. Dies bedeutet, dass der Controller waehrend dem 
Schaltvorgang nicht nur eine Pegelaenderung mitbekommt, sondern eine 
ganze Menge, bis der Schaltvorgang abgeschlossen ist. Dies dauert - je 
nach Schalter - Zeiten im ms-Bereich. Diese vielen Aendrungen bewirken 
natuerlich auch, dass mehrere Interrupts ausgeloest werden

Um dieses Problem zu loesen gibt es im Wesentlichen 2 Varianten:

1. Hardwaremaessig durch eine entsprechende Schaltung

ODER

2. durch eine Software-Loesung. Du musst einfach eine Wartezeit mit in 
deine Interrupt-Routine einbauen, welche dieses Prellen ueberbrueckt. 
20ms sind denke ich ein guter Wert. Nach diesem Warten, musst du noch 
einmal dein Signal abfragen. Es koennte ja sein, dass du eigentlich den 
Schalter ausschaltest, aber durch das Prellen wieder ein Flankenimpuls 
generiert wird, obwohl du ihn ja gar nicht moechtest.

In Programmform in etwa so:

Interrupt-Routine:

    warte 20 ms (z. B. Schleife)

    teste ob immer noch Taster gedrueckt
    wenn ja, gehe weiter
    wenn nicht, dann beende (reti)

    - dein Programm -

reti

Ich hoffe ich konnte dir helfen!

Thomas H.

Autor: Steffen Burr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Thomas,

danke für deine schnelle Hilfe. Ich habe es probiert, mit 20 ms - 
funktioniert zwar besser, aber er schaltet troztdem nicht immer korrekt.
Deshalb habe ich versucht auf die hardwaremäßige Seite zu gehen. Ich hab 
einen 10 uF Kondensator zum Schalter parallel geschaltet und erreiche 
ein ganz gutes Ergebnis - Das Programm funktioniert jetzt.

Gibt es noch eine professionellere Lösung das Problem von der Hardware 
anzugehen, oder sollte man Kondensatoren einer bestimmten Kapazität 
verwenden? Im Internet habe ich dazu nicht alzu viel aufschlussreiches 
gefunden. Vielleicht kannst du mir ein wenig weiterhelfen. Gibt es 
vielleicht schon entprellte Taster?

Danke für deine Antwort!

Steffen

Autor: Thomas H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Steffen,

ich habe gerade einmal in meinen Programmen nachgesehen: ich habe eine 
Wartezeit von 30 ms genommen und es funktioniert immer ganz gut ohne 
Kondensatoren.

100%ig sicher bin ich mir jetzt nicht, aber ich habe gehoert, dass die 
neueren AVR's schon Entprell-Schaltungen integriert haben.

Es gibt verschiedene Wege es hardwaremaessig zu loesen. Der Regelfall 
ist ein RC-Glied oder RS-FlipFlop. Hier sind einige Vorschlaege in Foren 
diskutiert worden.

http://www.mikrocontroller.net/forum/read-1-3715.html#3715
http://www.mikrocontroller.net/forum/read-1-6026.html#6026

Hier findest du eine kurze Zusammenfassung:

http://dse-faq.e-online.de/dse-faq.htm#F.29.1

Entprellte Taster direkt gibt es nicht. Es gibt einige je nach 
Qualitaet, die weniger prellen als die anderen. Ganz vermeiden laesst es 
sich nicht. Es gibt allerdings einige wenige - teuere -, die im 
Schaltergehaeuse eine Entprellschaltung integriert haben.

Viel Erfolg,

Thomas H.

Autor: mikki merten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du darfst natürlich nicht vergessen, das entsprechende Interrupt-Flag 
innerhalb der Interrupt-Routine am Ende zurückzusetzen. Sonst wird nach 
Beendigung ein zusätzlicher (zwischengespeicherter) Interrupt ausgelöst.

Autor: Steffen Burr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@thomas: Danke! Ich werd mir mal die Links anschauen ... Mit dem 
Kondensator funktioniert es ganz gut - und im Moment fallen mir keine 
Nachteile davon ein ...
Nochmals danke!

@mikki: Werd ich gern machen, wenn du mir sagst wie ;-) Tut mir leid, 
aber ich bin eingentlich erst seit gestern in der Materie und blick noch 
nicht ganz durch!

Steffen

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.