64 пикселдик RGB LED дисплей - дагы бир Arduino клону: 12 кадам (сүрөттөр менен)
64 пикселдик RGB LED дисплей - дагы бир Arduino клону: 12 кадам (сүрөттөр менен)
Anonim

Бул дисплей 8x8 RGB LED матрицасына негизделген. Сыноо максатында 4 сменалык регистрди колдонуу менен стандарттык Arduino тактасына (Diecimila) туташтырылган. Жумушка орношкондон кийин, мен аны жасалма ПКБга толтурдум. Сменалык регистрлер 8-бит туурасында жана SPI протоколу менен оңой туташат. Импульстун туурасы модуляциясы түстөрдү аралаштыруу үчүн колдонулат, кийинчерээк дагы. MCUнын RAMинин бир бөлүгү сүрөттү кармоо үчүн кадрдык буфер катары колдонулат. Видео RAM фондо үзгүлтүккө учуроо жолу менен талданат, андыктан колдонуучу компьютер менен сүйлөшүү, баскычтарды окуу жана потенциометр сыяктуу башка пайдалуу иштерди жасай алат. "Arduino" жөнүндө көбүрөөк маалымат: www.arduino.cc

1 -кадам: Түстөрдү аралаштыруу үчүн Pulse Width Modulation

Импульстун туурасы модулу - бул негизинен электрдик түзүлүшкө берилүүчү кубатты абдан тез ӨЧҮРҮП жана ӨЧҮРҮҮ. Колдонууга жарамдуу күч бир мезгил аралыгында алынган квадрат толкун функциясынын математикалык орточо натыйжасынан келип чыгат. Функция КҮЙГӨН абалда канчалык көп турса, ошончолук кубат аласыз. PWM диоддордун жарыктыгына бирдей таасирин тийгизет. AC алдыдагы милдет. 64 RGB LEDдин жарыктыгын жекече контролдоо (= 192 бирдиктүү LED!) Арзан жана оңой жол менен, ошондуктан бүтүндөй ала аласыз. түстөрдүн спектри. Жакшы, эч кандай жылтырак же башка тынчсыздандыруучу таасирлер болбошу керек. Бул жерде адам көзү көрсөткөн жарыктыктын сызыктуу эмес кабыл алынышы эске алынбайт (мисалы, 10% дан 20% га чейинки жарыктык 90% дан 100% га чейин "чоңураак" көрүнөт). PWM алгоритми. LED жарыгы үчүн кодго 7 деген маани берилгенин айт (0, 0). Мындан тышкары, ал жарыктыкта эң көп N кадам бар экенин билет. Код бардык жаркыроо деңгээлдеринде N циклдерин иштетет жана бардык катардагы ар бир LEDди тейлөө үчүн бардык керектүү циклдар. Жарыктык циклдагы x циклинин эсептегичи 7ден кичине болсо, LED күйгүзүлөт. Эгерде ал 7ден чоң болсо, анда LED өчүрүлөт. Муну бардык светодиоддор, жаркыроо деңгээлдери жана негизги түстөр (RGB) үчүн абдан тез жасоо менен, ар бир LED каалаган түстү көрсөтүү үчүн жекече жөнгө салынышы мүмкүн. Калганын ЖК менен сериялык байланышта болуу, баскычтарды окуу, RFID окурман менен сүйлөшүү, I жөнөтүү үчүн колдонсо болот2C модулу башка модулдарга…

2 -кадам: Shift реестрлери жана LED менен сүйлөшүү

