Forum: Mikrocontroller und Digitale Elektronik ADC-Wert springt, keine Feinabstufung möglich


von aortner (Gast)


Angehängte Dateien:

Lesenswert?

Hallo µC Freaks,

hab schon viel ausprrobiert aber irgendwie werde ich das Problem nicht 
los.
Ich lese die Temperatur über einen KTY 81-110 in den ADC. Dann wird mit 
float der Wert berechnet und an PC und LCD geschickt.
Der ADC Wert springt von

543 (22,3°C) auf
547 (23,6°C) auf
551 (24,8°C)

Und das alles immer im gleichen Bild (natürlich wenn ich den Sensor 
aufwärme)

Ich vermisse aber die Rohwerte z.B. zw. 543 und 547. Die muß es doch 
geben.Ind die kommen nie vor!

Hat einer eine Idee?

Code:

  adc_value =ADCL;
  adc_value |= ((int)ADCH<<8);

-->
  T_float=(float)((float)(ADC_value_temp-467)*200/625)-2;
  printf("\r\n Temperat_float %f", T_float);


Danke.

von Marius (Gast)


Lesenswert?

Lt. Bild werden die Werte im Sekundentakt an den PC übergeben. Dass dann 
Werte dazwischen fehlen ist nicht weiter verwunderlich.

von rene (Gast)


Lesenswert?

Die Rohwerte sind gemittelt ? Falls nicht, sollten sie. Ich nehm jeweils 
64 Additionen und dann ein shr 6.

von A.K. (Gast)


Lesenswert?

Wird der ADC mit korrektem Takt versorgt?
Woher kommt Aref, AVcc?
Welcher Controller?

von aortner (Gast)


Lesenswert?

Controller: M32
AGND verschaltet mit GND
AREF ist mit 100nF an GND gelegt
Ich nutzte die interne Referenz von 2,5xV
Die Masse und VCC sind zus. mit dickem C=1000µF verschaltet um Spannung 
konstant zu halten

Hätte ich schon geglaubt dass die Werte nicht ans Dichsplay kommen, bloß 
1 mal in 100 Fällen müssen die doch zu sehen sein...

Gruß  Andreas

von Kornfisch (Gast)


Lesenswert?

Sonst Sensor durch pot tauschen und drehen

von Joe (Gast)


Lesenswert?

Grundsätlich würde ich den ADC Wert zunächst einmal aus mehreren 
Messungen mitteln.

Beispiel ATTINY:
1
  for (adc_count=0; adc_count < 64; adc_count ++)  {
2
    ADCSR |= (1 << ADSC);           // AD Wandler starten
3
    while (ADCSR & (1 << ADSC));    // AD Wandlung fertig ?
4
    adc_val = ADCL;                 // lowbyte auslesen
5
    adc_val += ADCH * 256;          // highbyte & lowbyte = 10 BIT Ergebnis
6
    adc_sum += adc_val;             // Mittelwert über 64 Messungen
7
  }adc_sum >>= 6;                   // /64 => Mittelwert

100nF direkt an den Bauelementen ? Hast du mal die Versorgungspannungen 
mit dem Oszi. angeschaut ?

Benötigst du wirklich "float" ? Für mich sieht das so aus als könnte man 
das mittels Integerarithmetik hinbekommen !?

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

AVcc gehört über ein L/C-Filter an Vcc. Die Masse zum Sensor 
(Analog-Masse) darf nicht von anderen Strömen durchflossen werden. Bei 
langsamen Signalen gehören 10...100nF direkt von Analog-Masse an den 
ADC-Pin.

von A.K. (Gast)


Lesenswert?

> mit dickem C=1000µF

Nach dem Motte "viel hilft viel"? Ist hier eher umgekehrt, der 1000-er 
nützt da wenig, ist zu träge.

Fehlt immer noch die Antwort zur Frage nach dem ADC-Takt.

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.