Forum: Mikrocontroller und Digitale Elektronik ATTiny Frequenztoleranzen interner Taktgeber - externer Quarz besser?


von mgolbs (Gast)


Lesenswert?

Hallo,

sicher schon 100x im Forum besprochen... Ich habe bei einem kleinen 
Projekt eine Serie von 4 Geräten mit ATTiny 85 gebaut, überall die 
gleiche Software drauf und festgestellt, dass die Toleranzen in den 
Zykluszeiten schon deutlich zu erkennen sind. Sämtliche Bedingungen sind 
an den Geräten identisch (Versorgung 3,3V Festspannungsregler, 
Temperatur, ...) Werde es mal genauer ausmessen müssen.

Hat jemand Erfahrungen, wie groß die Bandbreite bei den internen 
Taktgebern eines ATTiny ausfallen kann?

Mit einem externen Quarz wird das wohl genauer hinzubekommen sein. Nur 
wie sieht die Energiebilanz zwischen internem Taktgeber und externen 
aus? Braucht eine Lösung mit externem Taktgeber mehr Energie (Gerät mit 
Akkus 4xAAA betrieben)?

Über Tipps und Infos wäre ich sehr dankbar.

Gruß Markus

von Eumel (Gast)


Lesenswert?

Die Antworten auf deine Fragen stehen (oh wunder) im DATENBLATT.

von Ulrich (Gast)


Lesenswert?

Der interne Takt hat etwa 1% Toleranz, ggf. auch etwas mehr bei den 
neueren AVRs.

Beim Quarz hat man eher so 200 ppm = 0.02% Toleranz oder weniger.

Der Energieverbrauch ist mit Quarz sogar eher niedriger - es hängt aber 
ggf. von der Frequenz ab, und welche der Stromsparmodi genutzt werden.

Als Sparsame Variante gibt es noch einen 128 kHz RC Takt, allerdings mit 
noch mehr Toleranz.

von stefan us (Gast)


Lesenswert?

Nicht verwechseln, wenn Du die Fuses setzt:
Ein Quartz am AVR ist NICHT ein externer Oszillator.

Der Interne Oszillator kann wahlweise mit externem Quartz oder mit 
intermer R/C Kombination betrieben werden.

Unter externem Oszillator versteht AVR ein Ding, dass einen sauberen 
Takt mit Logik-Pegeln abgibt uns selbst schwingt. z.B. sowas: 
http://www.reichelt.de/?ARTICLE=13706

Deren Stromaufnahme ist bedeutend höher, als die des internen 
Oszillators. Wenn man sie auf konstante Temperatur hält (was wegen dem 
Metallgehäuse recht einfach ist), liefern sie eine sehr stabile 
Frequenz.

von Thomas E. (thomase)


Lesenswert?

stefan us schrieb:
> Nicht verwechseln, wenn Du die Fuses setzt:
> Ein Quartz am AVR ist NICHT ein externer Oszillator.
>
> Der Interne Oszillator kann wahlweise mit externem Quartz oder mit
> intermer R/C Kombination betrieben werden.
>
> Unter externem Oszillator versteht AVR ein Ding, dass einen sauberen
> Takt mit Logik-Pegeln abgibt uns selbst schwingt. z.B. sowas:
> http://www.reichelt.de/?ARTICLE=13706
>
> Deren Stromaufnahme ist bedeutend höher, als die des internen
> Oszillators. Wenn man sie auf konstante Temperatur hält (was wegen dem
> Metallgehäuse recht einfach ist), liefern sie eine sehr stabile
> Frequenz.

Klasse. Jetzt hast du bei jemandem, der sich unsicher ist, mit absoluter 
Sicherheit sämtliche Klarheiten beseitigt. Nirgendwo steht geschrieben, 
daß Atmel unter einem externen Oszillator irgendein Ding versteht.

Zum Betrieb mit Quarz wird per Fuse "Ext.Crystal Osc." eingestellt!

