Forum: Mikrocontroller und Digitale Elektronik Mega48 + Real Time w. Sep. Oscillator


von Kurt (Gast)


Lesenswert?

Hallo Fachleute,
was ist das für eine Funktion im Mega48 ..?
Interne Uhr mit eigenem Quarz (bei allen Versorgungsspannungen genau)
oder lieg ich hier falsch?

Gruss Kurt

von Peter D. (peda)


Lesenswert?

Diese Funktion haben fast alle Tiny und Mega-AVRs.

Man kann einen 32kHz Uhrenquarz an T2 anschließen und der arbeitet auch
bei abgeschalteter CPU.

Der einzige Sinn liegt darin, daß dann wesentlich weniger Strom
verbraucht wird. Sowas muß man also nur bei Batterie betriebenen
Schaltungen beachten.

Ansonsten ist der Hauptquarz (z.B. 4MHz) mindestens genau so stabil.
Die Betonung liegt dabei auf Quarz, also nicht der interne RC oder ein
Keramikschwinger.



Peter

von Kurt (Gast)


Lesenswert?

Hallo Peter,
danke für die Antwort.
Mein Verständniss der Mega und Tiny AVR's
besagt: Quarz (z.B. 4 Mhz) an XTAL1 und XTAL2 + passende C anlegen und
intern die Funktion festlegen.
Das "an T2 anlegen" verstehe ich (noch)nicht.
Welche Pinbezeichnung ist das (finde nur T1)?

Vorstellung:
Der 32Khz kann als Taktgeber wirken (ist genauer als WD) um einen
schlafenden AVR zu wecken, welcher dann mit z.B. 4Mhz arbeitet, nach
getaner Arbeit auf 32Khz umschaltet und sich wieder abschaltet.
Stimmt das einigermaßen?

Gruss Kurt

von Michael (Gast)


Lesenswert?

Such Dir mal die App.Note zum Atmel Butterfly Board (Mega169); dort wird
ein 32kHz Quarz verwendet und der interne RC-Osc. damit 'abgeglichen'.

von mthomas (Gast)


Lesenswert?

Kenne den Mega48 noch nicht, auf auf den ersten Blick ins Datenblatt
scheint die Vorgehensweise wie beim Mega8. Es ist beim Mega8 nicht
moeglich, einen 32KHz Uhrenquarz und gleichzeitig einen weiteren Quarz
anzuschliessen. Um gleichzeitig den asynchronen Timer (getrieben von
32Khz-XTAL) und einen schnellen Arbeitstakt zu nutzen bleibt dann nur
der interne R/C als 'Haupttaktquelle'.  Die Vorstellung stimmt dann
im Pinzip, jedoch statt externem 4MHz internen auf 4MHz eingestelltem
R/C, ob der abgeglichen sein muss, haengt von der Anwendung ab, falls
keine genauen Timings oder Uart genutzt wird, reicht mglw. auch die
Genauigkeit. "Umschaltung" ist nicht wirklich noetig, der asynchron
getriebene Timer kann immer 'auf 32kHz' laufen. Die genannte AppNote
zum "Abgleich" heisst etwas anders, irgendwas mit "calibrating
internal R/C", findet man aber in der Auflistung bei Atmel.com. Im
Butterfly-Applicationcode findet man jedoch ein
Implementierungsbeispiel.
HTH, Martin

von Christian Zietz (Gast)


Lesenswert?

@Kurt: Im Datenblatt steht's so:
Wenn Du den Mega48 mit einem internen RC-Oszillator als Haupttaktquelle
laufen lässt - und nur dann -, kannst Du an die Pins TOSC1 und TOSC2
(identisch mit XTAL1 und XTAL2) einen 32k-Uhrenquarz hängen und den
Timer2 damit (statt mit der Haupttaktquelle) laufen lassen. Timer2
  wiederum kann den uC aus dem Power-save-Modus wecken. Wie Michael
bereits schrieb, kannst Du den internen RC-Oszillator dann über den
32k-Quarz kalibrieren.
Der Watchdog läuft übrigens mit einem eigenen Oszillator.

Details kannst Du sicherlich selber am besten im Datenblatt nachlesen.

Christian

von Kurt (Gast)


Lesenswert?

Hallo Peter, Michael, Thomas, Christian,

stimmt das?
es kann nur ein externer Quarz oder Ceram.  angeschlossen werden.

Bei Verwendung der seriellen Schnittstelle wandert ev. der interne RC-
Takt zu weit ab (Versorgung von <2V .. 5.5V / Temp -10..35 Grad).
Da ist es dann sicherer den ATMega/Tiny  extern mit Quarz zu takten.

In der geplanten Anwendung sollte der AV alle ca 5..10 sek. kurz
aufwachen und was erledigen.
Diesen Aufwachzyklus wollte ich auch noch zugleich als "Uhr"
verwenden.
Es bleibt also nur der WD-Timer übrig (hier gibt es aber sicher die
gleichen Abweichungen wie bein Internen Taktoszillator).

Frage: kann mit einer 32Khz Taktung ein anständiges Serielles Signal
von z.B. 1200 Baud erzeugt werden?

Gruss Kurt

von Christian Zietz (Gast)


Lesenswert?

Ja, es kann nur ein externer Quarz angeschlossen werden. Aber wie
bereits mehrfach erwähnt wurde, kann man den internen Oszillator für
die serielle Schnittstelle mit einem 32ki-Quarz, der Timer2 steuert,
kalibrieren, ggf. halt jedesmal bevor Daten übermittelt werden. Der AVR
Butterfly macht das so und dort funktioniert die RS232.
Den WD-Oszillator kann man zwar auch zum Aufwecken verwenden (löst halt
einen Reset aus), doch als Uhr ist der imo zu ungenau, da nicht
kalibrierbar.

