Probleme AD-Wandler bei AVR-Mikrocontroller

Gast #4888927
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
Da können wir nur raten? Wie kommen die 1,3V an den Eingang? Welche 
Betriebsspannung? Ist die stabilisiert? Welche Referenzspannung wird 
benutzt? Ist die gefiltert?

Mit ein paar genaueren Angaben könnte es eher etwas mit der Hilfe 
werden...

LG Hermann
Gast
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

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.