Atmega48 Timer2 als Impulszähler mit externem Takt

Gast #761669
Lesenswert?
• ▲
▼
Hallo
Ich möchte den Timer2 als Impulszähler verwenden, getriggert von einem 
externen Takt (Rechteck-Impulse) an TOSC1 (PB6). Ich habe jetzt das 
Problem, dass der Interrupt nach Freigabe ständig ausgelöst, ohne dass 
der Takt überhaupt anliegt.

Hier meine Initialisierung  von Timer2
  DDRB &= ~_BV(PB6); // PB6/XT1 input

  TIMSK2   &=~(_BV(OCIE2A)|_BV(OCIE2B)|_BV(TOIE2));
  ASSR  |= _BV(EXCLK);
  ASSR   &= ~_BV(AS2);
  TCCR2A    = 0x00;
  TCCR2B   |= 0x01;
  TCNT2   = (uint8_t)MAX_COUNTS-IMPULSES;  // 255-25
  OCR2A   = 0x00;
  OCR2B   = 0x00;
  while (ASSR&0x1F);
  TIMSK2   |= _BV(TOIE2);
  TIFR2  |= _BV(TOV2);

und die ISR dazu
ISR (TIMER2_OVF_vect)    // timer2 overflow interrupt
{
    imp++;
    TCNT2 = (uint8_t)(MAX_COUNTS-IMPULSES;);
}

Weiss jemand ob der Timer2 überhaupt mit einem externen asynchronen Takt 
betrieben werden kann. Oder ist der Timer2 nur für einen externen 32kHz 
Quarz ausgelegt.

mfg
tom
#761674
Lesenswert?
• ▲
▼
> ASSR  |= _BV(EXCLK);
> ASSR   &= ~_BV(AS2);
Könnte es eventuell sein, dass die Bits beide gesetzt sein müssen? 
Wenn AS2 gelöscht ist, wird der Timer doch vom I/O-Clock getaktet. EXCLK 
selektiert nur innerhalb der asynchronen Betriebsart, ob ein Quarz an 
TOSC1 und TOSC2 oder ein Takt an TOSC1 verwendet werden soll.
Gast #761736
Lesenswert?
• ▲
▼
Genial, das tut.
Mein Problem war auch noch dass ich die Portinitialisierung DDRB &= 
~_BV(PB6) vor kurzem noch nach der Timer2 Initialisierung hatte, dann 
bekommt man auch Probleme.

vielen dank
tom

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