ATMEGA 328 - AREF wiedersprüchlich

Gast #4717267
Lesenswert?

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
Gast #4717284
Lesenswert?

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?
Persönliche Seite #4717286
Lesenswert?

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.
Gast #4717289
Lesenswert?

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
Gast #4717342
Lesenswert?

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.
Gast #4717344
Lesenswert?

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.
Gast #4717492
Lesenswert?

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
Gast #4717600
Lesenswert?

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.
Gast #4717804
Lesenswert?

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
Gast #4717808
Lesenswert?

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.
Gast #4717812
Lesenswert?

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.
#4717837
Lesenswert?

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.
Gast #4717853
Lesenswert?

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.
#4717885
Lesenswert?

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.
#4717898
Lesenswert?

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.
Gast #4717901
Lesenswert?

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 ?!
Angehängte Dateien:
#4717912
Lesenswert?

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.
#4717936
Lesenswert?

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.
#4717988
Lesenswert?

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.
Gast #4718011
Lesenswert?

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 :)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren