Mundarija:
- 1 -qadam: Ranglarni aralashtirish uchun puls kengligi modulyatsiyasi
- 2 -qadam: Shift registrlari va LEDlar bilan gaplashish
- 3 -qadam: sxematik
- 4 -qadam: C ++ manba kodi
- 5 -qadam: tugallangan gadjet
- 6 -qadam: Ilova: Perl yordamida Linux uchun CPU yuklanish monitor
- 7 -qadam: Ilova: I²C yordamida boshqa modullar bilan suhbat
- 8-qadam: Ilova: "Game Cube":-)
- 9 -qadam: Matrisada tasvirlar / animatsiyalarni ko'rsatish - Hack
- 10 -qadam: Saqlangan animatsiyalarni interaktiv boshqarish
- 11 -qadam: Jonli videoni ko'rsatish
- 12 -qadam: Ko'proq yorug'lik deyarli bepul
2025 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2025-01-13 06:58
Ushbu displey 8x8 RGB LED matritsaga asoslangan. Sinov maqsadida u 4 smenali registrlar yordamida standart Arduino platasiga (Diecimila) ulandi. Ishga kirgandan so'ng, men uni fabbed PCB bilan to'ldirdim. Shift registrlarining kengligi 8-bit bo'lib, ular SPI protokoli bilan osongina bog'lanadi. Ranglarni aralashtirish uchun puls kengligi modulyatsiyasi ishlatiladi, bu haqda keyinroq. MCU operativ xotirasining bir qismi tasvirni ushlab turish uchun ramka buferi sifatida ishlatiladi. Video operativ xotira fonda uzilish tartibi bilan tahlil qilinadi, shuning uchun foydalanuvchi kompyuter bilan gaplashish, tugmalarni o'qish va potansiyometr kabi boshqa foydali ishlarni bajarishi mumkin. "Arduino" haqida ko'proq ma'lumot: www.arduino.cc
1 -qadam: Ranglarni aralashtirish uchun puls kengligi modulyatsiyasi
Puls kengligi moduli - NIMA? Puls kengligi modulyatsiyasi, asosan, elektr qurilmaga uzatiladigan quvvatni juda tez yoqish va o'chirishdir. Qo'llaniladigan quvvat bir davr oralig'ida olingan kvadrat to'lqin funktsiyasining matematik o'rtacha qiymatidan kelib chiqadi. Funktsiya ON holatida qancha uzoq bo'lsa, shuncha ko'p quvvat olasiz. PWM LEDlarning yorqinligiga o'zgaruvchan tok chiroqlari ta'siriga o'xshash ta'sir ko'rsatadi. Oldinda vazifa - 64 RGB LED (= 192 ta bitta LED!) Yorqinligini individual tarzda nazorat qilish, shuning uchun hammasini to'liq olish mumkin. ranglar spektri. Yaxshisi, miltillovchi yoki boshqa bezovta qiluvchi ta'sirlar bo'lmasligi kerak. Bu erda inson ko'zining yorqinligini chiziqli bo'lmagan his qilish hisobga olinmaydi (masalan, 10% dan 20% gacha yorqinlik 90% dan 100% gacha "katta" ko'rinadi). PWM algoritmi. LEDning yorqinligi uchun kodga 7 qiymati berilganligini ayting (0, 0). Bundan tashqari, u nashrida maksimal N qadam borligini biladi. Kod har bir LED yoritgichiga xizmat ko'rsatish uchun barcha mumkin bo'lgan yorqinlik darajalari uchun N halqalarni va barcha kerakli halqalarni ishlaydi. Yorug'lik pastadiridagi pastadir hisoblagichi x 7dan kichik bo'lsa, LED yonadi. Agar u 7 dan katta bo'lsa, LED o'chadi. Buni har bir LED, yorqinlik darajasi va asosiy ranglar (RGB) uchun juda tez bajarib, har bir LED kerakli rangni ko'rsatish uchun alohida sozlanishi mumkin. Qolganlari kompyuter bilan ketma -ket muloqot qilish, tugmalarni o'qish, RFID o'quvchi bilan gaplashish, I yuborish uchun ishlatilishi mumkin2C ma'lumotlari boshqa modullarga …
2 -qadam: Shift registrlari va LEDlar bilan gaplashish
Shift registri - bu ma'lumotlarni ketma -ket yuklashga va parallel chiqishga imkon beruvchi qurilma. Arduino veb-saytida sms registrlari bo'yicha yaxshi qo'llanma mavjud. Har bir port taxminan 25 mA tok manbai bo'lishi mumkin. Chiqib ketgan yoki manba qilingan chip uchun umumiy oqim 70mA dan oshmasligi kerak. Bu chiplar juda arzon, shuning uchun har bir dona uchun 40 tsentdan oshmaydi. LEDlar ekspansional oqim / kuchlanish xarakteristikasiga ega bo'lganligi sababli, Ohm qonunidan foydalanib: R = (V - Vf) / IQ = chegaralovchi qarshilik, V = 5V, Vf = LEDning old kuchlanish, I = kerakli oqim Qizil LEDlar taxminan 1,8V oldinga kuchlanish, ko'k va yashil diapazon 2,5V dan 3,5V gacha. Buni aniqlash uchun oddiy multimetrdan foydalaning. Rangni to'g'ri aks ettirish uchun bir nechta narsani hisobga olish kerak: inson ko'zining spektral sezuvchanligi (qizil/ko'k: yomon, yashil: yaxshi), LEDning ma'lum to'lqin uzunligi va tokdagi samaradorligi. Amalda, faqat 3 ta potentsiometrni oladi va LED to'g'ri oq yorug'lik chiqmaguncha ularni moslashtiradi. Albatta, maksimal LED oqimi oshmasligi kerak. Bu erda muhim bo'lgan narsa shundaki, qatorlarni boshqaruvchi smenali registr 3x8 LED -larga tok etkazib berishi kerak, shuning uchun tokni juda baland ko'tarmang. Men barcha LEDlar uchun 270 Ohm cheklovli rezistorlar bilan muvaffaqiyat qozonganman, lekin bu, albatta, LED matritsasining turiga bog'liq. Shift registrlari SPI seriyali bilan bog'langan. SPI = Serial periferik interfeys (Rasm (1)). Kompyuterlarning ketma -ket portlaridan farqli o'laroq (asenkron, soat signalisiz), SPIga soat chizig'i (SRCLK) kerak. So'ngra, ma'lumotlar to'g'ri bo'lganda (chip tanlash / mandal / RCLK) qurilmaga xabar beradigan signal chizig'i mavjud. Nihoyat, ikkita ma'lumotlar uzatish liniyasi mavjud, ulardan biri MOSI deb ataladi, ikkinchisi MISO deb ataladi. SPI, xuddi men kabi, integral mikrosxemalar bilan ishlash uchun ishlatiladi2C. Bu loyihaga MOSI, SRCLK va RCLK kerak. Bundan tashqari, yoqish liniyasi (G) ham ishlatiladi. SPI aylanishi RCLK chizig'ini LOW ga tortish bilan boshlanadi (Rasm (2)). MCU o'z ma'lumotlarini MOSI liniyasiga yuboradi. Uning mantiqiy holati SRCLK chizig'ining ko'tarilgan chekkasidagi siljish registri yordamida tanlanadi. RCLK chizig'ini HIGH holatiga qaytarish orqali tsikl to'xtatiladi. Endi ma'lumotlar chiqishda mavjud.
3 -qadam: sxematik
Rasm (1) smenali registrlarning qanday simli ulanganligini ko'rsatadi. Ular zanjirband qilingan, shuning uchun ma'lumotlarni ushbu zanjirga o'tkazish mumkin. Shunday qilib, ko'proq smenali registrlarni qo'shish oson.
Rasm (2) MCU, ulagichlar, kvarts bilan sxemaning qolgan qismini ko'rsatadi … Qo'shilgan PDF -faylda chop etish uchun eng yaxshisi bor.
4 -qadam: C ++ manba kodi
C/C ++ da odatda funktsiyalarni kodlashdan oldin ularni prototip qilish kerak bo'ladi.#O'z ichiga int main (void); void do_something (void); int main (void) {do_something ();} void do_something (void) {/ * comment */ } Arduino IDE bu qadamni talab qilmaydi, chunki funktsiyalar prototiplari avtomatik ravishda yaratiladi. Shuning uchun bu erda ko'rsatilgan kodda funktsiya prototiplari ko'rinmaydi. Image (1): setup () functionImage (2): spi_transfer () funktsiyasi ATmega168 chipining apparat SPI yordamida (tezroq ishlaydi) Tasvir (3): ramka bufer kodi taymer1 to'lib toshishi, yangi boshlanuvchilar uchun biroz sirli ko'rinishga ega kod qismlari while (! (SPSR & (1 << SPIF)))}} MCU registrlaridan bevosita foydalanadi. Bu misol: "SPSR registrida SPIF-bit o'rnatilmagan bo'lsa ham, hech narsa qilmang". Shuni ta'kidlashni istardimki, standart loyihalar uchun bu narsalar bilan apparat bilan chambarchas bog'liq bo'lish shart emas. Yangi boshlanuvchilar bundan qo'rqmasligi kerak.
5 -qadam: tugallangan gadjet
Barcha muammolarni hal qilib, kodni ishga tushirgandan so'ng, men faqat PCB sxemasini tuzib, uni uyga jo'natishim kerak edi. Bu juda toza ko'rinadi:-) Rasm (1): to'liq to'ldirilgan boshqaruv paneli Tasvir (2): yalang'och PCB tasviri (2): orqa tomoni ATmega168/328 chipining PORTC va PORTD va 5V/GND uzuvchi ulagichlari bor.. Bu portlarda ketma -ket RX, TX liniyalari, I2C liniyalari, raqamli kirish -chiqish liniyalari va 7 ADC liniyalari. Bu qalqonlarni taxtaning orqa tomoniga yopishtirish uchun mo'ljallangan. Bo'shliq perfboarddan foydalanish uchun javob beradi (0,1 dyuym). Bootloaderni ICSP sarlavhasi yordamida o'chirish mumkin (adafruit USBtinyISP bilan ishlaydi). Bu amalga oshishi bilan, standart FTDI USB/TTL ketma -ket adapteridan yoki shunga o'xshashidan foydalaning. Men avtomatik sozlamalarni o'chirib qo'yishni ham qo'shdim. Men ham bir oz Perl skriptini tayyorladim (mening blogimga qarang), bu odatda qutidan chiqmaydigan FTDI kabellari bilan avtomatik tiklash imkonini beradi (RTS va DTR liniyasi). Bu Linuxda, balki MAC -da ishlaydi, mening blogimda bosilgan elektron platalar va bir nechta DIY to'plamlari mavjud. SMD lehimlash kerak! LED matritsalarini yaratish bo'yicha ko'rsatmalar va manbalar uchun PDF fayllarini ko'ring.
6 -qadam: Ilova: Perl yordamida Linux uchun CPU yuklanish monitor
Bu tarix chizig'i bo'lgan juda oddiy yuk monitor. Bu iostat yordamida har 1 soniyada tizimning "o'rtacha yuklanishini" yig'adigan Perl skriptiga asoslangan. Ma'lumotlar har bir yangilanishda siljigan qatorda saqlanadi. Ro'yxatning yuqori qismiga yangi ma'lumotlar qo'shiladi, eng eski yozuv o'chiriladi. Batafsil ma'lumot va yuklamalar (kod …) mening blogimda mavjud.
7 -qadam: Ilova: I²C yordamida boshqa modullar bilan suhbat
Bu faqat printsipning isboti va hozircha bu ish uchun eng oddiy echim emas2C 127 tagacha "qul" taxtalarga to'g'ridan -to'g'ri murojaat qilish imkonini beradi. Bu erda videoning o'ng tomonidagi taxta - "usta" (u barcha uzatishni boshlaydi), chap taxta - qul (ma'lumotlarni kutish). Men2C ga 2 ta signal chizig'i va odatdagi elektr uzatish liniyalari (+, -, SDA, SCL) kerak. Bu avtobus bo'lgani uchun unga barcha qurilmalar parallel ulangan.
8-qadam: Ilova: "Game Cube":-)
Bu g'ayrioddiy fikr, bu kirish sahifasida ko'rsatilgan yog'och panjaraga ham mos keladi. Uning orqa tomonida 5 ta tugmacha bor, uni oddiy o'yin o'ynash uchun ishlatish mumkin.
9 -qadam: Matrisada tasvirlar / animatsiyalarni ko'rsatish - Hack
Shunday qilib, u faqat 8x8 pikselli va bir nechta rangga ega, birinchi navbatda Gimp kabi biror narsani ishlatib, sevimli rasmingizni aynan 8x8 pikselgacha qisqartiring va ".ppm" xom formatida saqlang (ASCII emas). PPMni Perl skriptida o'qish va qayta ishlash oson. ImageMagick va "aylantirish" buyruq satri vositasidan foydalanish to'g'ri ishlamaydi. Yangi arduino kodini yuklang, so'ngra boshqaruvchiga yuklash uchun Perl skriptidan foydalaning. Miltillovchi - bu LEDni yangilash va kameramning kadr tezligiga mos kelmasligi. Kodni biroz yangilaganingizdan so'ng, u juda zippy ishlaydi. Hamma tasvirlar siz ko'rgandek ketma-ket uzatiladi, uzoqroq ko'rsatuvlar tashqi EEPROMda saqlanishi mumkin, xuddi har xil plyonkali taxtalarda bo'lgani kabi.
10 -qadam: Saqlangan animatsiyalarni interaktiv boshqarish
Nima uchun mikrokontroller hamma narsadan zavqlanishiga ruxsat berish kerak? 8 ta analogdan raqamli konvertorga kirishni ishlatish juda oddiy.
11 -qadam: Jonli videoni ko'rsatish
Perl skriptidan va bir nechta modullardan foydalanish X11 tizimlarida deyarli jonli videoni ko'rsatishni osonlashtiradi. U linuxda kodlangan va MAC-da ham ishlashi mumkin, u quyidagicha ishlaydi:- sichqoncha kursorining pozitsiyasini oling- kursor markazida joylashgan NxN pikselli qutini oling- tasvirni 8x8 pikselgacha- LED platasiga yuboring. takrorlash
12 -qadam: Ko'proq yorug'lik deyarli bepul
Faqat ikki qadam bilan yorqinlikni biroz oshirish mumkin. 270 Ω rezistorlarni 169 Ω ga almashtiring va boshqa 74HC595 siljish registrini IC5 ga qo'ying.