Der Betrieb mit einem externen Takt nennt sich "Ext. Clock"!
Dabei kann es sich auch um das oben genannte Ding handeln. Aber im 
Grunde ist es hierbei völlig egal, wo der Takt herkommt. Und wenn den 
jemand trommelt.

mfg.

: Bearbeitet durch User
von kopfkratzer (Gast)


Lesenswert?

kopfkratz
Ja nun welche Genauigkeit wird denn benötigt bzw. was ist das 
eigentliche Problem ?
Gehe mal ohne interne Kalibrierung von max. 5% Toleranz aus.
Wenn der Tiny85 intern kalibriert wird kann auch unter 1% Toleranz 
herauskommen.
Externer Quarz reicht in jedem Falle für eine genaue Sekunde.
Externer Quarzoszillator gibt's auch mit 1ppm oder weniger (wenn der 
Preis egal ist).
Also was genau ist das eigentliche Problem ?

von Falk B. (falk)


Lesenswert?

@ mgolbs (Gast)

>Projekt eine Serie von 4 Geräten mit ATTiny 85 gebaut, überall die
>gleiche Software drauf und festgestellt, dass die Toleranzen in den
>Zykluszeiten schon deutlich zu erkennen sind.

Wie groß denn?

>Temperatur, ...) Werde es mal genauer ausmessen müssen.

Tu das.

>Hat jemand Erfahrungen, wie groß die Bandbreite bei den internen
>Taktgebern eines ATTiny ausfallen kann?

Man spricht hier von Toleranz. Ohne Kalibrierung hat man locker mal 10% 
und mehr!

>Mit einem externen Quarz wird das wohl genauer hinzubekommen sein.

Deutlich. Die Frage ist aber, ob das nötig ist.

> Nur
>wie sieht die Energiebilanz zwischen internem Taktgeber und externen
>aus? Braucht eine Lösung mit externem Taktgeber mehr Energie

Bei Betrieb mit Quarz ist der Energieverbrauch höher, je nach Modell und 
Frequenz vielleich 10-30uA. Siehe Sleep Mode.

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


Lesenswert?

Ulrich schrieb:

> Beim Quarz hat man eher so 200 ppm = 0.02% Toleranz oder weniger.

Normalerweise viel weniger.

> Der Energieverbrauch ist mit Quarz sogar eher niedriger

Das stimmt nun gerade nicht.  Nichtmal so, rein für den Oszillator,
erst recht nicht, wenn man häufig schlafen gehen will und dann beim
Aufwachen erstmal den Quarzoszillator anleiern muss.  Aufgrund der
hohen Güte eines Quarzes braucht ein Quarzoszillator nämlich endlos
lange, bis er stabil läuft.  In dieser Zeit zieht er „unproduktiv“
(da die CPU mit dem Takt noch nicht arbeiten kann) Strom.  Der
RC-Oszillator dagegen ist nach 6 Takten stabil und kann die CPU
antreiben.

von c-hater (Gast)


Lesenswert?

Jörg Wunsch schrieb:

> Ulrich schrieb:
>
>> Beim Quarz hat man eher so 200 ppm = 0.02% Toleranz oder weniger.
>
> Normalerweise viel weniger.

Na so viel weniger nun auch wieder nicht. Typisch sind 35..50 ppm für 
den Quarz selber. Bei Normbedingungen!!! Mit Temperaturdrift, 
insbesondere auch von Bürdekapazitäten und Oszillator muß man einfach 
mit 200ppm rechnen. Alles andere wäre unseriös.

Mit sowas kann man höchstens BWLer/Werbeblättchen-Leser verarschen, aber 
keine Techniker/Datenblatt-Leser.

von Stefan F. (Gast)


Lesenswert?

> Zum Betrieb mit Quarz wird per Fuse "Ext.Crystal Osc." eingestellt!

