Forum: Mikrocontroller und Digitale Elektronik Symbol Counter mit RTC beim ATmega128RFA1


von Daniel P. (pfefferk)


Angehängte Dateien:

Lesenswert?

Moin!

Ich habe mal wieder ein Problem mit dem ATmega128RFA1.

Ich wollte den Symbol Counter einsetzen, um den uC mal länger als ein 
paar Sekunden schlafen zu lassen.

Im Datenblatt steht unter 10.4 Symbol Counter (32bit, SCCNT):

"The symbol counter is a 32 bit counter which can be sourced by a 62.5 
kHz clock,
derived from the 16 MHz system clock or from the RTC (32.768 kHz)."

Wenn ich den Zähler mit dem internen Takt betreibe, funktioniert alles 
wie erwartet. Setze ich hingegen das Bit
1
SCCKSEL (Bit 4, Reg SCCR0)

läuft der Zähler nicht.

An den Pins TOSC1/2 is ein 32 kHz-Uhrenquarz angeschlossen. Der gleiche 
Fehler tritt bei zwei verschiedenen Modulen auf:

http://www.dresden-elektronik.de/shop/prod111.html

und

http://www.dresden-elektronik.de/shop/prod128.html

Ich gehe mal nicht davon aus, dass es sich um einen einheitlichen 
Bestückungsfehler handelt.

Hat da jemand eine Idee? Bin für jeden Hinweis dankbar!

Daniel

von Wayne (Gast)


Lesenswert?

Dafür benötigst du den sogenannten asynchronen Modus, musst du im 
Datenblatt gucken, das kann auch nicht jeder Zähler.

von Daniel P. (pfefferk)


Lesenswert?

Naja, nicht ganz.

Der Symbol Counter ist extra für das Wecken aus dem Schlaf mit großen 
Intervallen vorgesehen und kennt keinen asynchronen Modus. Es lässt sich 
lediglich die "Clock Source" umschalten.

Ich habe von diesem Quarz aus auch schon den Timer2 betrieben und dort 
den asynchronen Modus usw. eingstellt. Damit lief der auch im POWER_DOWN 
weiter.

Beim SCCNT gibt es derartige Einstellungen allerdings nicht.

Gutes Bild der System Clock Sources:

Datenblatt 11.1 Overview (System Clock and Clock Options) auf Seite 147.

von Daniel P. (pfefferk)


Lesenswert?

Hat vielleicht doch noch jemand eine Idee?

Danke!

von Sven (Gast)


Lesenswert?

Hallo Daniel,

Der 32kHz Osczillator wird im ASSR Register eingeschaltet:

         ASSR  = 1<<AS2;                     // enable 32kHz Osc.
         SCCR0 = 1<<SCEN | 1<<SCCKSEL;       // select 32.768kHz clock

von Daniel P. (seraphim) Benutzerseite


Lesenswert?

Danke für die Antwort!

Wenn ich mich wieder dem ATmega widmen kann, muss ich das gleich mal 
nachprüfen!

Ich melde mich dann...

Daniel

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Sven schrieb:

>          SCCR0 = 1<<SCEN | 1<<SCCKSEL;       // select 32.768kHz clock

Das selektiert ihn aber permanent.  Wenn man eine automatische
Umschaltung zwischen dem 16-MHz-Quarz (der exakte 62,5 kHz für den
symbol counter liefert) und dem 32-kHz-Quarz (bei dem die Frequenz
nur approximiert wird und zwischenzeitlich um bis zu 16 µs jittern
kann) möchte, dann lässt man SCCKSEL einfach ausgeschaltet.  Sowie
der 16-MHz-Oszillator abgeschaltet ist (weil der Transceiver-Block
im sleep ist), benutzt der symbol counter dann automatisch den
32-kHz-Oszillator.

Denk auch dran, dass so ein 32-kHz-Quarz einige 100 ms zum
Anschwingen benötigt.

(Daniel, deine ursprüngliche Frage hatte ich damals nicht mitbekommen,
da war ich gerade im Urlaub.  Sonst hätte ich dir schneller 
geantwortet.)

von Daniel P. (seraphim) Benutzerseite


Lesenswert?

Das macht überhaupt nichts, Jörg.

Ich danke Dir vielmals!

Wie gesagt, melde mich, wenn ich das Problem nochmal angehen kann.

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.