Ich nutze den ADC eines Arduino Nano im free run mode, um ein Audiosignal zu sampeln.
Der Vorverstärker hängt an einem externen 3,3 Volt Regler, der ADC soll nun diese 3,3 Volt auch als Referenz nutzen.
Problem - Das ganze Verträgt sich nicht so ganz:
Übrigens: Den Free Run Code hab ich aus der OpenmusicLabs FFT Lib geklaut.
//Setup ADC:
analogReference(EXTERNAL);
ADCSRA = 0xe5; // set the adc to free running mode
ADMUX = 0x40; // use adc0
DIDR0 = 0x01; // turn off the digital input for adc0
//Read ADC:
while (!(ADCSRA & 0x10)); // wait for adc to be ready
ADCSRA = 0xf5; // restart adc
byte m = ADCL; // fetch adc data
byte j = ADCH;
sample = (j << 8) | m; // form into an int
Problem hierbei: ARef gibt nun 5 Volt aus, also seine Normale Referenz, das macht aber den Regler unnötig.
Auch "analogReference(EXTERNAL);" nach dem Setup zu setzen nutzt nichts.
combie:
Und die wirst schon die 3,3V an ARef anschließen müssen.
Vom messen kommen da keine 3,3V hin
Ups, da hab ich mich wohl unklar ausgedrückt. Ich hab die 3,3 Volt schon da angschlossen. Der Pin gibt die
dann an die Verstärkungselektronik weiter.
Also wenn ich nun "analogReference(EXTERNAL);" aufrufe wird intern nur ein Flag gesetzt, dass dann hinter den Kulissen des "analogRead(A0);" genutzt wird.
Kann ich dann "analogReference(EXTERNAL);" noch in meinen Auslesecode einfügen oder muss ich Control Register verändern, wenn ja, welche?
ARef ist ein EINGANG, dort gibst Du die Ref-Spannung drauf, damit der Arduino mit Dieser vergleichen kann.
Deinen Post verstehe ich so, daß Du dort gerade die 3,3V abgreifen willst für weitere externe Baugruppen.
ARef ist ein EINGANG, dort gibst Du die Ref-Spannung drauf, damit der Arduino mit Dieser vergleichen kann.
Deinen Post verstehe ich so, daß Du dort gerade die 3,3V abgreifen willst für weitere externe Baugruppen.
MfG
Ja, eigentlich ist ARef ein Eingang für die Referenzspannung, ABER wenn nun wie in meinem Fall die 5 Volt Betriebsspannung des Arduinos genutzt werden, werden eben diese (ATMega intern) auf den ARef Anschlusses des ADC gegeben. Durch einen Schutzwiderstand im Atmega ist der ARef am Aref Pin mit der Aussenwelt verbunden.
Heist kompakt:
Weil die 5 Volt am ADC anliegen, kommen diese auch zum ARef-Pin wieder raus.
Vom ARef-Pin fürt eine Leitung zu meiner Restlichen Elektronik, welche eigentlich dazu gedacht ist um die 3,3 Volt des Reglers zu ARef zu führen. Da ARef Atmega intern mit 5 Volt verbunden sind, fließen diese aus dem ARef-Pin in meine Elektronik.
Ungläubige Mutige dürfen gerne mal ihr Multimeter zwischen GND und ARef halten.
Bei "analogReference(EXTERNAL);" misst man 0 Volt.
Nur sind so nun 3,3 Volt auf dem Atmega internen 1,1 Volt Regler, aber die brauch ich ja eh nich
Vorsicht. Das ist natürlich Pfusch
Ich hatte da einen Fehler gemacht und die Tabelle falsch gelesen. Tut mir leid. Du musst da auch mal ins Datenblatt schauen. Da steht das alles drin.
RFS1 RFS0 Modus
0 0 AREF
0 1 Vcc, mit Kondensator an AREF entkoppeln
1 0 reserviert
1 1 interne 1,1V, mit Kondensator an AREF
Korrekt für die externe Referenz wäre also das ganze ADMUX Register auf 0! Dein Beispiel Code verwendet die 5V Versorgung als Referenz
Da muss man schon aufpassen. Der Grund weshalb die Spannung herausgeführt wird ist damit man sie mit einem Kondensator mit Masse verbinden kann. Aber damit kann man auch Kurzschlüsse fabrizieren wenn man eine Spannung anschließt und intern 5V auswählt