主题中讨论的其他器件: ADS130E08EVM-PDK、 ADS131E08EVM-PDK
您好!
我想尝试在数据连续模式下使用 ADS131E08S。 我使用 Arduino IDE 完成了一个小型测试程序、但在检索数据时遇到了一些问题。
我的代码如下
void sendCmd (uint8_t cmd)
{
mySPI.beginTransaction(SPISettings(8000000、MSBFIRST、SPI_MODE1));
digitalWrite (SS、low);
myspi.transfer (cmd);
delayMicroseconds (2);
digitalWrite (SS、HIGH);
myspi.endTransaction();
}
void setup(){
sendCmd (ADS_CMD_RESET);
延迟(20);
sendCmd (ADS_CMD_SDATAC);
延迟(20);
digitalWrite (ADS_START、HIGH);
writeReg (0x01、0x94);
writeReg (0x02、0xE0);
writeReg (0x03、0xC0);
writeReg (0x05、0x60); //jauge 3增益12
writeReg (0x06、0x60); //jauge 2 gain 12
writeReg (0x07、0x10); ///温度 CJC 增益:1.
writeReg (0x08、0x60); //jauge 1增益12
writeReg (0x09、0x90); //未使用
writeReg (0x0A、0x90); //未使用
writeReg (0x0B、0x90); //未使用
writeReg (0x0C、0x90); //未使用
延迟(10);
digitalWrite (ADS_START、LOW);
延迟(10);
sendCmd (ADS_CMD_OFFSETCAL);
延迟(200);
appState= app_initial;
}
设置完成后、我检查寄存器...一切都好。
要启动数据连续模式...(使用串行命令)
sendCmd (ADS_CMD_RDATAC);
delayMicroseconds (5);
digitalWrite (ADS_START、HIGH);
停止数据连续模式...
digitalWrite (ADS_START、LOW); delay (10); sendCmd (ADS_CMD_SDATAC);
在主循环函数内、我检查 DRDY 引脚何时变为低电平。
void loop(){
if (digitalRead (DRDY)=低电平)
{
readAllData();
}
}
空 readAllData (空)
{
长 CHX、CH1、CH2、CH3、CH4;
uint32_t ret;
uint8_t b0;
mySPI.beginTransaction(SPISettings(8000000、MSBFIRST、SPI_MODE1));
digitalWrite (SS、low);
//---- statistiques
B0 = mySPI.transfer (ADS_CMD_NOP);
CHX =((((uint32_t) b0)<< 16)|((b0 & 0x80)? 0xFF000000:0x00000000);
CHX |=((((uint32_t) mySPI.transfer (ADS_CMD_NOP))<< 8);
CHX |=(uint32_t) mySPI.transfer (ADS_CMD_NOP);
//---- 通道1
B0 = mySPI.transfer (ADS_CMD_NOP);
CH1 =((((uint32_t) b0)<< 16)|((b0 & 0x80)? 0xFF000000:0x00000000);
CH1 |=((((uint32_t) mySPI.transfer (ADS_CMD_NOP))<< 8);
CH1 |=(uint32_t) mySPI.transfer (ADS_CMD_NOP);
//---- 通道2.
B0 = mySPI.transfer (ADS_CMD_NOP);
CH2 =((((uint32_t) b0)<< 16)|((b0 & 0x80)? 0xFF000000:0x00000000);
CH2 |=((((uint32_t) mySPI.transfer (ADS_CMD_NOP))<< 8);
CH2 |=(uint32_t) mySPI.transfer (ADS_CMD_NOP);
//---- 通道3.
B0 = mySPI.transfer (ADS_CMD_NOP);
CH3 =((((uint32_t) b0)<< 16)|((b0 & 0x80)? 0xFF000000:0x00000000);
CH3 |=((((uint32_t) mySPI.transfer (ADS_CMD_NOP))<< 8);
CH3 |=(uint32_t) mySPI.transfer (ADS_CMD_NOP);
//---- 通道4
B0 = mySPI.transfer (ADS_CMD_NOP);
Ch4 =((((uint32_t) b0)<< 16)|((b0 & 0x80)? 0xFF000000:0x00000000);
Ch4 |=((((uint32_t) mySPI.transfer (ADS_CMD_NOP))<< 8);
Ch4 |=(uint32_t) mySPI.transfer (ADS_CMD_NOP);
//---- 通道5.
B0 = mySPI.transfer (ADS_CMD_NOP);
CHX =((((uint32_t) b0)<< 16)|((b0 & 0x80)? 0xFF000000:0x00000000);
CHX |=((((uint32_t) mySPI.transfer (ADS_CMD_NOP))<< 8);
CHX |=(uint32_t) mySPI.transfer (ADS_CMD_NOP);
//---- 通道6.
B0 = mySPI.transfer (ADS_CMD_NOP);
CHX =((((uint32_t) b0)<< 16)|((b0 & 0x80)? 0xFF000000:0x00000000);
CHX |=((((uint32_t) mySPI.transfer (ADS_CMD_NOP))<< 8);
CHX |=(uint32_t) mySPI.transfer (ADS_CMD_NOP);
//---- 通道7.
B0 = mySPI.transfer (ADS_CMD_NOP);
CHX =((((uint32_t) b0)<< 16)|((b0 & 0x80)? 0xFF000000:0x00000000);
CHX |=((((uint32_t) mySPI.transfer (ADS_CMD_NOP))<< 8);
CHX |=(uint32_t) mySPI.transfer (ADS_CMD_NOP);
//---- 通道8.
B0 = mySPI.transfer (ADS_CMD_NOP);
CHX =((((uint32_t) b0)<< 16)|((b0 & 0x80)? 0xFF000000:0x00000000);
CHX |=((((uint32_t) mySPI.transfer (ADS_CMD_NOP))<< 8);
CHX |=(uint32_t) mySPI.transfer (ADS_CMD_NOP);
//---- 通道8.
B0 = mySPI.transfer (ADS_CMD_NOP);
CHX =((((uint32_t) b0)<< 16)|((b0 & 0x80)? 0xFF000000:0x00000000);
CHX |=((((uint32_t) mySPI.transfer (ADS_CMD_NOP))<< 8);
CHX |=(uint32_t) mySPI.transfer (ADS_CMD_NOP);
th.val =(float) ch3*2*2400/16777215;
J1.val =(浮点) Ch4*2*2400/12/16777215;
j2.val =(float) ch2*2*2400/12/16777215;
J3.val =(浮点) CH1*2*2400/12/16777215;
myspi.endTransaction();
}
采集看起来正常(DRDY 引脚会定期变为低电平)、但我的 readAllData 函数似乎很糟糕、并提供错误的数据值。
可以帮帮我吗?