Hallo, gibt es AVRs an die ich 2 Quarze anschließen kann? Ich möchte mit einem AVR eine RTC realisieren. Dazu hatte ich gedacht einen 32KHz Uhrenquarz zu verwenden. Im Falle eines Stromausfalls könnte sich der AVR schlafen legen, wobei ein Timer mit dem Uhrentakt weiterläuft. Dabei sollte der Stromverbrauch ja relativ gering sein, sodass die Stromversorgung für kurze Zeit mit einem Kondensator überbrückt werden kann. Das Problem ist natürlich, dass so ein Uhrenquarz evtl. nicht so genau ist. Aber natürlich haben sich schon Leute Gedanken gemacht, wie man das Problem lösen kann. Wie zum Beispiel hier: [[AVR - Die genaue Sekunde / RTC]]. Da wird ja, wenn ich das richtig verstehe, der Takt des Uhrenquarzes auf einem Pin des AVR ausgegeben, sodass mit einem Frequenzzähler die exakte Bestimmung der Frequenz möglich ist und mit Hilfe dieser exakt bestimmten Frequenz die Ungenauigkeit des Quarzes kompensiert werden kann. Nun habe ich mich gefragt, ob der AVR die genaue Bestimmung der Uhrenquarzfrequenz nicht selber durchführen kann. Dazu müsste der AVR aber einen genauen Referenztakt zur Verfügung haben, sprich einen zweiten Quarz, mit z.B. 20MHz. Ist das möglich? Ich hoffe ihr könnt mir helfen. Vielen Dank schonmal, Forumsgast
ich persönliche nehme in solchen Fällen den DS1307, der hat seine eigene Pufferbatterie, dann kannst du jederzeit den AVR synchronisieren. AVRs mit 2 Quarzen gibt es meiner Meinung nach nicht.
Forumsgast schrieb: > Das Problem ist natürlich, dass so ein Uhrenquarz evtl. nicht so genau > ist. Mit 10ppm sind die zwar nicht so genau wie eine Funkuhr, aber genauer als ein üblicher Rechnerquarz (30-50ppm). Diverse 40-Pinner aufwärts, wie beispielsweise der Mega32, besitzen einen Timer, den man unabhängig vom Coretakt mit einem separat angeschlossenen Uhrenquarz betreiben kann. Es gibt also sehr wohl Modelle mit 2 Quarzen. Beim Mega8 und Derivaten gibt es diesen Timer auch, aber man kann nur einen einzigen Quarz anschliessen, d.h. mit Uhrenquarz am asynchronen Timer muss der Core über den RC-Osz getaktet werden. Wenn der AVR selbst keinen sehr genauen Takt benötigt, dann kann man auch den internen RC-Oszillator für den Core verwenden. Und mit dem Uhrenquarz automatisch justieren.
1. Ich würds wie prx machen 2. aber wenn dus anders willst, kuk ma des ds von den gößeren avrs (z.B. mega16) da gibts XTAL und TOSC (als alternative Pin-Funktionen). du hängst an xtal deinen normalen Quarz (also den wo du mit 20MHz genannt hast) und an tosc den Uhrenquarz (der mega hat sogar interne kondis). PS: Der Mega644 geht auch is aber bissele groß dafür
Ein Uhrenquarz hat standardmaessig 10ppm oder weniger. Ein normaler Quarz hat 100ppm. Es macht also wenig Sinn, einen Vergleich mit billigstkomponenten selbst durchfuehren zu wollen. Viel sinnvoller ist es periodisch die Uhr mit einer Externen abzugleichen, also nicht den Oszillator, sondern die Zeit.
Danke für eure Antworten! Hatte irgendwie gedacht, dass die 30ppm des 20MHz-Quarz weniger ausmachen, als die 10ppm beim 32KHz-Quarz. Jetzt hab ich nochmal genau überlegt, und festgestellt, dass das Quatsch ist. :) Wird also nichts werden mit der Korrektur des Taktes. Die einzige Möglichkeit, die mir jetzt einfällt, ist, die Quarzabweichung in dem Moment zu berechnen, wenn die Uhr nachgestellt werden muss, weil die Abweichung von der tatsächlichen Uhrzeit zu groß geworden ist. Trotzdem gut, dass es doch AVRs gibt, an die 2 Quarze angeschlossen werden können. Wäre ja blöd, wenn man für die Nutzung der RTC-Funktion auf einen genauen Systemtakt verzichten müsste.
>Trotzdem gut, dass es doch AVRs gibt, an die 2 Quarze angeschlossen
werden können. Wäre ja blöd, wenn man für die Nutzung der RTC-Funktion
auf einen genauen Systemtakt verzichten müsste.
Das ist so nicht richtig. Ich hab einen Synchronisierer geschrieben, der
den internen RC Oszillator auf den 32kHz RTC synchronisiert. So erreicht
man eine 10ppm Praezision eines RC Clocks mit einer beliebigen Taktrate.
@ Forumsgast (Gast) >Uhrenquarzfrequenz nicht selber durchführen kann. Dazu müsste der AVR >aber einen genauen Referenztakt zur Verfügung haben, sprich einen >zweiten Quarz, mit z.B. 20MHz. Ist das möglich? Ja. Hab ich mal mit DCF77 gemacht. Über 24h Abgleich hab ich dann auf ca. 0,1ppm genau automatisch abgleichen können. Wenn man einen WIRKLICH genauen Referenztakt hat, geht es natürlich deutlich schneller. MFG Falk
@ Ziff (Gast) >den internen RC Oszillator auf den 32kHz RTC synchronisiert. So erreicht >man eine 10ppm Praezision eines RC Clocks mit einer beliebigen Taktrate. So genau kannst du den RC Oszillator gar nicht abgleichen, dazu ist der viel zu grob steuerbar. Wenn man unter 1% kommt ist das schon ganz gut und ausreichend für UART. MFG Falk
Falk, das ist korrekt, denn die Routine sollt ja mal fertig sein. Ich wuerde allerdings empfehlen sie bei wechselnden Temperaturen periodisch anzuwerfen, denn die Temperaturdrift ist happig. Wenn man den Synchronisierer integrierend als Prozess mitlaufen liesse ... wuerde man die (Langzeit-) spezifikationen des Quarzes erreichen.
Forumsgast schrieb: > gibt es AVRs an die ich 2 Quarze anschließen kann? Ja, genügend. Alle großen AVRs können das. Ist aber letztlich gar nicht effektiv, da du ja den AVR laufend schlafen legen können willst. Der Quarz-Hauptoszillator braucht dann (bedingt durch die Physik des Quarzes und seiner Schwingung) ziemlich lange, bis er wieder läuft, in dieser Zeit zieht dein Controller schon Strom, obwohl er (da der Takt noch nicht stabil ist) nichts tun kann. Das ist verschenkte Energie. Da du ja den 32-kHz-Quarz als exakte Zeitbasis für die Uhr hast, genügt für den Rest im Allgemeinen die Genauigkeit des RC-Oszillators als Hauptoszillator -- und dieser schwingt vergleichsweise schnell an nach dem Aufwachen. Damit bist du wieder nur bei einem Quarz als Forderung, der nur nicht der Hauptoszillator sein sollte. Dies lässt sich dann bereits mit einem ATmega88 (bzw. seinen größeren und kleineren Geschwistern) umsetzen, da man dort die XTAL-Pins alternativ für den 32-kHz- Oszillator am Timer 2 aktivieren kann. 32-kHz-Quarze brauchen übrigens mehrere 100 ms zum Anschwingen.
Der Hauptoszillator ist einstellbar wie lange der einschwingen soll. 4ms oder 64ms. Das Problem mit dem RTC als Sleep-wakeup ist die ueblicherweise kleine Zeit, die man so einstellen kann, ich glaube mich an 8 sec erinnern zu koennen(prescaler & counter), dh man muss alle 8sec wieder einschlafen und wecken.. Wenn man laenger schlafen moechte waere ev. ein externer RTC angebracht. Ein DS1302 oder so braucht nur 300nA
Ha-jetzt Aber schrieb: > Der Hauptoszillator ist einstellbar wie lange der einschwingen soll. 4ms > oder 64ms. Das ist aber kein Vergleich zum RC-Oszillator, der nach 6 Takten (also < 1 µs) wieder stabil ist. Wie geschrieben, das Problem liegt in der Physik der Quarze, nicht in der Unfähigkeit eines AVRs. Durch ihre hohe Güte schaukelt sich die Schwingung nur langsam auf. Daher brauchen Keramikresonatoren auch nicht ganz so lange. Die 4,1 bzw. 65 ms sind übrigens die zusätzliche Zeit nach einem Reset; die Startzeit nach dem Schlafen beträgt 16 Ki Taktzyklen für Quarze und 1 Ki Taktzyklen für Keramikresonatoren. > Das Problem mit dem RTC als Sleep-wakeup ist die > ueblicherweise kleine Zeit, die man so einstellen kann, ich glaube mich > an 8 sec erinnern zu koennen(prescaler & counter), dh man muss alle 8sec > wieder einschlafen und wecken.. Das ist nicht tragisch, wenn man mit dem RC-Oszillator arbeiten kann. Man erhöht eine Variable, stellt fest, dass nichts weiter zu tun ist, und legt den Prozessor wieder schlafen. Eine externe RTC läuft ja auch nicht nur von der Luft allein. Oft will man ohnehin die Zeit sekundengenau verfolgen können, dann schläft man sowieso nur 1 s lang.
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.