Forum: Mikrocontroller und Digitale Elektronik Mega4808: Die frühe RTC-Initialisierung fängt NICHT den Wurm


von Anton M. (antonm)


Lesenswert?

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
von Peter D. (peda)


Lesenswert?

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.

von Anton M. (antonm)


Lesenswert?

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
von Bauform B. (bauformb)


Lesenswert?

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
von Anton M. (antonm)


Lesenswert?

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
von Peter D. (peda)


Lesenswert?

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!

von Anton M. (antonm)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

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.

von Anton M. (antonm)


Lesenswert?

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
Noch kein Account? Hier anmelden.