打印

温度指示器问题

[复制链接]
4653|30
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
llia|  楼主 | 2021-6-2 23:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
PIC16F1786
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;

}

使用特权

评论回复
沙发
huwr| | 2021-6-2 23:52 | 只看该作者
你有什么打算呢?或者你想知道什么?

使用特权

评论回复
板凳
llia|  楼主 | 2021-6-2 23:54 | 只看该作者
采集到的Vt计算后得到1.5V,不在1333手册温度电压的关系之内。求大家帮我分析一下。

使用特权

评论回复
地板
happy_10| | 2021-6-2 23:56 | 只看该作者
你测一下其他通道对不对

使用特权

评论回复
5
houcs| | 2021-6-2 23:58 | 只看该作者
这个没用过,为什么结果要右移4位?

使用特权

评论回复
6
stly| | 2021-6-3 20:40 | 只看该作者
是否对齐方式为高位对齐?

使用特权

评论回复
7
renyaq| | 2021-6-3 20:42 | 只看该作者
本来有低位对齐的

使用特权

评论回复
8
llia|  楼主 | 2021-6-3 20:44 | 只看该作者
12位的AD,函数输出时,直接是(ADRESH<<8)|ADRESL,所以右移四位,进行12位的计算。

使用特权

评论回复
9
tian111| | 2021-6-3 20:46 | 只看该作者
接VREF,这个实际接的什么?

使用特权

评论回复
10
llia|  楼主 | 2021-6-3 20:48 | 只看该作者
VREF这个是实接3.3V

使用特权

评论回复
11
tian111| | 2021-6-3 20:50 | 只看该作者
为什么要用浮点?

使用特权

评论回复
12
renyaq| | 2021-6-3 20:52 | 只看该作者
8位芯片上轻易不要选择开浮点

使用特权

评论回复
13
wuhany| | 2021-6-3 20:53 | 只看该作者
看了一下你的代码,完全可以很容易的转换为整数运算,完全没必要用浮点。

使用特权

评论回复
14
zhenykun| | 2021-6-3 20:56 | 只看该作者
开启ADC转换模块后,为何要__delay_us(1000)?

使用特权

评论回复
15
tian111| | 2021-6-3 20:58 | 只看该作者
对啊,此处最多放几个NOP指令即可

使用特权

评论回复
16
jlyuan| | 2021-6-3 21:04 | 只看该作者
对啊,为何要1000us ?

使用特权

评论回复
17
llia|  楼主 | 2021-6-3 21:10 | 只看该作者
由于是测试工程,对空间和运算要求不是很高,单独对片内温度指示器进行采集的小程序。

使用特权

评论回复
18
llljh| | 2021-6-3 21:10 | 只看该作者

试试改成: temp=(ADRESH<<8)+ADRESL

使用特权

评论回复
19
songqian17| | 2021-6-3 21:12 | 只看该作者
temp=(temp>>4);  此代码没看懂你想干啥?

使用特权

评论回复
20
zwll| | 2021-6-3 21:15 | 只看该作者
该代码使用了大量delay,不清楚你产品中有无开启定时或者其他中断,如果开启了,你这代码基本就是‘麻烦代码’!!!如果没开启,绝对没有高手这么构建代码

使用特权

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

本版积分规则

961

主题

8893

帖子

4

粉丝