Moin moin. Ich habe kürzlich folgendes ADC-Testprogramm erstellt und feststellen müssen, das die ausgebenden Werte nichts mit der Eingansspannung zu tun haben (volkommen zufällig von 0 bis 1023). Die Referenzspannung bezieht der AVR aus der 5V Versorgngsspannung, den ADC-Masse-Pin habe ich natürlich auch entsprechend verbunden. Das müsste doch eigentlich reichen, oder? #include <avr\io.h> #include <avr\signal.h> #include <avr\interrupt.h> #include <progmem.h> #define CPU_SPEED_MHZ 8 #define SERVO_PORT PORTD #define SERVO_PORT_INI DDRD #define SERVO_PORT_SIZE 255 #define SERVO_1 0 #define LED_PORT PORTA #define LED_PORT_INI DDRA #define ADC_PORT_INI DDRB #define ADC_PORT PORTB int measure(){ volatile char h,l; // Teilungsfaktor auf 8 und ADC aktivieren // Nicht frei laufend outp ((1<<ADEN)|(1<<ADPS2)|(1<<ADPS0), ADCSR); outp ((1<<MUX0), ADMUX); // Kanal an Pin 1 auswählen sbi (ADCSR, ADSC); while (bit_is_set (ADCSR, ADSC)); //Nun warten l = inp(ADCL); h = inp(ADCH); outp(l,DDRA); //servo_goto(((l*10)/25)+100); //return();// Wert ausgeben } int main(void) { outp(255,LED_PORT_INI); // Freigabe zum Output outp(255,SERVO_PORT_INI); // Freigabe zum Output outp(0,ADC_PORT_INI); // Freigabe zum Input //outp (0,ADC_PORT); //Pull-Up aus outp(0,LED_PORT); for(;;){ measure(); } }
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.