Здравствуйте, уважаемые читатели! В прошлой статье, я рассказывал о подключении 4-х символьного индикатора к Ардуино с помощью сдвигового регистра 74HC595. При этом мы задействовали 7 цифровых пинов Arduino UNO.
В этой статье поговорим, как же подключить светодиодный индикатор на 4 цифры к микроконтроллеру ATtiny13. Сразу скажу, что данный метод будет работать и с микроконтроллерами ATtiny25/45/85.
Если взглянуть на распиновку ATtiny13, то видно, что нам доступно всего 5 цифровых пинов. 4 и 8 связаны с землей и с питанием 5 В, соответственно.
А первый пин, хоть и обозначено, что он может работать и с цифровым и с аналоговым сигналом, но это пин, еще и связанный с RESET. Есть конечно способ отключение на нем функции RESET и превращения в обычный пин ввода-вывода, но тогда, мы теряем возможность прошивки микроконтроллера с помощью ISP программатора, в качестве которого у меня выступает Arduino UNO. В общем теоретически это очень интересно, и я постараюсь подробнее об этом рассказать в одной из следующих статей, но сейчас пойдем более простым путем.
Т.е., если рассматривать схему подключения из прошлой статьи, то очевидно, в случае ATtiny13 и ATtiny25/45/85 у нас существует нехватка 2 цифровых пинов. И если мы не можем задействовать больше цифровых пинов ATtiny, то попробуем повторно задействовать те, что уже задействованы.
И действительно, после того, как задействовав 3 пина микроконтроллера, мы записали битовое представление цифры в память сдвигового регистра, эти пины нам не понадобятся, вплоть до записи следующей цифры. Именно этой паузой мы можем воспользоваться, предварительно соединив эти пины с общими катодами секций, на которые нам не хватало пинов, и подавать на них низкий уровень сигнала.
Сначала тренируемся на Arduino UNO.
Т.е. если в начале привести пример с Arduino UNO, то мы отсоединяем 12 пин светодиодного индикатора, который является общим катодом для 4 секции, от 13 пина Arduino UNO и присоединяем его к 14 пину сдвигового регистра. А соединение светодиодного индикатора с 12 пином Ардуино, заменяем на соединение с 12 пином сдвигового регистра.
Изменяем скетч таким образом, чтобы проверять, если речь идет о первых двух секциях, то мы работаем классическим образом и 10 с 11 пином у нас отвечают за вывод цифр в 1 и вторую секцию светодиодного индикатора.
А вот, если речь о 3 и 4 секции, то тут мы подаем низкий уровень сигнала на 8 пин (3+5) или на 9 пин (4+5) Arduino UNO. Конечно, мы одновременно подаем сигнал и на 12 или 14 пин сдвигового регистра. Но это всё равно происходит в промежутке, между выводом цифр, так что на его работу это не влияет.
Загружаем скетч в Ардуино и видим, что все цифры светятся, но с сильным мерцанием. А на камеру выглядит как будто они вообще загораются по одной.
Но мы можем изменять этот эффект уменьшая значение переменной pause.
Уменьшим паузу до 3 мс.
И после загрузке скетча, я лично мерцания уже не замечаю, хотя на камеру оно заметно.
А если уменьшаем паузу до 1 мс, то на камеру мерцания уже не видно, но сегменты светодиода не успевают гаснуть перед выводом новой цифры и четкость выводимых цифр снижается. Так что оптимально, на мой взгляд, значение паузы в 3 мс.
Подключаем светодиодный дисплей на 4 цифры к ATtiny13.
Теперь перенесем этот принцип на ATtiny13. 2 и 3 пин ATtiny13 соединим с 6 и 8 пином светодиодного индикатора. 5, 6 и 7 пин ATtiny13 соединим с 11, 12 и 14 пинами сдвигового регистра. 4 пин ATtiny с минусом, а 8 с плюсом макетной платы. 12 и 14 пин сдвигового регистра у нас так же будут подключены к 9 и 12 пинам светодиодного индикатора.
И адаптируем наш скетч для ATtiny согласно его распиновке.
На выход у нас будут работать пины с 0 по 4.
В блоке кода, отвечающем за работу со сдвиговым регистром, изменяем номера пинов, которые соответствуют распиновке ATtiny.
И в блоке, где мы зажигаем нужный сегмент, тоже меняем номера пинов в соответствии с нашим подключением. Соответственно 3 и 4 пин для первых 2 секций. И 1 и 2 пин для 3 и 4-й секции. Паузу я изначально сделаю 5 мс, чтобы сравнить с прошлым примером на Arduino UNO.
Загружаем скетч в ATtiny. Берем источник питания. Источника в 3,7 В нам вполне достаточно. И видим беготню цифр. Впрочем для ATtiny это нормально, т.к. таймер тут не может похвастаться точностью, он зависит от частоты работы микроконтроллера, а частота еще может зависеть от подаваемого напряжения.
Попробуем уменьшить не значение переменной pause, а значение clockмикроконтроллера с 9.6 МГц до 1.2 МГц.
Загружаем скетч в ATtiny, устанавливаем на плату и подаем питание.
Уже намного лучше. Камера всё равно передает мерцание, но мне его не видно.
Попробуем еще изменить паузу до 3 мс.
Загружаем скетч, снова устанавливаем микроконтроллер на макетную плату и подаем питание. На камере сохраняется слабое мерцание, я его не вижу, но цифры не так четко отображаются как в прошлом случае. В общем, прошлый вариант мне нравится больше.
Таким образом, меняя значение паузы и частоту таймера можно добиться оптимального результата.
Как вариант, можно рассмотреть еще один метод экономии пина ATtiny – это пожертвовать отображением десятичной точки, и 7 пин сдвигового регистра, подключить к одному из общих катодов. Тогда мы можем отправлять 8 битом каждой цифры 0 (что будет соответствовать низкому уровню сигнала), если речь идет о данной секции, либо 1, если речь идет о всех остальных секциях.
И конечно в резерве у нас остается 1 пин ATtiny. Который в случае большой нужды мы можем вывести из под власти RESETa и превратить в обычный пин ввода-вывода. Впрочем, это тема для отдельного статьи.
Ссылка на скетч - https://yadi.sk/d/8Hjm2tFYMee4Hg
Видео по материалам статьи:
_________________________________________________________
Спасибо, что дочитали до конца! Если статья понравилась, нажмите, пожалуйста, соответствующую кнопку. Если интересна тематика электроники и различных электронных самоделок, подписывайтесь на канал. До встречи в новых статьях!