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
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
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
Such Dir mal die App.Note zum Atmel Butterfly Board (Mega169); dort wird ein 32kHz Quarz verwendet und der interne RC-Osc. damit 'abgeglichen'.
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
@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
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
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
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
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.