В сети есть несколько похожих проектов, где люди устанавливали микроконтроллер за светодиодной матрицей 5x7 точек. У всех них много общего: они просто показывают изображение или простую анимацию на дисплее путем включения или выключения определенных пикселей. Мне это показалось неинтересным, в действительности я хотел кулон, который мог бы реально сиять, поэтому я придумал схему и написал для него код. Кулон поддерживает 16 уровней яркости на пиксель и имеет размер дисплея 8x8. Используемый микроконтроллер - ATMega328p. В настоящее время используется не весь объем памяти, поэтому можно использовать ATmega88/168.
Работа программы
Необходимость останавливать работу над подготовкой следующего кадра или писать код особым образом, чтобы избежать сбоев и дерганой анимации, - это не весело, поэтому вместо этого можно использовать прерывания. В коде, который я написал, прячется вывод отображения с глубиной яркости 4bpp и двойной буферизацией за удобным API и не требует какой-либо структуры кода в основном цикле. Прерывание срабатывает с переменной частотой от 488 Гц до 3,9 кГц, обеспечивая частоту обновления экрана выше 30 Гц, которая является плавной и не мерцает при наблюдении невооруженным глазом. Продолжительность свечения светодиода неодинакова из-за переменной скорости таймера - это сделано специально. Поскольку каждый бит в 4bpp, который составляет нашу яркость, представляет различное увеличение яркости, мы даем каждому более значимому биту больше времени для включения светодиодов. Переворачивание буферов - это мгновенная операция без копирования.
Анимация
Программы анимации в этом коде просты. Первая просто случайным образом устанавливает яркость каждого пикселя, немного выжидает и делает это снова. На самом деле это выглядит круто. Вторая, представляет собой огненную программную анимацию. Она создает огненное шоу с помощью нескольких простых правил. Последняя анимация - это игра "Жизнь" Конвея на тороидальной поверхности (строки и столбцы оборачиваются вокруг). Но поскольку 8x8 - это небольшая сетка, эта демонстрация также поддерживает более крупные поля, которые затем уменьшаются, а яркость каждого пикселя показывает, сколько ячеек, которые он представляет, живы. При увеличении x8 это выглядит потрясающе, и на самом деле гораздо более случайным, чем "случайная" анимация. Код опционально поддерживает внешний кварц частотой выше 8 МГц, в противном случае нужно использовать внутренний генератор. Я использовал кристалл с частотой 16 МГц, как вы можете видеть справа.
Конструкция
Изготовить кулон оказалось не так уж и сложно. Схема показана выше. Схема подключения может показаться довольно случайной, но это не так. Оказывается, большинство этих светодиодных панелей имеют очень странные распиновки, и на самом деле указанная мной схема позволяет без особых усилий установить ATmega на матрицу. Матрица, которую я использовал, имеет ряды, подключенные к отрицательным выводам светодиодов, а столбцы - к положительным. Если у вас другой тип, поверните матрицу на 90 градусов :). Если ваша матрица требует другого подключения, код легко можно изменить(см. Массивы «gRowsX» и «gColsX», где X - это B, C или D).
После подключения матрицы, контактов ICSP и проводов питания (они также удерживают подвеску на нашей шее), пришло время сделать ее водонепроницаемой. Эпоксидная смола очень хороша и идеально подходит для этого. Чтобы сделать форму, в качестве бортиков использовалась изолента.
Видео работы устройства:
Файлы к статье "Светодиодный кулон на матрице 8x8 и ATmega328" | |
Описание:
Исходный код(Си), файл прошивки микроконтроллера |
|
Размер файла: 16.12 KB Количество загрузок: 80 | Скачать |