www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVR Timer1 im CTC resetten/synchronisieren


Autor: Mario Fischer (superdude)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich betreibe auf einem ATmega32 den Timer1 im CTC-Modus,
so dass ich daraus einen Sekundentakt ableiten kann (nach 
AVR - Die genaue Sekunde / RTC ).
#define TIMER_PRESCALER_FREQ 250

ISR (TIMER1_COMPA_vect)
{
#if (F_CPU % TIMER_PRESCALER_FREQ)
  OCR1A  = (F_CPU/CLOCK24_TIMER_PRESCALER_FREQ) - 1;
#endif

  static uint8_t soft_prescaler = 0x0000;
  if (--soft_prescaler == 0)
  {
#if (F_CPU % TIMER_PRESCALER_FREQ) // handle remainder
    OCR1A = (F_CPU/TIMER_PRESCALER_FREQ) + 
            (F_CPU%TIMER_PRESCALER_FREQ) - 1;
#endif
    LED_TOGGLE; // LED toggeln
    // irgendeine HH:MM:SS uhr +1 sekunde zaehlen lassen
    soft_prescaler = TIMER_PRESCALER_FREQ;
  }
}

Das ganze funktioniert auch wunderbar.
Nun moechte ich das Blinken mit einem externen Event synchronisieren, am 
einfachsten entprellter Tasterdruck in der main()-loop.
Ich verwende dazu folgenden Code
void timer_sync(void)
{
  cli(); // Ints sperren
  TCCR1B = (1<<WGM12); // Timer1 stillegen
  TCNT1 = 0x0000; // Timer1 auf 0 setzen (Hi vor Lo setzen macht der gcc)
  TCCR1B = (1<<WGM12) | (1<<CS10); // Timer1 in CTC Modus
  sei(); // Ints enablen
}

Das Blinken aendert sich aber nicht, sondern ist im gleichen Takt wie 
vorher. Der timer_sync()-Aufruf erfolgt auch wirklich unverzoegert nach 
dem Event.
Kann mir einer sagen, warum der Timer1 meinen timer_sync()-Aufruf 
ignoriert?

Vielen Dank!

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.