ADS1218 почему-то изредка подвисает.... в чем может быть дело.... (+)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено SOIC 08 апреля 2004 г. 17:48

есть подозрение что связано это с задержкой при выполнении команды чтения результата, но самое интересное что это проявляется когда между измерениями АЦП усыпляется по ноге PDWN,
вот код чтения результата:


bool ReadResultADS(unsigned short *result)
{
unsigned long lValue;
INT8U err;
register unsigned short i;

TimeoutADS = OS_TICKS_PER_SEC/2;
while(OSSemAccept(AdsSem));
OSSemPend(AdsSem, 0, &err); // ждем готовности АЦП
if(!TimeoutADS)
{
OpenADS(); // активируем CS
TXADS(0xFE); // CMD - сброс АЦП (RESET)
CloseADS(); // деактивируем CS
TimeoutADS = OS_TICKS_PER_SEC/4;
while(OSSemAccept(AdsSem));
OSSemPend(AdsSem, 0, &err); // ждем готовности АЦП
return false;
}

OpenADS(); // активируем CS
TXADS(0x01); // CMD - Чтение результата ADS

for(i=0; i < 20; i++) _NOP(); // задержка... :-E
//OSTimeDly(2);

lValue = (unsigned long)RXADS(); // читаем результат
lValue <<= 8;
lValue |= (unsigned long)RXADS();
lValue <<= 8;
lValue |= (unsigned long)RXADS();
CloseADS(); // деактивируем CS

lValue >>= 8;
if(result) *result = (unsigned short)lValue;

return true;
}

может я неправильно читаю результат?

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru