Съдържание:

64 -пикселов RGB LED дисплей - друг клонинг на Arduino: 12 стъпки (със снимки)
64 -пикселов RGB LED дисплей - друг клонинг на Arduino: 12 стъпки (със снимки)

Видео: 64 -пикселов RGB LED дисплей - друг клонинг на Arduino: 12 стъпки (със снимки)

Видео: 64 -пикселов RGB LED дисплей - друг клонинг на Arduino: 12 стъпки (със снимки)
Видео: STM32 - программирование для начинающих. Пошагово. CubeMX CubeIDE 2024, Ноември
Anonim
64 -пикселов RGB LED дисплей - Друг клонинг на Arduino
64 -пикселов RGB LED дисплей - Друг клонинг на Arduino
64 -пикселов RGB LED дисплей - Друг клонинг на Arduino
64 -пикселов RGB LED дисплей - Друг клонинг на Arduino
64 -пикселов RGB LED дисплей - друг клонинг на Arduino
64 -пикселов RGB LED дисплей - друг клонинг на Arduino

Този дисплей е базиран на 8x8 RGB LED матрица. За целите на тестването той беше свързан към стандартна платка Arduino (Diecimila), използвайки 4 регистъра за смяна. След като го задействах, го представих на сглобена печатна платка. Регистрите за смяна са широки 8 бита и лесно се свързват със SPI протокола. Модулацията с импулсна ширина се използва за смесване на цветовете, повече за това по -късно. Част от RAM на MCU се използва като рамков буфер за задържане на изображението. Видео RAM се анализира от програма за прекъсване във фонов режим, така че потребителят може да прави други полезни неща като разговор с компютър, четене на бутони и потенциометри. Повече информация за "Arduino": www.arduino.cc

Стъпка 1: Модулация на импулсната ширина за смесване на цветове

Модулация на ширината на импулса за смесване на цветове
Модулация на ширината на импулса за смесване на цветове

Модулът на широчината на импулса - КАКВО Импулсно -широчината модулация по същество включва и изключва захранването, подадено към електрическо устройство, доста бързо. Използваемата мощност е резултат от математическата средна стойност на функцията с квадратна вълна, взета за интервала от един период. Колкото по -дълго функцията остава в положение ON, толкова повече енергия получавате. ШИМ има същия ефект върху яркостта на светодиодите като димер на променливотокови светлини. Предстоящата задача е индивидуално да контролира яркостта на 64 RGB светодиода (= 192 единични светодиода!) По евтин и лесен начин, така че човек може да получи цялата спектър от цветове. За предпочитане не трябва да има трептене или други смущаващи ефекти. Нелинейното възприемане на яркостта, проявено от човешкото око, няма да бъде взето предвид тук (напр. Разликата между 10% и 20% яркост изглежда "по -голяма" от между 90% и 100%). Изображение (1) илюстрира принципа на работа на алгоритъма на ШИМ. Кажете, че на кода е дадена стойност 7 за яркостта на LED (0, 0). Освен това той знае, че има максимум N стъпки в яркостта. Кодът изпълнява N контури за всички възможни нива на яркост и всички необходими контури за обслужване на всеки отделен светодиод във всички редове. В случай, че броячът на контура x в контура за яркост е по -малък от 7, светодиодът се включва. Ако е по -голямо от 7, светодиодът се изключва. Правейки това много бързо за всички светодиоди, нива на яркост и основни цветове (RGB), всеки светодиод може да се регулира индивидуално, за да покаже желания цвят. Измерванията с осцилоскоп показват, че кодът за опресняване на дисплея отнема около 50% време на процесора. Останалите могат да се използват за извършване на серийна комуникация с компютър, четене на бутони, разговор с RFID четец, изпращане на I2C данни към други модули …

Стъпка 2: Говорете с регистрите за смяна и светодиодите

Говорете с регистрите за смяна и светодиодите
Говорете с регистрите за смяна и светодиодите
Говорете с регистрите за смяна и светодиодите
Говорете с регистрите за смяна и светодиодите

