Оглавление:
- Шаг 1: широтно-импульсная модуляция для смешивания цветов
- Шаг 2: общение с регистрами сдвига и светодиодами
- Шаг 3: Схема
- Шаг 4: Исходный код C ++
- Шаг 5. Готовый гаджет
- Шаг 6: Приложение: Монитор загрузки ЦП для Linux с использованием Perl
- Шаг 7. Приложение: общение с другими модулями с помощью I²C
- Шаг 8: Приложение: «Game Cube»:-)
- Шаг 9: Отображение изображений / анимаций на матрице - быстрый взлом
- Шаг 10: Интерактивное управление сохраненными анимациями
- Шаг 11: Отображение живого видео
- Шаг 12: больше света почти бесплатно
Видео: 64-пиксельный светодиодный дисплей RGB - еще один клон Arduino: 12 шагов (с изображениями)
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:55
Этот дисплей основан на светодиодной матрице 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 ++ обычно нужно прототипировать функции перед их кодированием. # 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
Это всего лишь доказательство принципа и далеко не самое простое решение для этой работы.2C позволяет напрямую адресовать до 127 «подчиненных» плат. Здесь плата с правой стороны на видео является «ведущей» (которая инициирует все передачи), левая плата - ведомой (ожидающей данных). я2C нужны 2 сигнальные линии и обычные силовые линии (+, -, SDA, SCL). Поскольку это шина, все устройства подключаются к ней параллельно.
Шаг 8: Приложение: «Game Cube»:-)
Просто странная мысль. Эта тоже вписывается в деревянный корпус, показанный на вступительной странице. На его задней стороне 5 кнопок, которые можно использовать для простой игры. КОНЕЦ?
Шаг 9: Отображение изображений / анимаций на матрице - быстрый взлом
Таким образом, у него есть только 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.
Рекомендуемые:
Деревянный светодиодный игровой дисплей на базе Raspberry Pi Zero: 11 шагов (с изображениями)
Деревянный светодиодный игровой дисплей на базе Raspberry Pi Zero: в рамках этого проекта реализуется светодиодный дисплей на основе WS2812 с разрешением 20x10 пикселей и размером 78x35 см, который можно легко установить в гостиной, чтобы играть в ретро-игры. Первая версия этой матрицы была построена в 2016 году и перестроена многими другими людьми. Это ожидание
Встроенный светодиодный дисплей Arduino Games: 7 шагов (с изображениями)
Встроенный светодиодный дисплей Игры Arduino: игровая система со светодиодной лестницей. Attiny-85, оснащенный аппаратным и программным обеспечением для воспроизведения динамичного "видео" игры на встроенном светодиодном дисплее. Он имеет мультиплексный 12-светодиодный релейный дисплей и поддерживает до 6 кнопочных входов и опти
Один дисплей от первого лица, чтобы управлять ими всеми !: 10 шагов (с изображениями)
Один дисплей POV, чтобы управлять ими всеми !: Мотивация Мне очень нравятся дисплеи POV (постоянство зрения)! На них не только интересно смотреть, но и сложно их развивать. Это действительно междисциплинарная задача. Вам понадобится много навыков: механика, электроника, программирование и
Светодиодный дисплей RGB: 5 шагов (с изображениями)
Светодиодный дисплей RGB: это простой проект, в котором используется мало материалов и инструментов, а также всего 5 шагов. Используются рама, противень и комплект светодиодной ленты. Используемые материалы уже были под рукой, однако есть много материалов-заменителей
Светодиодный матричный дисплей с прокруткой 48 X 8 с использованием Arduino и регистров сдвига: 6 шагов (с изображениями)
Светодиодный матричный дисплей с прокруткой 48 x 8 с использованием Arduino и регистров сдвига: Привет всем! Это мой первый учебник, и он посвящен созданию программируемой светодиодной матрицы с прокруткой 48 x 8 с использованием регистров сдвига Arduino Uno и 74HC595. Это был мой первый проект с платой для разработки Arduino. Это был вызов, брошенный м