【HX711】电子秤AD增益芯片,我的输出为什么不稳定呐?

2019-07-15 08:56发布

这是我写的其头文件。


/*/////
这是HX711的头文件。
*/

// 可能需要改动的端口************************
#define DT  PC4                //数据接收端口                 //**
#define SCK PC5                //脉冲发出端口                 //**
                                                                             //**
#define Ctrl_PORT   DDRC        //控制端口         //**
#define STATU_PORT  PORTC        //端口状态         //**
#define STATU_PIN        ((PINC & 0X10)==0X10)//**
//引脚状态                                                                  //**
//*******************************************


#include <avr/io.h>
#include <util/delay.h>
#define INT8U  unsigned char
#define INT16U unsigned int
float MZ_Float = 0.0;
long DataZero = 0;

unsigned long ReadCount(void)
{
        unsigned long Count=0;
        Ctrl_PORT |= _BV(SCK) ;                //pc4 为数据输入口  pc5为脉冲输出口
        Ctrl_PORT &=~_BV(DT);
        STATU_PORT &=~_BV(SCK);                //等待数据 sck应为低
        STATU_PORT |= _BV(DT);
        _delay_ms(2);
        while(STATU_PIN);                        //等待SD变为0
        for (INT8U i=0;i<24;i++)
        {
                Ctrl_PORT|= _BV(SCK);        //将SCK设为1
                Count =Count<<1;
                Ctrl_PORT&=~_BV(SCK);        //将SCK设为0
                if (STATU_PIN)
                {
                        Count ++;
                }
        }
        Ctrl_PORT|= _BV(SCK);                //将SCK设为1
        Count = Count^0X800000;
        Ctrl_PORT&=~_BV(SCK);                //将SCK设为0
        Count = (Count>>10)<<10;
        return  (Count/1000);
}

//**将HX711的数值转换为 g 单位**//
float DataDeal_Gram(long Data_count)
{
        float yinzi =1;
        long chengshu = (Data_count - DataZero)/0.318;
//         if (chengshu<=20 && chengshu>10)
//         {
//                 yinzi = 1.1;
//         }
        if (chengshu>100 && chengshu <200)
        {
                yinzi = 1.015;
        }
        float uWeight_Shiwu =(Data_count-DataZero)/0.318;
        _delay_ms(1);
        return (uWeight_Shiwu*yinzi);
}

//** 将归零 **//
void ReadZero()
{
        _delay_ms(100);
        DataZero = ReadCount();
       
}
现在可以读取数值,但是有时候归零后,0会跳到3.14   
是哪里出问题了吗?你们有更好的程序参考吗?
谢谢各位了

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。