Mündəricat:

64 Piksel RGB LED Ekran - Başqa bir Arduino Klonu: 12 Addım (Şəkillərlə birlikdə)
64 Piksel RGB LED Ekran - Başqa bir Arduino Klonu: 12 Addım (Şəkillərlə birlikdə)

Video: 64 Piksel RGB LED Ekran - Başqa bir Arduino Klonu: 12 Addım (Şəkillərlə birlikdə)

Video: 64 Piksel RGB LED Ekran - Başqa bir Arduino Klonu: 12 Addım (Şəkillərlə birlikdə)
Video: Arduino TFT RGB Renkli Ekran - 128x128 - 1,8" inc SD Kart Modüllü Ekran - Arduino Dersleri - 68 - 2024, Iyul
Anonim
64 Piksel RGB LED Ekran - Başqa bir Arduino Klonu
64 Piksel RGB LED Ekran - Başqa bir Arduino Klonu
64 Piksel RGB LED Ekran - Başqa bir Arduino Klonu
64 Piksel RGB LED Ekran - Başqa bir Arduino Klonu
64 Piksel RGB LED Ekran - Başqa bir Arduino Klonu
64 Piksel RGB LED Ekran - Başqa bir Arduino Klonu

Bu ekran 8x8 RGB LED Matrisə əsaslanır. Test məqsədləri üçün 4 növbəli qeyd istifadə edərək standart bir Arduino lövhəsinə (Diecimila) qoşuldu. İşə başladıqdan sonra fabbed PCB üzərində permatize etdim. Vəziyyət qeydləri 8 bit genişliyindədir və SPI protokolu ilə asanlıqla əlaqələndirilir. Rəngləri qarışdırmaq üçün nəbz genişliyi modulyasiyası istifadə olunur, daha sonra bu barədə. MCU RAM -ın bir hissəsi görüntünü saxlamaq üçün çərçivə buferi kimi istifadə olunur. Video RAM, arxa planda bir ara vermə qaydası ilə ayrılır, buna görə istifadəçi kompüterlə danışmaq, düymələri oxumaq və potansiyometrlər kimi digər faydalı şeylər edə bilər. "Arduino" haqqında daha çox məlumat: www.arduino.cc

Addım 1: Rəngləri qarışdırmaq üçün nəbz genişliyi modulyasiyası

Rəngləri qarışdırmaq üçün nəbz genişliyi modulyasiyası
Rəngləri qarışdırmaq üçün nəbz genişliyi modulyasiyası

Pulse width modu - NƏ? Nəbz genişliyi modulyasiyası əslində bir elektrik cihazına verilən enerjini olduqca tez AÇMA və söndürməkdir. İstifadə edilə bilən güc, bir dövr aralığında alınan kvadrat dalğa funksiyasının riyazi ortalamasından qaynaqlanır. Funksiya AÇIK mövqedə nə qədər çox qalsa, o qədər çox güc əldə edəcəksiniz. PWM, LED -lərin parlaqlığına eyni dərəcədə təsir edir. Qarşıdakı vəzifə, 64 RGB LED -in (= 192 tək LED!) Parlaqlığını fərdi olaraq ucuz və asan bir şəkildə idarə etməkdir. rəng spektri. Tercihen titrəmə və ya digər narahat edici təsirlər olmamalıdır. Burada insan gözünün nümayiş etdirdiyi parlaqlığın qeyri -xətti qavranılması nəzərə alınmayacaq (məsələn, 10% ilə 20% parlaqlıq arasındakı fərq 90% ilə 100% arasında "daha böyük" görünür). PWM alqoritmi. LEDin parlaqlığı üçün koda 7 dəyər verildiyini söyləyin (0, 0). Üstəlik, parlaqlıqda maksimum N addım olduğunu bilir. Kod, mümkün olan parlaqlıq səviyyələri üçün N döngələri və bütün satırlarda hər bir LED -ə xidmət etmək üçün lazım olan bütün döngələri idarə edir. Parlaqlıq döngəsindəki x sayğacının 7 -dən kiçik olması halında, LED açılır. 7 -dən çox olarsa, LED sönür. Bütün LEDlər, parlaqlıq səviyyələri və əsas rənglər (RGB) üçün bunu çox tez bir şəkildə yerinə yetirən hər bir LED, istədiyiniz rəngi göstərmək üçün fərdi olaraq tənzimlənə bilər. Osiloskopla edilən ölçülər, ekranın yeniləmə kodunun təxminən 50% CPU vaxtını aldığını göstərir. Qalanları PC ilə ardıcıl ünsiyyət qurmaq, düymələri oxumaq, RFID oxuyucusu ilə danışmaq, I göndərmək üçün istifadə edilə bilər2C modulu digər modullara…

