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
Die Antworten auf deine Fragen stehen (oh wunder) im DATENBLATT.
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.
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.
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
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 ?
@ 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.
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.
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.
> 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.
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
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
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 ...
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.
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
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
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.
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.
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 ...
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 | . |
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.