Проблема такая:
На плате стоят 4 ADS1282, у этих ацп нету чипселектов, поэтому выбираются они с помошью коммутатора, собранного на CD74HC4052.
Я программирую эти АЦП т.о: записываю
в CONFIG0 0x4A- Data rate 500, High-resolution mode,Sinc + LPF filter blocks (default)
в CONFIG1 0x09- PGA = 2, PGA chopping enabled (default)
И получается странная вешь-генератором подаю синусоиду, которая должна соответствовать коэффициенту усиления (ну чтобы не было переполнения),
но читается
правильно только тот АЦП, который я читаю самым первым, на всех остальных синусоида порезана сверху, просто такое ощущение, что в неправильных ацп коэффициент усиления самопроизвольно изменяется.
Просто не могу понять.-после записи в регистры всех ацп я их проверяю, но все равно выходит какая то лажа.
Может кто нибудь сталкивался с подобным?
Вот мой обработчик:
CODE
/* Прерывание по переходу из "1" в "0" */
void ADS1282_ISR(void)
{
int i;
long data[4];
ADDR_ON(2);
data[2] =byteswap4(ADS1282_readData32()); /* BIG ENDIAN */
ADDR_ON(3);
data[3] = byteswap4(ADS1282_readData32()); /*BIG ENDIAN */
ADDR_ON(0);
data[0] = byteswap4(ADS1282_readData32()); /*BIG ENDIAN */
ADDR_ON(1);
data[1] = byteswap4(ADS1282_readData32()); /*BIG ENDIAN */
/*Запишем миллисекнды в этот канал, BIG ENDIAN */
data[3] = byteswap4(TIMER2_getMsec());
/* Собираем буфер */
if (ping_pong_flag == 0) { /* 0 - ping */
ADC_DATA_ping[pack_cnt % PING_PONG_SIZE].x = data[0];
ADC_DATA_ping[pack_cnt % PING_PONG_SIZE].y = data[1];
ADC_DATA_ping[pack_cnt % PING_PONG_SIZE].z = data[2];
ADC_DATA_ping[pack_cnt % PING_PONG_SIZE].h = data[3];
} else { /* 1- pong */
ADC_DATA_pong[pack_cnt % PING_PONG_SIZE].x = data[0];
ADC_DATA_pong[pack_cnt % PING_PONG_SIZE].y = data[1];
ADC_DATA_pong[pack_cnt % PING_PONG_SIZE].z = data[2];
ADC_DATA_pong[pack_cnt % PING_PONG_SIZE].h = data[3];
}
pack_cnt++;
/* 4 раза в секунду */
if (pack_cnt >= PING_PONG_SIZE) {
pack_cnt = 0;
/* Меняем флаг*/
ping_pong_flag = !ping_pong_flag;
/* Ïîêà ñèãíàëîì! */
raise(SIGIVG14);
}
/*Подтвердим прерывание */
*pPORTFIO_CLEAR = _1282_DRDY;
/* ADDR_ON(2); */
}
И вот что получается в матлабе (вложение):
Эскизы прикрепленных изображений