|
你好,想請教一下,我現(xiàn)在輪詢切換4組差分輸入,然后想把第3、4這2組差分輸入需要改變PGA,然后讀出來的數(shù)據(jù)時錯亂的;單純切換4組差分輸入,不增加修改PGA又可以正常讀取數(shù)據(jù),一旦增加修改PGA這個寄存器命令后,第3,4組差分通道讀取到的額數(shù)據(jù)時0,這個是什么原因呢?
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個命令:寫寄存器的命令, 并發(fā)送寄存器地址 */
ADS1256_Send8Bit(0x01,SPIx); /* 第2個命令:寄存器個數(shù) - 1, 此處寫1個寄存器 */
ADS1256_Send8Bit(_RegValue,SPIx); /* 第3個命令:發(fā)送寄存器值 */
ADS1256_Send8Bit(_RegValue1,SPIx); /* 第4個命令:發(fā)送寄存器值 */
}
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); /* 讀數(shù)據(jù)的命令 */
Ddl_Delay1us(10);
/* 讀采樣結(jié)果,3個字節(jié),高字節(jié)在前 */
read += ADS1256_Recive8Bit(10) << 16;
read += ADS1256_Recive8Bit(10) << 8;
read += ADS1256_Recive8Bit(10) << 0;
unselect_ads1256(10);//讀完數(shù)據(jù)拉高片選
//CS_1(); /* SPI片選 = 1 */
/* 負數(shù)進行擴展。24位有符號數(shù)擴展為32位有符號數(shù) */
if (read & 0x800000)
{
read += 0xFF000000;
}
if(ADCx==0){p[3] = read/32;}
else{
p[ADCx-1] = read/32;}
}
|
|