为什么 CS1237 24 位称重传感器读数减少到 18 0r 小于 24 位,同时在称重传感器中施加负载

问题描述

我使用了Ardunio Mega和CS1237 ADC模块,我已经得到了24位读数,但是在称重传感器上施加负载时它减少了ADC读数的位数,我已经提到了代码和串行监视器,任何建议都会很多应用程序。


#define ndrdy 8
#define clk 52
#define SCK_LOW digitalWrite(SCK,0)
#define SCK_HIGH digitalWrite(SCK,1)

static double CS1237P = 0.0078742;
static double P = .3571;


void CS1237ClockUp()
{
  SCK_LOW;
  delayMicroseconds(10);
  SCK_HIGH;
  delayMicroseconds(10);
}

void cs1237_start() {

  pinMode(SCK,OUTPUT);
  pinMode(ndrdy,INPUT);
  //pullUpDnControl(ndrdy,PUD_UP);//need to do with hardware or
  digitalWrite(SCK,LOW);

}

int CS1237isReady()
{
  if (digitalRead(ndrdy) == 0)
  {
    return 1;
  }
  return 0;
}


long readADC() {
  
  while (!CS1237isReady())
  {
    ;
  }
  SCK_LOW;
  uint64_t data ;
  for (int i = 0; i < 24; i++)//24
  {
    CS1237ClockUp();
    uint64_t Now = 0x00FFFFFF & digitalRead(ndrdy);
    data |= 0x00FFFFFF & (Now << (23- i));//23
    SCK_LOW;
    //printf("%d,",Now );
    // tmp *= 2;
    //  tmp = tmp + Now;
  }

  SCK_LOW;
  CS1237ClockUp();
  CS1237ClockUp();
  CS1237ClockUp();
  SCK_LOW;

  // return tmp;
  return data;
}


 uint64_t getValue(int num)
{
  int i = 0;
 long tmp = 0;//long
   long weight = 0;//long

  tmp += readADC();

  for (i = 0; i < num; i++)
  {
    tmp += readADC() ;
    tmp /= 2; //tmp=0;
    weight = tmp;
  }
  return weight ;
}


void setup() {
  // initialize serial communication at 9600 bits per second:
  Serial.begin(9600);
  while (!Serial) {}
  //SPI.begin();
  //SPI.setClockDivider(SPI_CLOCK_DIV64);//16/64=0.25MHZ,4us
  cs1237_start();

}

void loop() {
 
   // Serial.println(getValue(5));
    Serial.println(readADC(),BIN);
      Serial.println(readADC());
      delay (1000);
  
 

}

** 串口监视器

111111111011010001000010 //无负载

16757752

111111111100000001010000 //无负载

16764371

10010011001001100 //施加负载

76281

10010010000001000

74226

111111111011001100000010

16757702

**

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)