На первый взгляд работает всё как надо, вводим в монитор порта номер светодиода и он загорается на несколько секунд. Но почему-то при включении платы, например после пропадания электричества, сначала рандомно загораются светодиоды, пока не подадим первую команду в монитор порта. Как избавиться от этого паразитного явления ? Я сам скетчи писать не умею, код мне помог написать форумчанин, но он не знает как избавиться от этого эффекта. Пробовали в сетап добавить строки выключающие светодиоды сразу после включения платы и да, они выключаются, но сам факт что они продолжают рандомно включаться на доли секунд портит всё. Дело в том, что вместо светодиодов у меня подключены замки на соленоидах и они успевают открыться за эти доли секунд
Хорошо, тогда есть другое предложение. Почитать даташит используемого сдвигового регистра и подключить его правильно. Например, использовать пин OE по назначению – для включения и выключения выходов, а не тупо сажать его на землю, оставляя выходы вечно включёнными.
Улыбнуло) Нет, не так… я ржу!!!
Причём все телодвижения по обнулению регистра лучше бы осуществлять в самую первую очередь в Setup, до инициализаций всего остального.
Как вариант использовать RC-цепь на вывод ОЕ, чтоб гарантированно был запрещён выход на нужное для запуска кода время.
Не надо в скутче ни чего править. Не поможет это. Вам же сказали, поставте на OE вывод микросхемы 74HC595 RC цепочку ёмкомтью на плюс резистором на минус. Думаю керамики 0,1 мкФ и резистора 1кОм вполне хватит (средняя точка на ОE - 13 нога)
Лучше книгу купи по Си или по МК, толку больше будет.
Просто между OE и землёй резистор на 10-20кОм воткни, и между OE и плюсом питания конденсатор на пару микрофарад(это от балды, надо считать). На пару секунд после включения выходы регистра будету отключены. @SAB опередил)
Калькулятор говорит что при 10кОм и 1мкФ постоянная будет 10мс.
Если скетч прошивается собственным загрузчиком - не поможет: там после включения/перезагрузки работает загрузчик - примерно 1 секунду ждет, не соберется его кто-нибудь прошивать. Если за секунду не успел - передает управление скетчу.
Нужно прошивать программатором со стиранием загрузчика, тогда скетч будет работать сразу после включения.
Если свободных пинов достаточно, то я бы оставил управление ОЕ за микроконтроллером.
А чтобы не лезла ерунда на выходы при старте - притянул бы ОЕ к питанию резистором 10к
(то есть наоборот к предыдущим советам)
Хотя тоже не известно при включении контроллера, что у него будет в первые милисеунды на выходе. Скорее всего может и 0 оказаться на управляющем выходе. И ни какая подтяжка не сработает. А вот цепочка даст гарантированную задержку, когда уже из сетапа можно будет начать управлять регистром.
Нет, об этом производитель говорит. Вот, например:
Иначе, представьте ситуацию - У вас некоторые из портов подключены напрямую к питанию или земле. И вот, во время неисповедимых переходных процессов на них появиться 0 или 1? Что произойдёт?
То, что происходит у ТС.
Ни один производитель не даст гарантию на выход контроллерных напряжений на пинах на бесконечно малом отрезке времени, пока фронт напряжения источника питания растёт от 0 до номинала. А этот отрезок у разных блоков питания тоже очень сильно отличается. Вот мы про это и говорим. Транзисторы выходных каскадов контроллеров выдерживают мгновенные перегрузки, даже если будет конфликтная ситуация 0/1. А вот регистры могут воспринять это не однозначно. И опять ТС получит такой же эффект. Но когда будет стоять RC, то заряд ёмкости будет нарастать пропорционально с нарастанием напряжения питания, и выходы регистров будут в закрытом состоянии. ИМХО я за RC.
Я подозреваю что переходные процессы учтены на физическом уровне.
По крайней мере осциллограф в ждущем режиме не видит ничего абсолютно.
Все модули и регистры принудительно в нуле некоторое гарантированное время. Ежели питание нарастает медленно, то для этого существует второй эшелон защиты. Это BOD.