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.
Bei Farnell gibt es auf jeden Fall einen mit 9mm Länge und 3mm Durchmesser. Als ich bei google gesucht habe bin ich auf www.geyer-electronic.de gestoßen, wo es auch welche von 40-100kHz gibt. Die scheinen auf jeden Fall einigermaßen gebräuchlich zu sein.
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
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.
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.