Forum: Mikrocontroller und Digitale Elektronik AD- Wandlung ATMega64A Referenzspannung bricht ein


von Michael_SS (Gast)


Lesenswert?

Hallo Leute.

Ich möchte gern mit einem ATMega64A (Versorgung 3,3V DC) diverse 
Gleichspannugen mit dem internen AD Wandler messen. Unter anderem auch 
die externe Referenzspannung von 3V (angeschlossen an AREF). Diese habe 
ich direkt an Kanal 4 (PF04) des AD Wandlers angeschlossen.

Im Programmablauf wird der ADC immer nur aktiviert, wenn dieser benötigt 
wird. Danach wird er wieder abgeschaltet.

Mein Code:

unsigned int read_adc(unsigned char adc_input)
{
 unsigned char i;
 unsigned int result;

// Frequenzvorteiler auf 32 setzen und ADC aktivieren
 ADCSRA = (1<<ADEN) | (1<<ADPS2) | (0<<ADPS1) | (1<<ADPS0);

// externe Referenz 3V, AD- Kanal wählen
 ADMUX |= adc_input;

 ADCSRA |= (1<<ADSC);              // Dummy auslesen
 while ( ADCSRA & (1<<ADSC) );     // und warten

// Messung --> Mittelwert aus 60 aufeinanderfolgenden Messungen


 for(i=0;i<60;i++)                 {
          ADCSRA |= (1<<ADSC);            // Wandlung starten
          while ( ADCSRA & (1<<ADSC) );   // warten
          result += ADCW;   // Wandlungsergebnisse aufaddieren
      }
 ADCSRA &= ~(1<<ADEN);   // Messung beendet --> AD-Wandler deaktivieren

 ADMUX = 0x00;
 return result/60;
}

Jetzt habe ich fesgestellt, läuft der µC mit dem internen Oszillator bei 
einer Frequenz von 1MHz und wird die Wandlung in einer While (1) 
Schleife ständig wiederholt, kann ich am Referenzpin einen 
Spannungeinbruch von 3V (externe Referenz) auf 2,87V messen.

Wie kann das sein? Wieso bricht meine externe Referenzspannung zusammen?
Habe ich falsch initialisiert?

Wie müssen die PORT PINS initialisiert werden für die Nutzung des AD 
Wandlers?

Danke für jede Hilfe

PS: als Referenz verwende ich einen LM4040A30 mit einem Vorwiderstand 
von 3k.

von friedrich (Gast)


Lesenswert?

Hallo Michael,

fallen mir im Moment folgende Möglichkeiten ein:
a) Vcc vor dem LM4040 nicht stabil
b) Laststrom zu groß (Port nicht sauber initialisiert)

Grüße

von spess53 (Gast)


Lesenswert?

Hi

>Jetzt habe ich fesgestellt, läuft der µC mit dem internen Oszillator bei
>einer Frequenz von 1MHz und wird die Wandlung in einer While (1)
>Schleife ständig wiederholt, kann ich am Referenzpin einen
>Spannungeinbruch von 3V (externe Referenz) auf 2,87V messen.

Generell oder wenn du die Referenzspannung misst?

Ist VREF mit einem Kondensator gepuffert?

>PS: als Referenz verwende ich einen LM4040A30 mit einem Vorwiderstand
>von 3k.

An welcher Spannung hängt diese Kombination?

MfG Spess

von Michael_SS (Gast)


Lesenswert?

3k hängen auf der einen Seite an 3,3VDC und anderen anderen Seite an der 
Kathode des LM4040A30.

Der Spannungseinbruch ist nur dann zu messen, wenn der ADC läuft. Im 
ausgeschaltetem Zustand messe ich auch 3V.

Ich habe mittelweile den Widerstand auf 1k verkleinert. Dies hat 
zumindest die Einbrüche verschwinden lassen.

Ist habe ich aber folgendes weiteres Problem. Wenn ich den Spannungen 
messe und den Messwert im Display anzeigen lasse, schwangt die gemessene 
Referenz stark hin und her. Statt 1024 (da ja 10 bit und 10 bit 
entsprechen der Spannung am AREF Pin) werden 1022 oder auch mal 1053 
angezeigt. Aber auch kleinere Werte wie 350 oder so etwas.

Was kann das sein?

von spess53 (Gast)


Lesenswert?

Hi

>Statt 1024 (da ja 10 bit und 10 bit
>entsprechen der Spannung am AREF Pin) werden 1022 oder auch mal 1053
>angezeigt. Aber auch kleinere Werte wie 350 oder so etwas.

Dann hast du noch andere Probleme. Der Maximalwert des ADC ist 1023 
($3FF). Also können definitiv keine 1053 ($41D) auftreten.

MfG Spess

von Michael_SS (Gast)


Lesenswert?

Ja da stimme ich dir zu. Aber was ist das für ein Problem?

von Michael_SS (Gast)


Lesenswert?

Wie muss Port F konfiguert werden wenn der AD Wander benutzt wird? 
Eingänge im Tristate oder mit Pull up?

von spess53 (Gast)


Lesenswert?

Hi

>Wie muss Port F konfiguert werden wenn der AD Wander benutzt wird?
>Eingänge im Tristate oder mit Pull up?

Ganz normaler Eingang. Ohne Pull-Up.

MfG Spess

von Michael_SS (Gast)


Lesenswert?

Nach dem ich nun die Referenzspannung stabil bekommen habe, möchte ich 
die an Kanal 0 angeschlossene Spannung (mit 100nF gepuffert, ist auch 
sauber mit Oszi gemessen, d.h. schwankt nicht)messen und den AD Wert im 
Display anzeigen.

Bei konstanter Spannung und an / und ausschaltet des Gerätes fürht 
ständig zu einem anderen AD Wert? Wie kann das sein?

von spess53 (Gast)


Lesenswert?

Hi

>Bei konstanter Spannung und an / und ausschaltet des Gerätes fürht
>ständig zu einem anderen AD Wert? Wie kann das sein?

Vielleicht passt deine LCD-Ausgabe nicht. Die Werte des ADCs zappeln 
zwar in den untern Bits. Aber solch Schwankungen, wie von dir 
beschrieben, gibt es nicht. Zumal du einen Mittelwert bildest.

MfG Spess

von Ingo L. (Gast)


Lesenswert?

Der Xmega kann keine Referenz >VCC-0,6V.



Ingo

von Michael_SS (Gast)


Lesenswert?

Ich habe keinen XMEGA sondern einen ATMEGA64A.

Ich habe jetzt meinen Fehler gefunden. Ich habe beim Runden einen 
Überlauf des Datentypen verursacht. Dadurch werden die Werte extrem 
instabil und falsch.

Ich habe also mein Result als unsined long int definiert und vor der 
Übergabe einen Typcast durchegfürht.

Und siehe da, es funktioniert.

Danke alle alle die sich einen Kopf um mein Problem gemacht haben.
Ich wünsche ein schönes WE.

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.