Ыкчам реестр - бул маалыматтарды ырааттуу жүктөөгө жана параллелдүү чыгууга мүмкүндүк берген түзүлүш. Тийиштүү чип менен да карама-каршы операция болушу мүмкүн. Arduino веб-сайтында нөөмөт реестрлери боюнча жакшы окуу куралы бар. Светодиоддор 74HC595 түрүндөгү 8-разряддык реестрлер менен башкарылат. Ар бир порт болжол менен 25 мА токту чөгөрө алат. Чөккөн же булактан алынган жалпы ток 70мАдан ашпашы керек. Бул чиптер өтө арзан, андыктан бир даанага 40 центтен ашык төлөбөңүз. LEDлар экспоненциалдык ток / чыңалуу мүнөздөмөсүнө ээ болгондуктан, Омдун мыйзамын колдонуу менен чектөөчү резисторлор болушу керек: R = (V - Vf) / IR = чектөөчү резистор, V = 5V, Vf = LEDдин алдыга чыңалуусу, I = каалаган ток болжол менен 1,8В чыңалуусу бар, көк жана жашыл диапазону 2.5Vдан 3.5Vга чейин. Түстү туура өндүрүү үчүн бир нече нерсени эске алуу керек: мультиметрди колдонуп, адам көзүнүн спектралдык сезгичтиги (кызыл/көк: жаман, жашыл: жакшы), LEDдин белгилүү бир толкун узундугу жана ток. Иш жүзүндө бирөө 3 потенциометрди алып, LED туура ак жарык көрсөтмөйүнчө тууралайт. Албетте, максималдуу LED токтон ашпашы керек. Бул жерде дагы бир маанилүү нерсе, катарларды айдаган сменалык регистр 3x8 светодиодуна ток бериши керек, андыктан токту өтө жогору көтөрбөңүз. Мен бардык светодиоддор үчүн 270Ohm чектөөчү резисторлор менен ийгиликтүү болдум, бирок бул, албетте, LED матрицасынын жасалышына жараша болот. SPI = Сериялык перифериялык интерфейс (Сүрөт (1)). ЖКнын сериялык портторуна карама -каршы (асинхрондук, сааттык сигнал жок), SPIге саат линиясы (SRCLK) керек. Андан кийин, маалымат жарактуу болгондо (чип тандоо / mandal / RCLK) түзмөккө билдирүүчү сигнал линиясы бар. Акырында, эки маалымат линиясы бар, бири MOSI (кожоюнду кожоюн кылуу), экинчиси MISO (кулчулукта мастер) деп аталат. SPI мен сыяктуу эле интегралдык микросхемаларды интерфейстөө үчүн колдонулат2C. Бул долбоорго MOSI, SRCLK жана RCLK керек. Мындан тышкары, иштетүү сызыгы (G) ошондой эле колдонулат. А SPI цикли RCLK линиясын LOWге тартуу менен башталат (Image (2)). MCU өз маалыматын MOSI линиясына жөнөтөт. Анын логикалык абалы SRCLK линиясынын көтөрүлүүчү четиндеги нөөмөт реестри тарабынан тандалат. Цикл RCLK линиясын кайра ЖОГОРУГА тартуу менен токтотулат. Азыр маалыматтар чыгууда жеткиликтүү.

3 -кадам: схемалык

Сүрөт (1) сменалык регистрлердин кантип зымдалганын көрсөтөт. Алар ромашка менен чынжырланган, ошондуктан маалыматтарды бул чынжырга жана ал аркылуу которууга болот. Андыктан дагы нөөмөт реестрин кошуу оңой.

Сүрөт (2) калган схеманы MCU, туташтыргычтар, кварцтарды көрсөтөт … Тиркелген PDF файлы басып чыгарууга эң ылайыктуу болгон иштерди камтыйт.

4 -кадам: C ++ Булак коду

C/C ++ тилинде, адатта, функцияларды коддоодон мурун алардын прототиптери болушу керек.#Int int (void); void do_something (void); int main (void) {do_something ();} void do_something (void) {/ * comment */кирет } Arduino IDE бул кадамды талап кылбайт, анткени функциянын прототиптери автоматтык түрдө түзүлөт. Ошондуктан функция прототиптери бул жерде көрсөтүлгөн коддо көрүнбөйт. Image (1): setup () functionImage (2): spi_transfer () функциясы ATmega168 чипинин аппараттык SPIин колдонуп (тезирээк иштейт) Image (3): framebuffer code using таймер1 ашуусу үзгүлтүккө учурайт. Жаңы башталуучулар үчүн бир аз сырдуу көрүнгөн коддор while (! (SPSR & (1 << SPIF)))}} MCU регистрлерин түз колдонот. Бул мисал: "SPSR реестриндеги SPIF-бит эч нерсе кылбагыла". Мен жөн эле баса белгилеп кетким келет, бул стандарттык долбоорлор үчүн жабдуулар менен тыгыз байланышкан нерселер менен күрөшүүнүн кажети жок. Жаңы баштагандар муну менен коркпошу керек.

5 -кадам: Гаджет бүттү

