在驱动ADS1255后,连续读没问题,但是单次读切换通道的时候会出现跳变,开始的时候偶尔会出现,经过不断的查找,发现直接读1255读出的值没有错,在改变测试,发现是切换通道的时候读到下个通道的值了,所以在切换通道附近会出现错误,不在切换通道的时候读就是一直正确不会出现跳变了。
void EXTI4_15_IRQHandler(void)
{
static uint8_t writeseq[3]={0x51,0x00,0x08};
static uint8_t writeseq1[3]={0x51,0x00,0x18};
static uint16_t flag=0,temp = 0,change=0,num_c=3;
if (LL_EXTI_IsActiveFlag_0_31(LL_EXTI_LINE_4) != RESET)
{
if(flag == 1){
change++;
if(change<num_c)//每次改变通道后多读几遍,取中间读的值
{
flag=1;
adc_val_1 = getdata1255();
if(change == 2)
{
if(adc_val_1<0x800000) AIN1 = (adc_val_1*2.5/8388607);
else AIN1 = ((adc_val_1-0x800000)*2.5/8388607-2.5);
}
}else{
flag=0;
change=0;
SPI_Write(writeseq,3);
do_sync();
}
}
if(flag == 0){
change++;
if(change<num_c)
{
flag=0;
adc_val_0 = getdata1255();
if(change == 2)
{
if(adc_val_0<0x800000) AIN0 = (adc_val_0*2.5/8388607);
else AIN0 = ((adc_val_0-0x800000)*2.5/8388607-2.5);
}
}else{
flag=1;
change=0;
SPI_Write(writeseq1,3);
do_sync();
}
}
LL_EXTI_ClearFlag_0_31(LL_EXTI_LINE_4);
}