微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > PICAD采样、数码管显示问题

PICAD采样、数码管显示问题

时间:10-02 整理:3721RD 点击:
       写了个程序使用PIC16f1936,有1路AD采用,检测压力传感器,信号0.5-4.5V对应0-10bar,接到单片机运算是0-5V对应0-1023(10位采集精度),所以0.5-4.5V对应数字量就是102.3-920.7再对应0-10bar压力,数码管只显示精度0.1bar,由于第一次在AD转换中使用了浮点数,而单片机不支持,导致运行很慢,后来去掉了浮点数,但是都有问题,请高手看看问题出在那里;
       
        1.使用了浮点数程序:
       
        uint qu_adpress()                  //AD数据取样
{
uint adpress;      
uint adpressf;
GO_nDONE=1;    //启动AD
while(GO_nDONE);  //检测是否完成
adpress=ADRESH;//  取高8位
adpress=adpress<<8|ADRESL;//   AD转换的低8位存在ADRESL寄存器中,高2位存在ADRESH寄存器的低两位中,
adpressf=(adpress-102.3)/102.3*12.5;    //0-5V对应数字量0-1023,压力传感器信号0.5-4.5V对应0-10bar,转换数字量后是102.3-920.7对应0-10bar,
adpress=adpressf;                    //显示转换公式:接收数字量为X,   (X-102.3)*1.25/102.3
return (adpress);
}
uint pingjun()      //AD取样求平均值,连续取12次后求平均值,
{
uint sum=0;
uchar count=0;
for(count=0;count<N;count++)
{
  xianshi(a1,a2,0);
  sum+=qu_adpress();
  delay1ms(3);
  xianshi(a1,a2,0);
}
return (uint)(sum/N);
}
       
        2.不使用浮点数程序:
       
        uint qu_adpress()                  //AD数据取样
{
uint adpress;     
GO_nDONE=1;    //启动AD
while(GO_nDONE);  //检测是否完成
adpress=ADRESH;//  取高8位
adpress=adpress<<8|ADRESL;//   AD转换的低8位存在ADRESL寄存器中,高2位存在ADRESH寄存器的低两位中,
adpress=adpress*10;//AD值乘以10
adpress=(adpress-1023)/1023*125/10;
return (adpress);
}
uint pingjun()      //AD取样求平均值,连续取12次后求平均值
{
uint sum=0;
uchar count=0;
for(count=0;count<N;count++)
{
  xianshi(a1,a2,0);
  sum+=adpressf;
  delay1ms(1);
  xianshi(a1,a2,0);
}
return (uint)(sum/N);
}
       
       
        不使用浮点数测试发现单片机运行确实比以前要快,主要体现在以前有浮点数时有按键反应迟钝,而现在没有了,但是数码管显示有问题,压力最小等于0时,数码管显示0但是闪烁

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top