www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Interrupt History


Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ich möchte einen Reed-Kontakt (Radl-Dacho Anwendung) entprellen.
Dazu will ich nach dem Interrupt (INT0) - Eingang den Interrupt
disablen und nach dem Ablauf eines Timers diesen wieder enablen.

Leider hab ich das Problem, dass wären der Interrupt disabled ist,
irgendwo etwas gesetzt wird wenn ein Zwischen Interrupt eintrifft.
Dh. Wenn ich zweimal den Taster betätige dann wird der 2. Druck gemerkt
und nach dem Verzögern ausgefürt...

Vielleicht kann mir wer helfen oder ich hab mich mit den
Register vertan... Aja ich arbeite mit dem ATMEGA16 / 10MHz

Hier der Code:

/** BENUTZUNG: REED ****/
interrupt [EXT_INT0] void ext_int0_isr(void)
{
  GICR &= 0xBF;    //  Disable Ext.Interrupt 0 --> Reed OFF.
  printf("Interrupt eingegangen, (EXT) Disabled\n\r");
  zaehler++;
  printf ("Zaehler: %i \n\r",zaehler);
  PORTD.5 = 1;
  TCNT2=0x00;
  TIMSK |= 0x40;  //  Enable --> Timer2-Interrupt ON.
}

/** BENUTZUNG: Reed-Entpreller ****/
interrupt [TIM2_OVF] void timer2_ovf_isr(void)
{
  static int i = 0;
  i++;
  if (i>100)
    {
      PORTD.5 = 0;
      TIMSK &= 0xBF;  //  Disable --> Timer2-Interrupt OFF.
      TCNT2=0x00;
      i=0;
      GIFR &= 0xBF;
      GICR |= 0x40;  //  Enable Ext.Interrupt 0 --> Reed ON.
      printf("Interrupt (EXT) Enabled\n\r");
    }
}

Autor: leo9 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich kann zwar kein C, aber GIFR &= 0xBF löscht wohl das 6.Bit ??
Gedanklich ist es zwar richtig das Interruptflag zu löschen, aber
dieses wird beim avr durch schreiben einer 1 gelöscht.

grüsse leo9

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Diesen ganzen komplizierten Schrunz mit dem Umschalten zwischen externen
und Timerinterrupt kann man sich sparen, wenn man einfach nur den
Timerinterrupt nimmt.

Das hat auch noch den Vorteil, daß der Timerinterrupt durchläuft, also
noch für beliebig andere Sachen zur Verfügung steht.

In der Codesammlung findest Du Beispiele zuhauf.


Peter

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also auf die 1. Anwort:

Wieso muss ich einen 1er schreiben damit ich etwas lösche?
Das ist mir irgendwie total unklar.
Wenn das Register ganz einfach mit & verknüpfe kann ich
doch gezielt Bits löschen?

Das ganze funktioniert auch, d.h. Der Interrupt wird
tatsächlich disabled, aber dazwischen wird da irgendetwas
gemerkt.

Auf die 2. Antwort:#

Aufgrund meiner Anwendung brauche ich ganz einfach einen
Externen Interrupt von der Peripherie und dann einen Abstand
der meiner Meinung nach nur mit einem Timer erzielt werden kann.

Danke, Thomas.

Autor: leo9 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
weil sich das die Atmel-Fritzen so ausgedacht haben:

aus dem Atmel-Datenblatt:
"Alternatively, the flag can be cleared by writing a logical one to
it."

Halt dich ans Datenblatt oder nimm halt einen anderen Prozessor.

grüsse leo9

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Aufgrund meiner Anwendung brauche ich ganz einfach einen
Externen Interrupt..."

Ich häts ja nicht geschrieben, wenns nicht ohne ginge.
Aber Du mußt Dir nicht die Beispiele ansehen, es zwingt Dich keiner.


Peter

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.