Добавить в корзинуПозвонить
Найти в Дзене
Электроника и жизнь

Подключение 4-х символьного индикатора к ATtiny13

В этой статье поговорим, как подключить светодиодный индикатор на 4 цифры к микроконтроллеру ATtiny13, у которого всего 5 цифровых пинов. А классическая схема подключения, даже с использованием сдвигового регистра, требует задействовать 7 пинов.
Оглавление

Здравствуйте, уважаемые читатели! В прошлой статье, я рассказывал о подключении 4-х символьного индикатора к Ардуино с помощью сдвигового регистра 74HC595. При этом мы задействовали 7 цифровых пинов Arduino UNO.

В этой статье поговорим, как же подключить светодиодный индикатор на 4 цифры к микроконтроллеру ATtiny13. Сразу скажу, что данный метод будет работать и с микроконтроллерами ATtiny25/45/85.

Если взглянуть на распиновку ATtiny13, то видно, что нам доступно всего 5 цифровых пинов. 4 и 8 связаны с землей и с питанием 5 В, соответственно.

Распиновка ATtiny13
Распиновка ATtiny13

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

Т.е., если рассматривать схему подключения из прошлой статьи, то очевидно, в случае ATtiny13 и ATtiny25/45/85 у нас существует нехватка 2 цифровых пинов. И если мы не можем задействовать больше цифровых пинов ATtiny, то попробуем повторно задействовать те, что уже задействованы.

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

Блок кода, отвечающий за работу со сдвиговым регистром
Блок кода, отвечающий за работу со сдвиговым регистром

Сначала тренируемся на Arduino UNO.

Т.е. если в начале привести пример с Arduino UNO, то мы отсоединяем 12 пин светодиодного индикатора, который является общим катодом для 4 секции, от 13 пина Arduino UNO и присоединяем его к 14 пину сдвигового регистра. А соединение светодиодного индикатора с 12 пином Ардуино, заменяем на соединение с 12 пином сдвигового регистра.

Схема подключения 4-х символьного светодиодного индикатора к ATtiny13/25/45/85 (с использование 5 цифровых пинов)
Схема подключения 4-х символьного светодиодного индикатора к ATtiny13/25/45/85 (с использование 5 цифровых пинов)

Изменяем скетч таким образом, чтобы проверять, если речь идет о первых двух секциях, то мы работаем классическим образом и 10 с 11 пином у нас отвечают за вывод цифр в 1 и вторую секцию светодиодного индикатора.

Условия включения нужной секции индикатора
Условия включения нужной секции индикатора

А вот, если речь о 3 и 4 секции, то тут мы подаем низкий уровень сигнала на 8 пин (3+5) или на 9 пин (4+5) Arduino UNO. Конечно, мы одновременно подаем сигнал и на 12 или 14 пин сдвигового регистра. Но это всё равно происходит в промежутке, между выводом цифр, так что на его работу это не влияет.

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

Результат работы скетча при задержке в 5 мс
Результат работы скетча при задержке в 5 мс

Но мы можем изменять этот эффект уменьшая значение переменной pause.

Уменьшим паузу до 3 мс.

Уменьшаем паузу до 3 мс
Уменьшаем паузу до 3 мс

И после загрузке скетча, я лично мерцания уже не замечаю, хотя на камеру оно заметно.

Результат работы скетча при задержке в 3 мс
Результат работы скетча при задержке в 3 мс

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

Результат работы скетча при задержке в 1 мс
Результат работы скетча при задержке в 1 мс

Подключаем светодиодный дисплей на 4 цифры к ATtiny13.

Теперь перенесем этот принцип на ATtiny13. 2 и 3 пин ATtiny13 соединим с 6 и 8 пином светодиодного индикатора. 5, 6 и 7 пин ATtiny13 соединим с 11, 12 и 14 пинами сдвигового регистра. 4 пин ATtiny с минусом, а 8 с плюсом макетной платы. 12 и 14 пин сдвигового регистра у нас так же будут подключены к 9 и 12 пинам светодиодного индикатора.

Схема подключения 4-х символьного светодиодного индикатора к ATtiny13/25/45/85
Схема подключения 4-х символьного светодиодного индикатора к ATtiny13/25/45/85

И адаптируем наш скетч для ATtiny согласно его распиновке.

На выход у нас будут работать пины с 0 по 4.

В блоке кода, отвечающем за работу со сдвиговым регистром, изменяем номера пинов, которые соответствуют распиновке ATtiny.

И в блоке, где мы зажигаем нужный сегмент, тоже меняем номера пинов в соответствии с нашим подключением. Соответственно 3 и 4 пин для первых 2 секций. И 1 и 2 пин для 3 и 4-й секции. Паузу я изначально сделаю 5 мс, чтобы сравнить с прошлым примером на Arduino UNO.

Скетч для работы ATtiny13 c 4-х символьным светодиодным индикатором.
Скетч для работы ATtiny13 c 4-х символьным светодиодным индикатором.

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

Результат работы скетча при задержке в 5 мс и частоте  9.6 МГц
Результат работы скетча при задержке в 5 мс и частоте 9.6 МГц

Попробуем уменьшить не значение переменной pause, а значение clockмикроконтроллера с 9.6 МГц до 1.2 МГц.

Изменяем частоту таймера до 1.2 МГц
Изменяем частоту таймера до 1.2 МГц

Загружаем скетч в ATtiny, устанавливаем на плату и подаем питание.

Результат работы скетча при задержке в 5 мс и частоте  1.2 МГц
Результат работы скетча при задержке в 5 мс и частоте 1.2 МГц

Уже намного лучше. Камера всё равно передает мерцание, но мне его не видно.

Попробуем еще изменить паузу до 3 мс.

Уменьшаем паузу до 3 мс
Уменьшаем паузу до 3 мс

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

Результат работы скетча при задержке в 3 мс и частоте  1.2 МГц
Результат работы скетча при задержке в 3 мс и частоте 1.2 МГц

Таким образом, меняя значение паузы и частоту таймера можно добиться оптимального результата.

Как вариант, можно рассмотреть еще один метод экономии пина ATtiny – это пожертвовать отображением десятичной точки, и 7 пин сдвигового регистра, подключить к одному из общих катодов. Тогда мы можем отправлять 8 битом каждой цифры 0 (что будет соответствовать низкому уровню сигнала), если речь идет о данной секции, либо 1, если речь идет о всех остальных секциях.

И конечно в резерве у нас остается 1 пин ATtiny. Который в случае большой нужды мы можем вывести из под власти RESETa и превратить в обычный пин ввода-вывода. Впрочем, это тема для отдельного статьи.

Ссылка на скетч - https://yadi.sk/d/8Hjm2tFYMee4Hg

Видео по материалам статьи:

_________________________________________________________

Спасибо, что дочитали до конца! Если статья понравилась, нажмите, пожалуйста, соответствующую кнопку. Если интересна тематика электроники и различных электронных самоделок, подписывайтесь на канал. До встречи в новых статьях!

Другие публикации по теме: