azure 0 21 марта, 2008 Опубликовано 21 марта, 2008 · Жалоба На Меге16 у меня работают сразу три АЦП без выключения ядра 10 бит и все нормально от 0 до 1023.Единственное что подается сигнал с ОУ. а код программы можете выложить? я сделал смещение, с ним все отлично работает (совпадает с измерениями мультиметра), но совесть мучает :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lexdaw 0 21 марта, 2008 Опубликовано 21 марта, 2008 · Жалоба Да дело вряд ли в коде.Если сигнал прямо с переменника.,то надо учесть,что у него может не быть R=0,да еще если высокоомный,а у вас подтяжка внутренними резисторами.Вот здесь и может выскакивать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BALDA 0 21 марта, 2008 Опубликовано 21 марта, 2008 · Жалоба 15 LSB offset error - это жесть а так получается что 15lsb *2.5 mv = 37.5 mV (если ион внутренний) тут правильно советуют попробуйте отсоединить ножку ADC0 (или какой у вас канал?) от схемы и припаять её к AGND, (только именно отсоединить а не ленится :-) канал ADC менять не пробывали? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
=GM= 0 21 марта, 2008 Опубликовано 21 марта, 2008 · Жалоба Помогите разобратся с АЦП. Пишу программу для считывания уровня напряжения с переменного резистора (от 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 в конце программы? У вас там что, операционка стоит? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladimirYU 0 21 марта, 2008 Опубликовано 21 марта, 2008 · Жалоба Единственное что подается сигнал с ОУ. +1. Для себя после принял за правило: с переменника прямо на вход АЦП сигнал не подавать. На ОУ собрать повторитель да еще и подфильтровать немного. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kuzmi4 0 21 марта, 2008 Опубликовано 21 марта, 2008 · Жалоба Повторитель - обязательно. Только там уровень нуля подпрыгнет, надо будет подшаманить... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
azure 0 21 марта, 2008 Опубликовано 21 марта, 2008 · Жалоба Нашол я где была зарыта ошибка! Скажу что все перепробывал, что советовали (про 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: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kibi 0 24 марта, 2008 Опубликовано 24 марта, 2008 · Жалоба поделюсь тоже соображениями, нет защиты от дребезга, 50мс думаю не помешает, также очень интересно как подведена аналоговая линия, подтяжка к + или к земле, стоит ли защитный диод, насколько развязана плата по питанию.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
azure 0 9 апреля, 2008 Опубликовано 9 апреля, 2008 · Жалоба поделюсь тоже соображениями, нет защиты от дребезга, 50мс думаю не помешает, также очень интересно как подведена аналоговая линия, подтяжка к + или к земле, стоит ли защитный диод, насколько развязана плата по питанию.... Дребезга тут нет, сигнал снимается с резистором в параллель которому конденсаторы. Аналоговая земля с цифровой объеденены. Питания тоже, только питание к АЦП шло от основного через даташитовскую LC цепочку. Для лучшей точности пробовал питать АЦП от другого источника с общей землей - полождительные результаты. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться