ATmega8 40kHz Quarz

OP #306057
Lesenswert?

Hallo, weiß jemand, ob man bei dem asynchronen Timer2 des ATmega8 auch
einen 40kHz Quarz ranhängen kann? Im Datenblatt stehen immer nur die
berühmten 32768Hz. Und wenn ja müßte man doch auch die internen 36pF
Kondensatoren nehmen können oder?

Ich möchte nämlich eine genaue, niedrige (wegen Stromverbrauch)
Frequenz, mit der ich ein 400Hz Interrupt erzeugen kann.

VDumfG hahgeh.
Gast #306061
Lesenswert?

400Hz Interrupt bei 40kHz sind ja nur 100 Zyklen, da kannst Du nicht
allzu viel machen.

Schon ein nackter Interrupt kostet 10 Zyklen (nur Ein- und Austritt,
nichts gesichert und gemacht).


Peter
OP #306062
Lesenswert?

Naja, ich hab gedacht ich lege den Controller schlafen, und wenn ein
Interrupt kommt dann schmeiße ich den internen Oszillator an, rechne
ein bißchen und dann wieder sleep().
Hab mich alleridngs noch nicht damit beschäftigt, ob das mit dem
Oszillator einschwingen usw. zu lange dauert.
Gast #306063
Lesenswert?

Normalerweise macht man das so:
Den mega(4)8 (ich würde den mega48 nehmen, der ist sparsammer als ein
mega8) betreibt man mit internem 1-8MHz Takt. An Timer 2 kommt ein 32
oder auch 40kHz Quarz. Die Teilerfaktoren stellt man so ein, dass alle
400Hz ein Interrupt erzeugt wird und den AVR aufweckt.
Der Stromverbrauch ist damit nahezu Null, aber während der Messung hat
man die vollen xMIPs zur Verfügung.
Mit 2 1,5V Batterien läuft ein mega48 mit DS1820 Temperatursensor jetzt
schon über einem viertel Jahr.
Gast #306064
Lesenswert?

Das könnte auch mit einem 32768 Hz Quarz gehen:
32768 / 400 = 81,92
32768 / 82 = 399,6097
Wenn es noch genauer gehen soll, den Timerwert 11,5 mal auf 82 und zum
Ausgleich einmal auf 81 setzen (sozusagen ein negatives
Schalt"jahr").
Besser gesagt: von 12 Zyklen müssen 1 mit 81 und 11 mit 82 geteilt
werden, das ist schon recht genau:
12 * 32768 / (1*81+11*82) = 400,0162

Ganz genau ist: von 25 Zyklen müssen 23 mit 82 und 2 mit 81 geteilt
werden, also 11*82 + 1*81 + 12*82 + 1*81 = 2048

(2 + 23) * 32768 / (2*81 + 23*82) = 400

Nebenbei:
Solche Berechnungen mache ich ganz gerne mit dem Windows Calc.
Aufruf mit
 - Windowstaste drücken und loslassen -> Startmenü erscheint
 - u drücken für aUsführen
 - calc eingeben (steht bei mir immer schon da)
 - Enter drücken (Calc startet, einmalig auf Ansicht | Wissenschaftlich
umschalten Alt-a Alt-w)

in den Editor / IExplorer gehen,
die Formel einschließlich =  markieren (z.B. mit Shift-Ende)
(2 + 23) * 32768 / (2*81 + 23*82) =
Strg-c für Kopieren
Alt-Tab für Taskwechsel in den Calc
Strg-v für Einfügen, schon rattert er die Tastendrücke durch und zeigt
mir das Ergebnis, das kann man wieder mit Strg-c kopieren
mit Atl-Tab in den Editor springen
mit Ende-Taste an das Zeilenende
mit Strg-v das Ergebnis einfügen, fertig.

Evtl. Formel vorher öfters pasten und für eine Neuberechnung
modifizieren.

Der Calc ist recht genau (32 Stellen) und kann auch hex (F5) / dez (F6)
/ okt (F7) und bin (F8) (um-)rechnen.
Für diverse Funktionen gibt es Tastenkürzel, die auch mit Copy-Paste
funktionieren, z.B.  1/x ist r , steht alles in der Calc-Hilfe unter
Index | Tastaturentsprechungen und Index | Tastenfolgen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren