Temperatur des AtMega abfragen

Hallo, ich bin grade dabei ein Projekt zu schreiben wo ich die Temperatur des Prozessors auslesen muss, da er rund um die Uhr laufen soll. Ich habe irgendwo gelesen dass einige Prozessoren einen solchen Sesor intigriert haben. Wo steht genau wo ich diesen Wert abfragen kann. Ich hab ein Board mit einem AtMega328.

Addi

Der ATmega hat einen Temperatursensor am Analogmultiplexer. Dieser ist nicht im der Arduino analogRead-Funktion abrufbar, sondern Du mußt dies "von Hand" machen: http://arduino.cc/forum/index.php/topic,8140.0.html

Grüße Uwe

Ich habe es jetzt getestet, habe aber das Problem das ich das ich als Tempratur 681°C agezeigt bekomme. Im Thread steht ja es sollte mit einem 328 Chip gehen. Den hab ich auch auf dem Board. Wo liegt der Fehler?

Welchen Sketch hast Du verwendet? Grüße Uwe

Den Ersten, also denn hier:

void setup() 
{
  Serial.begin(9600);
  ADMUX = 0xC8; // turn on internal reference, right-shift ADC buffer, ADC channel = internal temp sensor
  delay(10);  // wait a sec for the analog reference to stabilize
}

void loop() 
{
  Serial.println(averageTemperature()); // so we can debug
  delay(500); // just to slow things down a bit
}

int readTemperature() 
{
  ADCSRA |= _BV(ADSC); // start the conversion
  while (bit_is_set(ADCSRA, ADSC)); // ADSC is cleared when the conversion finishes
  return (ADCL | (ADCH << 8)) - 342; // combine bytes & correct for temp offset (approximate)} 
}

float averageTemperature()
{
  readTemperature(); // discard first sample (never hurts to be safe)

  float averageTemp; // create a float to hold running average
  for (int i = 1; i < 1000; i++) // start at 1 so we dont divide by 0
    averageTemp += ((readTemperature() - averageTemp)/(float)i); // get next sample, calculate running average

  return averageTemp; // return average temperature reading
}

Was bekommst Du wenn Du nur 1 mal den wert liest und nicht den mittelwert von 999 messungen machst? Grüße Uwe

Ebefalls 681°C. Hier die veränderte Funktion:

float averageTemperature()
{
  readTemperature(); // discard first sample (never hurts to be safe)

  float averageTemp = readTemperature(); // create a float to hold running average
  return averageTemp; // return average temperature reading
}

Im verlinkten Thread ist dieser Rückgabewert auch genannt, ein konkrete Lösung wurde nicht gefunden, einzig die Mutmaßung dass gar Temperatursensor vorhanden sei.

Hier hat wohl wer die Lösung gefunden:

http://arduino.cc/forum/index.php/topic,38043.0.html

Ich hab den Wert jetzt in der Datei wiring_analog.c geändert, habe aber immer noch das gleiche Ergebniss.

Immer das gleiche zu messen ist schon mal was Gutes.

Es gibt 2 Möglichkeiten der Temperaturmessung; ganzzaliges Ergebnis oder mit einer Dezimalstelle.

Wahrscheinlich ist der Wert den Du erhälst in Fahrenheit und mit einer Dezimalstelle also 68,1°F das wären dann 20,1°C

Im von mir verlinkten tread weiter unten war ein Beispiel mit Fahrenheit und Celsius Ausgabe.

Grüße Uwe

Ich glaube nicht, dass es in Fahrenheit angegeben wird, denn genau angezeigt wird 681.00 . Und wenn ich die Funktion mit Fahrenheit verwende, erhalte ich 1257.80 .