я делал на захвате таймера 1, там есть аппаратный фильтр — здорово помогает от "иголок" - тонких выбросов с датчика иногда появляющихся от ЭМ наводок и при резком изменении освещенности. А т.к. код передаётся 1раз - то даже одна помеха и код не совпадёт, а команда не будет выполнена.
плюс контроллер может быть занят, сигнал в этом случае всёравно будет принят.
в других условиях я бы может сделал по другому, но, прерывания заняты (одно следит за сетью для включения симисторов, другое следит за сигналом энкодера ручной регулировки), энергии мало и МК восновном спит.
плюс для защиты от помех сужены диапазоны сигналов старта, 0 и 1, повтор реализован по наличию сигнала в течении определенного времени (ограничено прерыванием по совпадению Т1.)
Добавлено after 17 minutes 32 seconds:
потом был добавлен антишум энкодера (его провод (положение определяется по сопротивлению 0, 4кОм, бесконечность) пролегает рядом с питанием 220в, что тоже не айс, оказалось там помех валом... пришлось контроллер будить (чтобы отсеивать помехи и до и после прерывания), но для экономии снизил ему тактовую до 62кГц (потом правда до 125кГц поднял, а то аппаратный фильтр Т1 оказался груб на такой низкой частоте).
Добавлено after 15 minutes 8 seconds:
Т0 следит за временем воздействия на симисторы - ток им нужен немалый, а питания кот наплакал - 1мкФ балластный конденсатор от сети (на контроллер и 5 симисторов). ещё выяснилось, что для разных ламп открывать симистор надо в разный период (накаливания сразу при переходе 0, а те, что содержат выпрямитель и конденсатор внутри — немного позже т.к. ток в них появляется не сразу) сделал окно пошире и проблема ушла (потому и кондей 1мкФ, а не 0,4, как было изначально)
Добавлено after 8 hours 55 minutes:
вот ещё попалось в соседней теме про программные задержки: [uquote="WiseLord",url="/forum/viewtopic.php?p=3281710#p3281710"]Имхо, если в программе есть прерывания, то все эти суперточные задержки превращаются в тыкву. А прерывания есть в любой мало-мальски сложной программе.[/uquote]
