Forum: Mikrocontroller und Digitale Elektronik differential ADC will nicht


von Pöhli (Gast)


Lesenswert?

Hallo,

ich glaube langsam das die differential Geschichte manchmal nicht nur 
nicht getestet ist sondern auch tatsächlich nicht funktioniert.

Situation:
ATmega16 , DIP- Typ

VCC  : 5,3V  anliegend
AREF : 5,12V anliegend

ADC3 : 250mV anliegend
ADC2 : GND

ADCSRA: ADLAR=0  (Ergebnis rechtsbündig)


Wenn ich
ADMUX= (4...0) = 00011 vorgebe erhalte ich exakt 50LSB. Korrekt.

Wenn ich
ADMUX= (4...0) = 11011 vorgebe ( Differential- Mode ohne 
Verstärkung)erhalte ich 1023LSB, und ich finde gesetzte Bits im oberen 
Bereich desADCH, was überhaupt nicht sein dürfte. Ich müßte so 25 LSB 
bekommen. Das bei Diffenttial Mode das Ergebnis im Zweierkompement 
abgelegt ist dürfte egal sein, denn meine Differenz ist positiv.

Wenn ich
ADMUX= (4...0) = 01101 vorgebe erhalte ich auch 1023LSB, und ich finde 
auch gesetzte Bits im oberen Bereich desADCH, was überhaupt nicht sein 
dürfte.

Dummer weise sind die zwei Atmega16 aus der selben Charge.
Ich hatte früher bei einer anderen Geschichte den Diff- Mode mit Gain 
schon mal am laufen bei einem Atmega als DIP. Keine Ahnung wo derzeit 
der Fehler liegen könnte. Hilfe !!

Danke Pö

von Markus S. (watermax)


Lesenswert?

Hallo,

versuch mal mehrmals hintereinander mit differentiellen Eingang zu 
messen.
Hab schon mal irgendwo gelesen, dass man das erste Ergebnis 
wegschmeissen kann.

Gruß Markus

von Pöhli (Gast)


Lesenswert?

ich messe fortlaufend, und auch bei 64fach Mittelung ändert sich am 
Ergebnis nichts.

von Steffen (Gast)


Lesenswert?

Hi

Genau das Selbe Problem hatte ich neulich auch gehabt. Allerdings habe 
ich es mit nem mega16 und nem mega8 probiert (beide im TQFP Gehäuse). 
Ich hab dann irgendwann aufgegeben.

Nur eine Frage noch:
Gegen welchem Potential misst du die beiden Spannungen an ADC2 und ADC3 
? gegen GND?

von (Gast)


Lesenswert?

Na da bin ich ja froh bzw. nicht weil es nicht gelöst wurde .-)
Aber wenn du es bei TQFP hattest liegt es ja möglicherweise an was 
anderem.
So wie es aussieht steht in den ADCH und ADCL Registern nur Einsen, 
komplett, und nicht nur die 10Bit. Wie geht denn sowas...

Ich hab noch ne Idee und probier morgen mal die bei mir eingentlich gar 
nicht differentiell arbeitenden ADC1 und ADC0 auf diff umzustellen, mal 
sehen was da passiert.

Jetzt steh ich mit einer Leiterplatte da wo ich noch nen zusätzlichen 
Verstärker bräuchte und meiner Temperaturmessung fehlt die 
Kommastelle....

Ich habe eine externe Referenz, und ja ich messe gegen GND. Genau 
genommen DGND, aber im Endeffekt ist es ja eh verbunden.

Gegen was soll ich sonst messen? Soviel ich weiß sind A/D-GND und 
IC-Versorgungs-GND intern verbunden und die Spezifikation erlaubt auch 
nix negatives...

von Thilo M. (Gast)


Lesenswert?

Guck' dir im Datenblatt das ADC-Result bei differenzieller Messung an. 
Das erklärt dann auch die Einsen: negatives Ergebnis. ;)

von Pöhli (Gast)


Lesenswert?

Kannst du das bitte erläutern?
Ich finde nur das das Ergebnis im Zweierkomplement dargestellt wird.
Also bei neg Werten steht im MSB eine 1 un der Wert ist komplementär, 
bei positiven Werten sind die LSB ganz normal. Meine Differenz ist 
positiv (250mV- 0mV = 250mV) Ich dürfte keine Eins in MSB haben.

von Thilo M. (Gast)


Lesenswert?

Wnn du den Wert als (signed) integer anzeigen lässt und bei gesetztem 
Vorzeichenbit die nicht benutzten Bits im MSB mit einsen auffüllst, dann 
bekommst du direkt den Wert angezeigt.
Ich habe das mit einem mega32 gemacht, das sollte funktionieren.

>Meine Differenz ist positiv (250mV- 0mV = 250mV)
Stimmt die Refenzspannung? Oder pole mal um, ob sich's dann ändert.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Der Differentielle ADC macht bei mir auch murks wenn eine Siete auf 
einem GND Potetial liegt, hatte nämlich auch erst geplant das sozusagen 
als internen verstärker zu mißbrauchen.
Geklappt hat nur das ich den Negativen eingang per Kondesator auf GND 
gelegt habe, SignalGND auf GND des AVR, und das Signal dann per 
Kondesator einkoppeln.
Geht natürlich nur bei Wechselspannungssignalen. Was für einen 
Temperatursensor benuzt du denn? ggf ist es einfacher die 
Referenzspannung runterzudrehen!

von Pöhli (Gast)


Lesenswert?

Ok, gefunden.

also die integer Geschichte trifft mich nicht direkt da ich in Assembler 
arbeite, bzw es war nicht das Problem.

Aber es hat sich dann doch gezeigt das es erforderlich war Wartezeit 
zwischen dem setzen der Diffeingänge und der Messung einzufügen.

Ich hatte eine Routine wo (immer die gleichen) Eingänge immer wieder 
gesetzt wurden, und da es immer die gleichen Eingänge waren dachte ich 
ich brauch dann keine Wartezeit mehr.
Als ich das Setzen der MUX aus der Schleife rausgenommen hatte uns bissl 
wait gemacht habe gings dann.

DANKE AN ALLE !

von avion23 (Gast)


Lesenswert?

@Pöhli
kannst du mal dein Groundpotential meßen? Ich habe gelesen, dass der 
differenzielle amp nur funktioniert, wenn beide Signale unterschiedlich 
zu {Vcc,Gnd} sind. Ich wüßte gerne, was jetzt stimmt :(

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.