Probleme AD-Wandler bei AVR-Mikrocontroller

Gast #4888927
Lesenswert?
• ▲
▼
Hallo zusammen,

ich habe heute den ganzen Tag versucht, die Fehler zu finden aber komme 
leider nicht weiter. die Code läuft aber ich bekomme immer falsche 
Ergebnisse.Eingangsspannung ist 1.3 V. kann jemand mir schreiben, was 
das Problem ist.

meine Code :
---------------------------------------------------------------

#include "avr/interrupt.h"

volatile int ADC_ergebnisse;
volatile uint8_t AD_Flag;


int main() {

  init();
  Serial.begin(9600);

  ADCSRA |= (1 << ADEN);  // AD-Wandler aktivieren
  ADCSRA |= (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0); // Prescaler: 
Teilungsfaktor auf 128 einstellen
  ADMUX &= ~(1 << MUX0);
  ADMUX |= (1 << REFS0); // Intern 5.05 V
  ADCSRA |= (1 << ADATE); // Autotrigger einschalten
  ADCSRA &= ~((1 << ADTS2) | (1 << ADTS1) | (1 << ADTS0));
  ADCSRA |= (1 << ADIE) | (1 << ADSC);
  sei();

  while (1) {
    delay(500);
    Serial.print(" ADC=");
    Serial.println(ADC_ergebnisse);
    AD_Flag = 0;
  }
}

ISR(ADC_vect) {
  ADC_ergebnisse = ADC;
    ADCSRA |= (1 << ADSC);

}
-----------------------------------------------------------------------
Ergebnisse:

 ADC=510
 ADC=1022
 ADC=511
 ADC=1022
 ADC=1023
 ADC=1023
 ADC=511
 ADC=1022
 ADC=934
 ADC=511
 ADC=1022
 ADC=1023
 ADC=511
 ADC=1023
 ADC=511
 ADC=511
 ADC=511
 ADC=511
 ADC=959
 ADC=1023
 ADC=511
 ADC=1022
 ADC=991
 ADC=895
 ADC=959
 ADC=1023
 ADC=1023
 ADC=415
 ADC=511
 ADC=511
 ADC=958
 ADC=511
 ADC=1023
Gast #4889033
Lesenswert?
• ▲
▼
Die Kombination aus:

Serial.println(ADC_ergebnisse);

und

ADC_ergebnisse = ADC;

wird wohl das Problem sein. ADC ist 10 bit, wird dann einem int 
zugewiesen (und welche Dimension int hat, ist häufig nicht festgelegt) 
und dann zu println geschickt (und println weiss gar nicht, was es da 
als Parameter bekommt).

Ich würde erstmal ADLAR setzen und Serial.println(ADCH) versuchen. Wenn 
da plausible Ergebnisse bei rauskommen, kann man ohne ADLAR weitercoden.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren