Оглавление:

64-пиксельный светодиодный дисплей RGB - еще один клон Arduino: 12 шагов (с изображениями)
64-пиксельный светодиодный дисплей RGB - еще один клон Arduino: 12 шагов (с изображениями)

Видео: 64-пиксельный светодиодный дисплей RGB - еще один клон Arduino: 12 шагов (с изображениями)

Видео: 64-пиксельный светодиодный дисплей RGB - еще один клон Arduino: 12 шагов (с изображениями)
Видео: Светодиодная футболка для кибер золушки | Arduino проект Телепузики | SK6812 2024, Декабрь
Anonim
64-пиксельный светодиодный дисплей RGB - еще один клон Arduino
64-пиксельный светодиодный дисплей RGB - еще один клон Arduino
64-пиксельный светодиодный дисплей RGB - еще один клон Arduino
64-пиксельный светодиодный дисплей RGB - еще один клон Arduino
64-пиксельный светодиодный дисплей RGB - еще один клон Arduino
64-пиксельный светодиодный дисплей RGB - еще один клон Arduino

Этот дисплей основан на светодиодной матрице 8x8 RGB. Для тестирования он был подключен к стандартной плате Arduino (Diecimila) с использованием 4 регистров сдвига. После того, как он заработал, я перматизировал его на потрясающей печатной плате. Регистры сдвига имеют ширину 8 бит и легко подключаются к протоколу SPI. Для смешивания цветов используется широтно-импульсная модуляция, подробнее об этом позже. Часть RAM MCU используется как буфер кадра для хранения изображения. Видео RAM анализируется программой прерывания в фоновом режиме, поэтому пользователь может делать другие полезные вещи, например разговаривать с ПК, читать кнопки и потенциометры. Более подробная информация об «Arduino»: www.arduino.cc

Шаг 1: широтно-импульсная модуляция для смешивания цветов

Широтно-импульсная модуляция для смешивания цветов
Широтно-импульсная модуляция для смешивания цветов

Широтно-импульсный модуль - ЧТО? Широтно-импульсная модуляция по существу включает и выключает питание, подаваемое на электрическое устройство. Полезная мощность определяется математическим усреднением прямоугольной функции за интервал в один период. Чем дольше функция остается в положении ON, тем больше мощности вы получаете. ШИМ оказывает такое же влияние на яркость светодиодов, как и диммер на светильниках переменного тока. Предстоящая задача состоит в том, чтобы индивидуально регулировать яркость 64 светодиодов RGB (= 192 отдельных светодиода!) Дешевым и простым способом, чтобы можно было получить все спектр цветов. Желательно, чтобы не было мерцания или других мешающих эффектов. Нелинейное восприятие яркости человеческим глазом здесь не принимается во внимание (например, разница между 10% и 20% яркостью кажется «больше», чем между 90% и 100%). Изображение (1) иллюстрирует принцип работы алгоритм ШИМ. Скажем, коду присвоено значение 7 для яркости светодиода (0, 0). Кроме того, он знает, что максимальная яркость составляет N шагов. Код запускает N циклов для всех возможных уровней яркости и все необходимые циклы для обслуживания каждого отдельного светодиода во всех строках. Если счетчик цикла x в петле яркости меньше 7, светодиод включается. Если он больше 7, светодиод не горит. Делая это очень быстро для всех светодиодов, уровней яркости и основных цветов (RGB), каждый светодиод можно индивидуально настроить для отображения желаемого цвета. Измерения с помощью осциллографа показали, что код обновления дисплея занимает около 50% процессорного времени. Остальное можно использовать для последовательной связи с ПК, чтения кнопок, разговора с считывателем RFID, отправки I2Данные C в другие модули…

Шаг 2: общение с регистрами сдвига и светодиодами

Разговор с регистрами сдвига и светодиодами
Разговор с регистрами сдвига и светодиодами
Разговор с регистрами сдвига и светодиодами
Разговор с регистрами сдвига и светодиодами

