-> Einsparung von Spannungsteilern. Es müssen an 4 Kanälen Spannungen gemessen werden: A: 20..60V - Spannungsteiler, 10bit absolut, einigermaßen genau durch langfristiges oversampling B: U_SHUNT Strommessung - 10bit absolut; gibt nur kleine mV-Spannungen; einigermaßen genau durch langfristiges oversampling ohne extra Verstärker. C,D: Eingangssignale 0..5V/VCC - 8bit; unkritisch; relativ; schnellere Wechsel. alles wird ca. 10Hz ausgelesen (bislang in mainloop incl. Warten) Damits nur noch für A Spannungsteiler braucht, gute Auflösung für B und A, würde ich gerne A und B gegen internalRef2.56V wandeln und C+D aber gegen VCC/5V als Referenz. Ist dieses ständige abwechseln der Ref-Spannung durch die Bits in ADMUX einfach so möglich? Muß man ein lange extra Wartezeit einhalten? Wird die internal Ref womöglich abgeschalten während REFS=01, und muß dann wird langsam abgewartet werden? ...? bisher einfach: uint8/16 ADC_read8/10(uint8_t channel) { ADMUX = channel | (1<<REFS1)|(1<<REFS0)|(1<<ADLAR); ADCSRA = (1<<ADEN) | (1<<ADSC) | (0<<ADFR) | (1<<ADIF) | (0<<ADIE) | _ADC_FRQ; while(TESTBIT(ADCSRA,ADSC)); // warten bis fertig return ADCH bzw ADC; }
Aus dem Datenblatt: The first ADC conversion result after switching reference voltage source may be inaccurate, and the user is advised to discard this result.
Die interne Ref. wird wohl ausgeschaltet, wenn sie nicht für etwas anderes (z.B. den analog Komperator) gebraucht wird. Für eine Wirklich gute Genauigkeit müsste man also ggf. länger warten. Das umschalten von int. Ref auf VCC als Ref. geht angeblich reltiv schnell. Die Umschaltung von VCC auf die interne Ref. kann aber deutlich länger dauern, weil sich der Kondensator an Vref. nur langsam entlädt. Da also eher einen kleineren Kondensator (z.B. 10 nF) nehmen.
Ich würde aber wenn möglich nicht gegen die interne Ref messen wenns genau sein soll, nimm lieber n gute Externe, die gibts wie Wasser im Meer. Gegen VCC würde ich nur messen, wenn der Wert Pi * Daumen genau sein muss. Knut
Hi >Die interne Ref. wird wohl ausgeschaltet, wenn sie nicht für etwas >anderes (z.B. den analog Komperator) gebraucht wird. Für eine Wirklich >gute Genauigkeit müsste man also ggf. länger warten. Wie kommst du darauf? Wenn man sich das Blockschaltbild des ADC ansieht findet man dort nur Schalter. Die Voltage Reference wird nur bei bestimmten Sleep-Modes abgeschaltet: 'Otherwise, the Internal Voltage Reference will be enabled, independent of sleep mode.' @kxr (Gast) Vielleicht solltest du mal in Betracht ziehen einen AVR zu benutzen, bei dem der ADC umschaltbare eine Eingangsverstärkung hat. MfG Spess
Ich kann aus der Praxis heraus nur bestätigen, daß das Umschalten int. Ref -> Vcc-Ref recht flott geht, die Gegenrichtung dauert gut 10 mal länger. Einfach ein Oszi an Aref hängen und man kann sehen wie die Ref zum Zielwert "schleicht" Wenn die Zeit vorhanden ist, stört es nicht weiter. Vcc als Ref ist machbar, dann nehme ich einen Spannungsregler mit 1% Toleranz, hat z.B. Micrel im Angebot. Oder einen ext. Ref-Baustein.
Knut schrieb: > Ich würde aber wenn möglich nicht gegen die interne Ref messen wenns > genau sein soll, nimm lieber n gute Externe, die gibts wie Wasser im > Meer. wozu mühsame nicht schaltbare extern wenns intern gibt und Absicht minimale Zusatz Bauteile und schon ok? das würd ja nach hinten losgehen bzgl. meiner Eingangsfrage ;-) A (R-Teiler unvermeidbar) und B (Shunt) müssen ja eh noch SW-kalibriert werden. AVR-Fan schrieb im Beitrag #2285665: > Ich kann aus der Praxis heraus nur bestätigen, daß das Umschalten > int. Ref -> Vcc-Ref recht flott geht, die Gegenrichtung dauert gut > 10 mal länger. Einfach ein Oszi an Aref hängen und man kann sehen > wie die Ref zum Zielwert "schleicht" > Wenn die Zeit vorhanden ist, stört es nicht weiter. Welche Zeit-Größenordnungen waren es bei Dir jeweils etwa? (ich habe keine externe Kapazität, da für A und B sogar etwas noise 3..4 digits zum langfrist oversampling erwünscht. default noise passte laut letzter Messung.) syn_error hat auf diese Stelle hingewiesen: "If no external voltage is applied to the AREF pin, the user may switch between AVCC and 2.56V as reference selection. The first ADC conversion result after switching reference voltage source may be inaccurate, and the user is advised to discard this result." (ATmega8) klingt so als ob man jeweils nur eine dummy AD-conversion warten müsste? > > Vcc als Ref ist machbar, dann nehme ich einen Spannungsregler mit > 1% Toleranz, hat z.B. Micrel im Angebot. > Oder einen ext. Ref-Baustein. C und D sind User-Joysticks (externe Poti/Hall), wie hoch ist die menschliche Toleranz - absolut? ;-)
spess53 schrieb: > Vielleicht solltest du mal in Betracht ziehen einen AVR zu benutzen, bei > dem der ADC umschaltbare eine Eingangsverstärkung hat. ist momentan auf ATmega8 und ATmega328. eigentlich würden nun die Anforderungen schon erfüllt, wenn das beabsichtigte funktioniert. beim Shunt wäre wegen der millivolts optional noch ca. x4 oder x16 Verstärkung aber hübsch - da könnte ein kleines Feature bequemer realisiert werden. Welcher AVR käme da z.B. zur Migration in Frage, bei welcher Größenordnung in der Preisdifferenz?
Knut schrieb: > Gegen VCC würde ich nur messen, wenn der Wert Pi * Daumen genau sein > muss. In diesem Fall mag das richtig sein. Das gilt aber nicht allgemein. Bei ratiometrische Messung, bei denen sich der Messwert auch auf VCC bezieht, wäre eine getrennte Referenz eher kontroproduktiv.
Im Übrigen erhöht man nicht die Genauigkeit durch Oversampling, sondern lediglich die Auflösung.
kxr schrieb: > Welcher AVR käme da z.B. zur Migration in Frage, bei welcher > Größenordnung in der Preisdifferenz? Z.B. ATmega16 und ATmega32. Die haben je zwei ADC-Eingänge mit optionaler x10- oder x200-Verstärkung.
Nils schrieb: > kxr schrieb: >> Welcher AVR käme da z.B. zur Migration in Frage, bei welcher >> Größenordnung in der Preisdifferenz? > > Z.B. ATmega16 und ATmega32. Die haben je zwei ADC-Eingänge mit > optionaler x10- oder x200-Verstärkung. danke. einige ATmega32's als DIL Klodeckel liegen sogar hier rum. wusste das Gain nicht. Sie mega32 sind aber eigentlich pinmäßig unnötig groß und zu teuer. leider findet man die Gain Option nicht in den Chip-Selektoren von Atmel, Digikey etc. bislang war jetzt der mega328 im Fokus. Der hat 1.1V Ref, d.h. nochmal zumindest 2x empfindlicher. gäbs auch noch kleinere/günstigere AVR mit Gain, 32kFlash, passend für das Projekt hier? Anforderung: * möglichst wenig Pins (min. 20) * hardware MUL * 32k Flash (min 16k) * schön: bis zu 20x Verstärkung und differenzial-Eingänge die bis -50mV unter Masse messen können. * schön: neben TQFP auch als DIL verfügbar Gruß
Der ATmega328 ist schon der kleinste AVR mit 32kB Flash. Du könntest aber, wenn du deswegen nicht extra einen großen ATmega16/32 verbauen willst, einen ATtiny25 zum Messen hernehmen. Der kostet nur 1,50€ und hat bei zwei der vier ADC-Eingänge eine optionale x20-Verstärkung.
Ohweh, diese Oversampling-Gläubigkeit erfüllt schon manche Kriterien, die man Sekten zuspricht: Oversampeln kann bestenfalls fast ein Bit mehr Auflösung bringen! Alles andere ist dumme Gutgläubigkeit. Bei keinem x-Bit-ADC wird garantiert, dass 1 Bit auf viel mehr als ein halbes Bit genau ist. Dies ist gerade die Voraussetzung, dass das Ergebnis STETIG ist. STETIG: Größere Spannung -> gleicher oder größerer ADC-Wert (Auch das wird nicht immer garantiert!) Wie behauptet, "wenige mV" mit Oversampling bei 2,56 Vref / 1024 = 2,5 mV ADC-Auflösung auf GARANTIERTE 1 mV genau auzuflösen oder gar zu MESSEN, ist ein Scharlatan.
Nils schrieb: > Der ATmega328 ist schon der kleinste AVR mit 32kB Flash. > Du könntest aber, wenn du deswegen nicht extra einen großen ATmega16/32 > verbauen willst, einen ATtiny25 zum Messen hernehmen. Der kostet nur > 1,50€ und hat bei zwei der vier ADC-Eingänge eine optionale > x20-Verstärkung. 2 µC wird unnötig komplex. der ATTiny167 mit 16k käme aber evtl. in Frage. <2€, 20xGain, genau 20pin, Nur HW-MUL fehlt (und es gibt kein DIL) muss mal schauen ob ein tiny die vielen fixpoint-mul-Rechnungen schafft.
Kurt schrieb: > Oversampeln kann bestenfalls fast ein Bit mehr Auflösung > bringen! Alles andere ist dumme Gutgläubigkeit. es geht aber schon ;-) Ampere"_stunden_" werden gezählt. Dank etwas Noise (ab 2..3 ditigs) machen die Treppen nix aus. und der Rest ist resolution ~ 1/sqrt(N) Mathematik und Kalibrierung. Notfalls mit Relinearisierung für Wert nahe 0. Befasse dich mal mit Statistik. Auch viel schnellere Messungen mache ich gelegentlich so um aufwändige und fragile HW-Verstärkungen zu vermeiden.
Klar kann man mit Statistik viel herleiten. Gibts da nicht so ein Zitat von Churchill? ;-) Ernst beiseite - gute Statistik lebt von Voraussetzungen, die auch erfüllt sein müssen. Treppen machen in diesem Falle NUR DANN NIX AUS, WENN jede Stufe die gleiche Höhe hat! Kennt jemand EINEN Hersteller, der das garantiert? Da stolpert man nicht nur schnell mal im richtigen Leben. (Es gibt Normen für den Treppenbau, um die Unfallgefahr durch abweichende Stufenhöhen zu verhindern!) Auch wenn man sich auf "overgesampelte" Messergebnisse verlässt, die implizit (oder intuitiv, wie der unaufmerksame Treppensteiger) von konstanter Stufenhöhe ausgehen, fällt man damit ganz fix und unerwartet auf die Nase. Leider werden mit dieser schlecht angewandten Statistik auch viel zu oft die << Ampere"_stunden_" >> gezählt. - Was dazu führt, dass so viele Batteriegeräte sich mit "fast noch voller Batterie" urplötzlich verabschieden.
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.