www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Konflikt zwischen externen interrupts INT0 und INT1


Autor: Sven (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Abend

im tüftle im Moment an einem kleinen Projekt mit einem ATmega8 der zwei 
DC Motoren steuert. Beide Motoren haben an ihrer Achse eine HAll 
Dehgeber der ein steigend und eine fallende Flake pro Umdrehung erzeugt.

Da ich die genaue Position der Motoren brauche und keine Umdrehung 
verlieren möchte habe ich die beiden Halls an die exteren 
Interrupteingange INT0 und INT1 D2 und D3 des mega8 gehängt.

Aus irgedeinem Grund zählt mein Programm aber nur mit einem Eingang 
korrekt. Sobald ich zwei Eingänge überwache stimme die gezählten Flanken 
mit den tatsächelichen Umdrehungen nicht mehr überein.

Kann mir vielleicht juemand einen Tip geben. Hängt es evtl. mit den 
Prioritäten der Interrupts zusammen? Wenn ja wie lege ich diese 
überhaupt fest?

Wie kann ich sicher gehen dass beide Hall Sensoren zuverlässige gezählt 
werden?

Beste Grüße

Sven

Autor: Fabio S. (codehamster)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
guck mal hier:

zum Thema Hallsignal --> müsste ja auch einen Rechteck generieren.

http://www.mikrocontroller.net/articles/Drehgeber

zum Thama Interrupt:
http://www.mikrocontroller.net/articles/Interrupt

zum Thema ATmega8:

http://www.mikrocontroller.net/articles/AVR-Tutorial

Falls es an deinem Code liegen sollte oder an deiner Schaltung stell die 
doch bitte online, denn ohne den Code, oder ohne deine Beschaltung 
können wir nur raten...

Autor: H.Joachim Seifert (crazyhorse)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn dein Programm nicht grottenschlecht ist, verliert der MC keine 
Interrupts. Selbst wenn sie gleichzeitig kommen, sind sie gespeichert.
Problem entsteht, wenn die Laufzeit der Ints (dieser oder noch weitere) 
zu lang ist. Ich vermute dort das Problem.

Autor: Tine Schwerzel (tine)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Weiteres Problem kann sein, dass, wenn der Interrupt durchlaufen wird, 
bereits neue Interrupts gespeichert werden können, die dann die ISR 
nochmal aufrufen. Wenn nicht aller Code in der ISR ist, was man ja meist 
nicht macht, dann darf man nicht vergessen ein Flag zu setzen, ob der 
Interrupt schon abgearbeitet ist oder nicht.

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.