Atmega128a - используется 8 каналов ацп. 4-термисторных входа делитель с 10к/термистор , 4-по напряжению делитель 5к6/5к2 -все через повторитель lm324
Подключаю 10к резистор на первом канале ~2.5в - остальные 3 канала пустые без резисторов т.е. уних 5v на выходе -все нормально -сопротивление меряется хорошо
Подключаю 10к резистор на первом канале -любой другой канал подключаем на 10к еще один резистор - показания первого начинают ползти еще один канал 10к еще ползут т.е. например на первом канале было 9960 после подключения первого 10000, после второго 10060.
Если подключать 1к сопротивления или наоборот за 100к то влияния нет
Также влияет подключение на вольтовые входы -между 30% - 80% от диапазона ацп
Все конечно укладывается в5% но все равно как-то непонятно...
частота ацп 125000гц
ацп запускается с частотой 200раз в секунду - работает по прерыванию
чип 16МГц
Что за засада?
kovigor
Apr 8 2011, 22:25
Цитата(GYUR22 @ Apr 8 2011, 20:38)

Что за засада?
Да кто ж ее знает ? Я, например, из ваших словесных излияний не понял почти ничего. Что стоило просто привести схему ?
нечитатель
Apr 9 2011, 01:31
Зачем схема? И
так нормально.
проблема в том что - самые высокие значения ацп и низкие - не влияют друг на друга
влияют от ~30 до 80%
причем 4 канала на одном операционнике 4 на другом - и они влияют друг на друга в указанном диапазоне
прерывание
Код
ISR(ADC_vect)
{
adc_val= ADCL;
//shift from 8bit to 10bit*/
adc_val+= (ADCH<<8);
AI[adc_ch]=(AI[adc_ch]+adc_val)/2;
adc_ch++;
if(adc_ch>7)
adc_ch=0;
}
инит
Код
// ADC module initialization
void adc_init(void)
{
//select reference voltage
//AVCC with external capacitor
ADMUX|=(0<<REFS1)|(1<<REFS0);
//set prescaller and enable ADC
ADCSRA|=(1<<ADEN)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);
adc_ch=0;
}
опрос 200раз в секунду - 8 каналов == каждый канал 25 раз в секунду
Код
// ADC single conversion routine
void adc_start_conversion(void)
{
//set ADC channel
ADMUX=(ADMUX&0xF0)|adc_ch;
//Start conversionio with Interupt after conversion
ADCSRA |= (1<<ADSC)|(1<<ADIE);
}
1.Проверьте сперва цифровым вольтметром напряжения на ножках контроллера, чтоб убедиться, что аналоговая часть работает корректно.
2. Попробуйте сэмплировать каждый канал по 3-4 раза, может результаты такого теста дадут доп. информацию к размышлениям.
3. Я бы попробовал вставить задержку после переключения канала и началом сэмплирования. И "поигрался" с ней, наблюдая результат.
Например, так:
CODE
//set ADC channel
ADMUX=(ADMUX&0xF0)|adc_ch;
//delay
_delay_us(100);
//Start conversionio with Interupt after conversion
ADCSRA |= (1<<ADSC)|(1<<ADIE);
PS: Лично я с такой проблемкой не сталкивался, правда я ни разу не использовал мультиплексор, мне нужен был только один канал.
aleksey_g
Apr 9 2011, 08:51
Как подключены AVCC, AREF?
Есть ли в их цепи какие-то фильтры?
По земле нету перекосов?
аналоговая часть работает корректно - по крайней мере с очень большой долей вероятности тк мерил напряжение на ногах оно не скачет (при вышеописанных действиях) по земле нет вроде особых проблем - питальник в другом конце платы на 3 напряжения 5/12/15. т.е. просто показания не скачут и никаких левых нагрузок на аналоговых напряжениях нет.
avcc подключено через фильтр 100uH+220uF +aref на 0.1 сидит - используется референс с avcc.
Цитата
3. Я бы попробовал вставить задержку после переключения канала и началом сэмплирования. И "поигрался" с ней, наблюдая результат.
насчет задержки - интересная тема я тоже думал но не пробовал - спасибо в понедельник попробую отпишу
ArtemKAD
Apr 9 2011, 22:56
Посмотри на наличие на других портах камня напряжений превышающих питающее. В т.ч. и на цифровых. Кроме того, не забывай о том, что влет в Sleep автоматом запускает преобразование АЦП...
GYUR22
Apr 10 2011, 06:17
sleep не использую- и так нормально
напряжения на ногах проверю - хотя мало вероятно тк там же защитные диоды а ноги подключены либо на 5в либо через резисторы 10к
GYUR22
Apr 11 2011, 08:21
короче не помогает задержка
даже если оставить только нулевой канал все равно влияют другие софтварно отключенные каналы и именно в диапазоне ~30-80%
буду щас их железно отпаивать и смотреть
походу это дроссель avcc (=ref у меня) влияет как оказалось
стоял чип дроссель 1210 -100uH - у него сопротивление ~20Ом - падало до 40мв
поменял на выводной 100uH ~0608 все в порядке - <2.5мв
На схеме не видно, но показалось, что на выходах ОУ стоят 10к резисторы. Зачем??
GYUR22
Apr 11 2011, 09:03
для защиты входов ацп от перенапряжения - чтобы мегу не сожгло если на выходе вдруг будет 15в аналогового питания
Цитата(GYUR22 @ Apr 11 2011, 13:03)

для защиты входов ацп от перенапряжения - чтобы мегу не сожгло если на выходе вдруг будет 15в аналогового питания
рекомендуется меньше 10к выходное сопротивление источника сигнала. Смысла тогда нет в повторителе ИМХО
GYUR22
Apr 11 2011, 10:10
об этом думали ~5к6 поставить
но решили пока в угоду надежности оставить
нечитатель
Apr 11 2011, 12:06
С резисторами неубедительно. Если посреди схемы ВНЕЗАПНО появляются 15 вольт какого-то питания, то это, как бы, ну. Да, резисторов в каждый провод навтыкать. Для защиты каждой детали от каждой другой детали.
Зато вспомнил про другие резисторы я. Которые internal pull-up. И которые автоматически сами собой отключаться не обещали, когда хочем мерять АЦП ту же ногу.
Конкретно за сабжёвую микросхему про это не гарантирую, а вообще есть такая тема.
(изображение схемы профессионально подготовлено к вылаживанию, детектед: чтоб ни один шпиён, зато наглядно и не при...дёрёшься)
(и ещё детектед: этой весной стало модно топеки про АЦП AVR заводить разные одинаковые, но различающиеся точным названием микросхемы, автором и разделом)
Dog Pawlowa
Apr 11 2011, 13:02
Цитата(GYUR22 @ Apr 11 2011, 11:21)

короче не помогает задержка
С какой задержкой проверялось?
Я уже забыл битики инициализации. Там какой коэффициент усиления используется?
Ну и похоже действительно на перекосы.
GYUR22
Apr 11 2011, 13:51
Цитата(Dog Pawlowa @ Apr 11 2011, 17:02)

С какой задержкой проверялось?
Я уже забыл битики инициализации. Там какой коэффициент усиления используется?
Ну и похоже действительно на перекосы.
задержка была до 400uS
да никакого (ку=1)
да оказался перкос
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.