Tatsächlich. Ist aber technisch gesehen nicht ganz richtig, finde ich. 
Denn der Quartz ist kein Oszillator. Der Oszillator befindet sich im 
AVR.

Ich würde diese Option "Ext. Crystal" nennen.

von Thomas E. (thomase)


Lesenswert?

Stefan us schrieb:
>> Zum Betrieb mit Quarz wird per Fuse "Ext.Crystal Osc." eingestellt!
>
> Tatsächlich. Ist aber technisch gesehen nicht ganz richtig, finde ich.
> Denn der Quartz ist kein Oszillator. Der Oszillator befindet sich im
> AVR.
>
> Ich würde diese Option "Ext. Crystal" nennen.

Technisch gesehen ist das vollkommen richtig. Der Oszillator ist auf dem 
Controller. Da er keinen Quarz eingebaut hat, ist dieser extern. Im 
übrigen gibt es auch nicht DEN Oszillator, sondern, bei einem Atmega48 
beispielsweise, insgesamt 5.

- Timer/Counter Oscillator
- Crystal Oscillator
- Low-frequency Crystal Oscillator
- Calibrated RC Oscillator
- Watchdog Oscillator

Es wird daher auch nicht zwischen RC und Quarz am Oszillator 
umgeschaltet, wie du oben erzählt hast, sondern es werden verschiedene 
Oszillatoren benutzt.

Zum Betrieb mit einem Quarz benutzt man den "Crystal Oscillator". Da der 
Quarz extern ist, ist das dann "Ext. Crystal Osc.". Das "Ext." bezieht 
sich dabei auf die Lage des Quarzes.

Entweder versteht man das oder man nimmt es einfach so hin. Aber man 
denkt sich keine eigenen Bezeichnungen aus oder interpretiert das so, 
wie man es gerne hätte und verwirrt andere damit.

mfg.

: Bearbeitet durch User
von mgolbs (Gast)


Lesenswert?

Hallo,

vielen Dank für die vielen Informationen und Tipps. Im Kern nehme ich 
mit:
# externer "Taktgeber" min. um ca. Faktor 50 genauer
# externer Taktgeber benötigt "mehr" Energie

# Das Thema interne Kalibrierung unter 1% ist das die Geschichte mit 
"21.4.1 Calibrated Internal RC Oscillator Accuracy". Leider habe ich das 
noch nicht von der Funktion her verstanden. Auch nicht in Verbindung zu 
234 Seiten Datenblatt der ATTiny85. Ist das nur der Schritt von "8MHz" 
auf "6.4MHz" per Fuses, wohl eher nicht? Die Kennlinie sind zu finden, 
nur wo soll ich die Kalibrierungswerte eintragen? In die eigene Software 
mit zwei Sensoren verknüpft? Wohl eher nicht....

# 1% wären auf eine Tag gesehen immer noch ca. 15 Minuten....

# ext. Taktgeber mit 10-30uA sind im Vergleich zu Internal RC 
Oscillator, 128 kHz eine Nummer, in Bezug zu Internal RC oscillator, 8 
MHz schon recht unbedeutend. Leider sind die 128kHz noch mit größeren 
Toleranzen belegt.
 Genauere externe Taktgeber mit niedrigen Frequenzen gibt es schon 
(ähnlich 128kHz..)?

Die Toleranz kommt primär vom ATTiny selbst, oder in bedeutendem Maß 
auch von der Genauigkeit der Versorgungsspannung (Betrachtung bei 
gleicher Temperatur)? Ich arbeite mit 3,3V am ATTiny85.

# Sleep Mode geht bei Anwendung nicht. Diese läuft recht kontinuierlich 
durch mit dem Ziel min. 30Tage.

# Einsatztemperaturbereich real von etwa -10°C...50°C.


Da das ganze per Seriennummer laufen wird, habe ich schon an eine 
Kalibrierung in der Software gedacht. Jedes Gerät eine Seriennummern 
*.hex

