Словил вчера интересный глюк, пол дня ковырялся. Казалось бы, схема простейшая, кода 600 байт.
Суть такова. Есть пульт для управления простым коллекторным двигателем, связка Attiny24+L293.
Спойлер
Управление: две кнопки (PA1, PA2) крутят двигатель с максимальной скоростью по/против часовой стрелки, две кнопки (PA3, PA7) крутят со скоростью заданной переменником на PA0. На PA4-5-6 - светодиоды, один горит постоянно, два индицируют вращение двигателя в соответствующую сторону. На PORTB подключен L293, оба моста запараллелены, управляются IN1,4 / IN2,3 - направление, EN1,EN2 - ШИМ от Таймера 0. Входы драйвера подтянуты к земле через 10к. Кнопки подтянуты внутренней подтяжкой контроллера, на входах кнопок и переменника конденсаторы 0.1мкФ на землю (антидребезг). Питание 12В, 7805 (танталы и керамика с обоих сторон) + керамика по питанию у самих микросхем. Сброс контроллера через RC цепочку.
Cхема:
Спойлер

Все это прекрасно работало, но понадобилось поставить энкодер вместо регулятора скорости с кнопками, кнопки вращения на макс. скорости остаются. Не вопрос, убираем переменник, вместо кнопок PA3,PA7 ставим энкодер. Немного переделал логику управления драйвером L293, зная качество энкодеров, добавил программный антидребезг, в симуляторе проверил - работает как и ожидалось. Собрал на новенькой плате, все подключил, проверяю, кнопки работают как надо, а вот энкодер дурит, по индикации вижу что крутит то нормально, то в случайную сторону, то в обе сразу, догадался что это сброс (после сброса все индикаторы горят секунду, специально делал - проверка индикации). Стал искать в чем затык. Методом исключения выкинул/закомментировал все что касается драйвера двигателя, все что касается системного таймера (делает 1мс интервал для управления индикаторами и подсчета антидребезга), в итоге оставил вообще только кнопки и индикаторы, кода - 10 строк ассемблера - все равно при вращении ручки - сброс!. Перетыкал осциллографом всю плату (точнее 2 платы, т.к. нужно было две штуки сделать, на обоих эффект один) - ни просадок, ни помех ни по питанию, ни по входам, ни по выходам. В итоге эффект пропал только после отключения подтяжки входов энкодера, но он без них естественно не работает. Тогда я отпаял емкости на этих входах, а подтяжку вернул - все заработало как надо
Я так и не понял что это было. Конденсаторы нормальные, энкодеры обычные. Тем более что точно такая же схема подключения с практически идентичным кодом прекрасно работает в другом устройстве на ATmega8/88 (но там изначально был энкодер, т.к. управляет он уже драйвером с шаговым двигателем).

PS: Пытался так и эдак представить схему с конденсаторами, энкодером и входами контроллера чтобы получить какую-то недопустимую комбинацию напряжения на входах, так и не смог, но тут точно какая-проблема в процессе заряда-разряда конденсаторов через подтяжку и контакты энкодера.
Неправильно собранная из неисправных деталей схема нуждается в отладке и сразу не работает... (С)