Регистърът за смяна е устройство, което позволява серийно зареждане на данни и паралелен изход. Обратната операция е възможна и със съответния чип. Има добър урок за регистрите за смяна на уебсайта на arduino. Светодиодите се задвижват от 8-битови регистри за смяна от типа 74HC595. Всеки порт може да генерира или потъне около 25mA ток. Общият ток на потънал или източник на чип не трябва да надвишава 70mA. Тези чипове са изключително евтини, така че не плащайте повече от около 40 цента на парче. Тъй като светодиодите имат експоненциална характеристика на ток / напрежение, трябва да има ограничители на тока. Използвайки закона на Ом: R = (V - Vf) / IR = ограничаващ резистор, V = 5V, Vf = предното напрежение на LED, I = желания ток Червени светодиоди имат напрежение напред от около 1,8 V, син и зелен диапазон от 2,5 V до 3,5 V. Използвайте обикновен мултицет, за да определите това. За правилното възпроизвеждане на цветовете трябва да се вземат предвид няколко неща: спектралната чувствителност на човешкото око (червено/синьо: лошо, зелено: добро), ефективността на светодиода при определена дължина на вълната и ток. На практика човек просто взема 3 потенциометра и ги регулира, докато светодиодът покаже подходяща бяла светлина. Разбира се, максималният светодиоден ток не трябва да се превишава. Важното тук също е, че регистърът на смяна, задвижващ редовете, трябва да подава ток към 3x8 светодиоди, така че е по -добре да не увеличавате тока твърде високо. Успях с ограничаващите резистори от 270Ohm за всички светодиоди, но това зависи от марката на LED матрицата, разбира се. Регистрите за смяна са свързани със SPI сериен. SPI = Сериен периферен интерфейс (Изображение (1)). За разлика от серийните портове на компютрите (асинхронен, без тактов сигнал), SPI се нуждае от тактова линия (SRCLK). След това има сигнална линия, която казва на устройството кога данните са валидни (chip select / latch / RCLK). Накрая има две линии за данни, едната се нарича MOSI (master out slave in), другата се нарича MISO (master in slave out). SPI се използва за интерфейс на интегрални схеми, точно както аз2В. Този проект се нуждае от MOSI, SRCLK и RCLK. Освен това се използва и разрешаващата линия (G). SPI цикълът се стартира чрез издърпване на линията RCLK до LOW (Изображение (2)). MCU изпраща своите данни по MOSI линията. Логическото му състояние се измерва от регистъра за смяна на нарастващия ръб на линията SRCLK. Цикълът се прекратява чрез издърпване на линията RCLK обратно на HIGH. Сега данните са достъпни на изходите.

Стъпка 3: Схеми

Схематично
Схематично
Схематично
Схематично

Изображение (1) показва как са свързани регистрите за смяна. Те са свързани с маргаритка, така че данните могат да се прехвърлят в тази верига, а също и през нея. Следователно добавянето на повече регистри за смяна е лесно.

Изображение (2) показва останалата част от схемата с MCU, конектори, кварц … Прикаченият 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) {/ * коментар */ } IDE на Arduino не изисква тази стъпка, тъй като прототипите на функции се генерират автоматично. Следователно прототипите на функциите няма да се показват в кода, показан тук. прекъсване при препълване на таймер1. Части от код, които имат леко загадъчен вид за начинаещи, напр докато (! (SPSR & (1 << SPIF))) {} използвайте регистрите на MCU директно. Този пример с думи: "докато SPIF-битът в регистъра SPSR не е настроен, не прави нищо". Искам само да подчертая, че за стандартните проекти наистина не е необходимо да се занимаваме с тези неща, толкова тясно свързани с хардуера. Начинаещите не трябва да се плашат от това.

Стъпка 5: Завършена притурка

Завършена притурка
Завършена притурка
Завършена притурка
Завършена притурка
Завършена притурка
Завършена притурка

