Hallo, Soeben ist mir etwas merkwürdiges aufgefallen... Wenn ich auf einem AVR (konkret attiny861) rasch (jede andere Messung, gepollt, nicht via interrupt) zwischen Gnd (MUX5..0 0b011111) und Ref (MUX5..0 0b011110) hin und herschalte (konkret will ich die Versorgungsspannung indirekt messen, durch vergleich des Messwertes von der 1.1V internen Referenz, während des ADC Referenz auf Vcc bleibt), wird der korrekte Wert (ca. 55 bei Vcc ~5V von einem 7805) nie erreicht. Bei einem ADC Prescaler von 128, 8MHz interner RC Oszi,und ständig nur 0b011110 messend, braucht es 3-4 unmittelbar aufeinander folgende Samples, damit der korrekte Wert gelesen wird: 0x52 0x3B 0x37 0x36 0x36 : Wenn nun jedes 2. Sample alternierend auf Gnd (0b011111) gelegt wird, wird nie die "korrekte" Spannung der 1.1V Referenz gemessen: 0x52 (ref) 0x00 (gnd) 0x31 (ref) 0x00 (gnd) 0x31 (ref) : : Bei einer höheren ADC Clock Rate ist das ganze noch ausgeprägter (zB 2MHz wo externe Messungen durchaus gut funktionieren): MUX kontinuierlich auf Ref: 0x79 0x71 0x6C 0x66 0x60 0x5B 0x56 0x51 0x4C 0x48 0x45 0x42 0x3F 0x3E 0x3C 0x3B 0x39 0x38 0x38 0x37 0x37 0x36 0x36 0x36 0x36 0x36 MUX abwechselnd zw. Ref und Gnd: 0x79 0x00 0x02 0x00 0x02... Gehe ich recht in der Annahme, dass dies wohl darauf zurückzuführen ist, das die interne 1.1V Referenz nur eine sehr geringe Stromquelle/senke ist, und damit in der kurzen Zeit in der der Sample&Hold ~14pF Cap geladen/entladen werden kann, dramatisch zu wenig Strom zum Spannungsangleich liefert? (Für externe A/D Eingänge sehe ich 100 pF Caps vor, aus denen ein ausreichend großer Umladestrom in dem Sample-Intervall fliessen kann, dass die Messung hinreichend genau sind, wenn ich da mehrmals pro ms herumschalte zum sampeln. OpAmp zur Impedanzanpassung war für die zu erzielende Genauigkeit dann wieder zu viel... ). Andererseits, um diese Messung in möglichst kurzer Echtzeit zu realisieren, wäre es nicht vorteilhaft, die ADC Clock temporär hochzudrehen, 16 Messungen ohne umschalten durchzuführen (dass der Sample/Hold Cap sukkzessive "korrekter" geladen werden kann, danach die ADC Clock wieder zu reduzieren wenn externe, oder andere Quellen mit niedrigerer Impedanz gemessen werden sollen... Gibts irgendeinen Trick, den Sample/Hold Cap länger laden/entladen zu lassen, ohne den ADC voll anlaufen zu lassen? Mein MCU soll in einem Ultralow-Power Mode starten, wo er praktisch nur alle 1/8 sec mit dem 32kHz WDT interrupt geweckt werden soll, um nachzusehen ob Vcc noch bei <=3.3V liegt, oder bereits bei 5V, jedoch ohne einen weiteren Pin zB für den Comparator benutzen zu müssen. ADC noise cancelling sleep braucht wahrscheinlich fast so viel strom wie active (steht leider nicht im Datenblatt).
Richard S. schrieb: > Soeben ist mir etwas merkwürdiges aufgefallen... > > Wenn ich auf einem AVR (konkret attiny861) rasch (jede andere Messung, > gepollt, nicht via interrupt) zwischen Gnd (MUX5..0 0b011111) und Ref > (MUX5..0 0b011110) hin und herschalte (konkret will ich die > Versorgungsspannung indirekt messen Wofür muß man dazu den ADMUX umschalten? > Bei einem ADC Prescaler von 128, 8MHz interner RC Oszi Also 62.5kHz, nahe dem Maximum. > und ständig nur > 0b011110 messend, braucht es 3-4 unmittelbar aufeinander folgende > Samples, damit der korrekte Wert gelesen wird: > > 0x52 > 0x3B > 0x37 > 0x36 > 0x36 > : Bahnhof. Der ADC ist 10 Bit breit. Nicht 8. Ansonsten sagt das Datenblatt ja auch, daß nach dem Umschalten des ADMUX die ersten 1-2 Messungen verworfen werden sollten. > Wenn nun jedes 2. Sample alternierend auf Gnd (0b011111) gelegt wird, > wird nie die "korrekte" Spannung der 1.1V Referenz gemessen: In Übereinstimmung mit dem Datenblatt. > Bei einer höheren ADC Clock Rate ist das ganze noch ausgeprägter (zB > 2MHz wo externe Messungen durchaus gut funktionieren): Außerhalb der Spezifikation. Punkt. > Gehe ich recht in der Annahme Außerhalb der Spezifikation. Was verstehst du daran nicht? > Andererseits, um diese Messung in möglichst kurzer Echtzeit Wozu? Kürzer als ca. 20µs geht halt nicht. > wäre es nicht vorteilhaft, die ADC Clock temporär hochzudrehen Aber nicht außerhalb der Spezifikation. Abgesehen davon ist die Sample-Zeit 1.5 Perioden des ADC-Clock. Ergo: niedriger Clock ist besser. > Gibts irgendeinen Trick, den Sample/Hold Cap länger laden/entladen zu > lassen s.o. > Mein MCU soll in einem Ultralow-Power Mode starten, wo er praktisch nur > alle 1/8 sec mit dem 32kHz WDT interrupt geweckt werden soll, um > nachzusehen ob Vcc noch bei <=3.3V liegt, oder bereits bei 5V, jedoch > ohne einen weiteren Pin zB für den Comparator benutzen zu müssen. Ergibt keinen Sinn. Wenn du ADMUX permanent auf dem Channel für REF läßt, ist jede Messung gut (außer halt die ersten 2) > ADC noise cancelling sleep braucht wahrscheinlich fast so viel strom wie > active (steht leider nicht im Datenblatt). Du kannst jeden Sleep-Mode nutzen, der den ADC-Clock und Interrupts eingeschaltet läßt. Du kannst auch den Takt runterskalieren, während du auf den ADC wartest. Aber die ca. 20µs alle 125ms machen das Kraut auch nicht fett.
Axel S. schrieb: > Richard S. schrieb: >> Soeben ist mir etwas merkwürdiges aufgefallen... >> >> Wenn ich auf einem AVR (konkret attiny861) rasch (jede andere Messung, >> gepollt, nicht via interrupt) zwischen Gnd (MUX5..0 0b011111) und Ref >> (MUX5..0 0b011110) hin und herschalte (konkret will ich die >> Versorgungsspannung indirekt messen > > Wofür muß man dazu den ADMUX umschalten? Dazu muß man den ADMUX nicht umschalten. Gnd als Eingang bot sich für einen schnellen, "nackten" Test an, um ein definiertes Potential (und ggf. Offset drift) zu messen. Auf dem Breadboard war nur der restliche AD / diskrete Teil der alle 10 verfügbaren ADC Kanäle belegt, dass also kein Eingang für eine mit ausreichend niedriger impedanz ausgestatteten Teiler mehr frei ist. (Bevor Fragen aufkommen - der 11. ADC Eingang muß als OC1B ausgang leider digital genutzt werden, da ich da auch 3 recht exakte, wenn auch langsame PWMs (1 kHz) mit hoher Duty-Cycle Auflösung (0.1% oder 1 usec) brauche. Allerdings noch nicht im low-power state... der pin ist nur nicht verfügbar ;) ). > >> Bei einem ADC Prescaler von 128, 8MHz interner RC Oszi > > Also 62.5kHz, nahe dem Maximum. Wenn man 10 bit präzision braucht, korrekt. Für die mit 100p gepufferten Kanäle, wo 5-6 bis Auflösung ausreichend sind, ist eine ADC Clock von 2MHz immer noch ausreichend gut ¯\_(ツ)_/¯ > >> und ständig nur >> 0b011110 messend, braucht es 3-4 unmittelbar aufeinander folgende >> Samples, damit der korrekte Wert gelesen wird: >> >> 0x52 >> 0x3B >> 0x37 >> 0x36 >> 0x36 >> : > > Bahnhof. Der ADC ist 10 Bit breit. Nicht 8. Ansonsten sagt das > Datenblatt ja auch, daß nach dem Umschalten des ADMUX die ersten 1-2 > Messungen verworfen werden sollten. Hier wurden die 8 MSB aufgenommen - ADLAR ist gesetzt, damit ein einzelner IN die relevanten Bits auslesen, und das Register für die nächste Messung freigeben kann. Und ja, im Datenblatt wird empfohlen die erste Messung nach umschalten des ADMUX zu verwerfen. Mit anderen Worten, eine 3-phase BLDC closed loop steuerung einzelner Phasen ist damit definitiv nicht möglich ;) Aber so extrem ist die Anforderung gar nicht. > >> Wenn nun jedes 2. Sample alternierend auf Gnd (0b011111) gelegt wird, >> wird nie die "korrekte" Spannung der 1.1V Referenz gemessen: > > In Übereinstimmung mit dem Datenblatt. > >> Bei einer höheren ADC Clock Rate ist das ganze noch ausgeprägter (zB >> 2MHz wo externe Messungen durchaus gut funktionieren): > > Außerhalb der Spezifikation. Punkt. Das war ja auch nicht die Frage - eher Verständnis, ob die intere Ref (1.065 V, aka 1.1V) wirklich so eine hohe Impedanz haben kann, oder ob das an anderen Effekten liegt, die ich bei low-power berücksichtigen muss. (Und ja, auch wenn man >> 70usec nach aktivier des ADC wartet, oder zwischen dem Sampling, bekommt man das geschilderte Verhalten. Der S/H cap scheint also "ursächlich" daran beteiligt zu sein...) >> Andererseits, um diese Messung in möglichst kurzer Echtzeit > > Wozu? Kürzer als ca. 20µs geht halt nicht. Da interessiert mich eher der Energiebedarf, inkl. aktiver MCU Zeit - ob es in Summe weniger Energie kostet, den ADC mehrfach (zB 10x) bei höherer Frequenz (2MHz) laufen zu lassen, um Vcc ordentlich zu sampeln, oder zB OSCCAL auf 00 zu setzen (~2MHz), ADC Clock divider auf 128, vielleicht auch noch die Systemclock auf einen höheren Divider (Clock Prescaler auf 256). (System Clock wäre da bei ca. 2 MHz / 256 = 7,8 kHz, ADC Clock dann bei 61 Hz, ein Sample würde rund 200ms dauern... Andererseits - wenn der interne S/H cap für 1,5 Takte oder auch nur 0,5 Takte verbunden wird, der System Takt derartig niedrig ist, ist der dann vielleicht bereits ordentlich stabil und korrekt für die eigentliche Messung? ) Aber auch da wird vermutlich das 1. Sample zu verwerfen sein... d.h. ADC noise cancelling mit main clock (ohne CPU core) muß für ~400ms aktiv sein, bei rund 70-80 uA (Fig. 20-10), idle. Wobei das wohl alles Werte ohne ADC sind (der bis zu 107 uA nimmt @ 5V,8MHz, oder +27% Leistung, wenn aktiv - also rund 100 uA). 100 uA * 200 ms @ 3.3V = 66 uJ Wenn ich nun den ADC mit einem kleineren Prescaler (2) bei Systemclock 2MHz/256 laufen lasse, aber dann zB 20 Samples brauche, sind das "nur" 67 ms, oder - wenn diese Überlegungen stimmen, nur 22 uJ. Zwischen diesen Samples kann er mit WDT in Power-Down sleep gehen. Allerdings bin ich mir auch noch nicht sicher, wie das mit dem Stabilisieren der Referenzspannungen nach einem WDT Wakeup nach einem Powerdown ist - im zweifel muß man da ja 25 ADC clocks (adc enable nach power down), sowie 70 usec (Ref Bandgap stabilisierung) warten, wo auch wieder Energie verbraucht wird... > Ergibt keinen Sinn. Wenn du ADMUX permanent auf dem Channel für REF > läßt, ist jede Messung gut (außer halt die ersten 2) Möglicherweise habe ich diesen Luxus - wohl aber eher nicht. Während dieser Low-Power Phasen soll auch regelmäßig auf mind. 3 AD Kanälen abwechselnd ein analoger Spannungswert (ungenau, Vcc referenz) gemessen werden, wobei diese Messungen dann eine Aufwachphase einleiten, wo die MCU das "richtige" Power Supply aktiviert, und ein paar Sekunden dann wieder ohne Energiebudget-Limitationen arbeiten kann. Konkret muss die Messung ob die Versorgung noch bei <= 3.3V steht (low power, Versorgung mit hoher Impedanz, Stromlimit ~300 uA "all inclusive" - also auch der analog/diskrete Teil der Schaltung, der dabei aktiv ist) parallel zur Messung dieser 3 anderen ADC Eingänge erfolgen - da entweder das Aufwachen (aktivier des richtigen PSU) nicht funktioniert, oder die Anforderung für das Aufwachen wegfällt. Kurz - es wäre "gut" die Messung der internen 1,065 V Referenz via MUX mit minimaler Energie und "ausreichender" Genauigkeit abwechselnd mit anderen Unipolaren (externen) Kanälen zu schaffen... Vielleicht gibts ja auch Referenzen, was man bei solch Energie-Restriktiven Umgebungen alles sonst noch beachten sollte...
:
Bearbeitet durch User
Richard S. schrieb: > im Datenblatt wird empfohlen die erste Messung nach umschalten > des ADMUX zu verwerfen. Das ist IMHO nicht notwendig. Zwei Sachen muss man aber wissen: a) Wenn man die interne Referenz umschaltet, muss man eine Weile warten bis sie sich stabilisiert. Je größer der Kondensator an AREF ist (falls vorhanden) umso länger dauert es. Aber auch ohne Kondensator dauert es ein paar Millisekunden. b) Wenn man den ADC Multiplexer während einer Messung umschaltet, dann gilt der eingestellte Kanal erst für die nächste Messung (nicht für die laufende), deren Ergebnis erst im übernächsten Interrupt bereit steht.
Richard S. schrieb: > Und ja, im Datenblatt wird empfohlen die erste Messung nach umschalten > des ADMUX zu verwerfen. Wenn die Quelle niederohmig genug ist oder mit einem Kondensator gestützt, ist das nicht notwendig. Ich hab viele Anwendungen, wo reihum der MUX umgeschaltet und die Messung gestartet wird. Die 1,1V sind allerdings sehr hochohmig und lassen sich nicht mit einem Kondensator stützen. Daher muß nach der MUX-Auswahl etwas gewartet werden. Ansonsten sieht man ein Übersprechen des vorher ausgewählten Eingangs.
Ich verwende AVcc als referenz für den A/D, und messe die interne Referenz; die A/D referenz bleibt permanent auf (A)Vcc da ich nur 3-5 bit Genauigkeit brauche (aber die konversion schnell gehen soll); Wie beschrieben wird der mcu entweder von einer high impedance spannungsquelle versorgt (mit ldo auf 3,3v), oder von einem richtigen netzteil mit 5v - und um dafür keinen weiteren pin nutzen zu müssen dachte ich das simpelste wäre es, int ref gegen vcc zu messen - aber wenn das zu viel energie braucht weil der s/h cap erst nach multiplen messungen korrekt geladen ist…
Danke! Ich werde mal einige Messungen machen, wieviel energie notwenig ist im low power modus, um ein “sauberes” sample der internen ref als mux eingang zu bekommen und ob sich das im energiebudget ausgeht.
Richard S. schrieb: > Axel S. schrieb: >> Richard S. schrieb: >> Also 62.5kHz, nahe dem Maximum. > > Wenn man 10 bit präzision braucht, korrekt. Für die mit 100p gepufferten > Kanäle, wo 5-6 bis Auflösung ausreichend sind, ist eine ADC Clock von > 2MHz immer noch ausreichend Wenn du meinst. Atmel schreibt zwar in die Datenblätter etwas von ADC-Clock rauf bei geringerer Genauigkeit. Aber ich glaube kaum, daß sie dabei die 10-fache Frequenz gemeint haben. >> Außerhalb der Spezifikation. Punkt. > > Das war ja auch nicht die Frage - eher Verständnis, ob die intere Ref > (1.065 V, aka 1.1V) wirklich so eine hohe Impedanz haben kann, oder ob > das an anderen Effekten liegt, die ich bei low-power berücksichtigen > muss. Ich verstehe ehrlich gesagt den Sinn dieser Frage nicht. Wie immer die Antwort lautet, es bleibt der Fakt daß das, was du versuchst, so nicht funktioniert. Und da du den ADC außerhalb der Spezifikation betreibst, ist das auch erwartbar. Und um das auch gesagt zu haben: nein ich glaube nicht daß die Referenzspannungsquelle so hochohmig ist. Aber der Pfad durch den ADMUX ist es wohl. Der ist wohl nicht niederohmiger ausgelegt, als er muß (niederohmige MOSFET-Kanäle brauchen Chipfläche). >> Wozu? Kürzer als ca. 20µs geht halt nicht. > > Da interessiert mich eher der Energiebedarf, inkl. aktiver MCU Zeit - ob > es in Summe weniger Energie kostet, den ADC mehrfach (zB 10x) bei > höherer Frequenz (2MHz) laufen zu lassen, um Vcc ordentlich zu sampeln Dann experimentiere in dieser Richtung. Wenn du tatsächlich nur auf den ADC warten mußt, dann kannst du neben dem Sleepmode ruhig auch den CPU-Takt runtersetzen. Und persönlich glaube ich, daß mit einer oder zwei Messungen bei maximalem spezifizierten ADC-Takt das Optimum bezüglich Stromverbrauch liegt. Und vermutlich gibt es auch einen Wert für den ADC-Takt (niedriger als das erlaubte Maximum?) bei dem die Sample-Zeit für eine erfolgreiche Messung der Referenz im ersten Versuch reicht. Denn offensichtlich interessiert dich ja gar nicht die benötigte Zeit sondern die die benötigte Energie. > Allerdings bin ich mir auch noch nicht sicher, wie das mit dem > Stabilisieren der Referenzspannungen nach einem WDT Wakeup nach einem > Powerdown ist - im zweifel muß man da ja 25 ADC clocks (adc enable nach > power down), sowie 70 usec (Ref Bandgap stabilisierung) warten, wo auch > wieder Energie verbraucht wird... Was länger dauert, solltest du offensichtlich zuerst anstoßen. Also Ref einschalten, ADC einschalten und dann mit minimalen CPU-Takt die 70µs abwarten. Den ADMUX kannst du ja schon auf die Referenz schalten und die Dummy-Wandlung während der Aufwachphase des ADC anstoßen. > Vielleicht gibts ja auch Referenzen, was man bei solch > Energie-Restriktiven Umgebungen alles sonst noch beachten sollte... Fürs erste solltest du berücksichtigen, daß geringer Energieverbrauch nicht mit möglichst schneller Abarbeitung aller Aufgaben korreliert. Insbesondere nicht, wenn Wartephasen dabei sind. Aber da der ATTiny ja einen Clock-Prescaler hat, kannst du damit spielen. Und Aufgaben statt einmal richtig lieber 10x falsch zu machen und zu hoffen, daß sich Fehler wegmitteln, ist auf jeden Fall kontraproduktiv.
Axel S. schrieb: > Richard S. schrieb: >> Axel S. schrieb: >>> Richard S. schrieb: > > Und um das auch gesagt zu haben: nein ich glaube nicht daß die > Referenzspannungsquelle so hochohmig ist. Aber der Pfad durch den ADMUX > ist es wohl. Der ist wohl nicht niederohmiger ausgelegt, als er muß > (niederohmige MOSFET-Kanäle brauchen Chipfläche). ADMUX auf Gnd zu setzen liefert bei praktisch jeder ADCclk einen Wert von 0... Spricht IMHO eher für eine hohe Impedanz bei der Referenzspannung, als einen hochohmigen Pfad (>>10kOhm) durch den ADMUX. > Dann experimentiere in dieser Richtung. Wenn du tatsächlich nur auf den > ADC warten mußt, dann kannst du neben dem Sleepmode ruhig auch den > CPU-Takt runtersetzen. Und persönlich glaube ich, daß mit einer oder > zwei Messungen bei maximalem spezifizierten ADC-Takt das Optimum > bezüglich Stromverbrauch liegt. Und vermutlich gibt es auch einen Wert > für den ADC-Takt (niedriger als das erlaubte Maximum?) bei dem die > Sample-Zeit für eine erfolgreiche Messung der Referenz im ersten Versuch > reicht. > > Denn offensichtlich interessiert dich ja gar nicht die benötigte *Zeit* > sondern die die benötigte Energie. Die Energie pro OP scheint recht konstant zu sein wenn man den Datenblättern glaubt (annähern linear zw. Freq und Stromaufnahme). Auf diese Anregung hier habe ich mal versucht, nur rund um den Sample Zeitpunkt SysClk runterzudrehen, während ADCclk mit /2 läuft (26 CPU takte). Den exakten Energieverbrauch muß ich erst noch messen, während dem Ganzen. Aber es war interessant, dass es praktisch keinen Unterschied macht, ob ich nun nur während ADC sampling via der Sysclk die ADCclk auf 50..200 kHz abbremse, oder die ADCclk die ganze Zeit mit einem höheren Divisor laufen lasse. Das Problem der nicht vollständigen S/H Ladung wenn man den ADMUX "ständig" hin- und herschaltet, scheint damit, im Rahmen von 5-6 bit Genauigkeit, addressiert. Gleichzeit ist die "effektive" ADCclk deutlich höher als die im Datenblatt als zuverlässig angegebene, bzw das 1. Sample ist bereits verwertbar - was in Summe nur 1 Konvertierung braucht, und somit jedenfalls weniger Energie... Oder anders, falls man eine höhere Genauigkeit bei schnellerer ADC Konvertierung braucht, und bei den Timern auf eine konstant SysClk verzichten kann (PLLclk gibts auch noch), kann das u.U. die Samples/sec um 2-4x verbessern helfen...
1 | ADMUX = 0<<REFS1 | 0<<REFS0 | 1<<ADLAR | 0b11110; // select 1.1v ref |
2 | ADCSRB = (0<<BIN)|(0<<GSEL)|(0<<REFS2)|(0<<MUX5)|(0<<ADTS2)|(0<<ADTS1)|(0<<ADTS0); |
3 | // ADCclk /2 |
4 | ADCSRA = 1<<ADEN | 0<<ADSC | 0<<ADATE | 1<<ADIF | 0<<ADIE | 0<<ADPS2 | 0<<ADPS1 | 1<<ADPS0; |
5 | |
6 | // enable modifying the clock prescaler |
7 | CLKPR = 1<<CLKPCE; |
8 | // start sample (2 cpu ticks) |
9 | ADCSRA |= (1<<ADSC); |
10 | // set clock prescaler to division by 64 |
11 | // 8MHz / 64 = 125kHz |
12 | CLKPR = 0<<CLKPS3|1<<CLKPS2|1<<CLKPS1|0<<CLKPS0; |
13 | // apparently, CLKPR is not accepting another update yet |
14 | asm("nop"); |
15 | CLKPR = 1<<CLKPCE; |
16 | // resume 8MHz ops, ADCclk now at 4MHz |
17 | CLKPR = 0<<CLKPS3|0<<CLKPS2|0<<CLKPS1|0<<CLKPS0; |
18 | // alternatively, do some useful work here (still ~20 cpu clock ticks left) |
19 | while (ADCSRA & (1<<ADSC)) { |
20 | count++; |
21 | } |
22 | samples = ADCH; |
>> Vielleicht gibts ja auch Referenzen, was man bei solch >> Energie-Restriktiven Umgebungen alles sonst noch beachten sollte... > > Fürs erste solltest du berücksichtigen, daß geringer Energieverbrauch > nicht mit möglichst schneller Abarbeitung aller Aufgaben korreliert. Leichter Einwand - dies ist für die Leistung (uA) vollkommen korrekt. Aber solange die Energie (uJ) das Limit ist, sollte trotzdem so viel wie möglich parallel gemacht werden, um konstante Verbraucher nicht länger als notwendig aktiv zu lassen (ARef zB). Und konkrekt kann ich mir für ~50-100 usec recht hohe Leistung leisten, wenn danach für 900-950 usec Tiefschlaf herrscht. Leider kann ich den WDT nicht extern syncen, nur alle 125 ms aufwachen (bei niedriger Sysclk, während ein kleiner Cap Energie liefert). In der Zeit kann dann aber durchaus festgestellt werden, ob ein paar 100 uA drinnen sind ;) (Gut, ist eine spezielle Umgebung in der das laufen wird, wohl eher unwahrscheinlich das jemand anderes ähnliche Anforderungen haben wird :) ). Auf jedenfalls Frohes Neues Jahr und Danke für die konstruktive Diskussion! Ohne diese hätte ich nicht darüber nachgedacht, selektiv die SysClk während des Samplings anzupassen (abzubremsen)...
Irgendwie macht es keinen Sinn die Referenz sampeln zu wollen, denn die referenziert ja die Messung. Und ob die speisung stabil ist sollte man besser einmal mit dem Oszilloskop messen. Moeglichst schnell und moeglichst sparsam ist nicht wirklick korrelierend. Was soll eine repetitive Messung ? Was machst du mit den Werten ? Falls nichts, brauchst du die auch nicht. Wenn dich zum Ueberpruefen der Stabilitaet ein paar Werte interesssieren, miss die einmal (1) in einen Buffer, ins Ram, und lies die nachher aus. Das war's dann. Vergiss die Tinies, die sind fuer hohe Stueckzahlen. Die paar Cents zu sparen bringt dir nichts. Wenn du mit einem Mega schneller am Ziel bist, hast du viel mehr gewonnen, wie die paar Cents.
Loco schrieb: > Irgendwie macht es keinen Sinn die Referenz sampeln zu wollen Der Trick ist die reziproke Messung, d.h. man mißt die konstanten 1,1V mit der VCC als Referenz. Damit läßt sich ein early Power Fail erkennen und z.B. Daten im EEPROM sichern oder in Sleep gehen, um Tiefentladung zu verhindern. Loco schrieb: > Wenn du mit einem Mega schneller am Ziel bist, Die ATmega haben exakt den gleichen ADC, da geht nichts schneller.
:
Bearbeitet durch User
Nein, den ADC an Vcc zu betreiben und die Referenz Sampeln macht wenig Sinn fuer Power fails. Dabei vergibt man die Spannungueberhoehung vor einem Spannungsregler. Besser die Spannung vor dem Spannungsregler sampeln, die je nach dem eine Ecke hoeher ist, die ergibt so eine viel laengere Vorwarnzeit. Die Entwicklung mit einem Mega geht schneller. Zum Einen hat man mehrere Ausgaenge welche zum Debuggen verwendet werden koennen, und sonst noch eine SPI oder UART.
Pandur S. schrieb: > Nein, den ADC an Vcc zu betreiben und die Referenz Sampeln macht wenig > Sinn fuer Power fails. Dabei vergibt man die Spannungueberhoehung vor > einem Spannungsregler. Besser die Spannung vor dem Spannungsregler > sampeln, die je nach dem eine Ecke hoeher ist, die ergibt so eine viel > laengere Vorwarnzeit. > > Die Entwicklung mit einem Mega geht schneller. Zum Einen hat man mehrere > Ausgaenge welche zum Debuggen verwendet werden koennen, und sonst noch > eine SPI oder UART. Im Konkreten Anwendungsfall geht es nicht um Power Fail, sondern um Power Good... Der MCU sequenziert den Startup Ablauf, wobei ganz am Anfang nur wenige uA (für 50-100 usec pro ms immerhin einige 100 uA) zur Verfügung stehen, jedoch auch mit hoher Impedanz. Der LDO ist ein low-quiescent current (edit: MCP1704) und dessen 1uF Cap der einzige, aus dem der MCU für mehrere ms Energie beziehen kann - hauptsächlich für den WDT 128kHz timer und Tiefschlaf sonst. Ein zu hoher anfänglicher Ladestrom dieses Caps kann die Sequenz bereits durcheinander bringen... Sobald aber die ersten paar Sekunden Startup geschafft sind, kommt dann ein richtiges Netzteil aktiv (auch das will validiert werden. Falls das schief geht, also nicht innerhalb von 5-20 sec 5V anliegen, muß weiterhin im Low-Power Modus ein koordinierter Shutdown gemacht werden). Wie erwähnt, für (die richtigen) 50-100 usec kann ich mit der Leistung etwas freizügiger sein, also sysclk hochdrehen und ADC ein paar (low-impedance) Messungen machen lassen. Die inverse messung von ARef um zu sehen ob "noch" low-power 3.3V, oder "schon" high-power 5V anliegen, klappte halt nicht so wie bei den externen Quellen - daher dieser Thread. Und lustigerweise sehen die neueren ATtinys exakt das von mir nachprogrammierte (mit sysclk verändern) verlängerte Sampling Intervall vor für Hochimpedanz-Analogquellen - nur viel bequemer, sysclk kann konstant bleiben, aber der ADC Wandler läuft um das zusätzliche Sampling und Sample-Delay länger (was man auch noch just vor der Messung der betroffenen Quelle anpassen kann). Und ja, auf einem Mega mag die Entwicklung schneller gehen - und ja, ein Teil davon ist Spielerei, wie gering der Energieverbrauch fallen kann. Die moderneren ATtinys haben noch einen entwas gringeren Energiebedarf, da wird das dann etwas einfacher...
:
Bearbeitet durch User
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.