Forum: Mikrocontroller und Digitale Elektronik ADC -Spinnt


von Sebastian__ (Gast)


Lesenswert?

Hallo,
ich möchte mit meinem TINY26 schwankungen auf einer 12Vleitng messen, dh 
ich muss einen bereich von 11V-13,2V erfassenkönne, da habe ich einen 
spannungsteiler mit 10K und 1,8K genommeen und die mitte auf den AD des 
µController gepackt.
Ich verwende die interne 2,56V referenz spannung,.. nun habe ich aber 
ein kleines problem, die pannung sprigt wesentlich mehr als die im 
datenblatt angegebnen 3mV also 1,5LSB.

der Code ist folgender:

Init_ADC:
  ;ADC = Enable, ADC-IRQ= Enable, ADC Prescaler = 32
  ldi temp0, 
(1<<ADEN)|(0<<ADSC)|(0<<ADFR)|(1<<ADIE)|(0<<ADPS2)|(0<<ADPS1)|(0<<ADPS0)
  out ADCSR, temp0
  ;interne 2,56V referenz und ein C an PA3=AREF, Channel0 ist selektiert 
mit Mux0-4
  ldi temp0, 
(1<<REFS1)|(1<<REFS0)|(0<<ADLAR)|(0<<MUX4)|(0<<MUX3)|(0<<MUX2)|(0<<MUX1) 
|(0<<MUX0)
  out ADMUX,temp0
  sei            ;// Global IRQ Enable


;startet eine singel ADC Conversion und gibt sie in Strom_L,Strom_H aus
ADC_Conversion:
  sbi ADCSR,ADSC      ;setze bit Start ADC Conversion, ADC startet
ADC_Conversion_1:
  sbic ADCSR,ADSC
  rjmp ADC_Conversion_1
  in Return_L, ADCL
  in Return_H, ADCH
  ret


ist etwa in der SW ein fehler oder ist die intern referenz nicht 
brauchbar,.. ich brauch keine super genauen messerte, aber mit 20mV 
Auflösung sollte dass dann schon passen.

von Markus Burrer (Gast)


Lesenswert?

bevor Du alles verfluchst solltest Du an den AD Wandler Eingang einen 
kleinen Kondensator hinmachen, zb. 100nF. Vielleicht hilft das ja schon. 
Die Spannung schwankt vielleicht. Hast Du ein Oszi mit dem Du das 
checken kannst?

von Sebastian__ (Gast)


Lesenswert?

ja, kondensator war schon dran 1µF prallel 100n,  am oszi sieht alles 
perfekt aus.

Sebastian

von MooseChecker (Gast)


Lesenswert?

Hast Du auch den Vref des AVRs mit 100n geblockt?

MooseChecker

von Sebastian__ (Gast)


Lesenswert?

ja, an aref ist ein 100n kondensator,.. an avcc ist 100R an 5V und ein 
100n nach masse,.. alles so wie im datenblatt beschrieben. der Prozessor 
läft mit 16MHz und mach mit timer 0 8KHz irqs und auf timer 2 ein 31KHz 
PWM. ich kann den Controller deshalb nicht in den Sleep modus versetzen 
wenn ich die ad wandlung brauche... siehe Noise Canceler im Datenblatt.
Davon abgesehen sollte der AD wandler trozdem noch sehr genau arbeiten 
können, beim Mega163 geht das bei 8MHz Probelmlos mit nur 1,5Bit fehler. 
Die Presaceler vom AD Wandler habe ich auch schon in alle möglichen 
varianten geändert, das brachte auch kein erfolg.

Sebastian

von mikki merten (Gast)


Lesenswert?

Der Prescaler ist definitiv zu hoch ADC Prescaler = 128 entspricht dann 
125 kHz. Bei 16 MHz ist auch die Leitungsführung recht kritisch um 
stabile Ergebnisse bei hoher Auflösung zu erhalten.

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.