Регистр сдвига - это устройство, позволяющее загружать данные последовательно и параллельно. Противоположная операция также возможна с соответствующим чипом. На сайте Arduino есть хорошее руководство по регистрам сдвига. Светодиоды управляются 8-битными регистрами сдвига типа 74HC595. Каждый порт может отдавать или потреблять около 25 мА тока. Суммарный ток потребляемой или полученной микросхемы не должен превышать 70 мА. Эти чипы очень дешевы, поэтому не платите больше 40 центов за штуку. Поскольку светодиоды имеют экспоненциальную характеристику тока / напряжения, необходимы токоограничивающие резисторы. По закону Ома: R = (V - Vf) / IR = ограничивающий резистор, V = 5 В, Vf = прямое напряжение светодиода, I = желаемый ток Красные светодиоды имеют прямое напряжение около 1,8 В, сине-зеленый диапазон от 2,5 до 3,5 В. Используйте простой мультиметр, чтобы определить это. Для правильной цветопередачи необходимо учитывать несколько вещей: спектральную чувствительность человеческого глаза (красный / синий: плохо, зеленый: хорошо), эффективность светодиода на определенной длине волны и ток. На практике достаточно просто взять 3 потенциометра и настроить их до тех пор, пока светодиод не загорится правильным белым светом. Конечно, нельзя превышать максимальный ток светодиода. Здесь также важно то, что сдвиговый регистр, управляющий строками, должен подавать ток на светодиоды 3x8, поэтому лучше не повышать ток слишком высоко. Мне удалось установить ограничивающие резисторы на 270 Ом для всех светодиодов, но это, конечно, зависит от производителя светодиодной матрицы. Регистры сдвига связаны с последовательным интерфейсом SPI. SPI = последовательный периферийный интерфейс (Изображение (1)). В отличие от последовательных портов на ПК (асинхронный, без тактового сигнала), SPI требует тактовой линии (SRCLK). Затем есть сигнальная линия, сообщающая устройству, когда данные действительны (выбор микросхемы / защелка / RCLK). Наконец, есть две линии данных, одна называется MOSI (главный выход, подчиненный вход), другая называется MISO (главный в подчиненном выходе). SPI используется для сопряжения интегральных схем, как и я.2C. Для этого проекта требуются MOSI, SRCLK и RCLK. Дополнительно используется разрешающая линия (G). Цикл SPI запускается переводом линии RCLK в положение LOW (Изображение (2)). MCU отправляет свои данные по линии MOSI. Его логическое состояние выбирается сдвиговым регистром на переднем фронте строки SRCLK. Цикл завершается переводом линии RCLK обратно в HIGH. Теперь данные доступны на выходах.

Шаг 3: Схема

Схема
Схема
Схема
Схема

Изображение (1) показывает, как сдвиговые регистры подключены. Они соединены гирляндной цепочкой, поэтому данные могут передаваться как в эту цепочку, так и через нее. Поэтому легко добавить дополнительные регистры сдвига.

На изображении (2) показана остальная часть схемы с микроконтроллером, разъемами, кварцем … Прилагаемый файл PDF содержит все работы, лучше всего для печати.

Шаг 4: Исходный код C ++

Исходный код C ++
Исходный код C ++
Исходный код C ++
Исходный код C ++
Исходный код C ++
Исходный код C ++

В C / C ++ обычно нужно прототипировать функции перед их кодированием. # Include int main (void); void do_something (void); int main (void) {do_something ();} void do_something (void) {/ * comment * / } В среде Arduino IDE этот шаг не требуется, поскольку прототипы функций создаются автоматически. Поэтому прототипы функций не будут отображаться в коде, показанном здесь. Изображение (1): setup () functionImage (2): spi_transfer () функция, использующая аппаратный SPI микросхемы ATmega168 (работает быстрее) Изображение (3): код буфера кадра, использующий прерывание переполнения таймера1. фрагменты кода, которые имеют немного загадочный вид для начинающих, например в то время как (! (SPSR & (1 << SPIF))) {} напрямую используют регистры MCU. Этот пример словами: «пока SPIF-бит в регистре SPSR не установлен, ничего не делать». Я просто хочу подчеркнуть, что для стандартных проектов действительно нет необходимости иметь дело с этими вещами, так тесно связанными с оборудованием. Новичков это не пугает.

Шаг 5. Готовый гаджет

Готовый гаджет
Готовый гаджет
Готовый гаджет
Готовый гаджет
Готовый гаджет
Готовый гаджет

