Forum: Mikrocontroller und Digitale Elektronik AD Wandler Pins für Referenzspg.


von Lümmel (Gast)


Lesenswert?

Nochmal bezugnehmend auf einen alten Thread.
Ansprechen des AD-Converters funktioniert wunderbar.

Er hat u.a. natürlich die folgenden Pins:

VDDA, REFP, REFN und REFO (Reference Output Voltage).
Ich würde gerne eine Externe Referenzspannung von 3,3V haben. Diese 
schließe ich an VDDA. Über die Konfigurationsregister kann ich REFP 
(positive Referenzspannung, dieser Pin ist über 100n an GND) = VDDA = 
3,3 V setzen. REFN ist mit GND verbunden, d.h. es ergibt sich eine 
Referenzspannung von 3,3V = REFP - REFN.

Was genau ist jetzt REFO? Diese kann mit Konfiguraiotnsregistern auf 
1,5V bzw. 1,2V gestellt werden. Einfach eine weitere Möglichkeit mit 
einer anderen Referenzspannung zu arbeiten? Das heisst in meiner 
Anwendung einfach über Konfig-Register disablen?

Der Schaltplan wäre dann wie oben erwähnt einfach 3,3V -> VDDA, REFN -> 
GND, REFP über 100n an GND und REFO über 100n an GND und dann REFP über 
Konfigregister = VDDA und REFO disablen.

Danke für jeglichen Input!

von Max H. (hartl192)


Lesenswert?

Hast du auch ein Datenblatt zum ADC? In diesem werden viele deiner 
Fragen beantwortet...

von Lümmel (Gast)


Lesenswert?


von Bernd N (Gast)


Lesenswert?

Steht doch im Datenblatt -> Voltage Reference Output, also ein Ausgang 
an dem du VREF abgreifen kannst.

von Max H. (hartl192)


Lesenswert?

Lümmel schrieb:
> Was genau ist jetzt REFO?
Dein ADC hat einen Bandgap Referenz eingebaut und diese Spannung kann am 
REFO ausgegeben werden um sie dann z.B. mit REFP zu verbinden.
> Das heisst in meiner
> Anwendung einfach über Konfig-Register disablen?
Wenn du sie nicht benötigst.

von Lümmel (Gast)


Lesenswert?

OK, vielen Dank schon einmal. REFO benötige ich für meine Anwendung 
nicht. Da ich REFP eigentlich auch nicht nutze, sondern VDDA und VSSA 
direkt auf den AD-Wandler gebe, brauche ich auch nicht VDDA mit REFP zu 
verbinden.

Mein Problem ist, dass der ADC immer denselben Wert zurückgibt (eines 
der Equivalent Test pending signals auf S.42), ganz egal welches Analog 
Signal ich losschicke.

Ich kann den ADC also nicht sauber auslesen und begebe mich auf 
Fehlersuche.

von Lümmel (Gast)


Lesenswert?

Ich kann über die Konfigregister die Eingangsspannungen einstellen.
Testweise habe ich jetzt mal für die Positive Input Voltage 0,1* VDD 
eingestellt und für die negative Input Voltage VSSA.

Ich bekomme beim auslesen des ADC jedoch IMMER dasselbe Ergebnis!! 0x80 
00 00. Egal was ich über die Eingänge schicke. Das kann doch nicht sein.
Was wären mögliche Fehlerquellen?

von Purzel H. (hacky)


Lesenswert?

Allenfalls muss man noch einen Mux konfigurieren ?

von Lümmel (Gast)


Lesenswert?

Hey Hacky,

danke für die Antwort. Den Input Channel Multiplexer habe ich natürlich 
schon konfiguriert (über das ADC1 Register). Hier habe ich AIN1 und AIN2 
gewählt. Zu Testzwecken wie gesagt auch 0,1 * VDD und VSSA und das 
Ergebnis war immer 0x80 00 00.

Das einzige was zu veränderlichen Ausgaben des ADC führt inst die 
Aktivierung des REFO (also ENREF = 1). Wie kann das sein, wenn wie oben 
gesagt es sich lediglich um eine Ausgangsspg. handelt, dies zu 
veränderlichen Werten des ADCs führt?

Ich wäre sicher gewesen, dass dieser disablet werden müßte!

von Lümmel (Gast)


Lesenswert?

Niemand eine Idee woran es liegen könnte, dass sich die ADC nur bei 
enableten REFO verändern ?

von Purzel H. (hacky)


Lesenswert?

Dann waer langsam Zeit fuer etwas Code...

von Lümmel (Gast)


Lesenswert?

Der Code ist schnell erzählt. Die I2C Kommunikation funktioniert 
einwandfrei. Die ist auch dadurch zu erkennen, dass ich die jeweiligen 
Register wieder richtig auslesen kann. Funktion writeregister beschreibt 
die jeweiligen Regiser und readregister liest den ADC aus.
In diesem Fall habe ich keine externe Referenzspannung, sondern den LDO 
und natürlich den ADC aktviert. -> SYS Register!
Im SYS Register habe ich ebenfalls den REFO enablet -> ENREF = 1, da 
sich wie angesprochen sonst die ADC Werte nicht ändern!
1
int main()
2
{
3
...
4
5
writeregister(SYS, 0b00011100);
6
writeregister(ADC1, 0b00001000);
7
writeregister(ADC2, 0b01010000);
8
writeregister(ADC3, 0b00000000);
9
writeregister(ADC4, 0b00000000);
10
...
11
12
    // Example complete
13
    while(1)
14
    {
15
        readregister(ADOH, 3);
16
17
    }
18
}

von Lümmel (Gast)


Lesenswert?

Könnte es vllt. sein, dass REFO nicht nur eine einfache Ausgangsspannung 
ist, sondern intern mit REFP verbunden werden kann? Ich sehe auch, dass 
das Blockdiagramm dagegen spricht und versuche mir den Sachverhalt 
irgendwie erklären zu können!

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.