Offline
Full Member
Karma: 3
Posts: 186
|
 |
« on: October 23, 2012, 02:08:07 pm » |
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
|
|
|
|
|
Logged
|
/ \ _| _| o /--\ (_| (_| |
|
|
|
|
Forum Moderator
BZ (I)
Offline
Brattain Member
Karma: 172
Posts: 16136
+39 349 2158303
|
 |
« Reply #1 on: October 23, 2012, 03:30:08 pm » |
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.htmlGrüße Uwe
|
|
|
|
« Last Edit: October 23, 2012, 03:40:39 pm by uwefed »
|
Logged
|
|
|
|
|
Offline
Full Member
Karma: 3
Posts: 186
|
 |
« Reply #2 on: October 24, 2012, 04:34:03 am » |
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?
|
|
|
|
« Last Edit: October 24, 2012, 04:37:48 am by Addi »
|
Logged
|
/ \ _| _| o /--\ (_| (_| |
|
|
|
|
Forum Moderator
BZ (I)
Offline
Brattain Member
Karma: 172
Posts: 16136
+39 349 2158303
|
 |
« Reply #3 on: October 24, 2012, 05:06:11 am » |
Welchen Sketch hast Du verwendet? Grüße Uwe
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Full Member
Karma: 3
Posts: 186
|
 |
« Reply #4 on: October 24, 2012, 05:11:52 am » |
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 }
|
|
|
|
|
Logged
|
/ \ _| _| o /--\ (_| (_| |
|
|
|
|
Forum Moderator
BZ (I)
Offline
Brattain Member
Karma: 172
Posts: 16136
+39 349 2158303
|
 |
« Reply #5 on: October 24, 2012, 05:25:24 am » |
Was bekommst Du wenn Du nur 1 mal den wert liest und nicht den mittelwert von 999 messungen machst? Grüße Uwe
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Full Member
Karma: 3
Posts: 186
|
 |
« Reply #6 on: October 24, 2012, 05:29:38 am » |
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 }
|
|
|
|
|
Logged
|
/ \ _| _| o /--\ (_| (_| |
|
|
|
|
Germany
Offline
Edison Member
Karma: 33
Posts: 1838
Arduino rocks
|
 |
« Reply #7 on: October 24, 2012, 06:20:02 am » |
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.
|
|
|
|
|
Logged
|
Mein Arduino-Blog: http://www.sth77.de/ - letzte Einträge: Teensy 3.0 - Teensyduino unter Window 7 - Teensyduino unter Windows 8
|
|
|
|
Heilbronn
Offline
Jr. Member
Karma: 0
Posts: 92
|
 |
« Reply #8 on: October 24, 2012, 06:42:47 am » |
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Full Member
Karma: 3
Posts: 186
|
 |
« Reply #9 on: October 24, 2012, 06:55:58 am » |
Ich hab den Wert jetzt in der Datei wiring_analog.c geändert, habe aber immer noch das gleiche Ergebniss.
|
|
|
|
|
Logged
|
/ \ _| _| o /--\ (_| (_| |
|
|
|
|
Forum Moderator
BZ (I)
Offline
Brattain Member
Karma: 172
Posts: 16136
+39 349 2158303
|
 |
« Reply #10 on: October 24, 2012, 06:57:12 am » |
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
|
|
|
|
« Last Edit: October 24, 2012, 06:59:20 am by uwefed »
|
Logged
|
|
|
|
|
Offline
Full Member
Karma: 3
Posts: 186
|
 |
« Reply #11 on: October 24, 2012, 07:08:34 am » |
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 .
|
|
|
|
|
Logged
|
/ \ _| _| o /--\ (_| (_| |
|
|
|
|
|