k155la3 26 19 января, 2019 Опубликовано 19 января, 2019 · Жалоба Что я Вам могу сказать ... 1. Перенастройтесь в single-conversion режим. (все-таки, как бы ЭТО не унижало нашу с Вами профессиональную гордость) 2. Не используйте калибровку (пока). АЦП даже без калибовки работает очень даже приемлемо. Когда все будет работать - подключите (если будет необходимость). 3. Не используйте (пока) мат.обработку результата - усреднение итп., выводите "сырые" дискреты, считанные из АЦП - число 0 . . . 0xFFFFFF, в двух видах - десятичное и hex. 4. "Коротите" входы АЦП изолированной перемычкой. 5. Минимизируйте код (я Вам необходимое-достаточное выложил). "Отсадите", в случае целесообразности, в отдельный проект. Все прерывания отключите. Можно даже не использовать вывод на LCD, используйте средства IDE дебагера для просмотра значений АЦП и его регистров через переменные. Исходя из "исследований", думаю дело в настройке АЦП и Вашем софте. Не исключаю (извиняюсь, конечно) что все ОНО работает, а "глючек" появляется из-за ошибки в операторах вывода на LCD. Не используйте LCD, смотрите переменную с дискретами АЦП в отладчике, в hex. Ваш код должен быть коротким и понятным Вам. Мой состоит из 3 функций Init, Start, Read. Примерно 40 строк. Можно и короче. Какой компилятор, процессор, есть ли ОС ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Reystlin 0 20 января, 2019 Опубликовано 20 января, 2019 · Жалоба Причиной кривой работы оказалось ошибка с анализом бита RDY, он инвертированный... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 26 21 января, 2019 Опубликовано 21 января, 2019 · Жалоба 19 hours ago, Reystlin said: Причиной кривой работы оказалось ошибка с анализом бита RDY, он инвертированный... Ну так . . . . Хитрые AD-шники запрятали восклицательный знак в return unsigned char AD7799_Ready(void) { unsigned char rdy = 0; rdy = (AD7799_GetRegisterValue( AD7799_REG_STAT,1) & 0x80); return(!rdy); } Спасибо за инф. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sanya221 3 1 сентября, 2020 Опубликовано 1 сентября, 2020 · Жалоба Дабы не плодить новых тем напишу сюда.. Стояла задача измерять постоянную составляющую сигнала в условиях помех 50/100Гц. Использовали AD7799 из-за эффективного подавления этих частот. Теперь появилась новая "хотелка"- измерять еще и уровень переменной составляющей (желательно без переделки железа). Жестких требований к точности измерениия переменной составляющей не предьявляется. Есть мысль при измерении переменки задать ИМС максимальную частоту преобразования (470Гц) при которой подавление НЧ минимально. Дальше программно ловить минимумы/максимумы амплитуды сигнала и высчитывать уровень переменки. Проблема в том, что из графика Figure 15. Filter Response with Update Rate = 470 Hz понять, какое будет подавление частот 50/100гц непонятно. Никто ничего подобного не делал с данной ИМС? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_pv 54 1 сентября, 2020 Опубликовано 1 сентября, 2020 · Жалоба Quote A sinc4 filter is used when the update rate ranges from 50 Hz to 242 Hz. Finally, an integrate-only filter is used when the update rate equals 470 Hz на максимальной частоте считайте что по вашим данным прошлись скользящим средним с периодом в ~4мс. на 50Гц будет -0.6дБ на 100Гц, -2.5дБ. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться