Анатолий Беляев (aka ). Персональный сайт
Анатолий Беляев (aka Mr.ALB). Персональный сайт
Сделал небольшой генератор для катушки Мишина и мне понадобился таймер с фиксированными значениями времени. Для его реализации воспользовался Arduino Pro Mini. Таймер получился, в некотором роде, универсальным, его можно использовать не только для включения генератора для катушки Мишина, но и для управления разными нагрузками или устройствами, вплоть до нагрузок на
Таймер
Подразделы
Описание
Индикация времени осуществляется на четырёхразрядном семисегментном индикаторе.
Таймер имеет две кнопки управления. Первая кнопка позволяет устанавливать фиксированное время, а вторая кнопка запускает или останавливает отсчёт времени. При пуске таймера на выходном порте устанавливается низкий уровень. При останове таймера на выходном порте устанавливается высокий уровень. После пуска таймера, по прошествии установленного времени, выдаётся звуковой сигнал, сообщающий об окончании пройденного времени и происходит отключение на выходном порте (устанавливается высокий уровень) .
К выходному порту дополнительно подключен модуль с реле, которое имеет выходные переключающие контакты, что позволяет подключать к таймеру внешнюю нагрузку с высокими напряжениями (
220 В) . Это позволяет, к примеру, управлять устройством по приготовлению живой и мёртвой воды, или любыми нагревателями или охладителями, или какими-то другими устройствами по желанию.
Схема Таймера
Схема таймера представлена на картинке ниже. Не отображён блок питания, так как возможно использование любого подходящего блока питания на выходное напряжение 5 В и ток 150 мА.
Pic 1. Схема электрическая принципиальная
Схема собрана на Arduino Pro Mini 328 (можно использовать любую: Arduino UNO, Arduino Nano и подобные им) . Более оптимально советую применить Arduino Pro Mini 168, так как скетч использует всего 2190 байт. У меня такой под рукой не оказалось, использовал то, что было. Впоследствии заменю.
Для индикации времени используется четырёх разрядный семисегментный индикатор SH5461AS с общим катодом. Управление этим индикатором осуществляется через сдвиговый регистр на микросхеме SN74HC595N, что позволяет уменьшить количество портов для управления индикатором. Индикация динамическая.
К выходному порту OUT (Arduino pin 9; клема X7) подключается минус от генератора для катушки Мишина. Плюс питания генератора подключается к клеме X6. При пуске таймера на порте устанавливается низкий уровень, что включает генератор. При отключении – на порту устанавливается высокий потенциал и генератор выключается. К порту OUT так же подключен вход от модуля с реле, через его контакты X3 (NC), X4(COM), X5(NO) можно управлять внешними нагрузками, или более мощными нагрузками.
Таймер запитывается от сети
220 В через импульсный блок питания. В моём случае был под рукой блок на +9 В, поэтому после него установил линейный стабилизатор на микросхеме LM317T с выходным напряжением +5 В. Этим напряжением одновременно запитывается и Ардуино, и модуль с реле, и генератор для катушки Мишина. Оптимальным же вариантом является готовый блок питания на +5 В. Как такой прибудет по почте из Китая, то переделаю.
Кнопки управления сенсорные. Использованы, чтобы убрать толкатели и лишний код программы на устранение дребезга. Кнопки TTP223 достаточно чувствительные и легко срабатывают через оргстекло толщиной в 4 мм.
Скетч
Ниже представлен скетч таймера. Файл со скетчем можно скачать в подразделе Приложение.
Реализация
Таймер выполнен в стиле Ардуино . Две пластины из оргстекла, скреплённых саморезами и стойками из пластиковых трубочек, определяют внутреннее пространство устройства. В этом пространстве размещены платы с: Ардуино, модулем индикации, модулем реле, модулем блока питания, сенсорными кнопками, клавишей включения и платой с генератором синусоидального сигнала для катушки Мишина. Общие размеры устройства: 100 * 63 * 42 мм.
Вначале был изготовлен модуль индикации для четырёхразрядного семисегментного светодиодного индикатора типа SH5461AS, или ему подобного с общим катодом у разряда. На небольшой плате установлена панелька DIP16 под микросхему сдвигового регистра SN74HC595N. Сверху этой микросхемы в гнездовые панельные контакты вставляется сам светодиодный индикатор.
Pic 2. Плата модуля индикации. Вид сверху
На каждый сегмент у меня установлен ограничивающий резистор 1,2 кОм (можно от 750. 1000 Ом) для уменьшения тока потребления. При этом яркость индикатора снижена, но в обстановке помещения вполне хорошо видно.
Pic 3. Плата модуля индикации. Вид снизу
Индикатор вставляется сверху. Для большей надёжности можно его запаять и тем самым снизить высоту модуля.
Pic 4. Плата модуля индикации в сборе
Когда модуль индикации был готов, приступил к написанию программы. Вначале использовал Arduino UNO.
Pic 5. Макетирование и отладка программы на Arduino UNO
. но потом для уменьшения размеров устройства использовал Arduino Pro Mini. Используйте вариант на 16 кБ, что более экономно.
Pic 6. Макетирование и отладка программы на Arduino Pro Mini
Pic 7. Устройство таймера. Вид сверху
Pic 8. Устройство таймера. Разные виды
Сенсорные кнопки запаяны на небольшом кусочке монтажной платы и через контакты и панельку соединяются с платой Ардуино.
Pic 9. Устройство таймера. Разные виды
Pic 10. Устройство таймера. Разные виды
Подключение к таймеру генератора синусоидального сигнала с катушкой Мишина. Выходной порт выводится на клемник, к которому и подключается генератор. Параллельно выходной порт подключен и к входу модуля с реле.
Pic 11. Подключение генератора с катушкой Мишина
На индикатор установлен красный светофильтр из пластиковой плёнки, для повышения контраста изображения. Изготовлены наклейки с надписями и установлены по месту. Плата с генератором для катушки Мишина установлена вертикально перед модулем реле. На генераторе есть клемник для подключения кабеля от катушки Мишина.
Pic 12. Таймер
Pic 13. Таймер с катушкой Мишина
При каждом касании сенсорной кнопки ВЫБОР происходит смена времени уставки таймера. Значения фиксированные. Заданы в массиве a_time[15] (см. скетч строчку 100) . При касании сенсорной кнопки ПУСК/СТОП происходит запуск таймера, при повторном касании – останов. Максимальное значение времени 59 минут 59 секунд.
Некоторое время эксплуатирую этот таймер и могу сказать, что со своими функциями он справляется успешно. Кроме включения генератора катушки Мишина, пробовал использовать модуль реле для изготовления серебряной воды.
- Home
- Форум
- Вики
- Твиттер
Семисегментный индикатор для Arduino (3)
Часть III
(продолжение, см. Часть II и Часть I)
Очень удобно экспериментировать с макеткой без пайки, например:
Воткните в нее LED-ы и нагрузочные резисторы, затем соедините проводами по принципиальной схеме из второй части. Подключите все это к Arduino, на котором будет моделироваться программа отображения через 11 проводов: 8 для шины, 3 для общих катодов. Получится некий колтун из проводов (для простоты надо брать кроссировку — одним концом в плату, другим — в колодку на Arduino).
Готово, самое время написать sketch для ATMEGA8, который будет у нас исполнять роль последовательного приемника, защелки, знакогенератора, декодера и отображателя 😉
Для начала надо определить массив знакогенератора. Будем хранить в нем карту отображения сегментов a,b,c,d,e,f,g побитно (я выбрал старший бит с весом 0x80 для сегмента a , 0x40 для сегмента b и так далее):
Также потребуется защелка — для хранения кодов символов, которые мы отображаем в настоящий момент:
Чтобы ввести немного универсальности, я сделал промежуточные массивы, в которых задаются pin-ы Arduino, к которым подключены сегменты шины:
(восемь — так как есть еще сегмент DP — десятичная точка). Ну и тогда уж пины общих катодов каждого индикатора:
Теперь надо выбрать способ отображения. На ум приходит самый тривиальный — как в калькуляторе. Принятый по TWI-шине код символа помещается в самый младший разряд (справа), остальные сдвигаются влево, самый старший навсегда покидает индикатор. Но что же делать с точкой? В описанную схему она никак не монтируется, введение точки в код символа а) удваивает знакогенератор (с точкой и без точки — отдельные символы) б) делает менее интуитивным кодирование и передачу символов из «старшего» Arduino.
Ну и ладно, давайте сделаем специальный код символа, который не надо хранить в знакогенераторе — код точек. При его получении ничего никуда не сдвигается, а просто определяется, на каких местах зажигаются точки (да хоть на всех). Будем хранить точки в отдельном массиве:
Массив обновляется только при поступлении кода символа с включенным старшим битом ( 0x80 ), после чего остальные биты трактуются как включение или выключение точки на соответствующем знакоместе и переписываются в массив point .
Самое время определиться с символами, которые мы собрались загнать в знакогенератор (содержимое массива d_map и значение константы MAX_SYMBOLS ). Для простоты (а чего экономить-то?) определяем каждому символу 8 бит (старший занят на признак позиций точек, см. выше, так что максимум 128 символов). У меня хватило фантазии на такой набор:
Последним угадывается истинно пелевинский символ-пустота.
Самое время — показать программу по мотивам вышеизложенного:
Теперь рассмотрим программу на передающем «конце». Эксперименты с TWI показывают, что для стабильной работы надо снабдить окончание передачи небольшими задержками. Соответственно, получаем две функции:
Первая выводит один символ, вторая — сразу три, заполняя весь наш дисплей за один прием.
Теперь макетирование окончено, и можно брать в руки паяльник.
Схема подключения
Благодаря наличию i2c интерфейса на борту, подключается модуль очень просто – с помощью четырех контактов. Два из них отвечают за питание и подключаются к выводам 5V и Gnd на панели Power нашего контроллера; два других, называются они CLK и DIO, подключатся к цифровым выводам, например 3 и 2, соответственно.
Визуальная схема подключения, для вашего удобства, изображена на картинке справа:
Как проверить семисегментный индикатор
У нас имеются в наличии вот такие индикаторы:
Для того, чтобы проверить современный семисегментный индикатор, нам достаточно мультиметра с функцией прозвонки диодов. Для начала ищем общий вывод — это может быть или ОА или ОК. Здесь только методом тыка. Ну а далее проверяем работоспособность остальных сегментов индикатора по схемам выше.
Как вы видите ниже на фото, у нас загорелся проверяемый сегмент. Таким же образом проверяем и другие сегменты. Если все сегменты горят, то такой индикатор целый и его можно использовать в своих разработках.
Иногда напряжения на мультиметре не хватает для проверки сегмента. Поэтому, берем блок питания, и выставляем на нем 5 Вольт. Чтобы ограничить ток через сегмент, проверяем через резистор на 1-2 Килоома.
Таким же образом проверяем индикатор от китайского приемника
В схемах семисегментные индикаторы соединяются с резисторами на каждом выводе
В нашем современном мире семисегментные индикаторы заменяются жидко-кристаллическими индикаторами, которые могут высвечивать абсолютно любую информацию
но для того, чтобы их использовать, нужны определенные навыки в схемотехнике таких устройств. Поэтому, семисегментные индикаторы до сих пор находят применение, благодаря дешевизне и простоте использования.
Программа ниже использует библиотеку LiquidCrystal. Эта библиотека содержит функции, необходимые для записи результатов измерения на ЖК-дисплей.
Цикл считывает аналоговое значение аналогового входа, и потом вычисляет фактическое значение напряжения. Результат расчета напряжения записывается на ЖК-дисплей.
Поверка вольтметра заключается в сравнении показаний вольтметра на ардуино с рабочим вольтметром (мультиметром). Если значения отличаются, нужно проверить напряжение на пинах Ардуино 5V и GND. Напряжение может слегка отличаться от 5 вольт. Например, 4,95 В. Тогда в формуле temp = (analogvalue * 5.0) / 1024.0 нужно значение 5 заменить на 4,95. И также необходимо проверить точное сопротивление резисторов R1 и R2 и в строчки float r1=100000.0 и float r2=10000.0 вписать свои значения. После такой поверки мы получим точный вольтметр на Ардуино. Данный прибор способен измерять напряжение до сотых вольт.
И напоследок хотел бы предостеречь вас. Использовать данный вольтметр для измерения 55 вольт не рекомендуется. Это максимальный предел. При незначительном скачке измеряемого напряжения микроконтроллер выйдет из строя. Необходимо дать некий запас для непредвиденных ситуаций. И ограничить диапазон измеряемого напряжения до 45 вольт.
Светодиодные семисегментные индикаторы
Наверняка вы уже видели индикаторы – "восьмёрки". Это и есть семисегментный светодиодный индикатор, который служит для отображения цифр от 0 до 9, а также децимальной точки (DP – Decimal point) или запятой.
Конструктивно такое изделие представляет собой сборку светодиодов. Каждый светодиод сборки засвечивает свой знакосегмент.
В зависимости от модели сборка может состоять из 1 – 4 семисегментных групп. Например, индикатор АЛС333Б1 состоит из одной семисегментной группы, которая способна отображать всего лишь одну цифру от 0 до 9.
А вот светодиодный индикатор KEM-5162AS уже имеет две семисегментных группы. Он является двухразрядным. Далее на фото показаны разные светодиодные семисегментные индикаторы.
Также существуют индикаторы с 4-мя семисегментными группами – четырёхразрядные (на фото – FYQ-5641BSR-11). Их можно использовать в самодельных электронных часах.
Как обозначаются семисегментные индикаторы на схемах?
Так как семисегментный индикатор – это комбинированный электронный прибор, то изображение его на схемах мало отличается от его внешнего вида.
Стоит только обратить внимание на то, что каждому выводу соответствует конкретный знакосегмент, к которому он подключен. Также имеется один или несколько выводов общего катода или анода – в зависимости от модели прибора.
Особенности семисегментных индикаторов.
Несмотря на кажущуюся простоту этой детали и у неё есть особенности.
Во-первых, светодиодные семисегментные индикаторы бывают с общим анодом и с общим катодом. Данную особенность следует учитывать при его покупке для самодельной конструкции или прибора.
Вот, например, цоколёвка уже знакомого нам 4-ёх разрядного индикатора FYQ-5641BSR-11.
Как видим, аноды у светодиодов каждой цифры объединены и выведены на отдельный вывод. Катоды же у светодиодов, которые принадлежат к знакосегменту (например, G), соединены вместе. От того, какую схему соединений имеет индикатор (с общим анодом или катодом) зависит очень многое. Если взглянуть на принципиальные схемы приборов с применением семисегментных индикаторов, то станет ясно, почему это так важно.
Кроме небольших индикаторов есть большие и даже очень большие. Их можно увидеть в общественных местах, обычно в виде настенных часов, термометров, информеров.
Чтобы увеличить размеры цифр на табло и одновременно сохранить достаточную яркость каждого сегмента, используется несколько светодиодов, включенных последовательно. Вот пример такого индикатора – он умещается на ладони. Это FYS-23011-BUB-21.
Один его сегмент состоит из 4 светодиодов, включенных последовательно.
Чтобы засветить один из сегментов (A, B, C, D, E, F или G), нужно подать на него напряжение в 11,2 вольта (2,8V на каждый светодиод). Можно и меньше, например, 10V, но яркость тоже уменьшится. Исключение составляет децимальная точка (DP), её сегмент состоит из двух светодиодов. Для неё нужно всего 5 — 5,6 вольт.
Также в природе встречаются двухцветные индикаторы. В них встраиваются, например, красные и зелёные светодиоды. Получается, что в корпус встроено как бы два индикатора, но со светодиодами разного цвета свечения. Если подать напряжение на обе цепи светодиодов, то можно получить жёлтый цвет свечения сегментов. Вот схема соединений одного из таких двухцветных индикаторов (SBA-15-11EGWA).
Если коммутировать выводы 1 ( RED ) и 5 ( GREEN ) на "+" питания через ключевые транзисторы, то можно менять цвет свечения отображаемых чисел с красного на зелёный. А если же одновременно подключить выводы 1 и 5, то цвет cвечения будет оранжевым. Вот так можно баловаться с индикаторами .
Управление семисегментными индикаторами.
Для управления семисегментными индикаторами в цифровых устройствах используют регистры сдвига и дешифраторы. Например, широко распространённый дешифратор для управления индикаторами серии АЛС333 и АЛС324 – микросхема К514ИД2 или К176ИД2. Вот пример.
А для управления современными импортными индикаторами обычно используются регистры сдвига 74HC595. По идее, управлять сегментами табло можно и напрямую с выходов микроконтроллера. Но такую схему используют редко, так как для этого требуется задействовать довольно много выводов самого микроконтроллера. Поэтому для этой цели применяются регистры сдвига. Кроме этого, ток, потребляемый светодиодами знакосегмента, может быть больше, чем ток, который может обеспечить рядовой выход микроконтроллера.
Для управления большими семисегментными индикаторами, такими как, FYS-23011-BUB-21 применяются специализированные драйверы, например, микросхема MBI5026.
Что внутри семисегментного индикатора?
Ну и немного вкусненького. Любой электронщик не был бы таковым, если бы не интересовался "внутренностями" радиодеталей. Вот что внутри индикатора АЛС324Б1.
Чёрные квадратики на основании – это кристаллы светодиодов. Тут же можно разглядеть золотые перемычки, которые соединяют кристалл с одним из выводов. К сожалению, этот индикатор уже работать не будет, так как были оборваны как раз эти самые перемычки . Но зато мы можем посмотреть, что скрывается за декоративной панелькой табло.
Выходы 74HC595
- Q0…Q7 – выходы которыми будем управлять. Могут находится в трёх состояниях: логическая единица, логический ноль и высокоимпедансное состояние
- Q7′ – выход предназначенный для последовательного соединения регистров.
Временная диаграмма на которой показано движение логической единицы по всем выходам регистра.
Как говориться лучше один раз увидеть, чем семь раз услышать. Я сам впервые применяя регистр 74HC595 не до конца понимал его работу и чтобы понять смоделировал нужную схему в Proteus.
Вот такая схема подключения семисегментных индикаторов к микроконтроллеру ATMega48 по SPI получилась:
Это схема с динамической индикацией, то есть в каждый момент времени загорается только одна цифра счетверенного семисегментного индикатора, потом загорается следующая и так по кругу. Но так как смена происходит очень быстро, то глазу кажется, что горят все цифры.
Кроме того одновременно эта схема и опрашивает 4 кнопки S1-S4. Добавив два сдвоенных диода можно опрашивать 8 кнопок. А добавив 4 транзистора и резистора можно подключить дополнительный 4-х знаковый индикатор.
Чтобы динамическая индикация заработала в регистры нужно послать два байта: первый байт определяет, какой из 4-х индикаторов будет работать и какую кнопку будем опрашивать. А второй, какие из сегментов загорятся.
12 thoughts on “ Сдвиговый регистр 74HC595 и семисегментный индикатор ”
По моему — это тот случай, когда объяснение простого может выглядеть сложным, а не наоборот. Что может быть проще, чем два бита переслать? В данном примере, биты, пересылаемые микроконтроллером в последовательном виде — преобразуются регистрами в параллельный. Один подает на матрицу, в роли которой выступает индикатор, данные, другой — адрес. Приведен один из примеров интерфейса периферии, обслуживаемой микроконтроллером. Я бы только добавил, что счетверенный семисегментныйт индикатор, чаще всего, используют в роли часов.
В приведенной схеме динамической индикации светодиоды семисегментного индикатора должны быть на напряжение не более 4 В. В больших индикаторах часто используется последовательное включение нескольких светодиодов: например в индикаторах высотой 5см — 4 светодиода.
Поэтому стоит сделать регистру 74HC595 высоковольтный выход: подключить по MosFET на каждый выход. Затвор на выход микросхемы, исток на землю, а к стоку — «высоковольтную» нагрузку.
А действительно, часто такие схемы обслуживают таблоиды и поболее 5 см. Там может и предложенные MosFET (КМОП, полевики с изолированным затвором) будут рентабельны — цена-то у них, как правило, кусючая. В большинстве-же случаев, достаточно будет DD1, как и DD2 подсоединить к токовым ключам, а не напрямую.
Этого не сделано на приведенной схеме, так как на DD2 может падать нагрузка одновременно с семи сегментов, а на DD1 — только с одного. А экономичность схематического решения — далеко не последнее дело, в каждом, конкретном случае.
Datasheet 74HC595 и 74HCT595 от NXP.
Если не нужно каскадирование, регистр хранения и высокоимпедансное состояние на выходах то можно обойтись 74HC164N.
- Root19.06.2016 в 01:08
А зачем, если цена фактически одна? Купить сразу несколько сотен 74HC595 по 1,50 за штуку и ставить их везде и всюду, где нужны последовательно-параллельные регистры.
Мне в 74HC595 нравится именно возможность организации статической индикации, с одновременным переключением индикаторов. Так шумов меньше, чем у индикации динамической или у статической индикации без промежуточного (буферного) регистра. К тому же во втором случае имеется паразитная засветка индикатора при частой смене показаний.
А кто и как интересно опрашивает состояние кнопок на такой схеме, регистр же не контроллер он не понимает нажата кнопка или нет, его дело просто подать соответсвующие сигналы навыходных ножках, обратной же связи нет, или я чего-то не понимаю?
- admin Автор записи 28.11.2018 в 22:26
Тот микроконтроллер что дает сигнал на включение разрядов индикатора.
Например логическим нулем зажигаем разряд который подключен к выводу Q0 микросхемы DD2 , тогда при нажатии кнопки S1 на 9-том контакте X1 разъема появляется логический ноль, этот сигнал и считывает микроконтроллер.
А кто и как будет считывать значения с кнопок?
В этом схеме нет алгоритм для считывание состояние кнопок.
Для управление 7сег. индик. лучше включить после 595 микросхему 2003.
Применяйте микросхему TPIC6B595DWR, которая уже содержит полевики с открытым стоком на выходе.