Forum: Mikrocontroller und Digitale Elektronik ATMEGA 328 - AREF wiedersprüchlich


von Mike (Gast)


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

von Alexander S. (alesi)


Lesenswert?

Mike schrieb:
> Wie habe ich den denn nun zu verwenden?

Das ist z.B. hier unter "Referenzspannung AREF" beschrieben:

    https://www.mikrocontroller.net/articles/AVR-Tutorial:_ADC

von Mike (Gast)


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?

von Torsten C. (torsten_c) Benutzerseite


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.

von Werner P. (Gast)


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

von Mike (Gast)


Lesenswert?

Zu meiner Entschuldigung es steht nicht in dem Datenblatt drin das 
Reichelt zu verfügung stellt :( 
http://cdn-reichelt.de/documents/datenblatt/A200/DS_AT168A_PA_328_P.pdf

von Kaj (Gast)


Lesenswert?

Mike schrieb:
> Zu meiner Entschuldigung es steht nicht in dem Datenblatt drin das
> Reichelt zu verfügung stellt :(
Das ist auch nicht das Datenblatt, sonder nur ein 
Überblick/Zusammenfassung, auch Summary genannt.

Das Datenblatt gibt es bei Atmel:
http://www.atmel.com/images/Atmel-8271-8-bit-AVR-Microcontroller-ATmega48A-48PA-88A-88PA-168A-168PA-328-328P_datasheet_Complete.pdf

von ASM Superprofi (Gast)


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.

von ASM Superprofi (Gast)


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.

von ASM Superprofi (Gast)


Lesenswert?

Grad gesehen: Der ADS5474MHFGV ist für knapp 9000 Euro zu haben hrhrhr

von Hansi (Gast)


Lesenswert?

PLONK!

von Mike (Gast)


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

von MWS (Gast)


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.

von Mike (Gast)


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

von Mike (Gast)


Lesenswert?

achja und bevor ich es vergesse bei External muss beachtet werden das 
die Spannung: 0V < AREF < 5V ist.

von Mitlesa (Gast)


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.

von Einer K. (Gast)


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.

von Mike (Gast)


Lesenswert?

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?

von Michael K. (tschoeatsch)


Lesenswert?

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.

von Mike (Gast)


Angehängte Dateien:

Lesenswert?

Das ist momentan mein Schaltplan :S

von G. H. (schufti)


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.

von Mike (Gast)


Lesenswert?

ok was muss ich den dabei in der Schaltung beachten?

von Michael K. (tschoeatsch)


Lesenswert?

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.

von G. H. (schufti)


Lesenswert?

ja, für hell/dunkel reicht es allemal und mehr gibt ein LDR nicht her...

von Michael K. (tschoeatsch)


Lesenswert?

Mike schrieb:
> ok was muss ich den dabei in der Schaltung beachten?

Die 100nF zwischen VCC und AVCC gegen Gnd nicht vergessen!

von Mike (Gast)


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.

von Mike (Gast)


Lesenswert?

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?

von Michael K. (tschoeatsch)


Lesenswert?

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.

von Mike (Gast)


Angehängte Dateien:

Lesenswert?

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

von Jim M. (turboj)


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.

von Jim M. (turboj)


Lesenswert?

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.

: Bearbeitet durch User
von Michael K. (tschoeatsch)


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.

von Mike (Gast)


Angehängte Dateien:

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 ?!

von Michael K. (tschoeatsch)


Lesenswert?

Mike schrieb:
> Damit und mit analog refrenz auf internal sollte es denn jatzt aber
> klappen ?

Wenn damit nicht die 1,1V gemeint sind, dann ja.

von Hubert G. (hubertg)


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.

von Michael K. (tschoeatsch)


Lesenswert?

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

von Mike (Gast)


Lesenswert?

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

von Joachim B. (jar)


Lesenswert?

Mike schrieb:
> Damit und mit analog refrenz auf internal sollte es denn jatzt aber
> klappen ?!

besser wäre

https://www.mikrocontroller.net/wikifiles/9/9e/Adc_connection.png

eine Spule zwischen VCC und AVCC

von Michael K. (tschoeatsch)


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.

von Mike (Gast)


Lesenswert?

Super vielen Dank für eure Hilfe und Geduld! :-D

von Holger L. (max5v)


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.

von Mike (Gast)


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

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
Noch kein Account? Hier anmelden.