Forum: Mikrocontroller und Digitale Elektronik Atmega48 Timer2 als Impulszähler mit externem Takt


von tom (Gast)


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

von Johannes M. (johnny-m)


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.

von Rolf Magnus (Gast)


Lesenswert?

>  ASSR  |= _BV(EXCLK);
>  ASSR   &= ~_BV(AS2);

Hier liegt vermutlich der Fehler. Wenn AS2 0 ist, wird der Timer intern 
getaktet. Du willst aber externen Takt.

von tom (Gast)


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

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.