mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik externe Interrupts


Autor: Herby (Gast)
Datum:

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

Autor: Huch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Woran kann das liegen?
Woher sollen wir das wissen? Wir kennen weder das Programm noch die 
Schaltung noch die Umgebung in EMV Hinsicht.

Autor: holger (Gast)
Datum:

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

Autor: Herby (Gast)
Datum:

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

Autor: holger (Gast)
Datum:

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

Autor: Herby (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hoffe man kann es erkennen:

_______________+3.3V
     |
    | |
    | |
     |_________ INT0
     |      |
       /   _|_
      /    _
     |      |
 ____|______|___GND

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

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

Autor: Herby (Gast)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

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

Autor: Herby (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich glaubs ja^^
mach ich ja^^ (schalte nen TimerInterrupt ein)

trotzdem wird abundzu der jeweils andere Interrupt mit ausgelöst was mir 
mehr Sorgen macht^^

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>trotzdem wird abundzu der jeweils andere Interrupt mit ausgelöst was mir
>mehr Sorgen macht^^

Dann stimmt was mit deiner Schaltung nicht.

Autor: Peter Dannegger (peda)
Datum:

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

Autor: Herby (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Peaks sind 50ms - 100ms lang

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.