Hi,
also ich habe jetzt folgendes Durchgeführt:


OPA2350:
Angelegte Spannung +5V
+: auf GND
-: Fotodiode BPX63. Mit 470kOhm mit Ausgang verbunden.
Out: Geht in den ADC5 des ATMega 8

Mega8:
VRef mit 100n auf Masse.

Source (z.T. geklaut von mikrocontroller.net :
Code:
#include <stdlib.h>
#include <avr/io.h>
#include <avr/iom8.h>
#include <util/delay.h>
#include "lcd.h"

uint16_t ReadADC()
{
  uint8_t i;
  uint16_t result;
 
  ADCSRA = (1<<ADEN) | (1<<ADPS1) | (1<<ADPS0);    // Frequenzvorteiler 
                               // setzen auf 8 (1) und ADC aktivieren (1)
 
  ADMUX = 0b0101;                      // Kanal waehlen

  ADMUX |= (1<<REFS1) | (1<<REFS0); // interne Referenzspannung nutzen 
 
  /* 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) ) {
     ;     // auf Abschluss der Konvertierung warten 
  }

  result = ADCW;  // ADCW muss einmal gelesen werden,
                  // sonst wird Ergebnis der nächsten Wandlung
                  // nicht übernommen.
 
  /* Eigentliche Messung - Mittelwert aus 4 aufeinanderfolgenden Wandlungen */
  result = 0; 
  for( i=0; i<4; i++ )
  {
    ADCSRA |= (1<<ADSC);            // eine Wandlung "single conversion"
    while ( ADCSRA & (1<<ADSC) ) {
      ;   // auf Abschluss der Konvertierung warten
    }
    result += ADCW;		    // Wandlungsergebnisse aufaddieren
  }
  ADCSRA &= ~(1<<ADEN);             // ADC deaktivieren (2)
 
  result /= 4;                     // Summe durch vier teilen = arithm. Mittelwert
 
  return result;
}

int main(void)
{
	uint16_t ADVal;
	
	char* str;

	lcd_init(LCD_DISP_ON);
	lcd_clrscr();
  
        lcd_puts("bitte warten...");


	for (;;){
 	
	ADVal = ((ReadADC()*5)/1023);
	sprintf(str, "Wert: %d", ADVal);

        lcd_clrscr();	

	lcd_puts(str);

	_delay_ms(500);
	}
return 0;
}
Die Werte liegen zwischen 0 (bei Abdeckung) und 5 (wenn ich mit einem roten Laserpointer draufgehe). Das gefällt mir natürlich auf Anhieb noch nicht. Wie kann ich genauere Werte bekommen? (im Prinzip brauche ich float-Werte. Doch wie errechnet man die?)
Viele Grüße,
Simon