Addım 2: Shift Qeydləri və LEDləri ilə danışın

Shift qeydləri və LED -lərlə söhbət
Shift qeydləri və LED -lərlə söhbət
Shift qeydləri və LED -lərlə söhbət
Shift qeydləri və LED -lərlə söhbət

Dəyişdirmə reyestri, məlumatların ardıcıl olaraq yüklənməsinə və paralel çıxışa imkan verən bir cihazdır. Müvafiq çip ilə də əks əməliyyat mümkündür. Arduino saytında shift qeydləri ilə bağlı yaxşı bir dərs var. LEDlər 74HC595 tipli 8 bitlik keçid registrləri ilə idarə olunur. Hər bir port təxminən 25mA cərəyan mənbəyi və ya batıra bilər. Batan və ya qaynaqlanan çip başına ümumi cərəyan 70 mA -dan çox olmamalıdır. Bu çiplər son dərəcə ucuzdur, buna görə bir parça üçün təxminən 40 sentdən çox ödəməyin. LEDlər eksponensial cərəyan / gərginlik xarakteristikasına malik olduğundan, Ohm qanunu istifadə edərək: R = (V - Vf) / IR = məhdudlaşdırıcı müqavimət, V = 5V, Vf = LED -in irəli gərginliyi, I = istədiyiniz cərəyan təxminən 1.8V irəli gərginliyə, 2.5V -dan 3.5V -ə qədər mavi və yaşıl aralığa malikdir. Bunu müəyyən etmək üçün sadə bir multimetrdən istifadə edin. Düzgün rəng bərpası üçün insan gözünün spektral həssaslığı (qırmızı/mavi: pis, yaşıl: yaxşı), müəyyən bir dalğa uzunluğunda və cərəyanda LED -in səmərəliliyi nəzərə alınmalıdır. Təcrübədə, sadəcə 3 potensiometr götürülür və LED uyğun ağ işıq görünənə qədər onları tənzimləyir. Əlbəttə ki, maksimum LED cərəyanı aşılmamalıdır. Burada da vacib olan, satırları idarə edən keçid reyestrinin 3x8 LED -lərə cərəyan verməli olmasıdır, buna görə də cərəyanı çox yuxarı itələməyin. Bütün LED -lər üçün 270 Ohm məhdudlaşdırıcı rezistorlar ilə müvəffəq oldum, amma bu, əlbəttə ki, LED matrisinin markasından asılıdır. Vəziyyət qeydləri SPI seriyası ilə əlaqələndirilir. SPI = Serial Periferik İnterfeysi (Şəkil (1)). PC -lərdəki serial portlardan fərqli olaraq (asenkron, saat siqnalı yoxdur) SPI -nin bir saat xəttinə (SRCLK) ehtiyacı var. Sonra cihazın məlumatların etibarlı olduğunu bildirən bir siqnal xətti var (çip seçin / mandalı / RCLK). Nəhayət, iki məlumat xətti var, bunlardan biri MOSI (master out slave), digəri MISO (slave out master) adlanır. SPI, mənim kimi inteqral sxemləri birləşdirmək üçün istifadə olunur2C. Bu layihə üçün MOSI, SRCLK və RCLK lazımdır. Əlavə olaraq aktivləşdirmə xətti (G) də istifadə olunur. Bir SPI dövrü, RCLK xəttini LOW -a çəkməklə başlayır (Şəkil (2)). MCU məlumatlarını MOSI xəttinə göndərir. Bunun məntiqi vəziyyəti, SRCLK xəttinin yüksələn kənarındakı keçid reyestrindən nümunə götürülür. Dövr, RCLK xəttini yenidən YÜKSƏ çəkərək dayandırılır. İndi məlumatlar çıxışlarda mövcuddur.

Addım 3: Şematik

Sxematik
Sxematik
Sxematik
Sxematik

