ADC mit Referenzspannung

Gast #146971
Lesenswert?

Hallo Leute!
Folgendes Problem:
Ich habe zuerst eine AD -Wandlung mit der Versorgungsspannung und GND
als Referenzspannungen - also so wie es standardmäßig beim PIC16f877
geschieht. Dabei wurde z.B. der Eingangswert 740mV in ca. 148 binär
gewandelt (bei 10bit)
(Vref+ - Vref-)/1024 =5V/1024=ca. 5mV
740mV / 5mV = 148
Diese AD -Wandlung stimmt also noch!

Als nächstes legte ich an Pin 3 von Port A (der Eingang für positive
Referenzspannung)2,56V an. Die Referenzspannungsquelle habe ich als
Dateianhang dazugegeben!!!!
Nun müsste der Eingangswert von 740mV so ca. 300 binär ergeben oder?

(Vref+ - Vref-)/1024 =2,56V/1024=ca. 2,5mV (als Vref- wurde GND
verwendet).
740mV / 2,5mV=296
Bei der AD -Wandlung ergibt sich jedoch ca. 40 als Binärwert ,also viel
zu niedrig?
Weiß jemand an was das liegen könnte?? mfg
Angehängte Dateien:
Gast #146974
Lesenswert?

Hallo,

hast du ein Oszi um die Versorgungsspannung für den ADC zu prüfen,
evtl. bricht sie kurz ein oder da sind noch Spannungsspitzen, wenn die
Mux auf einen Kanal umschaltet oder die Messung gerade beginnt. Bei den
AVR's wird im Datenblatt empfohlen einen Tiefpass bestehend aus kleiner
Spule und Kondensator zu nehmen. Habe mal ein Bild reingesetzt schaus
dirs mal an könnte dir helfen. Evtl. reicht auch schon ein Kondensator.
Als Typ wird ein Tantalkondnsator empfohlen und die Referenzspannung mit
einem 1µF Elko zu Puffern kann auch nichts schaden so bleibt die
wenigsten stabil.
Angehängte Dateien:
Gast #146976
Lesenswert?

Hallo,

mach mal den Kondensator sowohl zw. AVCC-AGND als auch zw- AREF-AGND,
möglichst nah an die Pins.

Bau mal zum testen einen normalemn Spannungsteiler um auf deine 2,56V
zu kommen. Wähle den ersten Wiederstand etwas kleiner so um die 400
Ohm, damit die Spannung auch belastbar bleibt.

Manche AVR können doch intern 2,56V an den AREF geben, dann würde sich
das ganze erübrigen.

Außerdem gibt es das Problem das die gängigen Stabilisierer (LM7805)
bei geringer Last ca. 5,1Volt ausspucken und erst bei höherer Last
korrekt auf 5,0V regeln, evtl. tut das deine Referenzspannungsquelle
auch etwas beeinflussen.
Gast #146979
Lesenswert?

Ohne Dein Programm gesehen zu haben, meine ich, daß man für 10 Bit zwei
Stück Bytes braucht: low + high. Mir scheint, Du verwendest nur das
low-Byte, womit man keine größeren Werte als 255 darstellen kann.
Gast #146980
Lesenswert?

Okay ich hab mal das Programm als Anhang dazugegeben. Okay vielleicht
wandelt er deswegen so komisch -aber warum ist es dann zuvor bei 5V als
Referenzspannung gegangen??? da hat er doch mit 10 bit gewandelt, warum
sollte er es jetzt nicht mehr machen???

kann es vielleicht sein, dass ich den Eingang den ich für die
Referenzspannung verwende irgendwie setzen muss oder ---keine
ahnung!!!
mfg
Angehängte Dateien:
Gast #146981
Lesenswert?

hab jetzt versucht einen neuen PIC zu verwenden, hab als Datentyp
unsigned int probiert, hab eine andere Referenzspannungsquelle probiert
- schon langsam habe ich keine idee mehr?
Hat irgendjemand schon einmal eine ad -wandlung mit referenzspannungen
gemacht???
Gast #146982
Lesenswert?

Tja, einfache erklärung:
178 lässt sich mit 8bit darstellen, 296 eben nicht mehr.
Deswegen, solltest du das high byte beachten;)
Damit du sicher seien kannst, das richtige zu verwenden nimm uint16_t
oder falls es bei avr anders sein sollte das äquivalent dazu.

Und jetzt noch das "Phänomen":
296: 1 0010 1000
bei blos 8 bit: 0010 1000 = 40
-> somit wäre ja wohl eindeutig klar was da abgeht.

set_adc_channel(0);// EingangA.0 als Eingang auswählen
tempwert = Read_ADC();

Wieso schreibst du das als funktionen?
Das kostet dich ne menge ausführungszeit, für das was in der Funktion
dann getan wird.

tempwert = ADCL;
tempwert += ADCH;
dass sollte alles sein, was du brauchst.
Dafür ne eigene Funktion ist doch etwas übertrieben.
mfg Flo

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