Бардык көйгөйлөрдү чечип, кодду иштеткенден кийин, мен жөн эле ПХБ макетин түзүп, аны фаб үйүнө жөнөтүшүм керек болчу. Бул ушунчалык таза көрүнөт:-) Сүрөт (1): толугу менен толтурулган контролер тактасы Сүрөт (2): жылаңач PCBнин алдыңкы жагы Сүрөт (2): арткы тарабы ATmega168/328 чиптин PORTC жана PORTD сындыруучу туташтыргычтары бар жана 5V/GND. Бул порттордо сериялык RX, TX линиялары, I бар2C линиялары, санариптик I/O линиялары жана 7 ADC линиялары. Бул тактанын арт жагына калканчтарды коюу үчүн арналган. Аралыгы perfboard (0.1in) колдонуу үчүн жарактуу болуп саналат. Жүктөгүч ICSP аталышын колдонуу менен жаркырап болот (adafruit анын USBtinyISP менен иштейт). Бул жасала баштаганда, жөн эле стандарттуу FTDI USB/TTL сериялык адаптерин же окшошун колдонуңуз. Мен ошондой эле автоматтык түрдө баштапкы абалга келтирүүчү секирүүчү коштум. Мен дагы бир аз Perl скриптин даярдадым (менин блогумду караңыз), бул FTDI кабелдери менен автоматтык түрдө баштапкы абалга келтирүүгө мүмкүндүк берет, ал адатта кутудан иштебейт (RTS vs. DTR линиясы). Бул Linuxта иштейт, балким MAC. Принттелген схемалар жана менин блогумда бир нече DIY топтомдору бар. SMD ширетүү талап кылынат! LED матрицалары үчүн курулуш инструкциялары жана булактары үчүн PDF файлдарын караңыз.

6 -кадам: Колдонмо: Perl колдонуп Linux үчүн CPU Load Monitor

Бул тарых сюжети бар эң негизги жүктөө монитору. Бул Perl скриптине негизделген, системанын "орточо жүктөмүн" ар 1с сайын iostat аркылуу чогултат. Маалыматтар ар бир жаңыртууда жылдырылган массивде сакталат. Жаңы маалыматтар тизменин башына кошулат, эң эски жазуу чыгарылат. Кененирээк маалымат жана жүктөөлөр (код…) менин блогумда жеткиликтүү.

7 -кадам: Колдонмо: I²Cди колдонуу менен башка модулдар менен сүйлөшүү

Бул принциптин далили жана бул жумуш үчүн эң жөнөкөй чечим эмес2C түздөн -түз 127 "кул" тактасына кайрылууга мүмкүндүк берет. Бул жерде видеонун оң жагындагы такта - "кожоюн" (ал бардык которууларды баштайт), сол такта - кул (маалыматтарды күтүп). Мен2С 2 сигнал линиясына жана кадимки электр линияларына муктаж (+, -, SDA, SCL). Бул автобус болгондуктан, ага бардык түзмөктөр параллелдүү түрдө туташкан.

8-кадам: Колдонмо: "Game Cube":-)

Жөн эле таң калыштуу ой. Бул дагы кириш барагында көрсөтүлгөн жыгач корпуска туура келет. Анын арт жагында 5 баскыч бар, ал жөнөкөй оюнду ойноо үчүн колдонулушу мүмкүн.

9 -кадам: Матрицада сүрөттөрдү / анимацияларды көрсөтүү - Quick Hack

Ошентип, 8x8 пиксел жана бир нече түстөр гана бар. Биринчиден, Gimp сыяктуу нерсени колдонуп, сүйүктүү сүрөтүңүздү так 8x8 пикселге чейин азайтыңыз жана ".ppm" чийки форматында сактаңыз (ASCII эмес). PPM Perl скриптинде окуу жана иштетүү оңой. ImageMagick жана "Convert" буйрук сабынын куралы туура иштебейт. Жаңы arduino кодун жүктөп, андан кийин контроллерге жүктөө үчүн Perl скриптин колдонуңуз. Жаркыроо - бул LED жаңыртуусу менен камерамдын кадр ылдамдыгынын дал келбестиги. Кодду бир аз жаңырткандан кийин, ал абдан сыдырым иштейт. Бардык сүрөттөр сиз көрүп тургандай сериал аркылуу жандуу түрдө өткөрүлүп берилет. Узунураак анимациялар тышкы EEPROMда сакталышы мүмкүн, анткени ал ар кандай сүйлөөчү такталарда жасалат.

10 -кадам: Сакталган анимацияларды интерактивдүү башкаруу

Эмне үчүн микроконтроллердин баардык көңүлү ачылсын? Санариптик конвертерге 8 аналогдун бирин колдонуу абдан жөнөкөй кылат.

11 -кадам: Live Video көрсөтүү

Perl скриптин жана бир нече модулдарды колдонуу X11 тутумдарында квази жандуу видеону көрсөтүүнү оңой кылат. Бул линукс боюнча коддолгон жана MACтерде да иштей алат. Бул төмөнкүдөй иштейт:- чычкан курсорунун ордун алуу- курсордун борборунда жайгашкан NxN пикселинин кутусун тартуу- 8х8 пикселге чейин сүрөт- LED тактасына жөнөтүү- кайталоо

12 -кадам: Дагы жарык дээрлик бекер

Жарыктыкты эки гана кадам менен бир аз жогорулатууга болот. 270Ω резисторлорду 169Ω менен алмаштырыңыз жана IC5ге дагы 74HC595 сменалык реестрди коюңуз.

Сунушталууда: