Hi,
ich habe nen problem mit dem adc, auslesen funktioniert aber die ergebnisse sind merkwürdig ==> 20, 21 wenn ich meine hand dierekt vor den sensor halte, bei ca. 30 cm ist es dann immer hin noch eine 19 die ich zurück bekomme.
Code:#define F_CPU 14745600UL void main(void) { char buffer[16]; // int adc = (50 * ReadChannel(0)) / 1023; adc = ReadChannel(0); uart_puts_P("ch0:"); itoa(adc,buffer,10); uart_puts(buffer); uart_puts_P("\r\n"); } uint16_t ReadChannel(uint8_t mux) { uint8_t i; uint16_t result = 0; //Initialisieren wichtig, da lokale Variablen uint8_t temp; //ADCSRA |= (1<<ADEN); ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1) | (0<<ADPS0); // requenzvorteiler // setzen auf 8 (1) und ADC aktivieren (1) // ADMUX = 0; ADMUX = mux; // Kanal waehlen ADMUX |= (1<<REFS1) | (1<<REFS0); // interne Referenzspannung nutzen // ADMUX |= (1<<REFS0); /* nach Aktivieren des ADC wird ein "Dummy-Readout" empfohlen, man liest also einen Wert und verwirft diesen, um den ADC "warmlaufen zu lassen" */ ADCSRA |= (1<<ADSC); // eine ADC-Wandlung while ( ADCSRA & (1<<ADSC) ) { //konvertierung abwarten } /* Eigentliche Messung - Mittelwert aus 4 aufeinanderfolgenden Wandlungen */ for(i=0;i<4;i++) { ADCSRA |= (1<<ADSC); // eine Wandlung "single conversion" while ( ADCSRA & (1<<ADSC) ) { ; // auf Abschluss der Konvertierung warten } result += ADCL; // Wandlungsergebnisse aufaddieren temp = ADCH; } ADCSRA &= ~(1<<ADEN); // ADC deaktivieren (2) result /= 4; // Summe durch vier teilen = arithm. Mittelwert return result; }







Zitieren

Lesezeichen