单片机/MCUwilliam hill官网
直播中

croson

7年用户 83经验值
擅长:可编程逻辑 电源/新能源 模拟技术 EMC/EMI设计 嵌入式技术 制造/封装 存储技术 CRF/无线 接口/总线/驱动 处理器/DSP 光电显示 控制/MCU EDA/IC设计 RF/无线 MEMS/传感技术
私信 关注
[问答]

HX711模块读取称重传感器的值怎么读取不了?

程序:
void Delay__hx711_us(void)
{
        _nop_();
        _nop_();
}
//****************************************************
// 读取 HX711
//****************************************************
unsigned long HX711_Read(void) //增益 128
{
        unsigned long count;
        unsigned char i;
          HX711_DOUT=1;
        Delay__hx711_us();
          HX711_SCK=0;
          count=0;
          while(HX711_DOUT);
          for(i=0;i<24;i++)
        {
                  HX711_SCK=1;
                  count=count<<1;
                HX711_SCK=0;
                  if(HX711_DOUT) count++;
        }
        HX711_SCK=1;
    count=count^0x800000;//第25个脉冲下降沿来时,转换数据
        Delay__hx711_us();
        HX711_SCK=0;  
        return(count);
}


主函数直接用定义unsigned long 的date变量来获得date=HX711_Read();  
但是在LCD1602 完全没有反应,1602显示是正常的,接线也没有问题,HX711的管脚接51单片机的 DouT=P3^0;
SCLK = P3^3;请问怎么解决?哪里的问题
已退回1积分

回帖(5)

刘旭

2016-12-22 08:04:31
你DEBUG 打断点 查看下 数据对不对
举报

croson

2016-12-22 10:24:40
解决了,原来是我做的板子出现BUG了,但是怎样才能将模拟量转化成我们需要的重量呢?网上查的一些代码都无法实现。
举报

吕刚

2016-12-22 16:56:15
是你代码问题,只接用数据手册里面的代码就可以驱动了。
举报

口弟构成

2016-12-22 17:16:27
引用: croson 发表于 2016-12-22 10:24
解决了,原来是我做的板子出现BUG了,但是怎样才能将模拟量转化成我们需要的重量呢?网上查的一些代码都无法实现。

我之前做过这个,你应该有hx711的数据手册吧,没有的话,在网上搜,一大堆,讲解很详细的,不难理解,实在不懂再联系
1 举报
  • 吴为: 我的也是这个问题,一直不知道哪里出错了

croson

2016-12-23 10:25:21
引用: 口弟构成 发表于 2016-12-22 17:16
我之前做过这个,你应该有hx711的数据手册吧,没有的话,在网上搜,一大堆,讲解很详细的,不难理解,实在不懂再联系

//获得物体的真实重量
unsigned long Get_Weight(void )
{
        HX711_Buffer = HX711_Read();
        HX711_Buffer = HX711_Buffer/100;
        if(HX711_Buffer > Get_plank())
        {
                True = HX711_Buffer;
                True = True - Get_plank(); // 获取实物的 AD 采样数值。
                True = (unsigned int)((float)True/4.257 +0.05); // 计 算 实 物 的 实际重量
                // 因 为不同的传感器特性曲线不一样,因此,每一个传感器需要矫正这里的 4.30 这个除数。
                // 当 发现测试出来的重量偏大时,增加该数值。
                // 如 果测试出来的重量偏小时,减小改数值。
                // 该 数值一般在 4.0-5.0 之间。因传感器不同而定。
                //+0.05是为了四舍五入百分位
                Buzzer = 1; // 关闭警报
        }
        // else if(HX711_Buffer < Weight_Maopi - 30)
        // {
        // Buzzer = 0; // 负重量报警         
        // }
        // else if(HX711_Buffer > Weight_Maopi + 24970) // 大于 5Kg 的最大量程,报警
        // {
        // Buzzer = 0;
        // }
//        if(True > 5000 || HX711_Buffer < Get_plank() - 30)
//        {
//                Buzzer = 0;
//        }
//        else
//        {
//                Buzzer = 1;
//        }
//        True *=19.11;
//        if(mode!=0) True-=76;
        return True;
}

//****************************************************
// 获取上板的重量
//****************************************************
unsigned long  Get_plank(void)
{   
//        unsigned long         aa;
//        HX711_Buffer=(HX711_Read()-8387600);
//    HX711_Buffer=(unsigned long)((HX711_Buffer*50)/33490);
//        HX711_Buffer=(HX711_Buffer-311)*10/11-9-aa;

        HX711_Buffer = HX711_Read();
        Plank = HX711_Buffer/100;
        return Plank;
//        return HX711_Buffer;
}

按照理解代码应该是这样的,但是在不加重量1602显示好大的数字,过千位。我的称重传感器是10kg 的。是程序哪里有问题吗?
举报

更多回帖

发帖
×
20
完善资料,
赚取积分