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;
}