GYUR22 0 8 апреля, 2011 Опубликовано 8 апреля, 2011 (изменено) · Жалоба 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МГц Что за засада? Изменено 8 апреля, 2011 пользователем GYUR22 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kovigor 5 8 апреля, 2011 Опубликовано 8 апреля, 2011 · Жалоба Что за засада? Да кто ж ее знает ? Я, например, из ваших словесных излияний не понял почти ничего. Что стоило просто привести схему ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_noise 0 9 апреля, 2011 Опубликовано 9 апреля, 2011 · Жалоба Зачем схема? И так нормально. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GYUR22 0 9 апреля, 2011 Опубликовано 9 апреля, 2011 (изменено) · Жалоба проблема в том что - самые высокие значения ацп и низкие - не влияют друг на друга влияют от ~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); } Изменено 9 апреля, 2011 пользователем GYUR22 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nk@ 0 9 апреля, 2011 Опубликовано 9 апреля, 2011 (изменено) · Жалоба 1.Проверьте сперва цифровым вольтметром напряжения на ножках контроллера, чтоб убедиться, что аналоговая часть работает корректно. 2. Попробуйте сэмплировать каждый канал по 3-4 раза, может результаты такого теста дадут доп. информацию к размышлениям. 3. Я бы попробовал вставить задержку после переключения канала и началом сэмплирования. И "поигрался" с ней, наблюдая результат. Например, так: //set ADC channel ADMUX=(ADMUX&0xF0)|adc_ch; //delay _delay_us(100); //Start conversionio with Interupt after conversion ADCSRA |= (1<<ADSC)|(1<<ADIE); PS: Лично я с такой проблемкой не сталкивался, правда я ни разу не использовал мультиплексор, мне нужен был только один канал. Изменено 9 апреля, 2011 пользователем nk@ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aleksey_gregul 0 9 апреля, 2011 Опубликовано 9 апреля, 2011 · Жалоба Как подключены AVCC, AREF? Есть ли в их цепи какие-то фильтры? По земле нету перекосов? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GYUR22 0 9 апреля, 2011 Опубликовано 9 апреля, 2011 · Жалоба аналоговая часть работает корректно - по крайней мере с очень большой долей вероятности тк мерил напряжение на ногах оно не скачет (при вышеописанных действиях) по земле нет вроде особых проблем - питальник в другом конце платы на 3 напряжения 5/12/15. т.е. просто показания не скачут и никаких левых нагрузок на аналоговых напряжениях нет. avcc подключено через фильтр 100uH+220uF +aref на 0.1 сидит - используется референс с avcc. 3. Я бы попробовал вставить задержку после переключения канала и началом сэмплирования. И "поигрался" с ней, наблюдая результат. насчет задержки - интересная тема я тоже думал но не пробовал - спасибо в понедельник попробую отпишу Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
artemkad 53 9 апреля, 2011 Опубликовано 9 апреля, 2011 · Жалоба Посмотри на наличие на других портах камня напряжений превышающих питающее. В т.ч. и на цифровых. Кроме того, не забывай о том, что влет в Sleep автоматом запускает преобразование АЦП... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GYUR22 0 10 апреля, 2011 Опубликовано 10 апреля, 2011 · Жалоба sleep не использую- и так нормально напряжения на ногах проверю - хотя мало вероятно тк там же защитные диоды а ноги подключены либо на 5в либо через резисторы 10к Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GYUR22 0 11 апреля, 2011 Опубликовано 11 апреля, 2011 (изменено) · Жалоба короче не помогает задержка даже если оставить только нулевой канал все равно влияют другие софтварно отключенные каналы и именно в диапазоне ~30-80% буду щас их железно отпаивать и смотреть походу это дроссель avcc (=ref у меня) влияет как оказалось стоял чип дроссель 1210 -100uH - у него сопротивление ~20Ом - падало до 40мв поменял на выводной 100uH ~0608 все в порядке - <2.5мв Изменено 11 апреля, 2011 пользователем GYUR22 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ARIM 0 11 апреля, 2011 Опубликовано 11 апреля, 2011 · Жалоба На схеме не видно, но показалось, что на выходах ОУ стоят 10к резисторы. Зачем?? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GYUR22 0 11 апреля, 2011 Опубликовано 11 апреля, 2011 · Жалоба для защиты входов ацп от перенапряжения - чтобы мегу не сожгло если на выходе вдруг будет 15в аналогового питания Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ARIM 0 11 апреля, 2011 Опубликовано 11 апреля, 2011 · Жалоба для защиты входов ацп от перенапряжения - чтобы мегу не сожгло если на выходе вдруг будет 15в аналогового питания рекомендуется меньше 10к выходное сопротивление источника сигнала. Смысла тогда нет в повторителе ИМХО Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GYUR22 0 11 апреля, 2011 Опубликовано 11 апреля, 2011 · Жалоба об этом думали ~5к6 поставить но решили пока в угоду надежности оставить Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_noise 0 11 апреля, 2011 Опубликовано 11 апреля, 2011 · Жалоба С резисторами неубедительно. Если посреди схемы ВНЕЗАПНО появляются 15 вольт какого-то питания, то это, как бы, ну. Да, резисторов в каждый провод навтыкать. Для защиты каждой детали от каждой другой детали. Зато вспомнил про другие резисторы я. Которые internal pull-up. И которые автоматически сами собой отключаться не обещали, когда хочем мерять АЦП ту же ногу. Конкретно за сабжёвую микросхему про это не гарантирую, а вообще есть такая тема. (изображение схемы профессионально подготовлено к вылаживанию, детектед: чтоб ни один шпиён, зато наглядно и не при...дёрёшься) (и ещё детектед: этой весной стало модно топеки про АЦП AVR заводить разные одинаковые, но различающиеся точным названием микросхемы, автором и разделом) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться