Forum: Mikrocontroller und Digitale Elektronik TIMER1 macht permanent RESET - warum?


von Daniel B. (scheinleistung)


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???

von Uwe .. (uwegw)


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...

von Daniel B. (scheinleistung)


Lesenswert?

Danke das wars!

von Uwe .. (uwegw)


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.

von Simon K. (simon) Benutzerseite


Lesenswert?

Uwe ... wrote:
> Dann mach es doch so:
> TIMSK|=(1<<TICIE1);

Jaa, bitte. Damit erleichterst du dir und allen anderen die deinen Code 
sehen das Leben.

von Daniel B. (scheinleistung)


Lesenswert?

Danke für die guten Tipps! Ich werds mir merken!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.