mikrocontroller.net

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


Autor: Daniel B. (scheinleistung)
Datum:

Bewertung
0 lesenswert
nicht 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?
int main(void)
{
  init();
  sei();

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

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


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

Autor: Uwe ... (uwegw)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Daniel B. (scheinleistung)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke das wars!

Autor: Uwe ... (uwegw)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Daniel B. (scheinleistung)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die guten Tipps! Ich werds mir merken!

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.