www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVR 128 ICR-Flag-Problem


Autor: Stefan Gabauer (sgix)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi
Hab ein (kleines?!) Problem mit dem Input-Capture-Interrupt des AVR128.
Nachdem ich ihn konfiguriert habe (siehe Code unten bzw Screenshot) 
läuft der Timer1 schon mal, aber er reagiert nicht darauf wenn ich den 
IC-Pin auf '0' setze.
Das IC-Interrupt-Flag wird einfach nicht gesetzt, obwohl der PIND4 die 
richtigen Pegel erkennt und auch übernimmt!

Hab natürlich den Globalen Interrupt freigegeben, die TIMSK gesetzt, die 
Flanke und den Prescaler gewählt und die IC-Quelle (beim 128 kann der IC 
auch vom Analog-Komparator getriggert werden) auf den PIND.4 
eingestellt.
Weiters hab ich schon einen anderen Controller ausprobiert, bei dem ist 
dasselbe (also auch kein def. Chip).

Der Interrupt wird, wenn ich das Flag händisch beim Debuggen setze, 
fehlerfrei ausgeführt.

Wollt jetzt fragen ob irgendwem noch was auf- oder einfällt warum das 
Flag nicht gesetzt wird.

glg Sgix



Hier noch meine Funktion zum Einstellen des IC:

inline void InputCaptureInit(void)
{
  TCCR1A = 0x00;
  /* Input capture noise canceler on, falling trigger edge, prescaler = 
1 */
  TCCR1B = (1<<ICNC1)|(0<<ICES1)|(0<<CS12)|(0<<CS11)|(1<<CS10);
  /* Input capture pin configured to input */
  cbi (IC_DD_REG, IC_PIN);
  /* Enable pullup on IC pin */
  sbi (IC_PORT_REG, IC_PIN);
  /* Enable input capture interrupt */
        sbi(TIMSK, TICIE1);

  /* Clear registers */
  TCNT1 = 0x0000;
  ICR1 =   0x0000;
}

Autor: Magnus Müller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du in der Dokumentation mal nach den "Known issues" gesucht? Evtl. 
handelt es sich um eine Einschränkung im Simulator.

Autor: Stefan Gabauer (sgix)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke!
War ein Problem des Debuggers. Er "übersieht" beim Durchsteppen die 
Flanke am Eingang und somit auch das Interrupt-Flag, das nur einen Takt 
anliegt.
Dieses Problem tritt auch bei Output-Compare auf.
Man muss halt den Interrupt einstellen und einen Break-Point in die ISR 
setzen um debuggen zu können.

thx nochmal

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.