Forum: Mikrocontroller und Digitale Elektronik Ext. Takt für T2 > 32KHz möglich?


von Andi (Gast)


Lesenswert?

Hi!

Im PDF zum ATMega16 steht für den T2 den man an TOSC1 und TOSC2 extern
takten kann, das dieser für 32KHz optimiert sei.
Ist es trotzdem möglich, den T2 z. B. mit 100KHz an TOSC1 und TOSC2 zu
takten?

MfG
Andi

von Andi (Gast)


Lesenswert?

Hat denn noch niemand Erfahrung mit einem schnelleren Quarz an TOSC1 und
TOSC2 gemacht?

MfG
Andi

von TravelRec. (Gast)


Lesenswert?

Na ich denke mal, daß die sich bei Atmel was dabei gedacht haben, kein
andere Timer frei, oder intern takten?!

von Sebastian (Gast)


Lesenswert?

meine VERMUTUNG ist das "für 32 khz optimiert" heißt, dass man bei nem
32 khz quarz ohne externe beschaltung auskommt. soll heißen die internen
Kondensatoren sind für diesen quarztyp "optimiert". da man die timer
doch auch als counter nutzen kann wäre eine "nur" 32 khz funktion
ziemlich sinnlos.

von TravelRec. (Gast)


Lesenswert?

Tjaaa im Zweifelsfalle mal probieren, Timer aktivieren und an
irgendeinem Portpin eine LED damit blinken lassen, vielleicht klappt´s
ja auch mit 100kHz, mehr wird aber bestimmt nicht drin sein. Im
Datenblatt steht auch, daß man keinen externen Takt an die TOSC2-Pins
legen sollte, vielleicht sitzt doch mehr empfindlicher Kleinkram
dahinter, als man auf Anhieb vermuten mag.

von Andi (Gast)


Lesenswert?

Vielen Dank für eure Hinweise!
Habe gefragt weil der "große C" um die Ecke keinen 32KHz hat.
Geht erst bei 100KHz los und wegen einem Quarz wollte ich jetzt keine
Bestellung irgendwo aufgeben.
Mit 100KHz kann man evtl. auch bei +/- paar PPM besser abgleichen als
mit 32KHz.
Werde es am WE ausprobieren und sehen, was dabei rauskommt.
Zur Kontrolle der Ganggenauigkeit dient eine bereits existierende Uhr
im AVR welche bisher auf T1 mit 4MHz abgestimmt war.

MfG
Andi

von Andi (Gast)


Lesenswert?

So, habe an den Timer 2 nun einen Mini-Quarz mit 100KHz dran und es
läuft prima.
Die Ganggenauigkeit wird sich noch zeigen was bis jetzt ganz gut
aussieht.
Allerdings verwundert mich eine Anlaufzeit des T2 von ca. 2 Sekunden.
Also nach Einschalten oder flashen dauert es ca. 2 Sekunden bis die vom
T2 getaktete Uhr anläuft.
Der Timer 2 läuft ohne Prescaler (0b001) mit einem Comparewert von 100
was einer Millisekunde entspricht.
Hat der Quarz so eine lange Anschwingzeit oder was ist da los?

MfG
Andi

von TravelRec. (Gast)


Lesenswert?

Naja, das könnte an der hohen Kapazität der internen Trimmung auf die
32kHz liegen, die den 100er Quarz jetzt zu stark bedämpft. Wenn Du
vielleicht die externen Kondis wegläßt?!

von Andi (Gast)


Lesenswert?

Läuft ohne externe Kondensatoren, laut Datenblatt.
Nicht zu verwechseln mit XTAL1 und XTAL2, es geht immer noch um TOSC1
und TOSC2 für den asynchronen Betrieb von T2.

MfG
Andi

von TravelRec. (Gast)


Lesenswert?

Hmm, dann weiß ich auch nicht - kenne die Atmels ja nicht von innen.
Viel Glück noch beim Testen. Uhrenquarze gibt´s übrigens bei Reichelt
unter der Bestellnummer >> 0,032768 << für 22 Cent.

von Andi (Gast)


Lesenswert?

So, nach ein paar längeren Tests der Ganggenauigkeit des 100KHz
Mini-Quarz, so klein wie ein 32KHz Uhrenquarz, läuft dieser, wie sollte
es auch anders sein, um ca. 2,5 Takte je Sekunde zu langsam.
Statt 100KHz sind es 99997,5Hz.
Für die jenigen, die es interessiert läßt sich das per folgendem
ASM-Code abgleichen:

.equ TC2Value=100000/1000-1
Timer2Cmp:
        push  xl    ;  2 Register und SREG retten.
        in  xl,SREG    ;  1
        pushw  x    ;  4

        ldsw  x, Uhr+MilliSek  ;  4 Millisekunden lesen,
        adiw  xl,1    ;  2 + 1
        stsw  Uhr+MilliSek ,x  ;  4 und zurück schreiben.

        lds  xh,Uhr+Sekunde  ;  2 Sekunde lesen.
        andi  xh,3    ;  1 auf Mod 4 prüfen.
        breq  SetMS2    ;1/2 Jede 4. Sekunde keine Taktkorrektur.
        ldi  xh,TC2Value  ;  1 Timerwert für 1ms in xh.
        tst  xl    ;  1 Ist low-Byte von ms = 0?
        brne  SetMS1    ;1/2
        ldi  xh,TC2Value-1  ;  1 Dann Timerwert - 1.
SetMS1:  out  OCR2,xh    ;  1 Compare Register einstellen.

SetMS2:  popw  x    ;  4 Register zurückholen.
        out  SREG,xl    ;  1
        pop  xl    ;  2
        reti      ;  4

Die ISR für Timer2 wird jede Millisekunde aufgerufen.
Zuerst wird Milliesekunde um 1 erhöht.
Als nächstes wird geprüft, ob die Sekunde / 4 = 0 ist. Ist das der Fall
wird keine Korrektur vorgenommen.
Ansonsten wird geprüft, ob das low-Byte der Millisekunden 0 ist.
Das ist der Fall bei einem Wert von 256, 512 und 768.
Dann wird der Timer2-Compare nicht auf 100 sondern auf 99 gesetzt und
somit kommt der nächste Timer2-Aufruf ein Takt früher.
Somit ergeben sich 3 Korrekturen je Sekunde. Da aber jede 4. Sekunde
keine Korrektur vorgenommen wird sind das dann in 4 Sekunden 9 Takte
weniger, das entspricht je Sekunde dann 9 / 4 = 2,25 Takte.

MfG
Andi

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.