Forum: Mikrocontroller und Digitale Elektronik ATMEGA2561 TIMER2 ASYNC


von Denny S. (nightstorm99)


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?
1
// ASYNCRONEN TIMER2
2
ASSR   = (1<<EXCLK);
3
_delay_ms(1000);
4
TIMSK2 = (1<<TOIE2);
5
TIFR2  = (1<<TOV2);
6
TCCR2B = (1<<CS22) | (1<<CS20);  // PRESCALER 128 (1sek)
7
TCNT2  = 0;
8
9
ISR( TIMER2_OVF_vect )                           
10
{
11
  TCNT2 = 0;
12
  time++;
13
}

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

von Peter D. (peda)


Lesenswert?

Denny S. schrieb:
1
> ISR( TIMER2_OVF_vect )
2
> {
3
>   TCNT2 = 0;

Das TCNT2 = 0; ist Quatsch, raus damit.


Peter

von Stefan E. (sternst)


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.

von Denny S. (nightstorm99)


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

von Karl H. (kbuchegg)


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.

von Denny S. (nightstorm99)


Lesenswert?

Hallo!

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

und der Quarz war kaputt.

Danke, Gruß
Denny

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.