本帖最后由 帕米 于 2015-6-26 17:47 编辑
在看datasheet. 发现MCU居然还带温度测量. 精确度为 +/- 10°C.(好吧! 这误差.... 总比没带强...) , 还有随着驱动 IO电流变大时.温度会跟着往上飘.
有内部温度传感器的 AVR 芯片:
- ATmega168A : Yes
- ATmega168P : Yes
- ATmega328 : Yes
- ATmega328P : Yes
- ATmega1280 (Arduino Mega) : No
- ATmega2560 (Arduino Mega 2560) : No
- ATmega32U4 (Arduino Leonardo) : Yes
硬件: 1 arduino 328P + 1 USB线. 其它无..
tips: 先确定所在的环境温度,再慢慢修正 偏移量,
不得不提一下, 这次的 arduino IDE 1.6.5 版本更新的不错.. Linux 版本. 字体比以前好看多了. 还能写中文注释.. 括号匹配时还带个动画一跳一跳的. {:soso_e142:}
Code...
[pre lang="arduino" line="1" file="ReadInternalTemperature"]
double getTemp(void) {
uint16_t wADC;
double t;
// 设置内部参考电压 1.1 和选择多路复用 ADC8 (AVR内部温度传感器)
ADMUX = (_BV(REFS1) | _BV(REFS0) | _BV(MUX3));
ADCSRA |= _BV(ADEN); // 使能 ADC 功能
delay(20); // 等待 AREF 电压变得稳定。
ADCSRA |= _BV(ADSC); // 开启 ADC 转换
// 检测ADC转换结束
while (bit_is_set(ADCSRA,ADSC));
// 读寄存器值
wADC = ADCW;
//Serial.println(wADC);
// 偏移量 324.31 可能是错的, 它是只是例子。 可以先确定所在的环境温度,再得出偏移量
t = (wADC - 320.31) / 1.11;
// 返回摄氏度
return (t);
}
void setup() {
Serial.begin(9600);
Serial.println("Arduino Internal Temperature Sensor.");
}
void loop() {
// 显示温度
Serial.println(getTemp(), 1);
delay(1000);
}[/code]
山寨以下..
http://playground.arduino.cc/Main/InternalTemperatureSensor |