mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATMEGA2561 TIMER2 ASYNC


Autor: Denny S. (nightstorm99)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich betreibe einen ATMEGA2561 mit externen 16MHZ Quarz, nun will ich den 
Timer2 Asyncron (32Khz) für eine RTC nehmen, da ich keine externe RTC 
zur Verfügung habe.
Der Atmega 2561 hat ja 2 Pins für XTAL und 2 Pins extra noch für TOSC 
(TIMER2).

Kann man überhaupt 2 externe Quarze benutzen oder muss ich den internen 
verwenden?
// ASYNCRONEN TIMER2
ASSR   = (1<<EXCLK);
_delay_ms(1000);
TIMSK2 = (1<<TOIE2);
TIFR2  = (1<<TOV2);
TCCR2B = (1<<CS22) | (1<<CS20);  // PRESCALER 128 (1sek)
TCNT2  = 0;

ISR( TIMER2_OVF_vect )                           
{
  TCNT2 = 0;
  time++;
}

Problem ist jetzt an meinem Programm noch das die ISR von Timer2 viel zu 
oft, also nicht alle Sekunde aufgerufen wird!
Woran könnte das liegen?

Gruß Denny

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Denny S. schrieb:
> ISR( TIMER2_OVF_vect )
> {
>   TCNT2 = 0;

Das TCNT2 = 0; ist Quatsch, raus damit.


Peter

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Denny S. schrieb:

> Problem ist jetzt an meinem Programm noch das die ISR von Timer2 viel zu
> oft, also nicht alle Sekunde aufgerufen wird!
> Woran könnte das liegen?

Dein Timer2 läuft immer noch mit System-Takt.
Nochmal im Datenblatt die Bedeutung von EXCLK und AS2 nachlesen.

Autor: Denny S. (nightstorm99)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stefan Ernst schrieb:
> Denny S. schrieb:
>
>
> Dein Timer2 läuft immer noch mit System-Takt.
> Nochmal im Datenblatt die Bedeutung von EXCLK und AS2 nachlesen.

Habe schon mal das AS2 Bit gesetzt und auch beide, aber dann ruft er die 
Interruptroutine garnicht mehr auf!

Habe einen Atmega168 und läuft das ganze so ohne Probleme.

Noch jemand ein Tip?


Gruß Denny

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Denny S. schrieb:

> Habe schon mal das AS2 Bit gesetzt und auch beide, aber dann ruft er die
> Interruptroutine garnicht mehr auf!

Das kann dann eigentlich nur bedeuten, dass der 32kHz Quarz nicht 
schwingt. -> Timer zählt nicht -> kein Overflow -> kein Interrupt

>
> Habe einen Atmega168 und läuft das ganze so ohne Probleme.

Schön für den 168

> Noch jemand ein Tip?

Studier im Datenblatt das Kapitel über asynchrone Operation des Timers. 
Das ist alles ziemlich eindeutig beschrieben.

Autor: Denny S. (nightstorm99)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

So Problem gelöst:
ASSR   = (1<<AS2);
_delay_ms(1000);
TCCR2B = (1<<CS22) | (1<<CS20);
TIMSK2 = (1<<TOIE2);

und der Quarz war kaputt.

Danke, Gruß
Denny

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.