Здравствуйте, уважаемые читатели! В прошлой статье мы говорили о семисегментном индикаторе и о его подключении к Ардуино. Сегодня поговорим о подключении данного индикатора к микроконтроллерам семейства ATtiny с помощью сдвигового регистра 74HC595. Подключать я буду на примере ATtiny13.
Если посмотреть схему подключения из прошлой статьи, в которой мы задействовали 9 пинов Arduino UNO (8 цифровых пинов и землю), то очевидно, что у малыша ATtiny просто не хватит ног. У него всего 8 ног, из которых только 5 мы можем использовать как цифровые.
В этом случае у нас есть два варианта: либо взять микроконтроллер с большим количеством пинов, например, очень популярный вариант ATtiny2313, либо использовать сдвиговый регистр, который задействует только 3 пина микроконтроллера, а на выходе даст результат работы 8 цифровых пинов.
Об ATtiny2313 подробно поговорим в одной из следующих статей, а сейчас разберемся, что такое сдвиговый регистр, принцип его работы и схему подключения.
Изначально мы соберем схему на Arduino UNO, протестируем, а затем, вместо Ардуино подключим ATtiny13 и адаптируем подключение и схему для него.
Распиновка сдвигового регистра выглядит следующим образом:
Пины с 1 по 7, на схеме обозначенные от Q1 до Q7 и еще пин номер 15, обозначенный на схеме как Q0 – это цифровые выходы, которые и будут зажигать секции светодиодного индикатора.
8 пин – пин для подключения земли, а 16 пин для подачи напряжения 5В.
9 пин служит для последовательного подключения еще одного сдвигового регистра. В данном случае у нас один сдвиговый регистр, так что данный пин остается незадействованным.
10 пин – это reset. Он очищает память регистра, при подаче низкого уровня сигнала, т.е. логического нуля. Нам это не нужно, поэтому данный пин будет постоянно подключен к питанию 5В.
С помощью подачи 5 В на 13 пин мы можем отключить выходные пины Q0-Q7. При этом значение, записанное в память регистра сохраняться. Т.е. этот пин, можно использовать для включения и отключения светодиодного индикатора. А пока что соединим его с землей.
Самое интересное происходит с пинами 11, 12 и 14, которые мы и подключаем к микроконтроллеру и по ним передаем данные, управляющие сдвиговым регистром.
Начнем с 12 пина (ST). При подаче низкого уровня сигнала на данный пин, мы подготавливаем регистр к приему цифровых данных от микроконтроллера. А при подаче высокого уровня сигнала, записывает данные во внутреннюю память регистра и одновременно, передаем сигналы на цифровые выходы регистра.
14 пин (Ds) принимает значение для выбранного бита. Т.е. при получении высокого уровня сигнала 5 В, записывается в память единица, а при получении низкого уровня сигнала, записывается 0.
А при подаче 5 В на 11 пин (SH), мы произведем сдвиг битов влево, чтобы освободить место получения нового значения через 14 пин Ds.
Более подробно о принципах работы сдвигового регистра и о их последовательном подключении я расскажу в отдельной статье.
В среде Arduino IDE есть стандартная функция shiftOut(), которая значительно упрощает работу со сдвиговым регистром.
shiftOut (dataPin, clockPin, bitOrder, value)
В качестве первого аргумента (dataPin) нужно указать пин микроконтроллера, который соединен с 14 пином (Ds) сдвигового регистра.
В качестве второго аргумента (clockPin) нужно указать пин микроконтроллера, который соединен с 11 пином (SH) сдвигового регистра.
Третий аргумент (bitOrder) задает порядок чтения передаваемых регистру байт – слева направо (MSBFIRST) или справа налево (LSBFIRST).
Четвертый аргумент (value) – собственно битовое представление передаваемой цифры.
Вначале соберем схему на макетной плате с Arduino UNO.
Разместим на макетной плате светодиодный индикатор и рядом сдвиговый регистр.
Пины 5 В и GND Arduino UNO соединим с плюсом и минусом макетной платы.
Пины с 1 по 7 сдвигового регистра соединим с пинами светодиодного индикатора, в том же порядке, в каком они идут у светодиодного индикатора, пропуская 3 пин, связанный с землей, 5-й пин связанный с точкой и 8-й пин снова связанный с землей.
3 пин светодиодного индикатора соединим через резистор 220 Ом с землей.
Всё, со светодиодным индикатором закончили, возвращаемся к регистру. 8 его пин соединяем с землей, 16 пин с плюсом макетной платы. Еще с плюсом соединим 10 пин, а с минусом 13 пин.
Остались у нас пины для связи с микроконтроллером. Подключим 11 пин (SH) ко второму пину Arduino UNO, 12 пин (ST) к 3 пину Ардуино, а 14 пин (Ds) к 4 пину Ардуино.
Возьмем скетч, из прошлой статьи, где мы последовательно включали цифры на индикаторе, и адаптируем его для работы со сдвиговым регистром.
В функции setup() настроим пины со 2 по 4 для работы с выходным сигналом.
А в функции loop() в цикле будем последовательно выводить все цифры от 0 до 9.
В начале подаем низкой уровень сигнала, на 12 пин (ST) регистра, подготавливая его к приему новых данных. Далее с помощью функции shiftOut() указываем номера пинов связанных с пином 14 (Ds) и 11 (SH) сдвигового регистра и передаем регистру битовое представление текущей цифры. После этого, подаем высокий уровень сигнала на 12 пин (ST), сообщая регистру, что записанные данные можно отправлять на цифровые выводы.
Загружаем скетч в Ардуино. И видим как цифры последовательно сменяют друг друга.
Кстати, если переподключить 13 пин сдвигового регистра с минуса на плюс, то светодиодный индикатор гаснет, но перебор цифр продолжается. Т.е. как будто отключился экран, в режиме энергосбережения.
Теперь вместо Arduino UNO подключим ATtiny13. Подключение аналогичное. Только у ATtiny13 мы задействуем 5,6 и 7 ножки, которые в Arduino IDE обозначаются 0, 1 и 2.
Видоизменяем скетч для работы с ATtiny. Загружаем скетч в ATtiny.
Все ссылки на статьи по прошивке микроконтроллеров ATtiny, а так же схемы и скетчи я оставлю в конце статьи.
Устанавливаем ATtiny13 на макетную плату. 5, 6 и 7 его ножки соединяю с 11, 12 и 14 пинами сдвигового регистра. 4 ножку с минусом, а 8 с землей.
А в качестве источника питания буду использовать LiPo аккумулятор на 3,7 В.
Как только подаем питание на схему, видим как последовательно выводятся все цифры от 0 до 9.
Таким образом, можно выводить на светодиодный индикатор информацию, которую получает микроконтроллер с датчиков, в том числе, которую он хранит в памяти. Я обязательно вернусь к теме работы со светодиодными индикаторами, когда необходимо будет извлекать из энергонезависимой памяти EEPROM информацию, которую туда в течение какого-то периода записывал микроконтроллер ATtiny.
О 4-х символьных индикаторах поговорим в одной из следующих статей. Т.к. есть вариант использования вот таких готовых модулей. Существенно упрощающих подключение светодиодного индикатора к микроконтроллеру. Что в каких случаях лучше использовать и о способах подключения светодиодного индикатора и модуля на его основе к Ардуино и ATtiny мы обсудим далее.
Схема подключения сдвигового регистра 74HC595 к Ардуино - https://yadi.sk/i/aq6c40LjqrmxaA
Схема подключения сдвигового регистра 74HC595 к ATtiny13 - https://yadi.sk/i/aq6c40LjqrmxaA
Скетч семисегментный индикатор + сдвиговый регистр 74HC595 + Arduino UNO -https://yadi.sk/d/pO3-qut4WgpLUQ
Скетч семисегментный индикатор + сдвиговый регистр 74HC595 + ATtiny13 - https://yadi.sk/d/pO3-qut4WgpLUQ
Видео по материалам статьи:
_________________________________________________________
Спасибо, что дочитали до конца! Если статья понравилась, нажмите, пожалуйста, соответствующую кнопку. Если интересна тематика электроники и различных электронных самоделок, подписывайтесь на канал. До встречи в новых статьях!
Другие публикации по теме:
- ATtiny13 и ATtiny85. Обзор и программирование с помощью Arduino.
- Создаем удобный модуль для программирования микроконтроллеров ATtiny.