Hallo

Vielen Dank!!! Da hätt ich auch selber drauf kommen könne... Aber wäre ich bestimmt auch noch wenn ich mich angestrengt hätte. Ich hab jetzt noch etwas mit den Werten herumgespielt und jetzt wird eine Temp von 22 °C angezeigt. Nur die "Steilheit" stimmt glaube ich noch nicht so ganz. Vielleicht könnte mir wkrug da noch einmal den genauen Zusammenhang erklären. Das wäre super.
Vielen Dank noch einmal für alle Lösungsvorschläge!! Ihr helft einem wirklich weiter!!! =D> =D> =D>

Grüße!!

Bean
Code:
#include <avr/io.h>
#include <inttypes.h>
#include <stdlib.h>
#include <lcd.h>

#define F_CPU = 4000000UL
#define ad_nullwert 399
#define si_multiplyer 460
#define si_const 70


uint16_t readADC(uint8_t);			//Prototyp von readADC
void display(uint16_t result);		//Prototyp von display

char buffer[8];						//Array für itoa anlegen
int si_temp;						//Hilfvariable für Temperaturberechnung anlegen
int	si_ones;
int si_komma;

int main(void) 
{
	DDRB = 0xff;					//PORT B als Ausgang

	//Auslesen der analogen Spannungen an Pin 0, also ADC0. In result steht das Ergebnis.
	uint16_t result = readADC(0);	
									 
	display(result);				//Umrechnung und Ausgabe der Temperatur auf Display und LED`s
	return 0;
}


void display(uint16_t result)
{
	lcd_init(LCD_DISP_ON_CURSOR);	//LCD initialisieren
	lcd_gotoxy(0,0);				//Cursor an erste Stelle setzen
	lcd_puts("Temperatur:");		//"Temperatur" ausgeben
	lcd_gotoxy(0,1);				// Cursor in die zweite Zeile setzen
	itoa((int)result,buffer,10);	//AD-Wert umrechnen
	lcd_puts(buffer);				//AD-Wert in der zweiten Zeile ausgeben
	
	lcd_gotoxy(11,0);				// Cursor hinter "Temperatur:" setzen

	//Berechnung der Temperatur 
	si_temp=((result-ad_nullwert)*si_multiplyer)/si_const;
	// Die Ganzen Grade Berechnen 
	si_ones=si_temp/10;
	//Die eine Nachkommastelle Berechnen 
	si_komma=si_temp%10; 
	// Die Zehnerstellen ans Display ausgeben 
	itoa(si_ones,buffer,10); 
	lcd_puts(buffer); 
	lcd_putc(','); 
	itoa(si_komma,buffer,10); 
	lcd_puts(buffer);
	return;
}


uint16_t readADC(uint8_t channel) 

{
	uint8_t i;
	uint16_t result = 0;
	
	// Den ADC aktivieren und Teilungsfaktor auf 32 stellen
	ADCSRA = (1<<ADEN) | (1<<ADPS0) | (1<<ADPS2);

	// Kanal des Multiplexers waehlen (ADC 0)
	ADMUX = (!(1<<MUX0)) | (!(1<<MUX1)) | (!(1<<MUX2));
	
	// interne Referenzspannung verwenden (also 2,56 V)
	ADMUX |= (1<<REFS1) | (1<<REFS0);
	
	// Den ADC initialisieren und einen sog. Dummyreadout machen
	ADCSRA |= (1<<ADSC);
	while(ADCSRA & (1<<ADSC));
	
	// Jetzt 3x die analoge Spannung and Kanal channel auslesen
	// und dann Durchschnittswert ausrechnen.
	for(i=0; i<3; i++) {
		// Eine Wandlung
		ADCSRA |= (1<<ADSC);
		// Auf Ergebnis warten...
		while(ADCSRA & (1<<ADSC));
		
		result += ADC;
	}
	
	// ADC wieder deaktivieren
	ADCSRA &= ~(1<<ADEN);
	
	result /= 3;
	
	return result;
}