Gruß und Dank
Markus

von kopfkratzer (Gast)


Lesenswert?

kopfkratz
Jetzt wissen wir immer noch nicht was Dein eigentliches Problem ist.
Wenn Du sekundengenaue Zeit brauchst nimm einen externen Quarz der 
Deinen Anforderungen entspricht.
Uhrenquarze gibt es auch noch ...

von Ulrich (Gast)


Lesenswert?

Mit einem Uhrenquarz (32,... kHz) am µC bekommt man einen genauen und 
sparsamen Takt, nur halt recht langsam. Für 30 Tage sollte es damit 
reichen.

Einige der AVRs haben auch die Möglichkeit 2 Takte zu nutzen: den 32 kHz 
Quarz für einen Timer und die genaue Zeit, und den internen RC Takt für 
Rechenaufgaben - wenn gerade nichts zu tun ist befindet sich der µC in 
einem Sleep mode.

Attraktiv wäre ggf. noch ein ca. 450 kHz keramischer Resonator statt 
eines Quarz. Der ist nicht ganz so genau wie ein Quarz, aber immer noch 
besser als ein RC Takt und wegen der geringen Frequenz auch nicht so 
Stromhungrig. Über den Teiler für den CPU-Takt kann man die 
Geschwindigkeit und damit den Stromverbrauch der CPU reduzieren - wenn 
man sich die Sleep Modes nicht zutraut.

von mgolbs (Gast)


Lesenswert?

Hallo,

danke für die Antworten. Mein Problem ist im Grunde, dass zwischen den 
einzelnen "Messgeräten" nach ca. 30 Tagen kein Gangunterschied im 
"mehreren Stunden" Bereich liegen darf, bis 1h wäre i.O..

Die Aussage "...Uhrenquarz (32,... kHz)" kingt interessant, lässt sich 
bei mir leider nicht umsetzen, da ich 3 ADC's benötige. An XTAL1 und 
XTAL2 hängen bei mir zwei Sensoren. Einen könnte ich ersetzen aber eben 
nicht beide.


Die 128kHz sind mit noch größerer Toleranz in der Frequenz behaftet als 
die 8MHz/ 6.4MHz.

Zwei Fragen noch:

# 21.4.1 Calibrated Internal RC Oscillator Accuracy >> wie funktioniert 
das eigentlich?

