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
Bei einem Schaltplan und viele gut Bilder vom Aufbau - vielleicht.
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...
> ADCSRA &= ~((1 << ADTS2) | (1 << ADTS1) | (1 << ADTS0));
ADCSRB &= ~((1 << ADTS2) | (1 << ADTS1) | (1 << ADTS0));
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.