Hallo,
ich habe mal eine blöde Frage zum AREF Pin beim ATMEGA 328P PU bzw. AU.
Und zwar baue ich ein kleines Batterie betriebenes Gerät bei dem ich ua.
auch einen Analog Pin zur "helligkeitsmessung" benutzen will.
Nun habe ich aber beim entwurf meines PCBs das Problem das ich auf
wiedersprüchliche Quellen bezüglich der verwendung des Analog Referenz
Pins stosse so wird er bei Arduino.cc direkt auf VCC geschaltet (siehe
hier: https://www.arduino.cc/en/uploads/Main/arduinobb_10.jpg) in vielen
Quellen wird er gar nicht geschaltet und sogar davon abgeraten (zb.
hier:
https://cdn.instructables.com/FQZ/R0UV/IIHRL4UQ/FQZR0UVIIHRL4UQ.MEDIUM.jpg)
und hier bei mikroconroller habe ich sogar schon gelesen das er auf GND
geschaltet werden soll (siehe hier:
Beitrag "AREF = AVCC ????") und leider ist das
Datenblatt mit der Aussage "AREF is the analog reference pin for the A/D
Converter." (Das ist tatsächlich alles was dazu drin steht) auch nicht
wirklich hilfreich. Wie habe ich den denn nun zu verwenden? :S
ok, wenn ich diesen Satz "Wenn eine Referenz in Höhe der
Versorgungsspannung benutzt werden soll, so ist es besser, dies über die
interne Referenz zu tun. Außer bei anderen Spannungen als 5V bzw. 2,56V
gibt es eigentlich keinen Grund, an AREF eine Spannungsquelle
anzuschließen." Richtig verstanden habe heisst das also ich kanns mir
sparen den AREF Pin zu belegen, denn meine Anwendung soll komplett auf
4,5 Volt (3 AAA Zellen) laufen. Ist das korrekt?
Mike schrieb:> und hier bei mikroconroller habe ich sogar schon gelesen das er auf GND> geschaltet werden soll (siehe hier: Beitrag "AREF = AVCC ????")
Wo genau? Ich finde die Stelle nicht.
Wenn Du AREF benutzen willst, soll ein Kondensator an Masse.
Mike schrieb:> Wie habe ich den denn nun zu verwenden?
Du kannst wählen:
1.) intern (2,56V)
2.) extern über den Pin AREF
3.) AVCC with external capacitor at AREF pin
Steht auch in dem anderen Thread.
Z.B. ist ein TL431 an AREF vielleicht genauer als die internen 2,56V.
Steht doch im Datenblatt:
Table 24-3. Voltage Reference Selections for ADC
REFS1 REFS0 Voltage Reference Selection
0 0 AREF, Internal Vref turned off
0 1 AVCC with external capacitor at AREF pin
1 0 Reserved
1 1 Internal 1.1V Voltage Reference with external capacitor at
AREF pin
external capacitor immer nach GND
Hallo Mike,
die Frage ist nicht blöd. Es hat halt fast niemand wirklich Ahnung und
sagt lieber irgendwas falsches statt einfach mal die Fresse zu halten.
Sowas erkennt man immer gut an Beiträgen mit Ratschlägen ohne
Begründung. Argumente wie "das macht man halt so!" runden das Bild vom
Vollidioten dann ab. Meistens gepaart mit Beleidigungen, damit man bloss
nicht nachfragt, sonst könnte ja rauskommen, dass man KEINE AHNUNG HAT!
Ich fasse mich kurz, auch wenn man zum Thema ADCs ein Buch füllen kann.
Wie GENAU willst du messen? Da du offensichtlich gerade erst einsteigst,
wirst du überrascht sein, dass es in der Welt ausserhalb des Computers
keine künstlichen Grenzen gibt.
Ich rate mal, dass es eigentlich völlig Wurscht ist, solange irgendwie
ein plausibler Wert bei rauskommt. Wenn dem so ist, dann lass AREF leer
und schalte es intern. Selbst den Kondensator kannst du dir sparen. Du
wirst immernoch Messungen erhalten.
Ist dir das ganze dann zu ungenau, musst du halt ARBEITEN. Also
Kondensator dran packen, neuer Versuch. Immernoch zu zappelig? Dann ist
VCC zu versaut, also musst du die Spannung entkommeln und "reinigen".
Das macht man mit Beads und Kondensatoren. Immer noch zu ungenau? Dann
nimmt man einen externen ADC, den man professionell abschirmt. Externe
ADCs gibts ab 50 Cent, du kannst aber auch gerne 3000 Euro für einen
High-End ADC ausgeben.
Fazit: Eine ZAHL bekommst du immer (ausser dein Display ist kaputt.) Was
genau die Zahl aussagt, steht auf einen anderen Blatt. Taste dich halt
ran vom einfachsten Weg. Meistens wird dir die Genauigkeit ausreichen.
Kaputt machen kannst du übrigens nichts.
Ach und wenn du irgendwann mal sagst "SO, jetzt lern ich ADC!" dann
plane mal so ein Jahr ein. Das Thema ist unverschämt umfangreich und
kompliziert.
Komplexität = Messgenauigkeit * Messgeschwindigkeit
Schonmal ein digitales Multimeter geöffnet? Eigentlich ist das auch
nichts anderes als eine reine ADC-Maschine.
Hallo ASM Superprofi,
ich danke dir vielmals für deine Antwort (die erste die mir wirklich
geholfen hat) ich habe nun eine Kondensator mit 100nF zwischen
geschaltet um es ein wenig genauer zu kriegen (bzw. mal auszuprobieren
wie groß die auswirkungen mit und ohne für mich sind :) ) Ich danke dir
auf jeden Fall sehr :-D
Mike schrieb:> Hallo ASM Superprofi,
Superschwätzer trifft Ahnungslosen.
Erkennt man daran, dass zur ursprünglich gestellten Frage, also über
Sinn, bzw. Unsinn AREF fest auf VCC zu legen, nichts beantwortet wird.
Und der TE findet solch eine Ansammlung von aneinandergereihten Worten
auch noch gut, daran erkennt man den Ahnungslosen, die umfangreichste
Antwort beeindruckt, sei sie auch noch so inhaltsleer.
Sicher schon tausendmal geschrieben und so nachzulesen:
Bei den klassischen 8-Bit AVRs legt man außer zur Glättung über einen
Kondensator oder zum Anschluss einer externen Referenz den AREF-Pin
nirgendwohin, denn AREF ist dort direkt mit dem Referenzeingang des ADC
verbunden.
Daraus ergibt sich:
- Wird AREF auf GND gelegt, bekommt der ADC 0 Volt als Referenz und kann
nicht arbeiten
- AREF auf VCC legen geht, aber
a) kann das genauso intern über Register geschehen
b) nimmt man sich die Option der internen Referenz
c) wenn trotzdem die interne Referenz gewählt wird, wird diese
kurzgeschlossen
Vier Gründe warum manche Entwicklungsboards den AREF-Pin extern auf VCC
legen:
1) schlechtes Design
2) schlechtes Design
3) schlechtes Design
4) der ADC bekommt so auf jeden Fall eine Referenzspannung, auch wenn
der Anwender vergisst eine auszuwählen.
Bei den XMegas wurde das Design geändert, da sorgt ein Multiplexer
dafür, dass einer der Referenzeingänge des MUX auf den Referenzeingang
des ADC gelegt wird, die interne Referenz kann damit nicht mehr
kurzgeschlossen werden.
Das ist übrigens alles, wie auch beim ATM328, aus den Blockschaltbildern
zum ADC im Datenblatt zu entnehmen, man muss nicht einmal Englisch dafür
können, nur Bildchen ansehen muss klappen.
ok, ich glaub ich kriegs so langsam zusammen:
ich hab jetzt den Aref analogReference(DEFAULT); gesetzt.
Damit benutzt er 5V als internen Referenzwert und damit kann ich darauf
verzichten den AREF auf VCC zu schalten und sollte nur noch einen 100nF
Kondensator zwischen Aref und GND setzen um diesen zu "beruhigen" (Mir
fällt grad kein passenderes Wort ein). Damit erreiche ich zwar keine
große Genauigkeit die aber für mich in diesem Fall auch nicht nötig ist.
Sprich:
GND O-----||-----O AREF
100 nF
Wenn die Genauigkeit eine größere Rolle spielt muss ich
analogReference(EXTERNAL) setzen und zwischen GND und VCC einen
Spannungsteiler setzen und dazwischen die Spannung für AREF "abgreifen".
Sprich:
GND O-----[R0]---+---[R1]-----O VCC
|
O
AREF
Dabei gilt: R0 = R1 = xy Ohm
Das ist zwar genauer aber auch "Aufwändiger".
Ist das jetzt (zumindest halbwegs) richtig? :S
Mike schrieb:> Wenn die Genauigkeit eine größere Rolle spielt muss ich> analogReference(EXTERNAL) setzen
.... und eine genaue externe Referenz anschliessen, und nicht
so einen Käse wie einen Spannungsteiler der die ungenaue
Versorgungsspannung als "Referenz" benutzt.
Mike schrieb:> und zwischen GND und VCC einen> Spannungsteiler setzen und dazwischen die Spannung für AREF "abgreifen".
Wie soll das genauer sein, als die Versorgung?
Nee...
Ein Irrtum.
Wenn du es genauer willst, nimm die interne Referenz.
Und sehe eine "Kalibrierung" vor.
Noch genauer wirds wohl mit einer externen Referenz. Aber damit ist kein
primitiver Spannungsteiler gemeint.
ok denn war mein allererster Ansatz also doch nicht so falsch, nur was
ist der unterschied zwischen Internal und Default, ja schon klar Default
referenz ist 5V bzw 3.3V und Internal 1.1V (siehe hier
https://www.arduino.cc/en/Reference/AnalogReference) aber was mach das
für mich als Anwender am ende für einen Unterschied?
Nachdem man jetzt garnicht weiß, wie die Helligkeit gemessen werden
soll, ist ein diskutieren über die Genauigkeit der Referenz eigentlich
hinfällig. Es nütz ja nix, wenn (vermutlich) der Fotowiderstand als Teil
eines Spannungsteilers an VCC liegt und der adc mit interner Referenz
mist.
mal ganz verallgemeinert:
internal: ist halt zumindest eine "Referenz" deren Stabilität und
Genauigkeit im Datenblatt beschrieben (eingegrenzt) ist.
default: kann alles sein. Wenn du einen einfachen 7x05 verwendest und
lange Leitungen hast, bzw. der Regler überlastet/unterfordert ist, wird
sich sowohl die Stabilität als auch die Genauigkeit nur relativ zur
Spannungsversorgung "vermuten" lassen.
Mike schrieb:> Das ist momentan mein Schaltplan :S
So wie ich sehe, hängt dein Spannungsteiler der Helligkeitsmessung an
VCC, sodass du als Referenz auch VCC wählen solltest.
ok dh. ich sollte es doch wie beim Arduino Breadboard Tutorial machen
und AREF direkt auf VCC schalten und dann benötige ich nicht einmal eine
Angabe im Quellcode wenn ich das so noch richtig im hinterkopf habe.
Michael K. schrieb:> Die 100nF zwischen VCC und AVCC gegen Gnd nicht vergessen!
du meinst also zwischen VCC und GND einen 100nF und AVCC und GND einen
100nF Kondensator?
Wenn der pin VCC und der pin AVCC sehr nahe beieinander liegen, reicht
mMn. ein 100nF.
Ich würde die Einstellung im code vornehmen, dann kann nicht
versehentlich die interne Vref kurzgeschlossen werden. Kurzschluss ist
nie gut, wenn auch hier vielleicht nicht schädlich.
also sieht das jetzt so für mich aus + in Code
analogreference(internal).
Wenn das jetzt wirklich so stimmt dann vielen, vielen Dank für die
anstrengende Mühe die ich gemacht hab und ihr so geduldig ertragen habt
:-)
Mike schrieb:> Ist das jetzt (zumindest halbwegs) richtig? :S
Nö. Die Variante mit dem Kondensator ist wesentlich weniger störanfällig
als die mit dem Spannungsteiler, wo auch höherfrequente Störungen auf
VCC voll auf AREF durchschlagen. Die würde der Kondensator nämlich glatt
bügeln.
Den Kondensator braucht man auch falls man AREF auf die interne
(Bandgap) Referenz einstellen möchte. Die ist oft wesentlich genauer als
VCC. Die Schaltung mit dem Kondensator erlaubt Dir maximale
Flexibilität.
Strom einspeisen würde man in AREF nur mit externem Referenzbaustein,
d.h. einer viel präzieseren Spannungsquelle als VCC. Das sieht man bei
dem grottligen 10-Bit ADC aber praktisch nie, weil man dann meistens
auch einen externen ADC braucht.
Mike schrieb:> also sieht das jetzt so für mich aus + in Code> analogreference(internal).
Genau so sollte man es nicht machen. Alle VCC Störungen schlagen voll
auf AREF durch, und man kann die interne Referenz nicht einschalten.
Mike schrieb:> also sieht das jetzt so für mich aus + in Code> analogreference(internal).>> Wenn das jetzt wirklich so stimmt dann vielen, vielen Dank für die> anstrengende Mühe die ich gemacht hab und ihr so geduldig ertragen habt> :-)
Den Aref nicht mit AVCC oder VCC verbinden, nur 100nF gegen Gnd.
An VCC und AVCC einen 100nF dran.
Im code angeben 'ref=AVCC', wie das beim Arduino-c geht, weiß ich nicht.
Ok der Satz von Michael
Michael K. schrieb:> So wie ich sehe, hängt dein Spannungsteiler der Helligkeitsmessung an> VCC, sodass du als Referenz auch VCC wählen solltest.
hatte mich dazu gebracht also hab ich jetzt wieder einen Kondensator
zwischen AREF und GND und einen "neuen" zwischen AVCC/VCC und GND.
Damit und mit analog refrenz auf internal sollte es denn jatzt aber
klappen ?!
Mike schrieb:> ok dh. ich sollte es doch wie beim Arduino Breadboard Tutorial machen> und AREF direkt auf VCC schalten und dann benötige ich nicht einmal eine> Angabe im Quellcode wenn ich das so noch richtig im hinterkopf habe.
Genau diesen Unsinn habe ich bei den ersten BASCOM-Tutorials beobachtet
und ist vielfach auch heute noch so. Die Beispielprogramme funktionieren
nur wenn AREF mit VCC verbunden ist.
Bei vielen Arduino Tutorials ist es das gleiche.
Dieser Unsinn wird sich daher nie mehr ausmerzen lassen.
Werner P. schrieb:> REFS1 REFS0 Voltage Reference Selection> 0 0 AREF, Internal Vref turned off> 0 1 AVCC with external capacitor at AREF pin> 1 0 Reserved> 1 1 Internal 1.1V Voltage Reference with external capacitor at> AREF pin>> external capacitor immer nach GND
Die zweite Option
Mike schrieb:> ok denn muss ich nach Arduino logik auf Default und nicht auf internal> ;) https://www.arduino.cc/en/Reference/AnalogReference dann hab ich 5V> also referenz
Das schaut gut aus, bei dir sind's halt keine 5V sondern nur deine
Batteriespannung, die langsam weniger wird, aber ebenso am
Spannungsteiler mit dem LDR. Somit ist bei gleichbleibender Helligkeit
auch ein gleichbleibender adc-Wert vorhanden, selbst wenn die Batterien
schwächer werden.
Denk bitte daran, was Michael K. bereits erwähnt hatte, die Spannung
einer AAA Zelle beginnt bei ~1,5V und endet bei ~0,8V. Was ungeregelt
wie es bei dir der Fall sein sollte (3xAAA) ~4,5V - ~2,4V bedeutet.
Solange AREF der Versorgungsspannung folgt ist es Messtechnisch kein
Problem, bei anderen Komponenten in der Schaltung unter Umständen
allerdings schon.
Ja an das Problem hab ich auch schon gedacht und dafür einen USB
Anschluss verplant um ggf. auch ein große USB Power bank nutzen zu
können ;) aber ich has auch schon mal bis 3V getestet und da lief
zumindest noch alles einwandfrei :)