Forum: Mikrocontroller und Digitale Elektronik ATmega8 ADC belastet Ausenbeschaltung?


von m. S. (marek)


Lesenswert?

Hi,

ich hab mal ne frage ich hab mir eine Schaltung gebaut und diese dann an 
dem ATmega8 gehangen der mir die Gleichspannungen die ich an den ADC 
lege auswerten soll. Wenn ich bei meinem Analogenschaltungsteil direkt 
am Ausgang messe ohne den µC angeschlossen zu haben kriege ich einen 
schönen Gleichspannung, wenn ich jetzt den µC ADC daran hänge ist es 
immer noch eine Gleichspannung aber mit einem "Buckel" der einer 
Kondensator lade Kurve ähnelt. Ich ermittele die Gleichspannung mit 
einem Spitzenwertmesser. Ich danke schon jetzt für Anregungen bzw. 
Hilfestellungen.

mfg
m

von mr. mo (Gast)


Lesenswert?

bestimmt mit einem oscar gemessen oder?
kannst die bilder mal anhängen?
es kann sein das ein tiefpassverhalten erzeugt wird.
vielleicht mal einen OP als Impedanzwandler dahinter hängen?

schaltung wäre evtl. sogar auch nicht schlecht

von MaWin (Gast)


Lesenswert?

Der AVR lädt zu Beginn der A/D-Wandldung eine internen KOndenstaor.
Damit dieser Buckel nicht zu gross wird und zu einer Abweichung des 
Messergebnisses führt, darf die analoge Schaltung nur einen 
(Innen-/Quell-)Widerstand von 10k aufweisen.

Oder man legt an den A/D-Eingang einen Kondensator von mindestens 10nF 
an Masse, der ist dann so groß, daß der interne Kondensator der nur so 
47pF hat, ihn nicht relevant (Fehler über 1 count) entlädt, allerdings 
wird dadurch das Analogsignal natürlich langsamer, was bei Temperaturen 
etc. egal ist.

von m. S. (marek)


Angehängte Dateien:

Lesenswert?

Der OPV der davorgeschaltet ist hat einen Innenwiderstand am ausgang von 
50 Ohm. Mal als anhang die Bilder einmahl ohne µc angeschlossen und 
einmahl mit µc.

von m. S. (marek)


Angehängte Dateien:

Lesenswert?

Ich hab das mal mit nem Kondensator gegen Masse probiert hat aber nichts 
gebracht. In der schaltung die mit angefügt sind sind die OPVs mit auf 
die die striche zeigen ja als Impoedanzwandler geschaltet also müßte es 
doch gehen eigentlich. Weil so langsam gehen mir die ideen aus.

von MaWin (Gast)


Lesenswert?

> Ich hab das mal mit nem Kondensator gegen Masse probiert hat aber nichts
> gebracht.

Ich kann bei diesem mikrominiaturisierten Schaltplan nichts erkennen, 
aber bildet der Spitzenwertgleichrichter nicht eine NEGATIVE Spannung 
die du so auch in den uC stecken willst ?

von m. S. (marek)


Lesenswert?

Nein ich hab den spitzenwertgleichrichter ja hier vormir stehen Und da 
ist eine positive spannung. Ich werde mal heute abend das neue laden hab 
gerde keine ziet für. Probiere gerade was aus.

von m. S. (marek)


Lesenswert?

Hab das gestern nicht mehr geschaft das hochzuladen. Ich habe gehört das 
das auch was mit der smaplerate oder so zu tun hat, oder der genauig 
keit oder so. Ich hab ja eine frequenz von 16MHz und durch die 
Vorteilung komme ich dann auf 125kHz für den ADC. Mir wurde gesagt das 
mein Problem mit dem S/H kondensator oder so zusammenhängt. Wie kann ich 
den entgegenwirken. Weil wenn ich einfach nur die 1V Gleichspannung an 
den ADC eingang legen wird auch an das Hyperterminal 1V ausgegeben 
sobald ich aber nur mal einen 1k Widerstand in Reiche schalte zwischen 
dem 1V und dem eingang des ADC bricht die spannung zusammen. Ich weis 
nicht weiter und bin am verzweifeln. hir mal mein initialisierungs code 
für den ADC.

#include "global.h"

void adc_init (void) // (Hinzugefügt 20.06)
{
  uint16_t result;      // Zwischenwariable für das erste Auslesen wird 
dan verworfen

  ADMUX |= (1<<REFS0);    // AVcc als Referenzspannung nutzen (5V)
  ADCSRA |= (1<<ADPS0) | (1<<ADPS1)  | (1<<ADPS2);    // 
Frequenzvorteiler = 128 -> 125kHz
  ADCSRA |= (1<<ADEN);    // ADC Aktievieren

  /* Nach der Aktivierung des ADC wird ein "Dummy-Readout" empfohlen, 
man liest
     also einen Wert und verwirft diesen, um den ADC "warmlaufen zu 
lassen" */

  ADCSRA |= (1<<ADSC);    // ADC Wandlung
  while ((ADCSRA & (1<<ADIF))==0)  // Warten bis Konvertierung fertig
  {}
  result = ADCW;

}

uint16_t adc_lesen (uint8_t Kanal)  //ADC Einzelmessung  (Hinzugefügt 
20.06)
{
  ADMUX |= (ADMUX & ~(0x1F)) | (Kanal & 0x1F);   // Kalnal Auswahl ohne 
andere Bits zu beeinflussen
  ADCSRA |= (1<<ADSC);              // Eine Wandlung "singel conversion"
  while ((ADCSRA & (1<<ADIF))==0)            // Warten bis Konvertierung 
fertig
  {}
  return ADCW;

}

Ich danke schon jetzt für eure hilfe.

mfg
M.S

von spess53 (Gast)


Lesenswert?

Hi

> while ((ADCSRA & (1<<ADIF))==0)            // Warten bis Konvertierung

Das ist Unsinn. Nimm
1
while (ADCSRA & (1<<ADSC) )

MfG Spess

von m. S. (marek)


Lesenswert?

Danke. Daran hat es aber nicht gelegen das ergebnis ist das selbe.

mfg
m.s.

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.