Результат ADC в AVR зависит от выхода ни другом пине?! Нужен совет.

Volante24
Алксандр:

Наблюдал такое же перекрестное влияние между входами АЦП на атмеге16, в проекте зарядного устройства, которое делали совместно с VAD64.

При изменении напряжения на соседнем порту значение АЦП менялось на несколько единиц.
Но влияние было не на всех портах и не на всех входах АЦП, а только на каких-то. Видимо, зависит от того какая периферия и как шарится.

На PA4 у меня ни хрена не вышло, все точно также, как и на PA7, если еще не хуже. А вот на PB0, вроде, все в порядке (да и порт другой). При этом вроде вчера проверил, что PA5 и PA6 не оказывают влияния. Ну и дела…

И ведь это не разные входы АЦП смешиваются, а цифровой выход влияет на АЦП! Ладно, пока попробую этот вариант, а как-нибудь в другой раз, наверное, нужно будет заменить микроконтроллер. Как-то не по себе, что на такое вот можно легко напороться с этими Атмелями. Интересно, часто такие интересные экземпляры попадаются?

Chekhov

Я по ссылке пройти не могу.
Может выложите хотя-бы кусок кода, где идёт обработка ( считывание ) ADC.
Т.е. что-то типа

interrupt [ADC_INT] void adc_isr(void)
{
// Read the AD conversion result …

Т.е. Есть ли там
**************************
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);

**************************

И не забудьте, что ATtiny26 - довольно старый МК

Volante24
Chekhov:

Я по ссылке пройти не могу.
Может выложите хотя-бы кусок кода, где идёт обработка ( считывание ) ADC.

Есть ли там
**************************
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);

**************************

На новом форуме ссылка rcopen.com/forum/f59/topic23532, но кода там нет.

Сама программа на ассемблере, не в С. Никакого Delayя там нет, да и чего его вводить, когда потенциометр вообще не трогается, одно и тоже напряжение в течение минуты (в моих тестах сейчас); gain не меняется, только канал. Просто ADC постоянно делает конверсию в фоновом режиме. По прерыванию ADC complete он входит в ISR, где читает полученное значение, записывает в SRAM, меняет канал по кругу из трех, инициирует следующую конверсию и выходит из ISR. Да, каждая новая конверсия extended типа, которая занимает 25 ADC клоков.

Chekhov

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

Ну тогда или опять перепаивать, или спросите у Vad64

Volante24
Chekhov:

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

Ну тогда или опять перепаивать, или спросите у Vad64

Что спросить? Что-то я уже спрашивал. А программа у меня перед глазами…

Delay программой тут делать нельзя, иначе остальное не будет вовремя сделано. И какие тут помехи? Я понимаю, если бы речь шла о последнем десятом бите. Так ведь проблема в 5%!

Chekhov:

И не забудьте, что ATtiny26 - довольно старый МК

Да я и сам не очень молодой…

serg111

Вполне возможно что просто брак. Применяем их по паре тыс. в год. Бывает что и reset не работает 😃 . Вроде ты говорил что у него частота на 10 процентов не та, то тогда точно брак. или фича? Надо проверить…

Chekhov

А в какую сторону изменяется значение(т.е. постоянно в одну или в разные).

Это , я думаю, один из ключевых моментов.

Volante24
serg111:

Вроде ты говорил что у него частота на 10 процентов не та, то тогда точно брак. или фича?

Он всегда загружает калибровочный байт частоты на 1МГц, а я работяю на 8МГц. Так что формально криминала нет, по идее я должен сам загружать нужную калибровку на других частотах. Но до сих пор всегда работало без какой-либо перекалибровки (во всяком случае, жалоб и от других любителей, вроде, не поступало). А вот именно этот экземпляр подложил мне такого поросеночка. Для экпертов это, наверное, раз плюнуть, а я-то о таких тонкостях понятия не имел – не работает, и все! Да еще плюс к тому другие глюки. Мне вообще нужно памятник при жизни, что я расчухал, что к чему…

Chekhov:

А в какую сторону изменяется значение(т.е. постоянно в одну или в разные).

Это , я думаю, один из ключевых моментов.

