问题描述
我使用了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 (将#修改为@)