Şəkil (1) növbə qeydlərinin necə bağlandığını göstərir. Onlar papatya zəncirinə malikdirlər, buna görə də məlumatlar bu zəncirə və onun vasitəsilə də ötürülə bilər. Buna görə daha çox növbə qeydləri əlavə etmək asandır.

Şəkil (2), MCU, bağlayıcılar, kvars ilə sxemlərin qalan hissəsini göstərir … Əlavə edilmiş PDF faylı çap üçün ən yaxşı olan bütün işləri ehtiva edir.

Addım 4: C ++ Mənbə Kodu

C ++ Mənbə Kodu
C ++ Mənbə Kodu
C ++ Mənbə Kodu
C ++ Mənbə Kodu
C ++ Mənbə Kodu
C ++ Mənbə Kodu

C/C ++ - da ümumiyyətlə kodlaşdırmadan əvvəl funksiyaları prototip etmək lazımdır.#İnt int (void); void do_something (void); int main (void) {do_something ();} void do_something (void) {/ * comment */ } Arduino IDE bu addımı tələb etmir, çünki funksiyaların prototipləri avtomatik olaraq yaradılır. Buna görə də funksiya prototipləri burada göstərilən kodda görünməyəcək. Image (1): setup () functionImage (2): spme_transfer () funksiyası ATmega168 çipinin hardware SPI -dən istifadə edir (daha sürətli işləyir) Image (3): istifadə edərək framebuffer kodu timer1 daşqının kəsilməsi. Yeni başlayanlar üçün bir az sirli görünən kod parçaları while (! (SPSR & (1 << SPIF)))}} MCU qeydlərini birbaşa istifadə edir. Sözlə bu nümunə: "SPSR qeydindəki SPIF-bit heç bir şey etməsə də." Sadəcə vurğulamaq istəyirəm ki, standart layihələr üçün hardware ilə bu qədər yaxından əlaqəli olan şeylərlə məşğul olmaq lazım deyil. Yeni başlayanlar bundan qorxmamalıdır.

Addım 5: Hazır Gadget

Hazır Gadget
Hazır Gadget
Hazır Gadget
Hazır Gadget
Hazır Gadget
Hazır Gadget

Bütün problemləri həll etdikdən və kodu işə saldıqdan sonra bir PCB düzeni yaratmalı və onu fab evinə göndərməli idim. Daha təmiz görünür:-) Şəkil (1): tam dolu nəzarətçi lövhəsi Görüntü (2): çılpaq PCB-nin ön tərəfi (2): arxa tərəfi ATmega168/328 çipinin PORTC və PORTD və 5V/GND-ni kəsən bağlayıcılar var. Bu limanlarda seriyalı RX, TX xətləri, I2C xətləri, rəqəmsal I/O xətləri və 7 ADC xətləri. Bu, lövhənin arxa tərəfində qalxanların yığılması üçün nəzərdə tutulmuşdur. Aralıq boşluq (0.1in) istifadə etmək üçün uyğundur. Yükləyici ICSP başlığı (adafruit -in USBtinyISP ilə işləyir) istifadə edərək yanıb -sönə bilər. Bunu edən kimi, standart bir FTDI USB/TTL seriyalı adapter və ya bənzərini istifadə edin. Avtomatik sıfırlama-deaktiv bir tullanan da əlavə etdim. Adətən qutudan çıxmayan FTDI kabelləri ilə avtomatik sıfırlamağa imkan verən bir az Perl skripti hazırladım (bloquma baxın) (RTS və DTR xətti). Bu Linux -da, bəlkə də MAC -da işləyir. Blogumda çap olunmuş elektron lövhələr və bir neçə DIY KİT mövcuddur. SMD lehimləmə tələb olunur! LED matrisləri üçün tikinti təlimatları və mənbələr üçün PDF sənədlərinə baxın.

Addım 6: Tətbiq: Perl istifadə edərək Linux üçün CPU Yükləmə Monitoru

Bu, bir tarix sahəsi olan çox əsas yük monitorudur. İostat istifadə edərək hər 1 saniyədə sistemin "yük ortalamasını" toplayan Perl skriptinə əsaslanır. Məlumatlar hər bir yeniləmədə dəyişdirilən bir sıra şəklində saxlanılır. Siyahının başında yeni məlumatlar əlavə olunur, ən köhnə giriş çıxarılır. Daha ətraflı məlumat və yükləmələr (kod…) blogumda mövcuddur.

