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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von tom (Gast)


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


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


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


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

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.