TIMER1 macht permanent RESET - warum?

OP #1225323
Lesenswert?
• ▲
▼
Hallo zusammen,

Ich experimentiere das erste Mal damit ein PWM Signal einzulesen und 
zwar mit Timer 1 und dem Input Capture Pin des ATMEGA16.

Ich hab mir also überlegt wie das gehen sollte und muss beim ersten Test 
feststellen dass der Controller jetzt permanent resetet! Ich versteh nur 
überhaupt nicht wie das gehen soll? Hier der Code dazu, hat jemand eine 
Idee warum das passiert?
1
int main(void)
2
{
3
  init();
4
  sei();
5

6
  // Rauschunterdrückung (Bit7) und steigende Flanke (Bit6) erkennen   und CPU-Takt / 8 (enstspr 0,57us)
7
  TCCR1B  = 0b11000010;
8

9
  // Interrupt für ICP (Input Capture Pin) einschalten
10
  TIMSK   = 0b00001000;
11
(...)


Hier setze ich die Timer Register und in der ISR(TIMER1_CAPT_vect) 
subtrahiere ich dann endwert und startwert.

Was kann also hier zu einem permanent auftretenden Reset führen???
#1225327
Lesenswert?
• ▲
▼
Du setzt das falsche Bit, nämlich
OCIE1A: Timer/Counter1, Output Compare A Match Interrupt Enable.
Also wird ein Interrupt ohen ISR ausgelöst->Neustart.
Ich nehme mal an, du willst stattdessen
TICIE1: Timer/Counter1, Input Capture Interrupt Enable
setzen...
Dann mach es doch so:
TIMSK|=(1<<TICIE1);
Dabei kann man sich nicht mehr so leicht um ein Bit verzählen...
#1225553
Lesenswert?
• ▲
▼
Noch ein Tipp, um solche Fehler im Zusammenhang mit irrtümlich aktiven 
Interrupts besser zu finden:
Man kann eine ISR definieren, die alle Interrupts ohne eigene ISR 
abfängt. Das geht mit
ISR(BADISR_vect )
{
}
Darin kann man dann zB eine Warnmeldung per LED/LCD/wasauchimmer 
ausgeben lassen, dass ein nicht eingeplanter Interrupt ausgelöst wurde.

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