Forum: Mikrocontroller und Digitale Elektronik AVR Probleme mit externe Referenzspannung für ADC


von Sven (Gast)


Lesenswert?

Hallo zusammen,

ich habe Probleme mit der externen Referenzspannung für die Verwendung 
des ADC von einem AT90CAN. Zur Referenzspannungserzeugung verwende ich 
einen REF1004-2.5; also 2,5V als Referenzspannung. 
(http://www.ti.com/lit/ds/symlink/ref1004-2.5.pdf)

Den gleichen Baustein habe ich schon als Referenz für externe ADCs 
verwendet. Das funktioniert also soweit.

Die 2,5V habe ich andem µC an Aref angelegt. Weiter wird die 
Referenzspannung über drei Potis, jemweils 10k Ohm, an drei ADC-Ports 
des Controllers gelegt.

Nun habe ich das Problem, dass die Referenzspannung nicht stimmt. Diese 
liegt bei unter 0,4 V, konstant. Der Controller macht sonst, was er 
soll. Die Schaltung scheint auch nicht mehr Strom zu verbrauchen, als 
sie sollte.

Hat jemand eine Idee, woran das liegen könnte?

Vielleicht noch ein Ausschnitt aus dem Code für den ADC:
1
DDRF &= ~(1<<PF1)|~(1<<PF2)|~(1<<PF3); // ADC Ports
2
ADMUX  &= ~((1<<REFS1)|(1<<REFS0)) // ext. Ref.
3
ADMUX  &= ~(1<<ADLAR)              // right adjust
4
ADCSRA &= ~(0x07<<ADPS0)           // Prescaler
5
DIDR0 = (1<<ADC1D)|(1<<ADC2D)|(1<<ADC3D);
6
7
(ADCSRA |=  (1<<ADEN))             // Enable ADC

Beste Grüße

von Magnus M. (magnetus) Benutzerseite


Lesenswert?

Sven schrieb:
> des ADC von einem AT90CAN. Zur Referenzspannungserzeugung verwende ich
> einen REF1004-2.5; also 2,5V als Referenzspannung.
> (http://www.ti.com/lit/ds/symlink/ref1004-2.5.pdf)

Wie groß ist der Pullup an der Kathode des REF1004?

> Den gleichen Baustein habe ich schon als Referenz für externe ADCs
> verwendet.

Grückwunsch.

> Das funktioniert also soweit.

Bei deinen bisherigen Anwendungen mag es funktionieren.

> Die 2,5V habe ich andem µC an Aref angelegt. Weiter wird die
> Referenzspannung über drei Potis, jemweils 10k Ohm, an drei ADC-Ports
> des Controllers gelegt.

Wie wäre es damit, die Referenzspannung vorher über einen 
Transimpedanzverstärker zu jagen?

> Nun habe ich das Problem, dass die Referenzspannung nicht stimmt. Diese
> liegt bei unter 0,4 V, konstant.

Und was ist, wenn du die Potis von AREF trennst?

von Magnus M. (magnetus) Benutzerseite


Lesenswert?

> DDRF &= ~(1<<PF1)|~(1<<PF2)|~(1<<PF3); // ADC Ports

ist übrigens nichts Anderes als

DDRF &= 255;

Sprich: du änderst an dem Register gar nix.

Versuche statt dessen:

DDRF &= ~((1<<PF1)|(1<<PF2)|(1<<PF3));

von Magnus M. (magnetus) Benutzerseite


Lesenswert?

> ADMUX  &= ~((1<<REFS1)|(1<<REFS0)) // ext. Ref.
> ADMUX  &= ~(1<<ADLAR)              // right adjust

Dir ist schon klar, dass das Register nach einem Reset mit "0" hoch 
kommt?

> ADCSRA &= ~(0x07<<ADPS0)           // Prescaler

Auch dieses Register ist jungfräulich auf "0".

> (ADCSRA |=  (1<<ADEN))             // Enable ADC

Meckert da dein Compiler nicht?

von Sven (Gast)


Lesenswert?

@ Magnus M.:

> Wie groß ist der Pullup an der Kathode des REF1004?

51k

> Und was ist, wenn du die Potis von AREF trennst?

Zugegebenermaßen noch nicht getestet, weil ist erst einmal nicht dran 
rum löten oder Leiterbahnen unterbrechen wollte.


Magnus M. schrieb:
>> ADMUX  &= ~((1<<REFS1)|(1<<REFS0)) // ext. Ref.
>> ADMUX  &= ~(1<<ADLAR)              // right adjust
>
> Dir ist schon klar, dass das Register nach einem Reset mit "0" hoch
> kommt?
>
>> ADCSRA &= ~(0x07<<ADPS0)           // Prescaler
>
> Auch dieses Register ist jungfräulich auf "0".

OK, deswegen wird das Ganze doch gesetzt. Stehe da jetzt irgendwie auf 
der Leitung. Der Code kommt nach den Portinitialisierungen usw. die halt 
am Anfang des Programms stehen. Somit werden die Grundeinstellungen des 
ADC doch ziemlich zu Anfang gesetzt.

Magnus M. schrieb:
>> (ADCSRA |=  (1<<ADEN))             // Enable ADC
>
> Meckert da dein Compiler nicht?

Sorry, falsch übertragen, da steht natürlich  ADCSRA |=  (1<<ADEN)

Beste Grüße

von Lötlackl *. (pappnase) Benutzerseite


Lesenswert?

Sven schrieb:
> OK, deswegen wird das Ganze doch gesetzt.

Nö. Denn 0 & 0 = 0

von Magnus M. (magnetus) Benutzerseite


Lesenswert?

Sven schrieb:
> @ Magnus M.:
>
>> Wie groß ist der Pullup an der Kathode des REF1004?
>
> 51k

Soderla... wir lassen mal den REF1004 aussen vor und betrachten nur den 
Spannungsteiler aus 51k und 3,333k (3x 10k parallel):

+5V O----+
         |
        +++
        | |
        | | 51k
        | |
        +++
         |
         +--------------O VREF
         |
        +++
        | |
        | | 3k333
        | |
        +++
         |
GND O----+--------------O


Aus diesem Spannungsteiler kommt selbst ohne Last nur 0,3V raus.

Das kann also nicht funktionieren !

von Magnus M. (magnetus) Benutzerseite


Lesenswert?

So viel also zu deiner Äußerung:

> Den gleichen Baustein habe ich schon als Referenz für externe ADCs
> verwendet. Das funktioniert also soweit.

von Magnus M. (magnetus) Benutzerseite


Lesenswert?

Wenn du ausser den drei 10k Potis nicht mehr Last an AREF hängen willst, 
dürfte es vorerst ausreichen, den 51k Pullup gegen 2k7 zu tauschen 
(sicherer wären 2k2).

von Sven (Gast)


Lesenswert?

Magnus M. schrieb:
> Soderla... wir lassen mal den REF1004 aussen vor und betrachten nur den
> Spannungsteiler aus 51k und 3,333k (3x 10k parallel):
>
> +5V O----+
>          |
>         +++
>         | |
>         | | 51k
>         | |
>         +++
>          |
>          +--------------O VREF
>          |
>         +++
>         | |
>         | | 3k333
>         | |
>         +++
>          |
> GND O----+--------------O
>
>
> Aus diesem Spannungsteiler kommt selbst ohne Last nur 0,3V raus.
>
> Das kann also nicht funktionieren !

Ok, das mit dem Spannungsteiler hatte ich natürlich nicht bedacht und 
das mit den 0,3V kann sehr gut hinkommen. Es sind gemssen acuh wischen 
0,3 und 0,3V.

Bis hierher erst einmal vielen Dank für die Hilfe! Ich werde mal eine 
nacht drüber schlafen und mir dan dann mit dne Hinweisen hinweisen hier 
nochmal genau anschauen!

Vielen dank bis hierhin. Ich werde berichten!

Beste Grüße

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.