打印
[PIC®/AVR®/dsPIC®产品]

关于PIC16F1786内部的温度指示器问题

[复制链接]
3366|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yuhouwuyun|  楼主 | 2017-1-3 15:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 yuhouwuyun 于 2017-1-13 09:33 编辑

float Get_Tempself(void)
{
    uint16_t temp;
    float Vt=0,count=0;
   
   
    FVRCONbits.TSEN=1; //使能温度指示
    FVRCONbits.TSRNG=0; //2个二极管
    ADCON0bits.CHS=0x1D; //温度指示器通道
    __delay_us(1000);
    ADCON0bits.ADRMD=0; //12位温度格式
        
    ADCON1=0B00100001; //符号数值结果形式,FOSC/32,ADC负参考接地,ADC正参考接VREF
    ADCON2=0B00001111; //不使用触发,负参考参考ADCREF负参考
        
    ADCON0bits.ADON=1; //开启ADC转换模块
    __delay_us(1000);
    ADCON0bits.GO=1; //开始转换
    while(ADCON0bits.GO);
    temp=(ADRESH<<8)|ADRESL; //读取2进制值
    temp>>=4;
   
    count=((temp*2.5)/4095);
   
    Vt=((3.3-count)/2);
        
    return Vt;

}
沙发
yuhouwuyun|  楼主 | 2017-1-3 15:11 | 只看该作者
采集到的Vt计算后得到1.5V,不在1333手册温度电压的关系之内。求大家帮我分析一下。

使用特权

评论回复
板凳
yuhouwuyun|  楼主 | 2017-1-4 09:01 | 只看该作者
人工顶贴。

使用特权

评论回复
地板
wanghaicun3407| | 2017-1-4 09:57 | 只看该作者

使用特权

评论回复
5
jiaqiangxuexi| | 2017-1-4 15:05 | 只看该作者
问问PIC的技术支持

使用特权

评论回复
6
XIEYUANBIN| | 2017-1-4 15:56 | 只看该作者
你测一下其他通道对不对,这个没用过,为什么结果要右移4位?是否对齐方式为高位对齐?本来有低位对齐的

使用特权

评论回复
7
yuhouwuyun|  楼主 | 2017-1-10 10:19 | 只看该作者
XIEYUANBIN 发表于 2017-1-4 15:56
你测一下其他通道对不对,这个没用过,为什么结果要右移4位?是否对齐方式为高位对齐?本来有低位对齐的 ...

12位的AD,函数输出时,直接是(ADRESH<<8)|ADRESL,所以右移四位,进行12位的计算。

使用特权

评论回复
8
yewuyi| | 2017-1-10 20:36 | 只看该作者
1、接VREF,这个实际接的什么?
2、为什么要用浮点?8位芯片上轻易不要选择开浮点!!!
3、我看了一下你的代码,完全可以很容易的转换为整数运算,完全没必要用浮点。
4、开启ADC转换模块后,为何要__delay_us(1000)?此处最多放几个NOP指令即可,为何要1000us ?
5、试试改成: temp=(ADRESH<<8)+ADRESL;
6、 temp=(temp>>4);  此代码没看懂你想干啥?
7、该代码使用了大量delay,不清楚你产品中有无开启定时或者其他中断,如果开启了,你这代码基本就是‘麻烦代码’!!!如果没开启,绝对没有高手这么构建代码。
8、ADC转换后至少要做多次采样求平均的滤波算法。

9、总之,我今天心情好,所以就多回复你几条,当然,如果我心情不好,直接就跳过不看了,确实写的较差。望再接再厉,继续提高。

使用特权

评论回复
9
yuhouwuyun|  楼主 | 2017-1-13 09:42 | 只看该作者
yewuyi 发表于 2017-1-10 20:36
1、接VREF,这个实际接的什么?
2、为什么要用浮点?8位芯片上轻易不要选择开浮点!!!
3、我看了一下你的 ...

不知大神近日心情可好。
VREF这个是实接3.3V,由于是测试工程,对空间和运算要求不是很高,单独对片内温度指示器进行采集的小程序。__delay_us(1000)?和是否用NOP这个无关痛痒,主要是怕开启通道时需要延时。AD采集的ADRESH和ADRESL这个值用笔算都可以,ADC的值是在while(1)中持续采集,通过程序断电进行采集,望您,多加指点。

使用特权

评论回复
10
XIEYUANBIN| | 2017-1-15 16:43 | 只看该作者
本帖最后由 XIEYUANBIN 于 2017-1-15 16:46 编辑
yuhouwuyun 发表于 2017-1-10 10:19
12位的AD,函数输出时,直接是(ADRESH

如果是低位对齐,就不必右移4位了,你实际仿真看看ADRESH,ADRESL的值

使用特权

评论回复
11
rockn| | 2017-3-1 21:43 | 只看该作者
pic的片上温度指示器稳定吗?为什么当我在旁边使用变频器时ad值会非常不稳定?

使用特权

评论回复
12
紫阳真人| | 2017-8-14 13:57 | 只看该作者
我用PIC16F1503做的,27℃下理论ADC采样值为556,但实际上测出来只有四百多,反推回去有零下一百多度,这显然是有问题;另外,我又测了两台,有的在零度左右,有的在零下20度左右,个体之间差异也很大。不知是我哪弄错了,还是它本身就这样的。

PIC内部温度计温度对照表.zip

8.98 KB

公式有没有问题

使用特权

评论回复
13
hfh8130| | 2018-3-30 10:15 | 只看该作者
关注,最近也遇到了类似问题

使用特权

评论回复
14
JLennon| | 2018-3-30 11:18 | 只看该作者
帮顶,关注此问题。

使用特权

评论回复
15
zbcaich| | 2018-4-1 08:34 | 只看该作者
温度的测试是需要校准才能使用的,否则就只能测一个变化量,就是温度变化了多少

使用特权

评论回复
16
mcuzone| | 2018-5-4 16:28 | 只看该作者
内置温度传感器一般标称精度只有3-5度,要校准的,而且不是一次曲线

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

5

帖子

0

粉丝