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

На Меге16 у меня работают сразу три АЦП без выключения ядра 10 бит и все нормально от 0 до 1023.Единственное что подается сигнал с ОУ.

 

а код программы можете выложить?

я сделал смещение, с ним все отлично работает (совпадает с измерениями мультиметра), но совесть мучает :)

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


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

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

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


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

15 LSB offset error - это жесть

а так получается что 15lsb *2.5 mv = 37.5 mV (если ион внутренний)

тут правильно советуют

попробуйте отсоединить ножку ADC0 (или какой у вас канал?) от схемы и припаять её к AGND, (только именно отсоединить а не ленится :-)

канал ADC менять не пробывали?

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


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

Помогите разобратся с АЦП.

Пишу программу для считывания уровня напряжения с переменного резистора (от 0 до 5 В).

Микроконтроллер: ATmega16 работает на частоте 16МГц. Вход A0. Разрядность АЦП: 10бит. Считывание одинарное (но вызывается регулярно). Программа работает, но при считывании уровня 0В выдает в ADCW не 0, а 15. При этом с верхним уровнем никаких проблем нет (1023)

 

Похоже у вас плохое опорное напряжение. Попробуйте внутреннее 2,56В для начала или подключите к ноге AREF внешний опорник. Не забудьте только биты REFS1-0 поправить.

 

Ну и несколько замечаний по коду, что сходу бросаются в глаза.

 

1) Запустили ацп в режиме free run, но в главном цикле вы всё время запускаете начало преобразования. Если вы хотите single conversion, то надо дождаться конца преобразования.

 

2) Есть стробы записи в регистры 1, 2, 3. А вот в регистр 4 строба записи нет, надо добавить.

 

3) В главном цикле используется переменная ADC_w, но она может быть испорчена в любой момент в прерывании. Примите меры.

 

4) Непонятна роль оператора while(ADCSRA & 0x40). Почему что-то делается, когда преобразование не закончено?

 

5) Зачем стоит оператор return 0 в конце программы? У вас там что, операционка стоит?

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


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

Единственное что подается сигнал с ОУ.

+1. Для себя после принял за правило: с переменника прямо на вход АЦП сигнал не подавать. На ОУ собрать повторитель да еще и подфильтровать немного.

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


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

Повторитель - обязательно.

Только там уровень нуля подпрыгнет, надо будет подшаманить...

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


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

Нашол я где была зарыта ошибка!

Скажу что все перепробывал, что советовали (про MUX4...MUX0 для контроля точек 0B 1.22B) - на них тоже выдавало ошибки, причем на 1.22 - непостежимого характера :). Только операционик не пробовал лепить, он сути б не менял.

 

 

И так ошибка была в коде (про непрерывный режим - тоже ошибка была, но в том коде была незаметна) и в самом начале:

 

int main(void)
{
_delay_ms(2);

[b]DDRA = 0x00;[/b]
DDRB = 0xFF;
DDRC = 0xFF;
DDRD = 0xFF;

[b]PORTA= 0xFF;[/b]
PORTB= 0x00;
PORTC= 0x00;
PORTD= 0x00;

 

Изначально порт А устанавливался как входно на считывание. И при считывании 0В выдавал уровень. При удалении выделенных строк - все заработало как надо, меряет от 0...1023 :)

 

Всем сноваже СПС! :yeah:

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


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

поделюсь тоже соображениями, нет защиты от дребезга, 50мс думаю не помешает, также очень интересно как подведена аналоговая линия, подтяжка к + или к земле, стоит ли защитный диод, насколько развязана плата по питанию....

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


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

поделюсь тоже соображениями, нет защиты от дребезга, 50мс думаю не помешает, также очень интересно как подведена аналоговая линия, подтяжка к + или к земле, стоит ли защитный диод, насколько развязана плата по питанию....

 

Дребезга тут нет, сигнал снимается с резистором в параллель которому конденсаторы.

Аналоговая земля с цифровой объеденены. Питания тоже, только питание к АЦП шло от основного через даташитовскую LC цепочку.

 

Для лучшей точности пробовал питать АЦП от другого источника с общей землей - полождительные результаты.

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


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

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

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

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

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

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

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

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

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

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