externe Interrupts

Gast #1929562
Lesenswert?

Hallo,

ich hab vollgendes Problem (mega644): Wenn ich den externen Interrupt 
INT0 auslösen möchte, mit einem Taster, dann passieren hin und wieder 
kuriose Dinge:
- der ebenfalls scharf gemachte INT1 wird mit ausgelöst
- die ISR von INT0 wird zweimal hintereinander ausgelöst - beim 1. 
Sprung in die INT0_vect ist das Flag wo diesen Interrupt signalisiert 
schon wieder gesetzt, wird also 2x hintereinander ausgelöst

Woran kann das liegen?
Die Effekt werden besser wenn ich die Schalter mit denen ich die 
Interrupts auslöse mit Kondensatoren entprelle - auf dem Oszi ist 
überhaupt kein prellen mehr zu sehen
Die Fehler passieren aber immer noch, nur seltener

Könnte das ein EMV Problem sein?

Gruß
Gast #1929579
Lesenswert?

>- die ISR von INT0 wird zweimal hintereinander ausgelöst - beim 1.
>Sprung in die INT0_vect ist das Flag wo diesen Interrupt signalisiert
>schon wieder gesetzt, wird also 2x hintereinander ausgelöst

>Woran kann das liegen?

Herzlichen Glückwunsch, auch du hast gerade rausgefunden
das Taster prellen und ein externer Interrupt völlig
ungeeignet ist um Taster abzufragen. Setzt einen Timerinterrupt
mit ca. 20ms Abtastrate und frag deinen Taster darin ab.
Gast #1929600
Lesenswert?

holger schrieb:
> Herzlichen Glückwunsch, auch du hast gerade rausgefunden
> das Taster prellen und ein externer Interrupt völlig
> ungeeignet ist um Taster abzufragen. Setzt einen Timerinterrupt
> mit ca. 20ms Abtastrate und frag deinen Taster darin ab.

ja, darum hab ich dann Kondensatoren dran gemacht - kein Prellen mehr 
(zumindest aufm Oszi nicht mehr sichtbar)

das mit dem Timerinterrupt mache ich auch

Aber es wird auch teilweise ein falscher Interrupt ausgelöst (?) also 
ich möchte INT0 auslösen, der kommt auch aber INT1 folgt auch gleich.
Die beiden Leitungen sind schon ein paar cm lang und recht nahe 
beisammen...
Gast #1929612
Lesenswert?

>ja, darum hab ich dann Kondensatoren dran gemacht - kein Prellen mehr
>(zumindest aufm Oszi nicht mehr sichtbar)

Die Frage ist wie du die Kondensatoren angebracht hast.
Einen geladenen Kondensator per Taster kurzzuschliessen
kann auch einen erheblichen Stromfluss verursachen.
Das möchte der Taster auf Dauer auch nicht (Kontaktabbrand).
Deshalb macht man sowas auch nicht um Taster zu entprellen.
#1929629
Lesenswert?

Herby schrieb:
> Ich hoffe man kann es erkennen:

NOchmal langsam zu mitschreiben:

Taster


abfragen


per


Interrupt


ist


mies.


Es gibt nur einen Grund warum man einen Taster überhaupt an einen 
Interrupt hängt: Wenn der Taster den µC aus dem Tiefschlaf aufwecken 
soll. Und selbst dann macht man die eigentliche Tasterauswertung nicht 
im Interrupt sondern per Polling der Eingänge.

Siehe Wiki-Arikel zum Thema "Entprellung"

Man braucht dann keinen Widerstand, keinen Kondensator. Einfach nur 
einen Taster, der nach Masse schaltet an die Eingangsleitung. Den Rest 
macht die Software.
Gast #1929662
Lesenswert?

ich möcht ihn ja ausm Schlaf erwecken :-(
einmal durch den Benutzer mittels Taster, einmal wenn ein Peak von einem 
anderen Gerät kommt - das andere Gerät hab ich erstmal mit dem 2. Taster 
simuliert, da ich es noch nicht hab
#1929673
Lesenswert?

Herby schrieb:
> ich möcht ihn ja ausm Schlaf erwecken :-(
> einmal durch den Benutzer mittels Taster, einmal wenn ein Peak von einem
> anderen Gerät kommt - das andere Gerät hab ich erstmal mit dem 2. Taster
> simuliert, da ich es noch nicht hab

Dann weckt der Taster den µC aus dem Sleep.
Die Auswertung des Tastendrucks erfolgt trotzdem immer noch durch die 
üblichen Entprellmethoden in Software.

Glaub es endlich. Es IST die einfachste und zuverlässigste Lösung.
#1929687
Lesenswert?

Herby schrieb:
> einmal durch den Benutzer mittels Taster, einmal wenn ein Peak von einem
> anderen Gerät kommt

Wie kurz ist denn dieser Peak?

Einen Interrupt sollte man nie über ne lange Leitung führen, da er auf 
sehr kurze Impulse reagiert.
Und wenn doch, dann mußt Du die Leitung störfest machen, z.B. 
differentielle Übertragung per RS-485 Treiber.

Meistens braucht man für externe Signale aber nicht die maximale 
Geschwindigkeit. Dann reicht oft, es wie ein Tastensignal zu behandeln.


Peter

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren