When the bandgap reference voltage is used as input to the ADC, it will take a certain time for
2
the voltage to stabilize. If not stabilized, the first value read after the first conversion may be
3
wrong.
es wird jedoch nirgends angegeben auf was sich die "certain time"
beläuft.
Ist das im Kontext der
1
The first ADC conversion result after switching reference voltage source may be inaccurate, and the user is advised to discard this result.
und kann ich bei einer ausreichende Wartezeit die erste AD-Wandlung
verwenden?
Konkret geht es um eine Ultra-Low-Power Anwendung bei der ich natürlich
die Energie für die erste Wandlung einsparen würde.
Danke für Hilfe
--Stefan
Ich möchte jetzt nicht das Datenblatt nach der Stelle durchsuchen,
welche du übersehen hast.
In den anderen AVR Datenblättern steht die Zeit drin.
Wenn du die Zeit sowieso verwarten musst, kannst du doch genauso eine
erste Messung machen.
Und überhaupt, warum willst du die "reference voltage source" dauernd
umschalten?
(ach, vergiss es, ist mir nicht wichtig)
Ich antworte mal mir selbst.
Im Rahmen des Kapitels 8.2 (wusste garnicht, dass die ein eigenes
Kapitel hat) wird auf die Tabelle 18-4 verwiesen, wo man die Werte
findet:
tBG Bandgap reference start-up time typ 40 max 70 μs
Bleibt die Frage, ob ich nach abwarten der Zeit die erste AD Wandlung
verwenden kann...
Das sind aber 2 Schuhe!
Ein grüner und ein gelber.
Stefan schrieb:> Bandgap reference start-up timeStefan schrieb:> switching reference voltage source
Einen tragfähigen Zusammenhang sehe ich da nicht.
Stefan schrieb:> Konkret geht es um eine Ultra-Low-Power Anwendung bei der ich natürlich> die Energie für die erste Wandlung einsparen würde.
Also im Datenblatt steht schon etwas drin, man muss es nur lesen.
8.2 Internal Voltage Reference
Voltage Reference Enable Signals and Start-up Time
Und dann weiter unter:
18.5 System and Reset Characteristics
Bandgap reference start-up time 40 70 μs
Bandgap reference current consumption 15 μs
Also wenn das nichts ist! Dann einen Daumen hoch!
Quelle: http://ww1.microchip.com/downloads/en/DeviceDoc/doc2535.pdf
Arduino Fanboy D. schrieb:> Das sind aber 2 Schuhe!
Nein, sind es nicht, da die Vref (falls nicht anderweitig verwendet)
erst mit umschalten auf diese als Referenz aktiviert wird und das
verwerfen der ersten Messung daher auf der Instabilität beruhen könnte.
Stefanus F. schrieb:> Nach Abwarten der zeit kannst du die erste Messung verwenden.> Ohne Abwarten solltest du das Ergebnis der ersten Messung verwerfen.
Das bedeutet umgekehrt, wenn die erste Wandlung, welche verworfen wird,
kürzer als die Stabilisierungsdauer ist, kann die zweite Messung
ebenfalls noch ungenau sein.
Z.Zt. läuft die erste Messung bei maximaler Geschwindigkeit, da ich
nicht dachte, dass es von der Zeit abhängt. Also kann ich jetzt
ausknobeln was stromsparender ist ist, Vref setzen und Timer in IDLE
laufen lassen, oder ADC in NOISE REUCTION laufen lassen.
Stefan schrieb:> (falls nicht anderweitig verwendet)
BOD aktiv?
Stefan schrieb:> Nein, sind es nicht,
Wenn du das sagst, dann wird das wohl stimmen....
> Das bedeutet umgekehrt, wenn die erste Wandlung, welche verworfen wird,> kürzer als die Stabilisierungsdauer ist, kann die zweite Messung> ebenfalls noch ungenau sein.
Ja richtig.
Stefan schrieb:> Das bedeutet umgekehrt, wenn die erste Wandlung, welche verworfen wird,> kürzer als die Stabilisierungsdauer ist, kann die zweite Messung> ebenfalls noch ungenau sein.
Wie bekommste das denn hin, dass die erste Wandlung kürzer als die
Stabilisierungsdauer ist? Wenn ich mich recht entsinne dauert die erste
Wandlung, unabhängig vom Modus, immer 25 Zyklen. Und bei 200 kHz
ADC-Takt sind das so Pi mal Daumen 125 us.
Solange man also den ADC innerhalb der Datenblattspezifikation benutzt
ist die erste Wandlung immer länger als die Stabilisierungsdauer.
Deshalb hab ich es mir angewöhnt stets die erste Wandlung a. direkt nach
der Konfiguration (bzw. Rekonfiguration) des ADCs durchzuführen und b.
zu verwerfen.
Stefan schrieb:> Z.Zt. läuft die erste Messung bei maximaler Geschwindigkeit, da ich> nicht dachte, dass es von der Zeit abhängt. Also kann ich jetzt> ausknobeln was stromsparender ist ist, Vref setzen und Timer in IDLE> laufen lassen, oder ADC in NOISE REUCTION laufen lassen.
Mit Timer ist es stromsparender. Du könntest nämlich den AVR in einen
entsoprechenden Sleep-Modus hauen und dann entsprechend aufwecken wenn
die Zeit rum ist.
M. K. schrieb:> Wie bekommste das denn hin, dass die erste Wandlung kürzer als die> Stabilisierungsdauer ist? Wenn ich mich recht entsinne dauert die erste> Wandlung, unabhängig vom Modus, immer 25 Zyklen. Und bei 200 kHz> ADC-Takt sind das so Pi mal Daumen 125 us.> Solange man also den ADC innerhalb der Datenblattspezifikation benutzt> ist die erste Wandlung immer länger als die Stabilisierungsdauer.> Deshalb hab ich es mir angewöhnt stets die erste Wandlung a. direkt nach> der Konfiguration (bzw. Rekonfiguration) des ADCs durchzuführen und b.> zu verwerfen.
Die ADC Frequenz hat lediglich Einfluss auf die Genauigkeit. Da das
erste Ergebnis sowieso verworfen wird, lasse ich die mit maximaler
Geschwindigkeit laufen (4,8 MHz), was grob 5uS macht. Also weit unter
der Stabilisierungszeit.
M. K. schrieb:> Mit Timer ist es stromsparender. Du könntest nämlich den AVR in einen> entsoprechenden Sleep-Modus hauen und dann entsprechend aufwecken wenn> die Zeit rum ist.
Ich finde leider nirgends Daten zum Stromverbrauch im ADC Noise
Reduction Modus, aber aufgrund der Tatsache, dass eine Taktquelle mehr
abgeschaltet ist, könnte der Modus stromsparender sein.
Die Frage läuft im Endeffekt darauf hinaus was mehr Strom zieht,
laufender ADC oder ADC Idle + laufende clkIO.
Stefan schrieb:> Die ADC Frequenz hat lediglich Einfluss auf die Genauigkeit. Da das> erste Ergebnis sowieso verworfen wird, lasse ich die mit maximaler> Geschwindigkeit laufen (4,8 MHz), was grob 5uS macht. Also weit unter> der Stabilisierungszeit.
Naja, kann man ja halten wie man möchte. Etwas Zeiteffizienter wäre es
aber, den ADC auf seine Benutzungsparameter einzustellen und die
Stabilisierungszeit abzuwarten. Ich mein, was hast du davon den ADC mit
4.8 MHz laufen zu lassen? Um sicher zu gehen musst du doch eh die 70 us
maximale Stabilisierungszeit abwarten.
Stefan schrieb:> Die Frage läuft im Endeffekt darauf hinaus was mehr Strom zieht,> laufender ADC oder ADC Idle + laufende clkIO.
Hast du ein 4 1/2 stelliges Multimeter? Dann könntest du das messen. Ich
hab hier einen Tiny85 an dem ich das mal austesten könnte.
EDIT: Habs mal kurz geprüft am Attiny85. Den Analog Comperator, Timer0&1
sowie USI hab ich ausgeschaltet. Im Sleepmode Idle hat der Tiny noch ca.
540 uA aufgenommen, im Sleepmode ADC-Noise-Reduction waren es ca. 490 uA
bei Vcc = 3VDC. Ich denke bei einem Attiny13 dürfte sich das ähnlich
verhalten.
> Wie bekommste das denn hin, dass die erste Wandlung kürzer als die> Stabilisierungsdauer ist? Wenn ich mich recht entsinne dauert die erste> Wandlung, unabhängig vom Modus, immer 25 Zyklen. Und bei 200 kHz> ADC-Takt sind das so Pi mal Daumen 125 us.
So hatte ich das auch in Erinnerung, deswegen war meine erste Antwort:
> Ohne Abwarten solltest du das Ergebnis der ersten Messung verwerfen.
Aber dann hat andere Stefan (Gast) nochmal nachgehakt was mich dazu
animierte, ins Datenblatt zu schauen. Danach wurde mir klar, dass die
erste Messung unter extremen Bedingungen (z.B. maximale Taktfrequenz)
doch kürzer sein kann, als die benötigte Zeit.
Spannend finde ich noch die Frage: was dann passiert und wofür der
Attiny13 verwendet werden soll?
So ein isolierter Atmel ohne Außenkontakt ist in meinen Augen zu nichts
zu gebrauchen.
Soll heißen, wenn Daten erfasst werden, müssten sie auch weiter gegeben
werden.
Wie erfolgt das?
Stefanus F. schrieb:> Danach wurde mir klar, dass die> erste Messung unter extremen Bedingungen (z.B. maximale Taktfrequenz)> doch kürzer sein kann, als die benötigte Zeit.
Ja klar, kann sein. Aber warum sollte man den ADC schneller als mit 200
kHz laufen lassen? Das reduziert doch nur die effektive Auflösung. Man
stellt ihn also auf 4.8 MHz damit was genau passiert? Da kann man IMO
den ADC direkt auf die richtige Frequenz einstellen und eine
Dummy-Wandlung durchführen. Macht halt meiner Meinung nach mehr Sinn.
Wenn man nur 8 Bit braucht kann man bis auf 1 bis 1.5 MHz hochgehen
hatte ich mal ausprobiert bis einem das Rauschen des ADCs reinpfuscht.
Aber für ernsthafte Anwendungen halte ich auch das für zu unsicher, man
kann sich ja nicht darauf verlassen, dass das für jeden µC gilt, das
kann ja fertigungsabhängig sein.
Stromspar & den ADC mit 4.8MHz laufen lassen passt irgendwie nicht
zusammen. Wie immer wissen wir zuwenig, und werden mit einer Loesung
beworfen, ohne das Problem zu kennen.
Also erst das Problem, dann die loesung. Die ADC Zeit zu verkuerzen soll
Strom sparen ?
@M. K.:
Danke für die Messergebnisse, dann werde ich es per Dummy-Wandlung
machen, da das Stromsparender ist.
Mehr als 200kHz würde Sinn machen, wenn der ADC bei der ersten Wandlung
ungenau ist, aber dies nicht von einer Zeitkonstante abhängt. Dann
könnte man die erste Wandlung so schnell wie möglich machen um sie
hinter sich zu bringen. Da nun aber geklärt ist, dass es nicht die erste
Wandlung ist, sondern das Hochlaufen der Vref für Ungenauigkeit sorgt,
ist der Ansatz maximal schnell zu wandeln und verwerfen hinfällig.
Karl M. schrieb:> Spannend finde ich noch die Frage: was dann passiert und wofür der> Attiny13 verwendet werden soll?>> So ein isolierter Atmel ohne Außenkontakt ist in meinen Augen zu nichts> zu gebrauchen.> Soll heißen, wenn Daten erfasst werden, müssten sie auch weiter gegeben> werden.
Ganz abgeschnitten von der Welt ist er ja nicht, es gibt ein
minimalistisches HMI welches alle paar Wochen was ausgibt.
Abgesehen davon gibt es aber tausende Anwendungen in denen uCs quasi
abgeschnitten von der Welt ihren Dienst verrichten.
Jetzt ist G. schrieb:> Stromspar & den ADC mit 4.8MHz laufen lassen passt irgendwie nicht> zusammen. Wie immer wissen wir zuwenig, und werden mit einer Loesung> beworfen, ohne das Problem zu kennen.> Also erst das Problem, dann die loesung. Die ADC Zeit zu verkuerzen soll> Strom sparen ?
Ja ja, die gute alte "beim Stromsparen die Frequenz so langsam wie
möglich"-Leier...
Kleines Rechenbeispiel, 100 Instruktionen Tiny @ 2,7V:
100kHz = 40uA; 1000uS => 108nWs
10Mhz = 2840uA; 10uS => 77nWs
=> Unter 3,3V hießt es bei Tinys: Für Stromsparen hoch mit der Frequenz.
> 108nWs ... 77nWs
Das ist mir noch nicht ganz klar: für einen korrekten Vergleich müsste
man doch noch wissen, wieviel Strom der ATtiny13 in den restlichen 990
us braucht; wenn er nicht von außen geweckt wird, hieße das Idle-Mode +
Timer.
S. Landolt schrieb:>> 108nWs ... 77nWs>> Das ist mir noch nicht ganz klar: für einen korrekten Vergleich müsste> man doch noch wissen, wieviel Strom der ATtiny13 in den restlichen 990> us braucht; wenn er nicht von außen geweckt wird, hieße das Idle-Mode +> Timer.
Die Idee hinter Ulta Low Power ist einerseits den uC so lange und so
tief wie möglich schlafen zu legen und andererseits im aktiven Betrieb
so wenig wie möglich zu verbrauchen.
Tiefschlaf ist der Power Down und dort verbraucht er unabhängig von der
eingestellten Frequenz immer gleich viel, da der Oszillator
ausgeschaltet ist.
Und im aktiven Modus muss man dann halt schauen was weniger verbraucht,
schnell und Energiehungrig oder sparsam dafür lange. Wie gesagt ist bei
den neuen AVRs unter 3,3V eigentlich immer schnell angesagt.
D.h. Sie schalten den ATtiny13 in den Power-down-Modus und wecken ihn
für die ADC-Messung von außen per INT0 oder PCINT auf - okay, das konnte
ich aus den bisherigen Beiträgen nicht herauslesen.
S. Landolt schrieb:> D.h. Sie schalten den ATtiny13 in den Power-down-Modus und wecken ihn> für die ADC-Messung von außen per INT0 oder PCINT auf - okay, das konnte> ich aus den bisherigen Beiträgen nicht herauslesen.
Nicht ganz, er wird per Watchdog geweckt. Ändert ab an der ganzen
Geschichte nichts.
S. Landolt schrieb:> Da ich fast nie den Watchdog benutze,
Den Watchdog zu benutzen ist aus verschiedenen Sichtweisen sinnvoll,
sollte man sich angewöhnen, auch wenn es erstmal Arbeit ist sich damit
auseinander zu setzen.
Stefan schrieb:> Kleines Rechenbeispiel, 100 Instruktionen Tiny @ 2,7V:> 100kHz = 40uA; 1000uS => 108nWs> 10Mhz = 2840uA; 10uS => 77nWs> => Unter 3,3V hießt es bei Tinys: Für Stromsparen hoch mit der Frequenz.
Warum das ganze auf unter 3.3V begrenzen? Die Kurve Strom über Frequenz
ist doch relativ linear bei den AVRs (nicht nur bei den Tinys).
Stefan schrieb:> Tiefschlaf ist der Power Down und dort verbraucht er unabhängig von der> eingestellten Frequenz immer gleich viel, da der Oszillator> ausgeschaltet ist.Stefan schrieb:> Kleines Rechenbeispiel, 100 Instruktionen Tiny @ 2,7V:> 100kHz = 40uA; 1000uS => 108nWs> 10Mhz = 2840uA; 10uS => 77nWs
Ist das "kleine Rechenbeispiel" mit 100 Instruktionen und 77nWs
gemessen, oder nur Konstruiert? Ich habe so meine Zweifel ob das
Aufwachen aus deinem
Tiefschlaf heraus nicht eine "Extraportion" des gesparten Futters
wegfrisst. Insgesamt haengt das alles tuerlich auch von der
Programmlaufzeit und Haeufigkeit (Schlafzeit) ab.
Stefan schrieb:> Also kann ich jetzt> ausknobeln was stromsparender ist
Wenns stromsparen wirklich wichtig ist (Mission to Mars): verschiedene
Versionen selber testen und messen und testen und messen...
Just my name
Karl M. schrieb:> So ein isolierter Atmel ohne Außenkontakt ist in meinen Augen zu nichts> zu gebrauchen.> Soll heißen, wenn Daten erfasst werden, müssten sie auch weiter gegeben> werden.>> Wie erfolgt das?
Solche Teile werden für alles von Dämmerungsschalter über
Kaffeemaschinen bis hin zu Treppenlichtschalter und einfache Regler
(z.b. Motordrehzahl konstant halten oder Akkus schonend laden)
verwendet.
M. K. schrieb:> Warum das ganze auf unter 3.3V begrenzen? Die Kurve Strom über Frequenz> ist doch relativ linear bei den AVRs (nicht nur bei den Tinys).
Es spricht nichts dagegen es auch bei höheren Spannungen zu machen. Ich
hatte beim schreiben nur irgendwie den Knoten im Kopf, dass über 3,3V
der Strom exponentiell wächst, was jedoch falsch ist.
2 Cent schrieb:> Ist das "kleine Rechenbeispiel" mit 100 Instruktionen und 77nWs> gemessen, oder nur Konstruiert? Ich habe so meine Zweifel ob das> Aufwachen aus deinem> Tiefschlaf heraus nicht eine "Extraportion" des gesparten Futters> wegfrisst. Insgesamt haengt das alles tuerlich auch von der> Programmlaufzeit und Haeufigkeit (Schlafzeit) ab.
Welches Futter soll es wegfressen?
Bei allen internen Oszillatoren ist die "Start-up Time from Power-down"
6CK, unabhängig von den SUT Fuses.
Daher würde die langsame Frequenz sogar noch mehr Energie verbrauchen,
da die oben genannte Rechnung auch hier anwendbar ist.