hi ich habe folgendes problem.... ich betreibe den atmega324p mit ca. 3.3V Batteriespannung.... nun möchte ich mit diesem controller mit dem adc beliebige spannungswerte z.b. von sensoren messen... da diese werte jedoch über 2.54 volt liegen muss ich eine externe referenzspannung verwenden. da ich beim benutzen einer dieser externen referenzspannung genau diesen wert ja zur umrechnung benötige (also ADCW*AREF / 1024 oder?), und die batteriespannung mit der zeit ja kleiner wird kann ich nie einen genauen messwert erzeugen... nun wollte ich fragen, obs eine möglichkeit gibt, den aref wert ebenfalls zu messen und diesen wert dann für die umrechnung zu benutzen? mfg
Du könntest natürlich auch die 3.3V per Spannungteiler runterschrauben und nachher zurückrechnen..
Wenn du deine Aref gegen sich selber misst, ist dein Messwert immer 1023. Du brauchst einen Spannungsteiler. Dann kannst du auch die interne Referenzspannung verwenden. mfg.
jimbo schrieb: > ich betreibe den atmega324p mit ca. 3.3V Batteriespannung.... > nun möchte ich mit diesem controller mit dem adc beliebige > spannungswerte z.b. von sensoren messen... > > da diese werte jedoch über 2.54 volt liegen muss ich eine externe > referenzspannung verwenden. Wieso? Kann der atmega324p nicht wie andere AVR auch die Vcc intern auf AREF schalten? Bei anderen AVR kann man auch die bekannte, intere Bandgap-Referenz (< Vcc) gegen AREF (interne Vcc) messen und damit zurückrechnen wie groß Vcc ist. Beim Atmega8 hatte ich das nach Anregung aus dem Forum mal gemacht: http://www.mikrocontroller.net/articles/Pollin_Funk-AVR-Evaluationsboard#Die_Versorgung_muss_stimmen
ja aber müsst ich so dann nicht jeden weiteren eingang des adc wieder mit einem spannungsteiler beschalten? weil ich kann ja aufgrund der beschaltung nicht einfach einmal die interene vref benutzen udn dann wieder die externe oder? wegen dem buffer bzw. glättungskondensator am vref gegen masse...
Wenn eine interne Referenz nicht zur Verfügung steht oder nicht genau genug ist, verbindet man den VREF-Eingang mit der Versorgungsspannung und misst dann an einem Analog-Eingang des µC eine externe Referenz, die gibt es hochgenau z.B. um 1.2 / 1.25 Volt herum (z.B. http://www.maxim-ic.com/products/references/). Wenn ich nun eine bekannte Spannung mit dem ADC messe, kann ich auf die Spannung am VREF-Eingang der ja mit der Versorungsspannung verbunden ist, zurückrechnen, das funktioniert herunter bis zur Spannung der externen Referenz. Weiterer Vorteil: keine Messfehler durch Spannungsteiler.
mit VCC als Referenzspannung die interne Referenzspannung messen, indem aref mit einem analogeingang verbunden wird.(Puffer-C nicht vergessen). Das Verhältnis Messwert durch 1023 entspricht dann doch Aref durch VCC. Mit diesem Faktor können, auch bei langsam absinkendem VCC die an den anderen Eingängen gewonnenen Messergebnisse korrigiert werden. Der Korrekturfaktor wandert natürlich mit dem sich ändernden VCC. Da brauchts keinen einzigen Spannungsteiler, solange im Inbtervall 0..VCC gemessen wird.
Peter R. schrieb: > mit VCC als Referenzspannung die interne Referenzspannung messen, indem > aref mit einem analogeingang verbunden wird.(Puffer-C nicht vergessen). Bei manchen AVR z.B. Atmega8 in meinem Versuch kann exakt diese Verbindung intern im Chip ein- und ausgeschaltet werden. Durch die Konfigurationsregister des ADC. Näheres im Datenblatt. > Das Verhältnis Messwert durch 1023 entspricht dann doch Aref durch VCC. 1024
Das interne Umschalten ist da nicht so gut. Aref sollte einegeschaltet sein, sodass am Puffer-C-Anschluss die interne Referenzspannung ständig ansteht. Intern bleibt aber ständig die Verbindung AD-Wandler zu Vcc erhalten. Mit VCC als "Ref" wird dann gemessen. Es werden nur die Analog-Eingänge umgeschaltet. Also 1. Schritt Aref am zugehörigen Eingang messen. entsprechenden Korrekturfaktor ermitteln und speichern. 2. auf Eingang X umschalten, messen, mit Korrekturfaktor echte Spannung an Eingang X errechnen. Vorgerechnet mit : VCC = 3,4V , Aref 2,48V AD misst zuerst die 2,48V, mit 3,4V als "Referenz". Ergebnis N = 747. Man weiß also, das 2,48V an einem Eingang N = 747 erzeugen. Am anderen Eingang ist das Messergebnis z.B.800 Dann ist U = ( 800 / 747 ) *2,48 V = 2,66V
Man kann über den MUX intern die Bandgap Referenz (ca. 1.1 V) messen. Dafür braucht man die Ref. Spannungnicht umschalten. Es ist also egal ob man AREF fest extern auf VCC verdrahtet, oder einen Kondensator an AREF hat, und intern AVcc an ARef legt. Die Messung der Bandgap Ref. gibt dann 1.1 V / Vcc * 1023. Die einzige Schwierigkeit ist das die Bandgap Ref. eventuell einige Zeit braucht um stabil zu werden. Etwas Zeit sollte man also für die Messung einplanen - man sollte ohnehin besser mehrfach (z.B. 8 mal) messen, weil man mit den 1,1 V nur einen Teil des Wertebereichs ausnutzt.
ulrich schrieb: > Die einzige Schwierigkeit ist das die Bandgap Ref. eventuell einige Zeit > braucht um stabil zu werden. Größer 70µs. ulrich schrieb: > Etwas Zeit sollte man also für die Messung > einplanen Maximal mit 100kHz Abtastrate messen. ulrich schrieb: > man sollte ohnehin besser mehrfach (z.B. 8 mal) messen, Muss man nicht, 1x reicht.
ok hab das jetzt mit der bandgap spannung gemacht und es funktioniert sehr gut. mit nur einmal messen kommt man schon auf 2 kommastellen genau hin... danke auf jedenfall
Hallo Gemeinde Ich habe eine Frage zu dem QuellCode aus: http://www.mikrocontroller.net/articles/Pollin_Funk-AVR-Evaluationsboard#Die_Versorgung_muss_stimmen Warum muss bei der Mittelwertberechnung so gerechnet werden ? return (adcval + NUM_MESS_ADC/2)/NUM_MESS_ADC; Ich würde verstehen, dass der aufsummierte Wert in adcval durch die Anzahl der Messungen dividiert wird. Warum wird zu der Summe der Messwerte auch noch die halbe Anzahl der Messungen addiert ? return (adcval ???+ NUM_MESS_ADC/2???)/NUM_MESS_ADC; Grüße Torsten
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.