Forum: Mikrocontroller und Digitale Elektronik ATtiny1614 mit externen 32.768khz Quartz


von Paul (paul-h)


Lesenswert?

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?

von H. H. (hhinz)


Lesenswert?

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.

von Ob S. (Firma: 1984now) (observer)


Lesenswert?

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.

von Alexander S. (alesi)


Lesenswert?


von Ob S. (Firma: 1984now) (observer)


Lesenswert?


von Rainer W. (rawi)


Lesenswert?

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

von Paul (paul-h)


Lesenswert?

> 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

von Paul (paul-h)


Lesenswert?

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

von H. H. (hhinz)


Lesenswert?

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

von Ob S. (Firma: 1984now) (observer)


Lesenswert?

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

von H. H. (hhinz)


Lesenswert?

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.

von S. L. (sldt)


Lesenswert?

> 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?

von Johannes F. (jofe)


Lesenswert?

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.

von Ob S. (Firma: 1984now) (observer)


Lesenswert?

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.

von Axel S. (a-za-z0-9)


Lesenswert?

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.

von Gregor J. (Firma: Jasinski) (gregor_jasinski)


Lesenswert?

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
von Paul (paul-h)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

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