Значение, выдаваемое АЦП, меняется в одну сторону (и для канала 1, и для канала 2 – что для канала 0, сказать не могу – это не так наглядно проявляется). Это в зависимости от состояния PA7. В какую сторону его тягал PA4, я как-то не засекал. Но тоже в одну сторону для обоих каналов.

А какой примерно процент брака по вашей статистике?

Chekhov

Простов этом случае этот ваш процент можно поменять программно ( не самый плохой вариант ).
А светодиод на землю посажен ?
И есть ли ёмкости на 18 и 19 пинах вообще ?
К стабилизатору на 3V прицеплены только МК и потенциометры ?

Volante24
Chekhov:

в этом случае этот ваш процент можно поменять программно.

Именно так я его и смог запустить. Так что само по себе сейчас это уже не проблема.

А светодиод на землю посажен ?
И есть ли ёмкости на 18 и 19 пинах вообще ?
К стабилизатору на 3V прицеплены только МК и потенциометры ?

На нее, родную, через 820 ом. Емкости есть, но какие – на них не написано.
К стабилизатору на 3V прицеплены потенциометры, гироскоп и AREF самого ATTINY26L.

Chekhov

Ну значит просто МК фиговый попался.
Хотя я бы попробовал Delay на 10 микросекунд поставить.

Через недельку-другую буду делать один из вариантов регулятора для Speed400 на ATtiny45 - посмотрю, помогает ли этот Delay на самом деле или нет. Просто автогенератор кода в CVAvr его обычно ставит.

serj
Volante24:

После замены ATTINY26L в SOIC корпусе (rcopen.com/forum/f8/topic127972) появилась странная проблема: похоже, результат измерения ADC внешнего напряжения на пинах 18 и 19 [PortA Pins 1 и 2] (возможно, и на пине 20 – трудно проверить) зависит от состояния пина 11 [Port A Bit 7] (он работает на выход и управляет LED, ток не более 2.5ma).

В даташите указано черным по белому: во время измерения АЦП ноги порта АЦП не должны переключаться, от себя добавлю что и грузить этот порт нельзя. Связано со схемотехникой кристалла, как собраны входные цепи АЦП (УВХ и мультиплексор)

serg111

Volante24 Тут есть еще одна фича, что после переключения канала, в первом преобразовании получаешь почти всегда хрень, поэтому оно должно быть холостым, тока второе дает правильный результат. Но твою проблему проверю и отпишусь.

Chekhov

Но у него же значения зависят от того горит светодиод или нет, А за это время происходит множество преобразований и если бы там действительно каждый раз хрень получалась, то ваще ничего бы не работало, или я не совсем прав ?

Volante24
Chekhov:

Но у него же значения зависят от того горит светодиод или нет, А за это время происходит множество преобразований и если бы там действительно каждый раз хрень получалась, то ваще ничего бы не работало, или я не совсем прав ?

По-моему так. За каждые полсекунды горения или негорения LEDа происходит около 2.5 тысяч преобразований, каждый раз по другому каналу. Но если бы проблема происходила только в момент переключения LEDа, этого бы было 100% не заметить. На практике результат читается один раз в 2мс (АЦП значение по каждому каналу обновляется каждые 0.6мс).
Вероятность неправильного прочтения из-за переключения составляет 0.2мс/.5сек=1/250 (по каждому каналу). Единичное же неправильное входное значение приводит к импульсу на мотор сервы 2мс. Такой короткий пульс, если он единичный, был бы незаметен, а среднее значение 1/250 не может заставить мотор вращаться. Так что дело точно не в переключении, а в состоянии пина!

serg111:

Volante24 Тут есть еще одна фича, что после переключения канала, в первом преобразовании получаешь почти всегда хрень, поэтому оно должно быть холостым, тока второе дает правильный результат. Но твою проблему проверю и отпишусь.

Наверное, так. Но я, следуя Vad64, делаю “extended conversion”, которое занимает почти вдвое больше времени (25 циклов АЦП таймера). Наверное, оно для того и придумано, чтобы ждать нужное время? Эти 12 лишних циклов дают примерно 100мкс задержку…

serj:

В даташите указано черным по белому: во время измерения АЦП ноги порта АЦП не должны переключаться, от себя добавлю что и грузить этот порт нельзя. Связано со схемотехникой кристалла, как собраны входные цепи АЦП (УВХ и мультиплексор)