Christian

von Kurt (Gast)


Lesenswert?

Hallo Christian,

das mit der Korrektur des internen RC vor der Benutzung hatte ich nicht
geschnallt (kann nicht englisch, wurstle mich halt so durch).
Das heisst wenn ich eine "Uhr" brauche (Uhr heisst für mich zyklisch
genau wiederkehrende Ereignisse) dann ist ein 32kHz Q. hilfreich.
Braucht aber Energie.
Wenn meine "Uhr" nicht so wichtig ist oder extreme Sparsamkeit an
Stromverbrauch ansteht ist es sinnvoll den AT...  mit WD zu betreiben,
(aufwecken) dann mit externen Quarz zu takten (wegen der UART).

Kurt

von Christian Zietz (Gast)


Lesenswert?

Stichwort Energie: Du müsstest für Deinen Anwendungsfall mal nachmessen,
wie groß der Unterschied im Stromverbrauch zwischen
1.) Timer2 mit 32ki-Quarz im Power-Save-Modus und
2.) WD-Oszillator im Power-Down-Modus
ist. Liegt vermutlich im einstelligen Mikroampere-Bereich.

Außerdem musst Du berücksichtigen, dass der AVR mit einem externen
Quarz mehr Zeit zum Aufwachen (Stichwort: "start-up time") benötigt,
als mit dem internen RC-Oszillator. Diese Aufwachphase kostet auch
wieder Energie.

Christian

von mthomas (Gast)


Lesenswert?

Kurt,
das "Pflichtenheft" scheint mir:
1 geringer Stromverbrauch
2 alle 5-10 sekunden 'etwas machen'
3 UART-Anschluss
4 Echtzeituhr
Dafuer bietet sich die Loesung mit dem 32kHz-XTAL wirklich an. Die
Loesung über WD wuerde ich nicht weiter verfolgen, habe ich allerdings
auch noch nie gemacht. Vorschlag f. Vorgehensweise im Prinzip:
- 32 KHz an die TOSC1/2 (XTAL1/2) Anschluesse
- Haupttakt auf internen R/C stellen (Fuse), diesen auf 4 MHz (besser
1MHz doch geringerer Stromverbauch) mittels Prescaler. Wenn richtig
gesehen, hat der Mega48 auch den ueber Prescaler in Software
einstellbaren R/C-Takt auf Basis 8MHz, fuer 4MHz als 8/2 fuer 1MHz
8/8.
- den Timer 2(?grade nicht sicher welche, Nummer vgl. Datenblatt) auf
asychronen Betrieb einstellen - Interrupt jede Sekunde
- in der Interrupt-Routine Echtzeituhr weiterzaehlen (Punkt 4)
- in der Interrupt-Routine und alle 5(...10) Sekunden ein globales Flag
setzen
- im Hauptprogramm globales Flag pruefen, die gewünschte Operation
ausführen, dann Flag löschen (Punkt 2)
- dannach oder wenn Flag nicht gesetzt Power-Save Sleep-Mode aktivieren
(Punkt 1), der Asynchrone Timer-Interrupt weckt den Controller jede
Sekunde wieder auf (der Hauptgrund fuer den asychronen Modus) und
zaehlt die Uhr weiter, setzt gegf. Flag usw. usw. (Hauptschleife)
Zur Kalibierung. Prinzip: Es laufen zwei Timer. Einer getrieben vom
genauen 32kHz Quarz (A) ein weiterer vom noch relativ ungenauen
internen RC (B). Man setzt beide Timer-Zaehler zurueck und wartet ein
wenig. In der Wartezeit haben beide Timer ihren Zaehlerstand erhoeht.
Beide Zaehlerstaende werden in eine Zeitspanne umgerechnet (man kann
einiges vorberechnen, siehe den mehrmals genannten Butterfly-Code).
Sind die Zeitspannen nicht identisch, variiert man OSCCAL nach oben
oder unten, damit wird der interne RC langsamer oder schneller. Dies
macht man so oft, bis die Zeitspannen genuegend genau uebereinstimmen.
Dann ist der interne R/C kalibriert und sicher ausreichend genau fuer
"sauberen UART" (Punkt 3).
Hoffe, das hilft erstmal. Die Details sind vielleicht mit den paar
gegebenen Stichworten leichter aus den englischen Datenblaettern und
Application-Notes zusammenzureimen.
Viel Erfolg - Martin

von Kurt (Gast)


Lesenswert?

Hallo Martin,

danke für Deinen Beitrag!!
Das sieht sehr gut aus.
Geringer Stromverbrauch (32Khz)
leichte "Sekundengewinnung" durch einfache Teilung durch
16-Bit_Register und Int.
Durch weiteres Byte-Register wählbare "Arbeitszeitzyklen" von 1..255
Sekunden.
Abschaltung des Bausteines bis auf Oszill und Zählregister während der
Wartezeit auf Interrupt.
Einfache Quarzabstimmung durch Trimmkondensator.
Verwendung des Internen R/C Taktes durch Regelschleifenabstimmung.
Durch DCF-Anbindung mögliche synchronisierung einer "Echtzeituhr".
Versorgungsspannung von 2..5V  (3 Zellen a' 1.5V)
Freu mich schon darauf.

Gruss Kurt

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.