# Wenn ich z.B. 1% Abweichung in Vcc habe, sind dann dadurch auch schon 
bedeutende Abweichungen in der 128kHz Frequenz zu erwarten? Figure 
22-43. Calibrated 1.6 MHz RC Oscillator Frequency vs. VCC würde dies 
grundsätzlich erwarten lassen, aber nicht in gleichem Maß (1%Vcc >> 
"0,1% f".

Ich werde wohl mit 128kHz intern weiter arbeiten, und jedes Gerät 
kalibrieren sowie dann im Code die Toleranzen gegenrechnen.

Gruß und Dank Markus

von hufnala (Gast)


Lesenswert?

Hi,
Ich habe irgendwo mal gelesen, dass du einen der uC als Master nehmen 
kannst, der den Takt ausgibt und die anderen mitsteuert. Die absolute 
Genauigkeit ist definitiv nicht hoeher, aber relativ koennte es besser 
werden. Ggf. kannst Du auch durch ein clock Signal synchronisieren (uart 
zeitsignal verteilen). Theoretisch kannst Du die SW gleich halten und 
ueber ein Flag im EEPROM Master - Slave auswaehlen.

//hufnala

von Ulrich (Gast)


Lesenswert?

Der 128 kHz Takt ist nicht besonders stabil. Der interne RC Takt ist da 
schon deutlich besser. Eine 1% Änderung bei VCC ist da noch nicht so 
kritisch. Auf weniger als 1 h nach 30 Tagen zu kommen wird aber schwer 
bis unmöglich.
Wenn der ADC gebraucht wird, wird es mit einem 32 kHz Takt für die CPU 
ohnehin nicht gut gehen, das ist zu langsam für den ADC (zumindest 
außerhalb der Spezifikation).

Wenn die Pins so knapp sind, dass ein externer Quarz (XTAL1 und XTAL2) 
nicht geht - wird es sowieso schwer. Da muss man dann schon überlegen 
einen etwas größeren µC (etwa Mega88) zu nutzen so dass man einen 
externen Quarz oder Resonator nutzen kann.

Ich sehe da 2 Möglichkeiten:
Ein 450 kHz Resonator als Takt, ggf. mit Berücksichtigung der 
individuellen Frequenz. Das sollte von Stromverbrauch noch gehen, wenn 
der µC einen Teil der Zeit in Sleep Modes ist, oder ggf. der Takt noch 
intern durch 4 geteilt wird.

Ein Uhrenquarz um Timer2 Asynchron laufen zu lassen. Die CPU kann dann 
mit 128 kHz oder dem internen RC.

von m.n. (Gast)


Lesenswert?

mgolbs schrieb:
> Die Aussage "...Uhrenquarz (32,... kHz)" kingt interessant, lässt sich
> bei mir leider nicht umsetzen, da ich 3 ADC's benötige. An XTAL1 und
> XTAL2 hängen bei mir zwei Sensoren. Einen könnte ich ersetzen aber eben
> nicht beide.

Wäre es möglich, den Tiny85 durch einen Tiny44/84 im 14-pol. SO-Gehäuse 
per Adapterplatine zu ersetzen? Dann wären die Probleme mit ADC + ext. 
Quarz schnell erledigt.

von kopfkratzer (Gast)


Lesenswert?

OK,
letzter Versuch wenn nur ein Pin für externen Takt vorhanden ist geht 
NUR ein Quarzoszillator, ob dann die restlichen Parameter eingehalten 
werden können kann niemand sagen weil halt keine Informationen vorhanden 
sind.
Bau also einen Prototypen mit einem 8MHz Oszillator auf und teste ob das 
paßt.
Wenn nicht anderen µC nehmen ...

von NaNa_JaJa (Gast)


Lesenswert?

lese das kalibrierungs byte aus und verfahre des weiteren laut 
Datenblatt
als Bsp. ATiny15 :

Kal.byte im eeprom ablegen und bei prg Start :
1
;*** Calibration byte - read the value with avr-prog and then store in adr.1
2
.eseg
3
.org 1
4
calbyte:   .DB  0x6b
5
;************************************************************
6
.
7
.
8
.
9
;***** Program Execution Starts Here ***************************************
10
11
reset:    
12
13
; OSCillator calibration byte stored at internal EEPROM location 0x01
14
    ldi  TEMP,1
15
    out  EEAR,TEMP    ; set address=1
16
    sbi  EECR,EERE    ; read strobe
17
    in  TEMP,EEDR    ; get data from eeprom
18
    out  OSCCAL,TEMP    ; and trim oscillator
19
    nop
20
    nop
21
    nop
22
    nop
23
    ; wait for osc.
24
.

von mgolbs (Gast)


Lesenswert?

Hallo,

vielen Dank für die Informationen.

# Tiny44/84 im 14-pol. SO-Gehäuse wird definitiv ein weiteres Layout 
geben. Dann wäre grundsätzlich auch ein solcher Tiny möglich. Die DIL 14 
sind vom Energieverbrauch wohl fast ebenbürtig einzuschätzen? Werde ich 
mal im Hinterkopf behalten und Datenblatt der Tiny44/84 studieren....

# " lese das kalibrierungs byte aus und verfahre des weiteren laut
Datenblatt als Bsp. ATiny15 :" Das werde ich mir mal genauer anschauen - 
Danke!

Gruß & Dank Markus

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.