完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
int ADC_Temp(void)
{ UINT8 i; UINT16 AdcTemp=0; ADC_InterTSSampInit(); adclen = 0; PFIC_EnableIRQ( ADC_IRQn ); ADC_StartUp(); while( adclen < 12 ); PFIC_DisableIRQ( ADC_IRQn ); for( i = 2; i < 12; i++ ) AdcTemp += abcBuff[i]; AdcTemp /= 10; return ADC_GetCurrentTS(AdcTemp); } __attribute__((interrupt("WCH-Interrupt-fast"))) __attribute__((section(".highcode"))) void ADC_IRQHandler( void ) //adc中断服务程序 { if( ADC_GetITStatus() ) { ADC_ClearITFlag(); if( adclen < 12 ) { abcBuff[adclen] = ADC_ReadConverValue(); ADC_StartUp(); // 作用清除中断标志并开启新一轮采样 } adclen++; } } int ADC_GetCurrentTS( UINT16 ts_v ) { UINT32 C25_Data[2]; int cal; FLASH_EEPROM_CMD( CMD_GET_ROM_INFO, ROM_CFG_TMP_25C, C25_Data, 0 ); cal = ( ( (ts_v * 1050) + 2048 ) >> 12 ) + ( 1050 >> 1 ); cal = 25 + ((cal - (int)(C25_Data[0]&0xFFFF))*10/14); return ( cal ); } 代码如上,温度测出来一直都是8、9度的样子,室温27度,按理说测出来不应该是27度左右吗,不知道是哪里的问题 |
|
相关推荐
1个回答
|
|
因为芯片里面没有存温度校准的基值。
你可以这样用,比如当前室温30°,对应当前实测温度是8或者9,做个对应关系。 然后计算温度的变化量就可以了, 比如温度变化后,转换对应的温度是15,相当于+6度,那么实际温度是30+6=36°; 比如温度变化后,转换对应的温度是3,相当于-6度,那么实际温度是30-6=24°; 但是因为是内部温度,跟实际室温还是有差距的,手册上标的误差是±10°,这个要注意。 |
|
|
|
只有小组成员才能发言,加入小组>>
522 浏览 1 评论
CH579M+RT-Thread,RTC从Sleep模式唤醒失败是什么原因?
2904 浏览 2 评论
2400 浏览 1 评论
870浏览 2评论
688浏览 1评论
riscv-none-embed-objcopy: \'PWM_Output.elf\': No such file这个咋解决,
418浏览 1评论
525浏览 1评论
请教一下,Mounriver 编译不成功:找不到库文件,怎么整
814浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-24 04:34 , Processed in 1.052821 second(s), Total 76, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号