AVR 128 ICR-Flag-Problem

OP #1038709
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;
}
Angehängte Dateien:
OP #1038931
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren