Forum: Mikrocontroller und Digitale Elektronik mega168 async. Timer2 zu schnell


von Tino K. (blumengiesser)


Lesenswert?

Kurrios! Ich hnutze den Mega168PA mit 8Mhz internem und 32,768kHz 
asyncronen Takt für Timer2. Die Routinen funktionieren alle, nur läuft 
der Timer ca. 3 Mal zu schnell. Ich komme nicht auf den Fehler.

Initialisierung:
1
TCCR2B  |= (1<<CS22) | (1<<CS20) | (1<<CS20); // 128- Vorteiler der 32,768 kHz Clock, Timerüberlauf dann genau alle 1 Sekunden
2
ASSR  |= (1<<AS2); // asynchrones Arbeiten
3
TIMSK2  |= (1<<TOIE2); // overflow erlauben

Der Controller geht in den Sleep Modus und in der Software wird bei 
jedem Aufwachen eine Variable um 1 erhöt. Erst dachte ich, der Interrupt 
wird zu oft ausgeführt aber leider ist dem nicht so, die Variablenwerte 
stimmen. (Bei einem bestimmten Wert wird etwas gemacht, dabei die Werte 
geschickt und diese stimmen).

32,768kHz Quarz von Reichelt mit 2x 10pF Kondensatoren. Kann der Quarz 
defekt sein?

Wer hat einen Tip!?

: Bearbeitet durch User
von Uwe (de0508)


Lesenswert?

Hallo Tino,

hast Du das entsprechende Datenblatt und die AP von Atmel zum 32kHz 
Quarz gelesen.

I.A. wird der 32kHz Quarz direkt - ohne Platine dazwischen - an die Pins 
des Atmel gelötete.

Hier ist dein Problem:
1
TCCR2B  |= (1<<CS22) | (1<<CS20) | (1<<CS20);

von g457 (Gast)


Lesenswert?

Nur mal für Spass:

> ASSR  |= (1<<AS2); // asynchrones Arbeiten

..zuerst, dann TCCR2A und TCCR2B explizit setzen (nicht verodern).

von Tino K. (blumengiesser)


Lesenswert?

Uwe S. schrieb:
> Hallo Tino,
>
> hast Du das entsprechende Datenblatt und die AP von Atmel zum 32kHz
> Quarz gelesen.
>
> I.A. wird der 32kHz Quarz direkt - ohne Platine dazwischen - an die Pins
> des Atmel gelötete.

Crystals specifying load capacitance (CL) higher than 6 pF, require 
external capacitors applied as described in Figure
9-2 on page 28.

Den ich habe, der hat 9pF. Also sollte doch alles stimmen

>
> Hier ist dein Problem:
>
1
TCCR2B  |= (1<<CS22) | (1<<CS20) | (1<<CS20);

Bist du sicher? Was genau? Das doppelte war nur bei Probieren, kann man 
schnell auf CS21 ändern...

von Tino K. (blumengiesser)


Lesenswert?

g457 schrieb:
> Nur mal für Spass:
>
>> ASSR  |= (1<<AS2); // asynchrones Arbeiten
>
> ..zuerst, dann TCCR2A und TCCR2B explizit setzen (nicht verodern).

Reihenfolge getauscht, Kurriosität noch da. Wie gesagt, das Teil 
funktioniert, nur halt 3x zu schnell...


> ..zuerst, dann TCCR2A und TCCR2B explizit setzen (nicht verodern).

das Verodern habe ich aber im Tutorial so gelernt...

von Thomas E. (thomase)


Lesenswert?

Tino Kühn schrieb:
> Die Routinen funktionieren alle, nur läuft
> der Timer ca. 3 Mal zu schnell

> Wer hat einen Tip!?

http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/Die_Timer_und_Z%C3%A4hler_des_AVR#Wenn_er_die_Minute_in_20s_schafft

mfg.

: Bearbeitet durch User
von Tino K. (blumengiesser)


Lesenswert?

Thomas Eckmann schrieb:
> Tino Kühn schrieb:
>> Die Routinen funktionieren alle, nur läuft
>> der Timer ca. 3 Mal zu schnell
>
>> Wer hat einen Tip!?
>
> 
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/Die_Timer_und_Z%C3%A4hler_des_AVR#Wenn_er_die_Minute_in_20s_schafft
>
> mfg.

und jetzt geht der Timer auf die Sekunde!

Vielen Dank!!

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.