mikrocontroller.net

Forum: Compiler & IDEs Interrupt bei steigender und fallender Flanke möglich?


Autor: Werner A. (homebrew)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Leute,
ich habe folgende Interrupt routine
ISR(INT0_vect)  //Signal on ext. Interrupt
{
   Tog_Bit(CH2OUT);    
   if (!(MCUCR & (1<<ISC00)))    // if rising edge enabled
  MCUCR |= (1<<ISC00);    // then delete rising edge bit
   else
  MCUCR &= (1<<ISC00);    // else set rising edge bit
}

Ich möchte, das der Ausgang sowohl bei steigender als auch bei
fallender Flanke wechselt. Leider wechselt der nur einmal nach dem
Starten und danach passiert nichts mehr.
Darf ich das MCUCR Register innerhalb eines Interrupt nicht wechslen,
oder hab ich da nen Denkfehler?

mfg
  Werner

Autor: Werner A. (homebrew)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hier nochmal der Code richtig formatiert ;-)
ISR(INT0_vect)  //Signal on ext. Interrupt
{
   Tog_Bit(CH2OUT);
   if (!(MCUCR & (1<<ISC00)))           // if rising edge enabled
      MCUCR |= (1<<ISC00);              // then delete rising edge bit
   else
      MCUCR &= (1<<ISC00);              // else set rising edge bit
}

Autor: Werner A. (homebrew)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nochwas vergessen...
Prozessor ist ein AT90S2313

Autor: Roland Schmidt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lies dir den Absatz über das Setzen und Löschen von Bits aus dem
AVR-GCC-Tutorial noch einmal durch.

http://www.mikrocontroller.net/articles/AVR-GCC-Tu...

Autor: Werner A. (homebrew)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
War wohl ein wenig spät für mich...
  ich werde beim löschen immer &= ~(1<<bit) schreiben
  ich werde beim löschen immer &= ~(1<<bit) schreiben
  ich werde beim löschen immer &= ~(1<<bit) schreiben
  ich werde beim löschen immer &= ~(1<<bit) schreiben
  ich werde beim löschen immer &= ~(1<<bit) schreiben
  ich werde beim löschen immer &= ~(1<<bit) schreiben

Danke Roland

Autor: Reiner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Roland,

Wie wäre es denn mit
MCUCR ^= (1<<ISC00);

Reiner

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Genau. Und zusätzlich (vorausgesetzt die Möglichkeit besteht): Wenn Du
anstelle des 90S2313 nen Tiny2313 nimmst (pinkompatibel), brauchst Du
die Umschalterei evtl. gar nicht zu machen, weil die externen
Interrupts da auch auf Reaktion auf 'any logical change'
programmierbar sind (also die Konfiguration der ISC0x-Bits, wo beim
90S2313 'reserved' im Datenblatt steht). Dann reagieren sie auf jede
Flanke.

Autor: Werner A. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Reiner
das mit dem ^= kannte ich noch nicht. Ist aber (hoffentlich) besser zu
merken als das andere...
@johnny.m
is für privat und von den 90S2313 hab ich noch nen paar zuhause.
Ansonsten ist das mit dem Tiny bestimmt eleganter.

Besten Dank für die Unterstützung

Werner

Autor: Karl heinz Buchegger (kbucheg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> das mit dem ^= kannte ich noch nicht.

Das macht aber genau genommen, ganz was anderes.
Das toggelt den einen Pin:
War er vorher auf 1, dann wird er auf 0 gesetzt
War er vorher auf 0, dann wird er auf 1 gesetzt

Da du toggeln möchtest, ist das das Werkzeug deiner
Wahl. Das befreit dich aber nicht davon, dir zu merken,
wie man ein Bit (egal ob am Port oder in einer Variablen)
gezielt auf 1 bzw. auf 0 setzt.

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.