След като реших всички проблеми и стартирах кода, просто трябваше да създам оформление на печатна платка и да го изпратя до страхотна къща. Изглежда толкова по-чисто:-) Изображение (1): напълно запълнена контролна платка Изображение (2): предната страна на голата печатна платка Изображение (2): задната страна Има съединители, прекъсващи PORTC и PORTD на чипа ATmega168/328 и 5V/GND. Тези портове съдържат серийни RX, TX линии, I2C линии, цифрови I/O линии и 7 ADC линии. Това е предназначено за подреждане на щитове от задната страна на дъската. Разстоянието е подходящо за използване на perfboard (0,1 инча). Буутлоудъра може да се мига с помощта на заглавката на ICSP (работи с USBtinyISP на adafruit). Веднага щом това стане, просто използвайте стандартен FTDI USB/TTL сериен адаптер или подобен. Добавих и джъмпер за автоматично нулиране и деактивиране. Също така съм приготвил малък скрипт на Perl (вижте моя блог), който позволява автоматично нулиране с FTDI кабели, което обикновено не работи от кутията (RTS срещу DTR линия). Това работи на Linux, може би на MAC. В моя блог са налични печатни платки и няколко DIY KIT. Изисква се SMD запояване! Вижте PDF файловете за инструкции за изграждане и източници за LED матрици.

Стъпка 6: Приложение: CPU Load Monitor за Linux, използващ Perl

Това е много основен монитор за зареждане с исторически сюжет. Той се основава на скрипт на Perl, който събира средното натоварване на системата на всеки 1 s, използвайки iostat. Данните се съхраняват в масив, който се измества при всяка актуализация. В горната част на списъка се добавят нови данни, най -старият запис се изтласква. По -подробна информация и изтегляния (код …) са налични в моя блог.

Стъпка 7: Приложение: Разговор с други модули с помощта на I²C

Приложение: Говорене с други модули, използващи I²C
Приложение: Говорене с други модули, използващи I²C

Това е просто доказателство за принцип и далеч не най -простото решение за тази работа. Използвайки I2C позволява директно адресиране до 127 "подчинени" дъски. Тук платката от дясната страна на видеото е "master" (която инициира всички трансфери), лявата дъска е slave (чака данни). Аз2C се нуждае от 2 сигнални линии и обичайните електропроводи (+, -, SDA, SCL). Тъй като това е шина, всички устройства са свързани към нея паралелно.

Стъпка 8: Приложение: „Game Cube“:-)

Приложение
Приложение

Просто изродска мисъл. Тази също се вписва в дървен корпус, показан на встъпителната страница. На гърба му има 5 бутона, които могат да се използват за игра на проста игра.

Стъпка 9: Показване на изображения / анимации на матрицата - бърз хак

Показване на изображения / анимации на матрицата - бърз хак
Показване на изображения / анимации на матрицата - бърз хак
Показване на изображения / анимации на матрицата - бърз хак
Показване на изображения / анимации на матрицата - бърз хак
Показване на изображения / анимации на матрицата - бърз хак
Показване на изображения / анимации на матрицата - бърз хак
Показване на изображения / анимации на матрицата - бърз хак
Показване на изображения / анимации на матрицата - бърз хак

Така че има само 8x8 пиксела и няколко налични цвята. Първо използвайте нещо като Gimp, за да намалите любимото си изображение до точно 8x8 пиксела и да го запишете като ".ppm" суров формат (не ASCII). PPM е лесен за четене и обработка в Perl скрипт. Използването на ImageMagick и инструмента за преобразуване на командния ред няма да работят правилно. Качете новия код на arduino, след което използвайте скрипта Perl, за да го качите в контролера. Трептенето е просто несъответствие на LED опресняването и честотата на кадрите на камерата ми. След като актуализира малко кода, той работи доста оживено. Всички изображения се прехвърлят на живо през сериен, както ги виждате. По-дългите анимации могат да се съхраняват във външна EEPROM, както се прави в различни платки с спици.

Стъпка 10: Интерактивен контрол на съхраняваните анимации

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

Стъпка 11: Показване на видео на живо

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

Стъпка 12: Повече светлина почти безплатно

Повече светлина почти безплатно
Повече светлина почти безплатно

Само с две стъпки яркостта може да се увеличи доста. Сменете 270Ω резисторите с 169Ω такива и върнете обратно друг регистър за смяна 74HC595 на IC5.

Препоръчано: