@Gock

Ich glaube hiermit habe ich das selbe geschrieben (Idee hab ich beim Surfen gefunden):

Code:
uint16_t readADC(uint8_t channel) 
{
	// Funktion 1 zum Auslesen der Spannung

	uint8_t i;                   // Variablen definieren (Zählervariable i + Resultat)
	uint16_t result = 0;

	ADCSRA = (1<<ADEN)|(1<<ADPS2)|(1<<ADPS1); //ADEN = ADC Enable 
	// wenn adps1+2 on sind und adps0 off, dann ist der Teilungsfaktor 64 (Tabelle Datasheet)

	ADMUX = channel; //Kanal wählen; REFs0+1 -> interne Referenz 2,56V verwenden, REFS1 gibt es bei Attiny13 nicht
	//externen Kondensator mit 100nF (Aufdruck 104) an AREF auf Masse

	//Dummy-Readout (unten), misst 1* Ergebnis, wird nicht gespeichert
	ADCSRA = ADCSRA | (1<<ADSC); // Schaltet bei ADCSRA das ADSC-Bit ein, d.h. Messung starten
	while(ADCSRA & (1<<ADSC)); //Warte bis Messvorgang vorbei ist

	// Nun 3* Spannung auslesen, Durchschnittswert ausrechnen
	for (i=0; i<3; i++) 
	{
		// Schleife, startet 3*
		ADCSRA = ADCSRA |(1<<ADSC); // Einmal messen
		while(ADCSRA & (1<<ADSC));  //Warte bis Messung vorbei

		result = result + ADCW; // Resultate zusammenzählen (R1+R2+R3) -> später alles /3
	}

	ADCSRA = ADCSRA & (~(1<<ADEN)); //ADC wieder deaktivieren

	result=result/3;    // Durchschnittswert

	return result;
}

main ()						// Hauptprogramm, startet bei Power ON und Reset
{
	int spannung; //Definiere Ganzzahl-Variable Spannung
	int einer,zehner, hunderter, startwert, mittelwert, endwert;
	int i,j,k = 0;

	DDRB=0b00001111;

	while (true)
	{

		uint16_t result = readADC(0); // ruft die ADC Funktion auf an Pin0 =ADC0

		spannung = result*3086;
		spannung = spannung/1000; 

		startwert=spannung/10;
		hunderter=startwert/100;
		mittelwert=startwert-100*hunderter;
		zehner=mittelwert/10;
		endwert=mittelwert-10*zehner;
		einer=endwert;

		for (i=0;i<einer;i++)
		{
			PORTB=PORTB|(1<<PB0);
			waitMs(50);
			PORTB=PORTB&(~(1<<PB0));
			waitMs(50);
		}

		for (j=0;j<zehner;j++)
		{
			PORTB=PORTB|(1<<PB1);
			waitMs(50);
			PORTB=PORTB&(~(1<<PB1));
			waitMs(50);
		}

		for (k=0;k<hunderter;k++)
		{
			PORTB=PORTB|(1<<PB2);
			waitMs(50);
			PORTB=PORTB&(~(1<<PB2));
			waitMs(50);
		}

		waitMs(1100);

	}

	return 0;
}
Der Code klappt zum draufbrennen, aber in der Schaltung funktioniert er nicht... HAb ich nen Fehler eingebaut??