Так я это заметил, именно потому и спрашиваю людей с практическим опытом. Я не обращал на это внимания, поскольку в любом случае последняя пара битов меня здесь нисколько не волнует. Народ, вроде, это обычно игнорирует, и проблем не наблюдает… А главное, у меня собрана тестовая плата с панелькой для того же ATTINY26 в DIPе, и там все работает без фокусов. Да и у других вроде таких проблем не наблюдалось.

И вот еще: на этом же порте А еще два пина (PA5 и PA6) используются на выход, причем серьезно – переключаются (потенциально) два раза в 2 мс, если есть сигнал на серво мотор. Поскольку тут, таким образом, есть обратная связь (сигнал на этот мотор зависит от показаний АЦП), предсказать поведение затруднительно, но я думаю, был бы бардак и мотор вряд ли бы спокойно остановился, раз начав работать. А как раз с этим, похоже, в порядке…

serg111
Volante24:

А главное, у меня собрана тестовая плата с панелькой для того же ATTINY26 в DIPе, и там все работает без фокусов.

Меняй камень. Благо он 20 рупий стоит. Проверить фичу седня не получилось, завтра 100% проверю и отпишусь.

Volante24
serg111:

Меняй камень. Благо он 20 рупий стоит.

Где ж это так? Чтой-то я меньше, чем за 80, его не видел (за наличные, если меньше сотни штук!)

Да дело вообще не в сотне рублей (у меня теперь есть запасные – два мне просто подарили); проблема в их выпаивании и впаивании на плату! Это само по себе морока, плюс каждый раз при этом большой шанс повредить какую-нибудь дорожку, а вдобавок, каждый третий раз, когда эту плату берешь в руки, какой-нибудь из проводков (а их: шесть к серво потенциометрам, четыре – к серво моторам, шесть к ISP разъему, два питания, четыре на выход к двум бесколлекторным ESC, да еще антенна). Не говоря уже про вытаскивание из корпуса и втискивание обратно. С каждым обрывом при этом создается все более сильное впечатление, что процесс просто не сходится…

serg111

За нал хз по чем, по безналу брали и много. В ЭФО самые нормальные цены были.
Проверял седня ацп на порту А. Ниче криминального не заметил, ноги дергаеш ацп дрожит на 1-2 единицы счета, не дергаеш стоит мертво. камень …26-16SU + кварц на 5Мгц, на рефе тл431. Кстати, есть такой tiny261(пин в пин tiny26), у него есть аппаратное “мертвое время” и 3 канала шима, и компаратором можно рубить шим, делая тем самым защиту по току(поцикловку) с миркоскопическими задержками.

Volante24
serg111:

Проверял седня ацп на порту А. Ниче криминального не заметил, ноги дергаеш ацп дрожит на 1-2 единицы счета, не дергаеш стоит мертво.

Что ж, похоже, диагноз прорисовывается: каменная болезнь…

Так часто там по вашему опыту чипы с глюками попадаются?

Кстати, есть такой tiny261(пин в пин tiny26), у него есть аппаратное “мертвое время” и 3 канала шима, и компаратором можно рубить шим, делая тем самым защиту по току(поцикловку) с миркоскопическими задержками.

Интересные данные, буду иметь в виду… Но пока у меня лежит пара десятков ATTINY26L про запас, пока буду, в основном, на них ориентироваться.

P.S. Всех с наступившим Пятницей 13-го!😈

Volante24
serg111:

Меняй камень.

Нашел еще одну “фичу” (говоря политически корректно). Прочел все калибровочные байты, вписал нужный, на 8МГц (он на 0А меньше, чем на 1МГц) – и нифига! Сигнала как будто и в помине нет. А поставил, как сам подобрал, наоборот, на 0А больше, чем на 1МГц – и все прекрасно работает. Ну и камешек за пазуху попался!

Ну ничего, я таки его добил – со всеми перепиновками и перекалибровками верт теперь порхает (ну, так, условно говоря – пока как бы хоппит саранчей). И без выпаивания, так его разэтак! Вот только не знаю, что в следующий раз делать – полностью проверять функционирование всех AVRов перед впаиванием в схему?