Подали на вход ноги 39 (ADC1) постоянку через делитель 600К+200К. Индикатор показывает корректно то, что в прошивке "заказали". Потом подали на ногу 38 (ADC2) другую постоянку через свой делитель 56К+5,1К и хотели на индикатор выводить соответствующую информацию. Коды измерений для обоих входов одинаковые по сути. Но возникла проблема: Напряжение, поданное на вход 38 (ADC2) начинает как-то "пролазить" на вход 39 (ADC1). По отдельности входы корректно читают постоянку и выводят на индикатор то, что должны, а если одновременно подаем сигналы на входы, то они смешиваются. Входы включены как входы, подтягивающие резисторы не включены. Проверили правильность сборки делителей, косяков не нашли. Я новичок в теме AVR. Может надо как то АЦП настроить, чтобы входы независимо работали? Подскажите где искать.
АЦП Атмега16 сигналы на входах
АЦП Атмега16 сигналы на входах
Всем здравствуйте.
Подали на вход ноги 39 (ADC1) постоянку через делитель 600К+200К. Индикатор показывает корректно то, что в прошивке "заказали". Потом подали на ногу 38 (ADC2) другую постоянку через свой делитель 56К+5,1К и хотели на индикатор выводить соответствующую информацию. Коды измерений для обоих входов одинаковые по сути. Но возникла проблема: Напряжение, поданное на вход 38 (ADC2) начинает как-то "пролазить" на вход 39 (ADC1). По отдельности входы корректно читают постоянку и выводят на индикатор то, что должны, а если одновременно подаем сигналы на входы, то они смешиваются. Входы включены как входы, подтягивающие резисторы не включены. Проверили правильность сборки делителей, косяков не нашли. Я новичок в теме AVR. Может надо как то АЦП настроить, чтобы входы независимо работали? Подскажите где искать.
Подали на вход ноги 39 (ADC1) постоянку через делитель 600К+200К. Индикатор показывает корректно то, что в прошивке "заказали". Потом подали на ногу 38 (ADC2) другую постоянку через свой делитель 56К+5,1К и хотели на индикатор выводить соответствующую информацию. Коды измерений для обоих входов одинаковые по сути. Но возникла проблема: Напряжение, поданное на вход 38 (ADC2) начинает как-то "пролазить" на вход 39 (ADC1). По отдельности входы корректно читают постоянку и выводят на индикатор то, что должны, а если одновременно подаем сигналы на входы, то они смешиваются. Входы включены как входы, подтягивающие резисторы не включены. Проверили правильность сборки делителей, косяков не нашли. Я новичок в теме AVR. Может надо как то АЦП настроить, чтобы входы независимо работали? Подскажите где искать.
- Реклама
- khomych
- Мучитель микросхем
- Сообщения: 423
- Зарегистрирован: Сб фев 21, 2009 16:11:32
- Откуда: Харьков
- Контактная информация:
Re: АЦП Атмега16 сигналы на входах
плату отмыть от флюса спиртом или бензином. дважды )). и код в студию. и схему. информация со входом АЦП не смешивается. возможно в программе ошибка
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18546
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: АЦП Атмега16 сигналы на входах
информация со входов может смешиваться, потому что на первый вход сигнал подан неверно. по даташиту источник сигнала на входе АЦП должен иметь внутреннее сопротивление не более 10К, у вас же минимум в 60 раз больше. теперь смотрите: каждй вход имет собственную емкость - несколько пик. и существует емкостная связь между соседними выводами - те же несколько пик. а теперь внимание: вы подали напряжение на вход 2, при этом за счет емкостной связи оно в виде импульса проникло и на вход 1 и зарядило его. когда вы включаете 1-й канал, то из-за большого сопротивления источника питания он намного хуже перезаряжает все эти емкости, в итоге что-то "от второго" остается. особенно, если на первом входе уровень ниже, чем на втором. эти процессы практически незаметны, если параметры измерительных каналов одинаковы и корректно выбраны, но на высоких скоростях семплирования они все равно возникают.
борьба с ними может быть разными способами, но начать надо с правильного сигнала. затем можно попробовать проводить измерения "через один раз": после измерения на 1-ом канале переводить его на выход, выводить в него 0, затем делать "пустой цикл" измерения второго канала, затем "правильный цикл измерений" второго канала, потом то же самое со 2-ым каналом и т.д.
то есть принудительно обеспечивать разряд паразитнх емкостей на за счет того, что соседние пины заземлены.
наконец, можно работать не с каналами 1 и 2, а с каналами 1 и 3, а второй держать в нуле принудительно.
и да, я не говорю, что плату мыть не надо от флюса и т.п. - вероятно, одним этим все может и вылечиться...
борьба с ними может быть разными способами, но начать надо с правильного сигнала. затем можно попробовать проводить измерения "через один раз": после измерения на 1-ом канале переводить его на выход, выводить в него 0, затем делать "пустой цикл" измерения второго канала, затем "правильный цикл измерений" второго канала, потом то же самое со 2-ым каналом и т.д.
то есть принудительно обеспечивать разряд паразитнх емкостей на за счет того, что соседние пины заземлены.
наконец, можно работать не с каналами 1 и 2, а с каналами 1 и 3, а второй держать в нуле принудительно.
и да, я не говорю, что плату мыть не надо от флюса и т.п. - вероятно, одним этим все может и вылечиться...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- khomych
- Мучитель микросхем
- Сообщения: 423
- Зарегистрирован: Сб фев 21, 2009 16:11:32
- Откуда: Харьков
- Контактная информация:
Re: АЦП Атмега16 сигналы на входах
из личного опыта. когда разбирался с АЦП на Atmega8 то тоже получил кашу на двух каналах. но по отдельности работали норм. решил внедрить "фильтр" среднее арифметическое. один буфер на оба канала. вот и каша получилась
Re: АЦП Атмега16 сигналы на входах
Первый делитель у меня действительно с завышенными номиналами. Я такой поставил, потому что хотел исключить влияние этого делителя на работу источника сигнала. там тоже есть делитель с не большими номиналами.ARV писал(а): но начать надо с правильного сигнала.
А проблему удалось решить путем добавления задержки 1 мс между выбором входа АЦП и запуском измерения. Теперь ничего не смешивается и индикатор все показывает корректно.
Вот кусочек прошивки:
Сразу поясню: Вместо котика в очках в прошивке стоит цифра 8 и потом ). Редактор превращает эту 8 и ) в котика в очках
Комменты через // написаны как памятки для себя лично, не обращайте на них внимание....
// чтение напряжения из АЦП (нога 39)
ADMUX:=%11000001;
delay_ms 1;
ADCSRA.6:=1; //запускаем аналоговое измерение
delay_ms 1;
adcread:= ADCL; //сначала читаем младший регистр
adcread:= ((ADCH shl
// чтение напряжения из ноги 38
ADMUX:=%11000010;
delay_ms 1;
ADCSRA.6:=1; //запускаем аналоговое измерение
delay_ms 1;
adcvolt:= ADCL; //сначала читаем младший регистр
adcvolt:= ((ADCH shl
- Реклама
- GoldenAndy
- Поставщик валерьянки для Кота
- Сообщения: 1925
- Зарегистрирован: Чт июл 28, 2016 07:58:37
- Откуда: Kyiv, UA
- Контактная информация:
Re: АЦП Атмега16 сигналы на входах
в качестве антикотика в редакторе есть кнопка CODE, добавляющая соответствуюшие теги:
Код: Выделить всё
adcread:= ADCL; //сначала читаем младший регистр
adcread:= ((ADCH shl 8) + adcread);Re: АЦП Атмега16 сигналы на входах
Кстати, такой проблемы на новых Аттинях нет. Я пробовал переключать каналы с частотой 70 кГц - на даташитовских 10к "уход" всего 1 значащий бит. На старом атмеловском хламе о таком только мечтать.





