реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Странная проблема с ADS1282, Теряется (?) коэффициент усиления
inventor
сообщение Oct 4 2012, 06:47
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 524
Регистрация: 25-12-08
Из: Москва
Пользователь №: 42 748



Проблема такая:
На плате стоят 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); */
}


И вот что получается в матлабе (вложение):
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
inventor
сообщение Oct 11 2012, 09:09
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 524
Регистрация: 25-12-08
Из: Москва
Пользователь №: 42 748



Разобрался.
Странно указана фаза SPI в даташите.
поставbл фазу 1- все OK

PS-заметил в описаниях ацп 1210 такое же неправильно описание фазы.
на рисунках.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 10:37
Рейтинг@Mail.ru


Страница сгенерированна за 0.01356 секунд с 7
ELECTRONIX ©2004-2016