Hallo, Bei der Initialisierung eines RTC-Interrupts (Taktquelle: interner 32KHz Osc) bei einem ATMega4808 (intern 16/2=8 MHz Osc) nur wenige Instruktionen nach Reset war dieser nicht funktionsfähig. Lässt man sich länger damit Zeit funktioniert es. Die "Start-up time of this oscillator is the oscillator start-up time (250us) plus four oscillator cycles" (Datenblatt S.81) Also sollte der 32er Osc doch bei eingestellten 64ms Startup-Time in jedem Fall nach Reset verwendungsfähig sein? Ist er aber nicht. Jemand eine Erklärung? Gruß Anton
:
Bearbeitet durch User
Ein 32kHz Quarz kann durchaus mehrere Sekunden benötigen, ehe es eingeschwungen ist. Für das Schreiben in die RTC gibt es Busy-Bits, die danach abzufragen sind.
Peter D. schrieb: > Ein 32kHz Quarz > Busy-Bits Lässt sich denn so ein 32kHz Quarz mit diesem internen ULP Oszillator vergleichen? Und ja, Status Bits gibt es. Zum OSCULP32K Status heißt es aber nur lapidar: "The Status bit will only be available if the source is requested as the main clock or by another module" Gerade das soll ja erst hinterher erfolgen. Aber unabhängig von beidem, mich interessiert eigentlich nur, warum sich der 32er mit seiner Bereitschaft nicht an Datenblattangaben hält.
:
Bearbeitet durch User
Anton M. schrieb: > "Start-up time of this oscillator is the oscillator start-up time > (250us) plus four oscillator cycles" (Datenblatt S.81) > mich interessiert eigentlich nur, warum sich > der 32er mit seiner Bereitschaft nicht an Datenblattangaben hält. Der ist noch so neu, der muss noch üben ;) Aber hast du ein Datenblatt, in dem das spezifiziert ist? In den beiden öffentlich zugänglichen steht nur der typische Wert (zufällig auch 250us), man weiß es also nicht. Zum Vergleich ein paar Werte, die gerade griffbereit waren:
1 | typ. max. Chip |
2 | 180ms 380ms ASTMTXK (MEMS) |
3 | 250ms 350ms DS3231M (MEMS) |
4 | ? 85µs STM32F101 (RC) |
5 | 15µs 40µs STM32F20x (RC) |
6 | 125µs 180µs STM32L412 (RC) |
7 | 2s ? STM32L431 (Quarz) |
8 | 180ms 380ms SiT1552 (MEMS) |
Aber +1 für den Betreff :)
:
Bearbeitet durch User
Bauform B. schrieb: > Der ist noch so neu, der muss noch üben ;) Aber hast du ein Datenblatt, > in dem das spezifiziert ist? Alles öffentlich und preliminary. Die Angabe 250us findet sich ohne weitere Grenzwerte in vielen Datenblättern neuerer Tinys und eben dieser Megas. Bei Deinen Angaben ist schon auffällig, daß die niedrigen 250us zu den typischen Startzeiten interner Oszillatoren passen. Was eben leider immer noch nicht die Frage beantwortet, warum gefuste 64ms Startzeit nicht ausreichen. Bei den vielen Fehlern in den neueren Datenblättern und zuweilen auch den Controller.inc's wird man sich wohl mit der Wahrheit noch etwas gedulden müssen.
:
Bearbeitet durch User
Anton M. schrieb: > "Start-up time of this oscillator is the oscillator start-up time > (250us) plus four oscillator cycles" (Datenblatt S.81) > > Also sollte der 32er Osc doch bei eingestellten 64ms Startup-Time in > jedem Fall nach Reset verwendungsfähig sein? Wie kommst Du darauf? Wie gesagt, es kann Sekunden dauern, bis die "...plus four oscillator cycles" anliegen. Außerdem steht überall: "Note: The RTC peripheral is used internally during device start-up. Always check the Busy bits in the RTC.STATUS and RTC.PITSTATUS registers, also on initial configuration." Mache es einfach!
Peter D. schrieb: > Wie kommst Du darauf? > Wie gesagt, es kann Sekunden dauern, bis die "...plus four oscillator > cycles" anliegen. Warum man dann überhaupt eine startup time angibt wenn es Sekunden dauern kann verstehe ich nicht. Das ist doch eindeutig: 250us plus 4 Takte des 32ers (ca. 120us) < 64ms. Zum Glück sind es real keine Sekunden. > Note: The RTC peripheral is used internally during device start-up. Hier lag der Hase allerdings im Pfeffer. Diese interne Nutzung hält offensichtlich noch an nachdem das Programm ab Reset schon gestartet ist. Das habe ich übersehen. Der Test der Busy-Bits würde die Initialisierung unmittelbar nach Reset ermöglichen. Tatsächlich ist es aber so, daß man sich die Busy-Wartezeit und den entsprechenden Testcode sparen kann wenn man einfach zwischendurch noch was anderes zeitaufwendiges macht, z.B. Speicher initialisieren. Der Zugriff auf die RTC benötige ich nur einmal zu Beginn, um die RTC+PIT Interrupts zu starten.
Anton M. schrieb: > Das ist doch eindeutig: 250us plus 4 > Takte des 32ers (ca. 120us) < 64ms. Nö, muß nicht sein. Damit der Quarz möglichst stabil schwingt, wird nur sehr wenig Energie eingekoppelt, d.h. die Schwingungen bauen sich sehr langsam auf. Und erst, wenn die Triggerschwelle der Digitalschaltung erreicht wird, fangen die 4 Takte an zu zählen. Ich hab mal bei einem AVR gemessen, wann am 8MHz Quarz die Amplitude ihren Endwert erreicht hatte, es waren ~8ms. Rechne ich das mal linear hoch, entspricht das für 32kHz ~2s. Anton M. schrieb: > Tatsächlich ist es > aber so, daß man sich die Busy-Wartezeit und den entsprechenden Testcode > sparen kann wenn man einfach zwischendurch noch was anderes > zeitaufwendiges macht Ich würde ihn trotzdem nicht einsparen, soviel Code kann das ja nicht sein. Und man ist damit immer auf der sicheren Seite. Wer denkt noch an versteckte Fallgruben, wenn man Code nach ein paar Jahren wieder anfaßt.
Peter D. schrieb: > Damit der Quarz möglichst stabil schwingt Der interne 32er sollte doch aber ein RC Typ sein ?! > Ich würde ihn trotzdem nicht einsparen... Damit hast Du wohl Recht. Der Teufel schläft nicht ?
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.