ZigBee——12位ADC采集有符号数

在使用ZigBee (CC2530芯片) 进行无线传感器数据传输时,遇到12位ADC采集的有符号数值被误处理为无符号数的问题,导致CO传感器返回值存在显著误差。通过对ADC读取模拟值的类型修正和增加符号位判断,解决了这一问题,确保了数据的正确处理和运算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  在进行传感器的无线收发数据测试时,CO传感器的返回值具有巨大的异常误差,它的值基本稳定在6590ppm~6597ppm之间。然而我需要的是趋近于0的返回值(此时CO的测量环境是室内,空气中CO的含量稀少)。追根溯源,发现程序数据不符期愿的原因出现在ADC的模拟值转换中,当它返回的值具有符号位(有效位数12位,最高位第12位)时,程序不能自动识别,把此数据当作无符号数进行运算,返回值自然产生巨大误差。比如第十二位为1,传感器返回的是一个负数,但是ZigBee的ADC当成211加入总值。
  对此程序进行修改,把read_value(ADC读取模拟有效值)设为int类型,加入区分符号位的语句,使模拟量转换值变为正确的输入量。所用ZigBee的芯片为CC2530。

未修改前的代码如下:

float CO_Val()//P0_4作为测量电压的引脚
{
   
   
  int i;
  int read_value;
  int read_sum=0;
  float read_aver;
  float val_aver;
  for(i=0;i<10;i++)
  {
   
   
      P0DIR &=~(1<<4);//P0_4设置为输入
      P0SEL |=(1<<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值