Forum: Mikrocontroller und Digitale Elektronik Probleme AD-Wandler bei AVR-Mikrocontroller


von hobbyflieger (Gast)


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

von hobbyflieger (Gast)


Lesenswert?

Danke

von hobbyflieger (Gast)


Lesenswert?

die  MC ist Arduino Uno

von Hermann G. (df2ds)


Lesenswert?

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

von Karl M. (Gast)


Lesenswert?

Bei einem Schaltplan und viele gut Bilder vom Aufbau - vielleicht.

von Karl M. (Gast)


Lesenswert?

Noch eine Frage,
was willst Du mit AD_Flag ?

von Robin S. (der_r)


Lesenswert?

hobbyflieger schrieb:
> volatile int ADC_ergebnisse;

Grrrr, immer diese signed integer in Arduino Codes -.-
Tu dir einen Gefallen und mach da ein uint16_t draus...

von holger (Gast)


Lesenswert?

>  ADCSRA &= ~((1 << ADTS2) | (1 << ADTS1) | (1 << ADTS0));

  ADCSRB &= ~((1 << ADTS2) | (1 << ADTS1) | (1 << ADTS0));

von THOR (Gast)


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.

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.