Здравствуйте, уважаемые читатели! В этой статье поговорим о том, как можно управлять различными эффектами на светодиодной матрице с помощью микроконтроллера ATtiny85. А непосредственно переключать эффекты, мы будем с помощью инкрементального энкодера EC11. Подробнее о работе с которым можно почитать в статье «Инкрементальный энкодер с кнопкой EC11. Обзор, подключение к Ардуино, скетч для работы с энкодером».
Цель статьи, показать, что возможностей ATtiny85, вполне хватает для работы со светодиодной матрицей. Не обязательно использовать Arduino или еще более продвинутые платы или микроконтроллеры.
Но в начале, по традиции, начнем разбор схемы на Arduino UNO. Соберем схему на макетной плате.
Светодиодную матрицу запитываем отдельно, от регулируемого блока питания. У которого выставлено напряжение в 5 В и ограничение по току в 2 А. Т.к. ток потребления светодиодной матрицей может быть достаточно большим, то матрицу всегда нужно запитывать отдельно, а не через плату с микроконтроллером.
Пин для передачи цифрового сигнала на светодиодную матрицу, я через провод, с уже припаянным резистором на 220 Ом, подключаю к 9 пину Arduino UNO.
Устанавливаю на плате энкодер и крайние его пины GND и 5В подключаю к минусу и плюсу макетной платы соответственно. Пин S1 соединяю соединяю со 2 пином Arduino UNO, пин S2 с 6 пином, пин Key, отвечающий за нажатие кнопки с 3 пином Arduino UNO. Второй и третий пин выбраны не случайно. Именно они поддерживают аппаратное прерывание у Arduino UNO.
Перейдем к скетчу. Про установку библиотеки FastLED я уже рассказывал в одной из прошлых статей "Управление светодиодной матрицей 16x16 адресных светодиодов ws2812b с помощью энкодера". Откроем самый простейший пример библиотеки FastLED, всё назначение которого, помигать одним светодиодом.
Увеличим число светодиодов до 256. У нас же матрица 16х16 светодиодов. В инструментах выберем плату ATtiny85. И попробуем вначале проверить, поместится ли данный скетч в плату.
Для этого, вместо загрузки скетча, нажимаем кнопку «Проверить». Происходит компиляция скетча и выдается ошибка. Если посмотреть текст ошибки, то видно что нам не хватило оперативной памяти. Это та, которая у нас SRAM, и которой на ATtiny85 всего 512 КБ.
Если в скетче мы уменьшим число задействованных светодиодов матрицы в 2 раза, до 128, то скомпилировав скетч, видим, что объем задействованной оперативной памяти уменьшился, и скетч уже помещается в мозгах ATtiny85.
Это происходит из-за того, что для работы с каждым светодиодом, в памяти выделяется 3 байта для задания его цвета. Таким образом, для светодиодной матрицы 16х16 адресных светодиодов минимум нужно 256х3 = 768 байт оперативной памяти.
Но решение есть. Нужно заменить библиотеку FastLED на библиотеку microLED, от Алекса Гайвера. Скачать библиотеку можно у него на странице https://alexgyver.ru/microled/.
Важной особенностью библиотеки, является то, что можно изменить глубину цвета COLOR_DEBTH. Т.е. по умолчанию COLOR_DEBTH у нас равно 3, что соответствует 24 битному представлению цвета, но и занимает в памяти 3 байта. Если COLOR_DEBTH равно 2, то у нас 16 битное представление цвета и мы тратим 2 байта на каждый адресный светодиод. Этот вариант нас всё равно не устраивает, т.к. 256х2 = 512 байт, а еще нужно место в памяти и под другие переменные. А вот если установить значение COLOR_DEBTH равное 1, то каждый цвет мы будем задавать с помощью 8 бит и в случае с матрицей 16х16 адресных светодиодов, займем в памяти 256 байт. Что как раз устраивает при использовании ATtiny85.
Скачиваем библиотеку с сайта, и добавляем ее в Arduino IDE.
Переходим в примеры библиотеки. Тут их достаточно много. Открываем самый первый пример basicEffects.
В скетче, изменим пин, к которому у нас подключена светодиодная матрица, на 9. И число светодиодов матрицы на 256. Значение COLOR_DEBTH меняем с 3 на 1.
В функции loop() закомментировано еще 3 эффекта. Предполагается, что мы будем последовательно раскомментировать и смотреть каждый. Но не зря же мы подключили к схеме энкодер. Добавляем к скетчу код, который обрабатывает поворот ручки энкодера и нажатие на его кнопку.
Загружаем скетч в Ардуино. По нажатию на кнопку энкодера и переходим от 1-го эффекта к 4-му. И так по кругу.
Теперь адаптируем данный скетч для ATtiny85. Изменим номера пинов к которым мы подключаем энкодер. Его пин S1, подключим к 5 пину ATtiny, пин S2 к 6 пину ATtiny и пин, отвечающий за нажатие кнопки key к 7 пин ATtiny85. Светодиодную матрицу подключим ко 2 пину ATtiny.
Так как у ATtiny всего одно аппаратное прерывание, расположенное на 7 пину, куда мы и подкличили пин key энкодера, то в функции attachInterrupt() первым аргументом у нас будет 0, а далее следовать функция обработки события нажатия на кнопку. Хочу напомнить, что в первом аргументе данной функции указывается не номер пина, на котором работает прерывание, а номер прерывания.
INT0, т.е. нулевое прерывание. В этом скетче вращение регулятора энкодера у меня задействовано не будет, но соответствующий код в скетче и подключение их к микроконтроллеру, пусть остаются, пригодятся в следующих проектах.
Загружаем скетч в ATtiny85 и устанавливаем микроконтроллер на макетную плату. Все провода подключены по размещенной ниже схеме.
Подаем питание и видим, как включается первый из эффектов. Нажимаем на кнопку энкодера. Переходим ко второму эффекту, далее к третьему, к четвертому и далее по кругу.
Таким образов, с помощью ATtiny85 можно управлять различными эффектами светодиодной матрицы, а так же выводить текст и анимированные картинки. Об этом у меня были соответствующие статьи (см. ссылки ниже) для Ардуино. Но многие примеры из них можно перенести и на ATtiny85. После загрузки скетча управления светодиодной матрицей, во flash-памяти ATtiny85 еще остается достаточно места для размещения массивов со шрифтами или картинками.
Видео, по материалам статьи:
_________________________________________________________
Спасибо, что дочитали до конца! Если статья понравилась, нажмите, пожалуйста, соответствующую кнопку. Если интересна тематика электроники и различных электронных самоделок, подписывайтесь на канал. До встречи в новых статьях!