После решения всех проблем и запуска кода мне просто нужно было создать макет печатной платы и отправить его в фабричный дом. Он выглядит намного чище:-) Изображение (1): полностью заполненная плата контроллера Изображение (2): лицевая сторона голой печатной платы Изображение (2): задняя сторона Есть разъемы, выходящие за порты PORTC и PORTD микросхемы ATmega168 / 328 и 5V / GND. Эти порты содержат последовательные линии RX, TX, I2Линии C, линии цифрового ввода / вывода и 7 линий ADC. Это предназначено для укладки щитов на тыльную сторону платы. Расстояние подходит для использования перфокарта (0,1 дюйма). Загрузчик может быть прошит с помощью заголовка ICSP (работает с USBtinyISP от adafruit). Как только это будет сделано, просто используйте стандартный последовательный адаптер FTDI USB / TTL или аналогичный. Я также добавил перемычку автоматического сброса-отключения. Я также подготовил небольшой Perl-скрипт (см. Мой блог), который включает автоматический сброс с помощью кабелей FTDI, что обычно не работает из коробки (RTS vs. DTR line). Это работает в Linux, может быть, и на MAC. Печатные платы и несколько наборов DIY доступны в моем блоге. Требуется пайка SMD! Инструкции по сборке и источники светодиодных матриц см. В файлах PDF.

Шаг 6: Приложение: Монитор загрузки ЦП для Linux с использованием Perl

Это очень простой монитор нагрузки с графиком истории. Он основан на сценарии Perl, который собирает "среднюю загрузку системы" каждые 1 с с помощью iostat. Данные хранятся в массиве, который смещается при каждом обновлении. Новые данные добавляются вверху списка, самая старая запись выталкивается. Более подробная информация и загрузки (код…) доступны в моем блоге.

Шаг 7. Приложение: общение с другими модулями с помощью I²C

Применение: общение с другими модулями с использованием I²C
Применение: общение с другими модулями с использованием I²C

Это всего лишь доказательство принципа и далеко не самое простое решение для этой работы.2C позволяет напрямую адресовать до 127 «подчиненных» плат. Здесь плата с правой стороны на видео является «ведущей» (которая инициирует все передачи), левая плата - ведомой (ожидающей данных). я2C нужны 2 сигнальные линии и обычные силовые линии (+, -, SDA, SCL). Поскольку это шина, все устройства подключаются к ней параллельно.

Шаг 8: Приложение: «Game Cube»:-)

Заявка
Заявка

Просто странная мысль. Эта тоже вписывается в деревянный корпус, показанный на вступительной странице. На его задней стороне 5 кнопок, которые можно использовать для простой игры. КОНЕЦ?

Шаг 9: Отображение изображений / анимаций на матрице - быстрый взлом

Отображение изображений / анимаций на матрице - Quick Hack
Отображение изображений / анимаций на матрице - Quick Hack
Отображение изображений / анимаций на матрице - Quick Hack
Отображение изображений / анимаций на матрице - Quick Hack
Отображение изображений / анимаций на матрице - Quick Hack
Отображение изображений / анимаций на матрице - Quick Hack
Отображение изображений / анимаций на матрице - Quick Hack
Отображение изображений / анимаций на матрице - Quick Hack

Таким образом, у него есть только 8x8 пикселей и доступно несколько цветов. Сначала используйте что-то вроде GIMP, чтобы уменьшить ваше любимое изображение точно до 8x8 пикселей и сохранить его как необработанный формат ".ppm" (не ASCII). PPM легко читать и обрабатывать с помощью сценария Perl. Использование ImageMagick и инструмента командной строки convert не будет работать должным образом. Загрузите новый код Arduino, а затем используйте Perl-скрипт для загрузки в контроллер. Мерцание - это просто несоответствие обновления светодиода и частоты кадров моей камеры. После небольшого обновления кода он работает довольно быстро. Все изображения передаются в реальном времени по последовательному каналу, как вы их видите. Более длинные анимации могут храниться во внешнем EEPROM, как это делается в различных платах с поддержкой спиц-поворотов.

Шаг 10: Интерактивное управление сохраненными анимациями

Зачем позволять микроконтроллеру все самое интересное? Культ Arduino - это все о физических вычислениях и взаимодействии, поэтому просто добавьте потенциометр и возьмите все под контроль! Использование одного из 8 входов аналого-цифрового преобразователя делает это очень простым.

Шаг 11: Отображение живого видео

Использование сценария Perl и нескольких модулей позволяет довольно легко показывать квази-живое видео в системах X11. Он был написан на Linux и может работать и с MAC. Он работает следующим образом: - получить положение курсора мыши - захватить прямоугольник размером NxN с центром в центре курсора - масштабировать изображение до 8x8 пикселей - отправить его на плату светодиодов - повторить

Шаг 12: больше света почти бесплатно

Больше света почти бесплатно
Больше света почти бесплатно

Всего за два шага яркость можно немного увеличить. Замените резисторы 270 Ом на резисторы 169 Ом и вставьте еще один сдвиговый регистр 74HC595 в IC5.

Рекомендуемые: