Цифровой индикатор для программируемого терморегулятора муфельной печи

HiSlope_338306

Разрабатывая цифровой индикатор для своего программируемого терморегулятора, который будет использоваться для управления мощностью ТЭНов в моей муфельной печи, столкнулся с проблемой, о которой в интернетах почему-то умалчивается. Более того, все схемы цифровых семи- восьми-сегментных светодиодных индикаторов с подключением к программируемому микроконтроллеру приведены с ошибкой!

Схема индикации моего цифрового терморегулятора строится на базе сдвигового регистра 7HC595. Он позволяет значительно сократить количество задействованных выходов микроконтроллера благодаря использованию последовательной передачи данных.

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

Вот, для примера, одна из схем, которую я сначала собрал:

888-serial2

 

Вроде бы на первый взгляд все замечательно — схема позволяет с использованием всего двух регистров 74HC595 управлять сразу 9-ю разрядами восьми-сегментных индикаторов. Остается только написать программу — и всего делов!

Но давайте обратим внимание на подключение этой схемы к микроконтроллеру и сверимся с официальным datasheet на микросхему 74HC595. Согласно документации, выводы Q0-Q7 отображают информацию, хранящуюся в регистре, когда на входе OE установлен низкий уровень. А на схеме вход OE соединен напрямую с входом STORE, дублируя его состояния.

Однако, при загрузке данных по шине DATA на вход STORE должен подаваться низкий уровень. Вместе с ним на входе OE также будет логический 0, что разрешит индикацию. Но в это время же идет загрузка данных! На выходах второго регистра будет в реальном времени отображаться поток данных с выхода первого регистра Q7′ (Q7S по datasheet). Но ведь второй регистр служит в качестве ключа, управляющего номером отображаемого в данный момент разряда цифрового индикатора! В результате индикатор будет беспорядочно моргать всеми своими разрядами, создавая эффект сбесившегося электровеника.

В то же время после загрузки данных линию STORE обычно переводят в высокое состояние, что также продублирует и вход OE. А это приведет к потуханию цифрового индикатора. Спрашивается, что толку мы загружали данные в регистр? Чтобы потом его сразу же погасить? Бредятина.

Пришлось на макетке самому экспериментировать. Линией OE поначалу начал управлять отдельно. Но для этого пришлось отдать целый цифровой выход микроконтроллера. А это жуткое расточительство, учитывая что в разрабатываемом мной терморегуляторе для муфельной печи должно быть два канала для раздельного управления двумя ТЭНами или даже сразу двумя муфельными печами.

Приглядевшись, я заметил, что управление входами STORE и OE идет как бы в противофазе. Поэтому их действительно можно объединить, но не напрямую, а через инвертирующий ключик на транзисторе. В итоге должно получиться примерно так:

8888-led

 

Чтобы не загромождать схему, я нарисовал всего один восьми-сегментный светодиодный индикатор, но, надеюсь, понятно, что их четыре, и каждый подключен общим катодом к своему транзистору. Из схемы видно, что в зависимости от состояния выходов второго регистра 74HC595, открывается тот или иной транзистор, зажигая нагруженный на него разряд индикатора.

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

Чтобы зашить в регистр число, мы передаем его побитно, устанавливая нужный бит на входе DATA и «погружая» этот бит в регистр подачей короткого импульса на вход SHIFT. Биты постепенно сдвигаются от Q0 к Q7, выпихивая друг друга сзади. Когда мы напичкали регистр нужным количеством бит, нужно захлопнуть за ними дверку подачей импульса на вход STORE. Чтобы биты начали отображаться на выходах, нужно на OE подать низкий уровень (или нолик), как я уже говорил выше. У регистра есть также вход RESET, но вместо него можно просто понапихать полон регистр нулей, тогда нам не потребуется использовать еще один выход микроконтроллера. RESET обычно просто вешают на плюс питания Vcc.

Это знание далось мне в результате почти двух суток бесперерывного макетирования, пайки и ценой двух подпаленых регистров 74HC595. Благо они по 8 рублей за штучки :)

PS: Справедливости ради надо добавить, что в моей схеме также не хватает токоограничивающих резисторов в цепях базы каждого транзистора, и также по одному последовательно с каждым светодиодом. Просто не стал загромождать схему. Кроме того, резисторы также нужно подбирать исходя из предельного тока светодиода и тока базы транзистора. Себе я поставил по 200 Ом — вроде ничего не греется.