mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Interrupt Int0


Autor: Horst Piening (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe an Port d2 einen SFH506 zum Empfang von Infrarot
Signalen angeschlossen ( At90s8535 ).

Mit der Fernbedienung steuere ich den Ablauf des
Programs und kann Werte eingeben.

Dies soll nur gelegentlich geschehen, weshalb ich den
Interrupt in der ISR sofort wieder sperre.

Nach dem erneuten Aktivieren, wird dieser leider sofort
wieder ausgeloest, obwohl keine Signale anliegen.

wer kann helfen.

vielen Dank im voraus.

  horst.

Autor: leo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vor Freigabe des Ints im GIMSK-Register das zugehörige Flag im
GIFR-Register löschen. Sonst löst ein "alter" Interrupt sofort die
Int-Routine aus.

grüße leo

Autor: Horst Piening (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@leo:

 Hab ich doch getan: outp((1<<INTF0),GIFR);   // Loeschen durch '1'

 horst.

Autor: Peter Dannegger (peda)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
IR-Signale pollt man besser im Timerinterrupt.

Sonst kann es beim zeitweiligen Sperren passieren, daß man den Anfang
des nächsten Datenpakets verpaßt und Müll dekodiert.

Auch haben einige IR-Empfäger die Angewohnheit auch ohne Signal
zyklisch ganz kurze Impulse zu erzeugen. Ein Timerinterrupt ignoriert
diese einfach, wie das Entprellen einer Taste.

Ein Beispielcode für das RC-5 Protokoll ist im Anhang.


Peter

Autor: leo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jein
Du löscht zwar, aber zu einem falschen Zeitpunkt.
Ich geh mal von folgendem Zustand aus. keine IR-Aktivität, alle
Register und Ints gesperrt. Nun gibst du den Int frei und drückst die
Fernbedienung. Die (erste!) Flanke gelangt zum uP, INTF wird gesetzt
und (weil INTE und GIE enabled) wird die Interrupt-Routine angesprungen
(gleichzeitig wird GIE gesperrt und INTF gelöscht; durch den uP). Du
löscht Int-Enable und Int-Flag (letzteres könnte man weglassen, ist ja
schon gelöscht), vermutlich wird nun in der Interrupt-Routine das
IR-Signal gesampelt (??); zumindestens werden etliche IR-Signale
eintreffen und das INT-Flag wird umgehend wieder gesetzt, löst aber
nichts aus weil ja mittlerweile INT-E gesperrt.

Irgendwann willst du jetzt wieder auf IR hören und enablest den INT und
sofort wird dieser "alte" Interrupt ausgelöst.
-> unmittelbar vor freigeben im GIMSK im GIFR löschen

grüße leo

Autor: Horst Piening (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Leo,

wenn ich dich rictig verstehe wird trotz Disabeln des Interrupts

SIGNAL (SIG_INTERRUPT0)     // PD2 Taste1
 {
   outp(0,GIMSK);  // INT0: Off
   outp(0,MCUCR);

   outp((1<<INTF0),GIFR);   // Loeschen durch '1' !

   Infra=1;
 }

das flag im GIFR durch die auf die flanke folgenden IR-Signale
wieder gesetzt ?

Deinen Hinweis probiere ich einmal aus.

gruss
       horst.

Autor: leo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Richtig verstanden, zumindestens bei 2313, 2323 und M8 ist es so. Ich
geh' davon aus daß die anderen "Familienmitglieder" genauso
agieren.

grüße leo

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.