|
你好,想请教一下,我现在轮询切换4组差分输入,然后想把第3、4这2组差分输入需要改变PGA,然后读出来的数据时错乱的,如果单纯切换4组差分输入,不增加修改PGA又可以正常读取数据,这个是什么原因呢?
void ADS1256_SetDiffChannal(uint8_t _ch,uint8_t SPIx)
{
if (_ch == 0)
{
ADS1256_WriteReg(REG_MUX, (0 << 4) | 1,0x04,SPIx); /* 差分输入 AIN0, AIN1 ,PGA=16倍 */
}
else if (_ch == 1)
{
ADS1256_WriteReg(REG_MUX, (2 << 4) | 3,0x04,SPIx); /* 差分输入 AIN2, AIN3 ,PGA=16倍 */
}
else if (_ch == 2)
{
ADS1256_WriteReg(REG_MUX, (4 << 4) | 5,0x06,SPIx); /* 差分输入 AIN4, AIN5 ,PGA=64倍 */
}
else if (_ch == 3)
{
ADS1256_WriteReg(REG_MUX, (6 << 4) | 7,0x06,SPIx); /* 差分输入 AIN6, AIN7 ,PGA=64倍*/
}
}
void ADS1256_WriteReg(uint8_t _RegID, uint8_t _RegValue,uint8_t _RegValue1,uint8_t SPIx)
{
ADS1256_Send8Bit(CMD_WREG | _RegID,SPIx); /* 第1个命令:写寄存器的命令, 并发送寄存器地址 */
ADS1256_Send8Bit(0x01,SPIx); /* 第2个命令:寄存器个数 - 1, 此处写1个寄存器 */
ADS1256_Send8Bit(_RegValue,SPIx); /* 第3个命令:发送寄存器值 */
ADS1256_Send8Bit(_RegValue1,SPIx); /* 第4个命令:发送寄存器值 */
}
void ADS1256_ReadData(int32_t *p,u8 ADCx )
{
int32_t read = 0;
select_ads1256(10);//拉低片选,选通MISO,主入从出
Ddl_Delay1us(1);
ADS1256_WaitDRDY_1(10);
ADS1256_SetDiffChannal(ADCx,10);//差分4通道
Ddl_Delay1us(5);
ADS1256_Send8Bit(CMD_SYNC,10);
Ddl_Delay1us(5);
ADS1256_Send8Bit(CMD_WAKEUP,10);
Ddl_Delay1us(25);
ADS1256_Send8Bit(CMD_RDATA,10); /* 读数据的命令 */
Ddl_Delay1us(10);
/* 读采样结果,3个字节,高字节在前 */
read += ADS1256_Recive8Bit(10) << 16;
read += ADS1256_Recive8Bit(10) << 8;
read += ADS1256_Recive8Bit(10) << 0;
unselect_ads1256(10);//读完数据拉高片选
//CS_1(); /* SPI片选 = 1 */
/* 负数进行扩展。24位有符号数扩展为32位有符号数 */
if (read & 0x800000)
{
read += 0xFF000000;
}
if(ADCx==0){p[3] = read/32;}
else{
p[ADCx-1] = read/32;}
}
|
|