完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
概述
常见的AVR单片机内都包含一个温度传感器,用于监测异常高温,便于通过编程为单片机提供保护。 用于Arduino主控芯片的常见的AVR单片机列表如下: [tr]MCU是否内嵌温度传感器[/tr]ATmega8No 通过上表可以看出:常用的Arduino UNO可以作为临时温度传感器使用。 今天的实验,我们就通过编程来读取ATmega328P内部温度计的读数。 实验分析 由于通电电阻的热效应,只有刚开机时AVR单片机的温度才是室温,随后随着MCU工作产热,温度会有上升。 程序里提供的温度单位是摄氏度,由串口监视窗口显出,准确性依赖于GetTemp函数里t的线性转换公式,你可以改变104.31这个数来校准读数。 实验代码 // Internal Temperature Sensor // Example sketch for ATmega328 types. void setup(){ Serial.begin(9600); Serial.println(F(“Internal Temperature Sensor”)); } void loop(){ // Show the temperature in degrees Celcius. Serial.println(GetTemp(),1); delay(1000); } double GetTemp(void){ unsigned int wADC; double t; // The internal temperature has to be used // with the internal reference of 1.1V. // Channel 8 can not be selected with // the analogRead function yet. // Set the internal reference and mux. ADMUX = (_BV(REFS1) | _BV(REFS0) | _BV(MUX3)); ADCSRA |= _BV(ADEN); // enable the ADC delay(20); // wait for voltages to become stable. ADCSRA |= _BV(ADSC); // Start the ADC // Detect end-of-conversion while (bit_is_set(ADCSRA,ADSC)); // Reading register “ADCW” takes care of how to read ADCL and ADCH. wADC = ADCW; // The offset of 324.31 could be wrong. It is just an indication. t = (wADC - 104.31 ) / 1.22; // The returned temperature is in degrees Celcius. return (t); } |
|
|
|
只有小组成员才能发言,加入小组>>
2554 浏览 0 评论
1153浏览 2评论
752浏览 1评论
505浏览 0评论
269浏览 0评论
435浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-24 12:00 , Processed in 1.305659 second(s), Total 78, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号