Перейти к содержанию
    

Что я Вам могу сказать ... 

1. Перенастройтесь в single-conversion режим. (все-таки, как бы ЭТО не унижало нашу с Вами профессиональную гордость)

2. Не используйте калибровку (пока). АЦП даже без калибовки работает очень даже приемлемо. Когда все будет работать - подключите (если будет необходимость).

3. Не используйте (пока) мат.обработку результата - усреднение итп.,

выводите "сырые" дискреты, считанные из АЦП - число 0 . . . 0xFFFFFF, в двух видах - десятичное и hex.

4. "Коротите" входы АЦП изолированной перемычкой.

5. Минимизируйте код (я Вам необходимое-достаточное выложил). "Отсадите", в случае целесообразности, в отдельный проект. 

Все прерывания отключите. Можно даже не использовать вывод на LCD, используйте средства IDE дебагера для просмотра значений АЦП и его регистров через переменные.

Исходя из "исследований", думаю дело в настройке АЦП и Вашем софте.

:biggrin: Не исключаю (извиняюсь, конечно) что все ОНО работает, а "глючек" появляется из-за ошибки в операторах вывода на LCD.

Не используйте LCD, смотрите переменную с дискретами АЦП в отладчике, в hex.

Ваш код должен быть коротким и понятным Вам. Мой состоит из 3 функций Init, Start, Read. Примерно 40 строк. Можно и короче.

Какой компилятор, процессор, есть ли ОС ?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Причиной кривой работы оказалось ошибка с анализом бита RDY, он инвертированный...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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);
}

Спасибо за инф.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты


Дабы не плодить новых тем напишу сюда..
Стояла задача измерять постоянную составляющую сигнала в условиях помех 50/100Гц.
Использовали AD7799 из-за эффективного подавления этих частот. Теперь появилась новая "хотелка"- измерять еще и уровень переменной составляющей (желательно без переделки железа). Жестких требований
к точности измерениия переменной составляющей не предьявляется. Есть мысль при измерении переменки задать ИМС максимальную частоту преобразования (470Гц) при которой подавление НЧ минимально. Дальше программно ловить минимумы/максимумы амплитуды сигнала и высчитывать уровень переменки.
Проблема в том, что из графика Figure 15. Filter Response with Update Rate = 470 Hz  понять, какое будет подавление частот 50/100гц непонятно. Никто ничего подобного не делал с данной ИМС?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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дБ.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...