|
есть подозрение что связано это с задержкой при выполнении команды чтения результата, но самое интересное что это проявляется когда между измерениями АЦП усыпляется по ноге 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 - Чтение результата ADSfor(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(); // деактивируем CSlValue >>= 8;
if(result) *result = (unsigned short)lValue;return true;
}
может я неправильно читаю результат?
E-mail: info@telesys.ru