Addım 7: Tətbiq: I²C istifadə edərək digər modullarla danışmaq

Tətbiq: I²C istifadə edərək digər modullarla danışmaq
Tətbiq: I²C istifadə edərək digər modullarla danışmaq

Bu, prinsipin sübutudur və bu işin ən sadə həlli deyil2C, 127 -ə qədər "qul" lövhəsinə birbaşa müraciət etməyə imkan verir. Burada videonun sağ tərəfindəki lövhə "master" (bütün köçürmələri başlatan), sol lövhə qul (məlumat gözləyən). Mən2C 2 siqnal xəttinə və adi elektrik xətlərinə (+, -, SDA, SCL) ehtiyac duyur. Avtobus olduğu üçün bütün qurğular ona paralel olaraq bağlanır.

Addım 8: Tətbiq: "Game Cube":-)

Tətbiq
Tətbiq

Sadəcə qəribə bir fikir. Bu da giriş səhifəsində göstərilən taxta korpusa uyğundur. Arxa tərəfində sadə bir oyun oynamaq üçün istifadə edilə bilən 5 düymə var.

Addım 9: Matrisdə Şəkillər / Animasiyaların göstərilməsi - Tez Hack

Matrisdə Şəkillər / Animasiyaların göstərilməsi - Tez Hack
Matrisdə Şəkillər / Animasiyaların göstərilməsi - Tez Hack
Matrisdə Şəkillər / Animasiyaların göstərilməsi - Tez Hack
Matrisdə Şəkillər / Animasiyaların göstərilməsi - Tez Hack
Matrisdə Şəkillər / Animasiyaların göstərilməsi - Tez Hack
Matrisdə Şəkillər / Animasiyaların göstərilməsi - Tez Hack
Matrisdə Şəkillər / Animasiyaların göstərilməsi - Tez Hack
Matrisdə Şəkillər / Animasiyaların göstərilməsi - Tez Hack

Beləliklə, yalnız 8x8 piksel və bir neçə rəng var. İlk olaraq ən sevdiyiniz görüntünü 8x8 piksel ölçüsünə endirmək və ".ppm" xam formatı (ASCII deyil) kimi saxlamaq üçün Gimp kimi bir şeydən istifadə edin. PPM Perl skriptində oxumaq və işləmək asandır. ImageMagick və "çevir" əmr satırı alətindən istifadə düzgün işləməyəcək. Yeni arduino kodunu yükləyin, sonra nəzarətçiyə yükləmək üçün Perl skriptindən istifadə edin. Yanıp sönmə, LED yeniləməsi ilə kameramın kadr sürətinin uyğun gəlməməsidir. Kodu bir qədər yenilədikdən sonra olduqca zippy işləyir. Gördüyünüz kimi bütün şəkillər serial üzərindən canlı olaraq köçürülür. Daha uzun animasiyalar, müxtəlif danışma lövhələrində olduğu kimi xarici bir EEPROM-da da saxlanıla bilər.

Addım 10: Saxlanan Animasiyalara İnteraktiv Nəzarət

Arduino kultu fiziki hesablama və qarşılıqlı əlaqə ilə əlaqədardır, buna görə potensiometr əlavə edin və idarə edin! 8 analoqdan rəqəmsal çeviriciyə girişdən istifadə etmək çox sadədir.

Addım 11: Canlı Videonun Göstərilməsi

Bir Perl skriptindən və bir neçə moduldan istifadə etmək X11 sistemlərində yarı canlı videonun göstərilməsini olduqca asanlaşdırır. Bu linuxda kodlanmışdı və MAC-lərdə də işləyə bilər. Bu belə işləyir:- siçan imlecinin mövqeyini əldə edin- imlecin mərkəzində bir NxN piksel qutusu çəkin- şəkil 8x8 pikselə qədər- LED lövhəsinə göndərin. təkrarlamaq

Addım 12: Demək olar ki, pulsuzdur

Demək olar ki, Pulsuzdur
Demək olar ki, Pulsuzdur

Yalnız iki addımla parlaqlığı bir qədər artırmaq olar. 270Ω rezistorları 169Ω ilə əvəz edin və başqa 74HC595 keçid qeydini IC5 üzərinə qoyun.

Tövsiyə: