Аккуратная инициализация 595-го сдвигового регистра

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Если ошибся разделом, поправьте, кто может.

На соседнем форуме возник вопрос, как в момент включения питания «придавить» 595-ый сдвиговый регистр, чтобы на его выходах не было свистопляски на то время, пока ардуина не «прочухается» и не установит ему нужные значения.

Классический расово-верный подход: притянуть пин OE (13-ый пин сдвигового релистра) к питанию внешним резистором. Тогда на нём при включении питания появится высокий уровень и все выходы регистра окажутся в высокоимпедансном состоянии. А когда правильные значения будут установлены, подать на пин OE низкий уровень и спокойно работать.

Но такой подход требует лишнего пина, а пины – ресурс дефицитный – жаба душит! Обычно народ тупо заводит OE на землю. Но тогда – между включением питания и инициализацией регистра свистопляска на его выходах обеспечена.

Хочу показать. Как это можно сделать без использования лишнего пина.

Собираем такую схему (я физически не собирал – моделировал в протеусе):

В момент включения питания (тумблером) конденсатор разряжен и потому напряжение на правой (по рисунку) обкладке конденсатора сразу же подскакивает практически до напряжения питания (появляется тот самый HIGH, который нам нужен, чтобы выходы сдвигового регистра оказались в высоимпедансном состоянии). По мере зарядки конденсатора, напряжение на правой обкладке спадает до нуля и тогда с регистром можно работать. Фокус в том, чтобы успеть проинициализировать регистр за то время, пока там держатся HIGH. А для того, чтобы успеть, нужно знать сколько у нас времени. 

Слава Богу, время, которое там продержится HIGH рассчитать нетрудно. LOW на выходе появится тогда, когда напряжение упадёт до 0,3 от напряжения питания. Т.е. время здесь приблизительно равно постоянной времени.

T = C1 x R2

Если С1 в микрофарадах, а R2 – в килоомах, то время получится в миллисекундах.

Таким образом, при тех номиналах, что у меня на схеме, время получается 0,22*10 = 2,2 миллисекунды.

Собственно всё. Проверяем в протеусе. Осциллограмма в момент включения:

Здесь клетка по вертикали соответствует 0,5 вольта, а по горизонтали – 1 миллисекунде. Линии HIGH и LOW нарисованы на 3В и 1,5В соответсвеено (см. даташит на ATmega328P, разд. 30.2, стр. 313)

Как видите, время более или менее правильное.

Это приём можно применять везде, где нужно установить пин в некоторое состояние на некоторое время. например, именно так «нажимает на reset ардуины» микросхема CH340 в китайских «Нанах».

b707
Онлайн
Зарегистрирован: 26.05.2017

Евгений, 2.2 мс явно ОЧЕНЬ мало. На практике "холодная" загрузка Нано занимает не 2-3 - а сотни миллисекунд. Если бы выходы 595 находились  в случайном состоянии всего пару мс - никто бы этого и не заметил. А так при включении четко видно, что случайные выходы сдвигового остаются включенными значительное (по меркам МК) время - имхо десятые секунды.

Если надо - могу провести натурный опыт, у меня валяется планка с двумя 595 и светодиодами на выходах.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Так формула ж приведена, кому сколько надо, тот столько и посчитает. Нужны сотни миллисекунд - ставим десятки микрофарад да и резистор можно побольше (до полусотни-сотни килоом мне кажется, нормально).

b707
Онлайн
Зарегистрирован: 26.05.2017

ЕвгенийП пишет:

Так формула ж приведена, кому сколько надо, тот столько и посчитает.

ну так-то да :) Просто раз тема в Песочнице, логично для примера использовать близкую к реальности постоянную времени :)

Будет время на выходных - померяю. сколько знаимает старт Нано от подачи питания до инициализации выходов 595 регистра... если это кому-то интересно.

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Мне интересно

bwn
Offline
Зарегистрирован: 25.08.2014

Так вроде, на разных загрузчиках, разное время, или не?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ну, я во, никогда не ставлю загрузчики в готовое изделие, так что меня интересует инициализация самого контроллера и не более того. А там как раз единицы миллисекунд, а то и меньше. Отсюда и мой пример на 2 мс.

А так вообще, ну разное, и что? Под своё издели подбираешь правильный конденсатор и пользуешь.

ВН
Offline
Зарегистрирован: 25.02.2016

Ставить 595-е регистры и при этом испытывать недостаток одного пина для управления ОЕ представляется очень надуманной ситуацией.

Но даже и в таком случае, решений - миллион, вопрос только в том, что каждый случай это конкретная схема.

Предложенный вариант не годится на все случаи жизни, бо входное напряжение отнюдь не функция Хевисайда, а как повезет.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ВН пишет:
входное напряжение отнюдь не функция Хевисайда, а как повезет.
"Жизнь такова, какова она есть, и больше - никакова" :(

Когда я как-то процитировал эту фразу в компании двух американцев, с которыми мы топили в пиве выездное поражение Акул от Далласа, повисла пауза с минуты две, потом один из них спросил "What did you say? Kinda fucking zen?" и пока я думал, что ответить, другой ему ответил: "This should be a Russian code for "Shit happens"" :)