Hallo Zusammen Ich arbeite derzeit mit einem ATtiny1614 und habe festgestellt, dass die interne Uhr nicht besonders genau ist – ich habe Abweichungen von bis zu 30 Sekunden pro Stunde festgestellt. Nun habe ich gesehen, dass es die Möglichkeit gibt, einen externen 32-kHz-Quarz an TOSC1 und TOSC2 anzuschließen, um die Uhr darüber laufen zu lassen. Jetzt zu meinem Problem: Ich bin in diesem Bereich nicht besonders erfahren. Hat jemand so etwas schon einmal gemacht oder Erfahrung damit, wie man dabei genau vorgeht?
Paul schrieb: > Jetzt zu meinem Problem: Ich bin in diesem Bereich nicht besonders > erfahren. Hat jemand so etwas schon einmal gemacht oder Erfahrung damit, > wie man dabei genau vorgeht? Man schaut auf Seite 512 des Datenblatts nach den Eigenschaften des Oszillators. Und im Datenblatt des Quarzes nach der notwendigen kapazitven Last, damit der auf Nennfrequenz schwingt. Danach wählt man die beiden Lastkondensatoren nach GND aus. Das hängt natürlich auch etwas vom Layout ab, es geht da ja nur um wenige pF. Für einen 12pF Quarz nimmt man z.B. testhalber zwei 18pF Kondensatoren.
Paul schrieb: > Hat jemand so etwas schon einmal gemacht oder Erfahrung damit, > wie man dabei genau vorgeht? Man liest im DB (mindestens) die relevanten Abschnitte und wendet dann das Gelernte an. Ich kann aus Erfahrung sagen: dieses Vorgehen führt (meistens) zum Erfolg.
Alexander S. schrieb: > https://www.mikrocontroller.net/articles/AVR-Tutorial:_Equipment#Erg%C3%A4nzende_Hinweise_zur_Taktversorgung_(kann_%C3%BCbersprungen_werden) Das ist weitestgehend unpassend, bezieht sich auf die Systemtaktversorgung eines Atmega8.
Paul schrieb: > Ich arbeite derzeit mit einem ATtiny1614 und habe festgestellt, dass die > interne Uhr nicht besonders genau ist – ich habe Abweichungen von bis zu > 30 Sekunden pro Stunde festgestellt. Und was verwendest du dabei für die RTC als Taktquelle? > Hat jemand so etwas schon einmal gemacht oder Erfahrung damit, > wie man dabei genau vorgeht? Der Hersteller wird die verschiedenen Clock Optionen für die RTC nicht ohne Grund vorgesehen haben und das sicher auch getestet haben. Im Datenblatt auf S. 2 sind als Taktquellen ein externer Quarz, ein externer Takt oder der internale RC-Oszillator aufgeführt. https://ww1.microchip.com/downloads/en/DeviceDoc/ATtiny1614-16-17-DataSheet-DS40002204A.pdf
> Man schaut auf Seite 512 des Datenblatts nach den Eigenschaften des > Oszillators. Und im Datenblatt des Quarzes nach der notwendigen > kapazitven Last, damit der auf Nennfrequenz schwingt. Danach wählt man > die beiden Lastkondensatoren nach GND aus. Das hängt natürlich auch > etwas vom Layout ab, es geht da ja nur um wenige pF. > Für einen 12pF Quarz nimmt man z.B. testhalber zwei 18pF Kondensatoren. Ich habe momentan den Quartz an eben TOSC1 und TOSC2 ghängt und je ein 15pF an GND. Mein Problem bezieht sich mehr auf den Code. Mein Problem bezieht sich auf die Fuses: Ich möchte den externen Quarz als CPU-Takt betreiben. Welcher CKSEL-Fuse-Wert (Low-Fuse) und welche STARTUP-Option (High-Fuse) sind dafür nötig? Ich programmiere mit avrdude über UPDI – Ich habe das Gefühl ich habe hier die falschen Werte: -U lfuse:w:…:m -U hfuse:w:…:m -U efuse:w:…:m
Rainer W. schrieb: > Paul schrieb: >> Ich arbeite derzeit mit einem ATtiny1614 und habe festgestellt, dass die >> interne Uhr nicht besonders genau ist – ich habe Abweichungen von bis zu >> 30 Sekunden pro Stunde festgestellt. > > Und was verwendest du dabei für die RTC als Taktquelle? Ich verwende momentan keine externe Taktquelle. Als ich habe sie angehängt, aber die Uhr läuft immer noch über den Internen 32 kHz-RC-Oszillator. Das ist genau das, was ich ändern möchte
Paul schrieb: > Welcher CKSEL-Fuse-Wert (Low-Fuse) und welche STARTUP-Option (High-Fuse) > sind dafür nötig? Da läuft bei diesen Chips sehr viel über Register, nicht über Fuses. z.B.: 23.4 RTC Functional Description
H. H. schrieb: > Da läuft bei diesen Chips sehr viel über Register, nicht über Fuses. Das ja. > z.B.: 23.4 RTC Functional Description Das nein, irrelevant für die angestrebte Benutzung als Systemtakt. Eher passend: Abschnitt 10. CLKCTRL (allgemein für die Übersicht über's Taktsystem) und im Speziellen 10.5.1 und 10.5.9
Ob S. schrieb: > die angestrebte Benutzung als Systemtakt. Paul schrieb: > um die Uhr darüber laufen > zu lassen. Ja, später hat er noch vom Systemtakt geredet.
> Ich möchte den externen Quarz als CPU-Takt betreiben. > die Uhr läuft ... was ich ändern möchte Soll nun nur RTC oder gleich die ganze CPU mit den 32 KiHz laufen?
Paul schrieb: > Mein Problem bezieht sich auf die Fuses: Ich möchte den externen Quarz > als CPU-Takt betreiben. Das ist halt schon relativ sehr langsam. In der Regel verwendet man den XOSC32K als Takt für die RTC, nicht für die CPU. Wie andere schon schrieben, erfolgt die Clock-Konfiguration bei den moderneren AVRs, so auch diesem, über die CLKCTRL-Register, nicht mehr über Fuses. Wie genau, ist im Abschnitt '10. CLKCTRL - Clock Controller' des Datenbuchs hinreichend beschrieben. Bei mangelnden Englischkenntnissen hilft mittlerweile ein beliebiger KI-Übersetzer.
Johannes F. schrieb: > Das ist halt schon relativ sehr langsam. In der Regel verwendet man den > XOSC32K als Takt für die RTC, nicht für die CPU. Kommt halt auf's konkrete Projekt an, was sinnvoller ist. Oft kann man aus dem Stehgreif nicht mal sagen, was sinnvoller ist, sondern muss das genauer untersuchen. Aber ich würde dir insofern Recht geben, dass bei dieser Untersuchung wohl in den allermeisten Fällen herauskommen wird, das die Variante mit RTC und internem RC-Takt als Systemtakt (natürlich in Kombination mit der Nutzung der Schlafmodi) energetisch die effizientere Lösung ist.
Paul schrieb: >> Man schaut auf Seite 512 des Datenblatts nach den Eigenschaften > des >> Oszillators. Und im Datenblatt des Quarzes nach der notwendigen >> kapazitven Last, damit der auf Nennfrequenz schwingt. Danach wählt man >> die beiden Lastkondensatoren nach GND aus. Das hängt natürlich auch >> etwas vom Layout ab, es geht da ja nur um wenige pF. >> Für einen 12pF Quarz nimmt man z.B. testhalber zwei 18pF Kondensatoren. > > Ich habe momentan den Quartz an eben TOSC1 und TOSC2 ghängt und je ein > 15pF an GND. Gut. Und funktioniert es? > Mein Problem bezieht sich auf die Fuses: Ich möchte den externen Quarz > als CPU-Takt betreiben. Du möchtest die CPU mit 32kHz betreiben? Das ist ca. 81x langsamer als der Default-Takt von 2.66MHz. Es ist normalerweise kein Problem, nur die RTC mit dem externen Quarz zu betreiben, die CPU jedoch mit dem internen RC-Generator.
Paul schrieb: > Ich arbeite derzeit mit einem ATtiny1614 und habe festgestellt, dass die > interne Uhr nicht besonders genau ist – ich habe Abweichungen von bis zu > 30 Sekunden pro Stunde festgestellt. Bei Taktung mit einem RC-Oszillator sollte man auch nicht sonderlich überrascht sein. ______________ > Nun habe ich gesehen, dass es die Möglichkeit gibt, einen externen > 32-kHz-Quarz an TOSC1 und TOSC2 anzuschließen, um die Uhr darüber laufen > zu lassen. Das ist genau für die Genauigkeit, die man sucht, auch gedacht worden. Die kleine Restabweichung am Tag, die es auch hier je nach Bedingungen geben wird, muss man dann schon selbst korrigieren. Bei der RTC des STM32 wird auch intern eine Hardwarelösung angeboten – die Auflösung dieses Korrekturverfahrens ist gar nicht so schlecht, ansonsten macht man die Korrektur des kleinen Rests halt in Software. ______________ > Jetzt zu meinem Problem: Ich bin in diesem Bereich nicht besonders > erfahren. Hat jemand so etwas schon einmal gemacht oder Erfahrung damit, > wie man dabei genau vorgeht? Wie bereits von anderen erwähnt wurde – Erfahrung kann und sollte man sammeln. Man macht es am besten so, dass man das Datenblatt punktuell an der entsprechenden Stelle (manchmal bis zum Erbrechen) studiert und mit dem 'etwas Tun' anfängt – man codet nicht alles auf einmal, sondern immer nur in kleinen Schritten, auf das bereits Getestete und Funktionierende aufbauend. Und immer daran denken, dass es bei den Registerzugriffen der neueren AVRs oft nur über die Configuration-Change-Protection (CCP) läuft, ansonsten werden die Versuche, Änderungen herbeizuführen, einfach ignoriert. Vom nur „Kopieren und Einfügen” der anderen wird in puncto Erfahrung nicht besonders viel passieren. Sich etwas von anderen abschauen, kann andererseits natürlich auch sehr hilfreich sein, birgt aber auch oft das Risiko, dass Dinge im Netz oft falsch gemacht werden und man es dann so lernt und übernimmt – so etwas sieht man auch oft hier auf µC.net unter den Usern.
:
Bearbeitet durch User
Danke für all die Fragen und Einwände. Das hat mir bereits einige Fehler aufgeklärt, die ich gemacht habe. Ich werde anhand der neuen Informationen weiter testen und ein update dazu posten. Dann kann ich auch auf die bisherigen Fragen eingehen, um dann weiter zu testen.
Siehe Datenblatt "10.2.1 Block Diagram - CLKCTRL". Man route den "32.768 kHz Ext. Crystal Osc." zur RTC und den "OSC20M Int. Oscillator" zur CPU.
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.