Mündəricat:

Arduino və Shift Qeydiyyatı ilə Dot Matrix LED istifadə: 5 addım
Arduino və Shift Qeydiyyatı ilə Dot Matrix LED istifadə: 5 addım

Video: Arduino və Shift Qeydiyyatı ilə Dot Matrix LED istifadə: 5 addım

Video: Arduino və Shift Qeydiyyatı ilə Dot Matrix LED istifadə: 5 addım
Video: CS50 2013 - Week 9 2024, Sentyabr
Anonim
Arduino və Shift Qeydiyyatı ilə Dot Matrix LEDindən istifadə
Arduino və Shift Qeydiyyatı ilə Dot Matrix LEDindən istifadə
Arduino və Shift Qeydiyyatı ilə Dot Matrix LEDindən istifadə
Arduino və Shift Qeydiyyatı ilə Dot Matrix LEDindən istifadə
Arduino və Shift Qeydiyyatı ilə Dot Matrix LEDindən istifadə
Arduino və Shift Qeydiyyatı ilə Dot Matrix LEDindən istifadə

Siemens DLO7135 Dot matrix LED, optoelektronikanın inanılmaz bir hissəsidir. Yaddaş/Dekoder/Sürücü ilə 5x7 Dot Matrix Ağıllı Ekran (r) olaraq faturalandırılır. Yaddaşla yanaşı, böyük və kiçik hərflərdən ibarət 96 xarakterli ASCII displeyi, quraşdırılmış xarakter generatoru və multipleksoru, dörd səviyyəli işıq intensivliyi var və hamısı 5V-də işləyir. və 16 dollarlıq bir popda, mütləq olmalıdır. Günün yarısını ən sevdiyim yerli elektronika mağazasında keçirərkən bir parça 1.50 dollara dolu bir çömçə tapdım. Bir neçə ilə mağazadan çıxdım. Bu təlimat, AVR əsaslı bir Arduino istifadə edərək, bu nöqtəli matris LED-lərinə necə qoşulacağınızı və simvolları necə göstərəcəyinizi göstərəcək. Əvvəlki bələdçilərimdən hər hansı birini oxumusunuzsa, tez -tez ən uyğun olmayan həll yolunun tərəfdarı olduğumu düşünə bilərsiniz və vaxtaşırı hədəfə çatmasam da yanılmırsınız.. Buna görə də bu təlimatda başqa bir addım atacağam və bu böyük, honkin 'dot matrix LED -lərini idarə etmək üçün lazım olan I/O portlarının sayını necə azalda biləcəyinizi sizə göstərəcəyəm.

Addım 1: Malları əldə edin …

Malları Al…
Malları Al…

Bu kiçik layihə üçün sizə lazım olacaq:

  • bir Arduino və ya bənzəri kimi AVR əsaslı bir mikro nəzarətçi. Bu təlimatlar, ehtimal ki, seçdiyiniz MCU -ya uyğunlaşdırıla bilər.
  • eyni ailədəki DLO7135 nöqtəli matris LED və ya digər
  • 74LS164, 74C299 və ya 74HC594 kimi 8 bitlik keçid reyestri
  • çörək taxtası
  • bağlama teli, tel kəsicilər və s.

Bir lehimləmə dəmirinə ehtiyac yoxdur, baxmayaraq ki, sonra istifadə edirəm; onsuz keçə bilərsiniz.

Addım 2: birbaşa LED ekrana qoşulun

LED ekrana birbaşa qoşulun
LED ekrana birbaşa qoşulun
LED ekrana birbaşa qoşulun
LED ekrana birbaşa qoşulun
LED ekrana birbaşa qoşulun
LED ekrana birbaşa qoşulun

Kiçik hissələr siyahınızı tərtib edin və LED -i tutun. Çörək taxtasına bir az mərkəzləşdirilmiş şəkildə qoyun, orta xəttin yivini bükün. Bağlanmanın ilk hissəsi LED -in sol tərəfində baş verir. Pin #1, üçbucaq/oxla göstərildiyi kimi sol üst tərəfdə yerləşir. LED oxuyarkən və ya bağlayarkən istinad üçün pin funksiyalarını bir şəkilə qoydum.

Sol tərəf

Müsbət və Mənfi Sol üstdən başlayaraq Vcc -i 5V -ə qoşun. Sol tərəfi tamamlayana qədər lövhənizin işə salınmaması yaxşı bir fikirdir; telləri sıxmaq üçün kiçik deşiklər görməyə çalışırsınızsa LED parlaq ola bilər. Sol alt GND -ni yerə bağlayın. Lamp Testi, Chip Enable and Writing Sol üstdəki 2 -ci və 3 -cü Lamp Testi və Chip Enable. Bunlar hər ikisi də mənfi məntiqdir, yəni 1 -in yerinə məntiqi 0 -da olduqları zaman aktiv olduqlarını bildirirəm. Aşağıdakı şəklimin üstündə çubuqlar olmalıdır, amma bunların heç biri üçün qeyd etməmişəm. LT pin aktiv olduqda nöqtə matrisindəki hər nöqtəni 1/7 parlaqlıqda işıqlandırır. Bu daha çox piksel testidir, amma LT pininin maraqlı tərəfi, yaddaşda olan hər hansı bir xarakterin üzərinə yazılmamasıdır, buna görə də onlardan bir neçəsini bir araya gətirsəniz (20 fut baxış məsafəsi var), LT -ni vuraraq imleci kimi göstərə bilər. Əlil olduğunu təmin etmək üçün onu 5V -ə qoşun. CE və WR pinləri də mənfi məntiqdir və bu ağıllı cihazın yazılması üçün aktiv olması tələb olunur. Mikro nəzarətçinizdəki ehtiyat G/Ç portları ilə bu pinləri idarə edə bilərsiniz, ancaq burada narahat olmayacağıq. Onları aktiv saxlamaq üçün onları yerə bağlayın. Parlaqlıq səviyyələri DLO LED ailəsində dörd proqramlaşdırıla bilən parlaqlıq səviyyəsi var:

  • Boş
  • 1/7 Parlaqlıq
  • 1/2 Parlaqlıq
  • Tam Parlaqlıq

BL1 HIGH və BL0 LOW 1/2 parlaqlıqdır. Hər iki YÜK tam parlaqlıqdır. İstədiyinizi təyin edin. Yenə də ehtiyat hissənizdə G/Ç portlarınız varsa və bu sizin üçün kifayət qədər vacibdirsə, bu da Arduino tərəfindən idarə oluna bilər. Lövhəyə enerji gətirirsinizsə, LED işığının yandığını görməlisiniz. Maraqlanırsınızsa, onunla tanış olmaq üçün parlaqlıq nəzarət və lampa testi ilə oynayın.

Sağ tərəf

Sağ tərəf tamamilə məlumat limanlarından ibarətdir. Sağ alt, pin 8 və ya D0, 7 bitlik xarakterdə ən az əhəmiyyətli biti təmsil edir. Sağ üstdəki pin 14 və ya D6 Ən Əhəmiyyətli Biti təmsil edir. Bu, LED -ə yazarkən bitlərinizin hansı qaydada qarışdırılacağını bilir. Məlumat giriş portlarını bağladığınızda, Arduino və ya AVR -də yeddi boş rəqəmsal I/O portu tapın və onları birləşdirin. Yəqin ki, AVR -də hansı məlumat çıxışı portunun LED -də hansı məlumat giriş portuna getdiyini xatırlamaq istəyəcəksiniz. İndi bəzi məlumatları o ağıllı LED -ə itələməyə hazırsınız. Hələ həyəcandan titrəyirsən? Bilirəm ki, mən…

Addım 3: Göstəriləcək bir xarakterin təyin edilməsi

Göstəriləcək bir xarakterin təyin edilməsi
Göstəriləcək bir xarakterin təyin edilməsi

Bu CMOS LED-də istifadə olunan xarakter dəsti, 0x20-dən (ondalık 32; boşluq) başlayaraq 0x7F ilə bitən (ondalık 127; LED-də kursor qrafiki kimi göstərilsə də silin) ASCII-dir.. Belə ki, LED displeyə malik olmaq, məlumat çıxışı pinlərinizdəki məntiqi 1 və ya 0 -a basmaqdan başqa bir şeyə səbəb olmur, ümumiyyətlə WR nəbzini izləyir, amma mən bu məşq üçün bunu qeyd edirəm. hansı sancaqların hansı limanlara getdiyini xatırladınız, elə deyilmi? PD [2..7] və PB0 (Arduino dilində 2-dən 8-ə qədər rəqəmsal pinlər) seçdim. Normalda PD [0..1] istifadə etməyi təklif etmirəm, çünki bunu seriyalı ünsiyyətimi bir FreeBSD qutusuna və Arduino və s. bu pinləri FTDI USB rabitə kanalına yerləşdirin və 0 və 1 sancaqlarının "onlar" SAYLANMASINI söyləsə də, serial ünsiyyəti işə salmasanız, bu pinləri heç vaxt normal rəqəmsal G/Ç olaraq istifadə edə bilməmişəm. Əslində, PD0 və PD1 -dən istifadə etməyə çalışdığımda və hər zaman YÜKSƏK olduğunu gördüyüm zaman iki gün problemi həll etməyə çalışdım. * çiyin çəkmək* Klaviatura, itələyici və ya tənzimləyici açar və ya hətta terminaldan giriş kimi bir növ xarici girişə sahib olmaq yaxşı olardı (mənim ArduinoTerm hələ tam hazır vaxta hazır deyil …). Seçim sənindir. Hələlik, LED -ə istədiyiniz xarakteri almaq üçün kodu necə əldə edəcəyinizi izah edəcəyəm. Mənbə kodu və Makefile daxil olmaqla yükləmək üçün bir zip faylı var və LED -in xarakter dəstini çap etdiyini göstərən qısa bir film də var. Videonun keyfiyyətsiz keyfiyyəti üçün üzr istəyirik. Aşağıdakı kod "Təlimatçılığa xoş gəldiniz!" Sətrini yazır. sonra LED -in dəstəklədiyi bütün xarakter dəsti boyunca hərəkət edir.

DDRD = 0xFF; // ÇıxışDDRB = (1 << DDB0); char msg = "Təlimatçılığa xoş gəldiniz!"; uint8_t i; for (;;) {for (i = 0; i <27; i ++) {Print2LED (msg ); _delay_ms (150); } üçün (i = 0x20; i <0x80; i ++) {Print2LED (i); _delay_ms (150); } Print2LED (& apos*& apos);}Liman çıxışına Print2Led () funksiyasında diqqət yetirilir

voidPrint2LED (uint8_t i) {PORTD = (i << 2); əgər (i & 0b01000000) PORTB = (1 <

Kod və Makefile aşağıdakı bir zip faylına daxil edilmişdir.

Addım 4: Shift Qeydiyyatı ilə G/Ç Limanlarını qoruyun

I/O limanlarını bir Shift Qeydiyyatı ilə qoruyun
I/O limanlarını bir Shift Qeydiyyatı ilə qoruyun
I/O limanlarını bir Shift Qeydiyyatı ilə qoruyun
I/O limanlarını bir Shift Qeydiyyatı ilə qoruyun
I/O limanlarını bir Shift Qeydiyyatı ilə qoruyun
I/O limanlarını bir Shift Qeydiyyatı ilə qoruyun

İndi mikrokontrolörümüz nöqtəli matrisə məlumat göndərə bilər, ancaq səkkiz I/O portu istifadə edir. Bu, 8 pinli DIP paketində ATtiny istifadə etməyi və hətta bir LED üçün çoxlu I/O portu olan ATmega328p ilə işləyən daha yeni bir Arduino ilə birlikdə istifadə etməyi istisna edir. Bununla birlikdə, bir keçid qeydiyyatı adlanan bir IC istifadə edərək bunun öhdəsindən gələ bilərik. Vitesləri "dəyişdirmək" üçün bir an … Bir dəyişiklik qeydini, adını təşkil edən iki söz haqqında düşünməklə daha yaxşı başa düşmək olar: "shift" və "register". Dəyişmə sözü, məlumatların reyestrdən necə keçdiyini göstərir. Burada (ümumiyyətlə Arduino və mikrokontrolörlərimizdə olduğu kimi) bir qeyd məlumatları saxlayan bir yerdir. Bunu 1 və ya 0 ilə təmsil oluna bilən iki sabit vəziyyətə malik "flip floplar" adlanan xətti rəqəmsal məntiq zəncirini tətbiq etməklə edir. Beləliklə, səkkiz flip flopu bir araya gətirməklə tuta bilən bir cihazınız var. Bir neçə növ flip flop və növbə qeydləri mövzusunda bir neçə dəyişiklik olduğu üçün (yuxarı və aşağı sayıcıları və Johnson sayğaclarını düşünün), məlumatların necə qurulduğuna əsaslanaraq bir neçə növ qeyd qeydləri də mövcuddur. reyestrə daxil edilir və bu məlumatların necə çıxarılması. Buna əsaslanaraq, növbə qeydlərinin aşağıdakı növlərini nəzərdən keçirin:

  • Serial Giriş / Paralel Çıxış (SIPO)
  • Serial Giriş / Serial Çıxış (SISO)
  • Paralel Giriş/ Serial Çıxış (PISO)
  • Paralel Giriş / Paralel Çıxış (PIPO)

Diqqət çəkən iki şey SIPO və PISO -dur. SIPO reyestrləri məlumatları ardıcıl olaraq alır, yəni bir -birinin ardınca, əvvəlki giriş bitini növbəti flip flopa keçirir və məlumatları bir anda bütün girişlərə göndərir. Bu, paralel çeviriciyə gözəl bir serial edir. PISO keçid qeydləri, əksinə, paralel girişlərə malikdir, buna görə də bütün bitlər bir anda daxil edilir, ancaq bir -bir çıxır. Və bunu təxmin etdiniz, bu serial çeviriciyə gözəl bir paralellik yaradır. I/O pinlərinin sayını azaltmaq üçün istifadə etmək istədiyimiz keçid reyestri, əvvəllər istifadə etdiyimiz 8 IO pinini götürməyimizə və necə daxil edəcəyimizi nəzarət etməyimiz lazım ola biləcəyini nəzərə alaraq bir və ya bəlkə də bir cütə endirməyimizə imkan verərdi. bitlər. Buna görə də istifadə edəcəyimiz keçid reyestri Seri Giriş / Paralel Çıxışdır. LED və Arduino arasında keçid qeydini bağlayın Bir keçid qeydindən istifadə etmək asandır. Ən çətin hissəsi, məlumat çıxarmaq pinlərini və ikili rəqəmlərin IC -də necə bitəcəyini və nəticədə LED -də necə görünəcəklərini görselleştirmekdir. Bunu planlaşdırmaq üçün bir az vaxt ayırın. 1. 5 -ci pin 14 -ə (yuxarı sağ) və 7 -ci pin (aşağı sol) yerə endir. Vəziyyət qeydində iki ardıcıl giriş var, ancaq yalnız birindən istifadə edəcəyik, buna görə iki pin 5V3 -ə qoşun. Şəffaf pin istifadə etməyəcəyik (bütün çıxışları sıfırlamaq üçün istifadə olunur), buna görə üzən vəziyyətdə buraxın və ya 5V4 -ə hücum edin. Vəziyyət qeydlərindən birini bağlamaq üçün bir rəqəmsal IO portu bağlayın. Bu serial giriş pinidir.5. Bir rəqəmsal IO portunu pin 8 -ə bağlayın (sağ alt). Bu saat pinidir.6. Məlumat xətlərinizi Q0 -dan Q6 -ya bağlayın. Yalnız 7 bit istifadə edirik, çünki ASCII simvol dəsti yalnız yeddi bit istifadə edir. Serial məlumatlarımı çıxarmaq üçün PD2 və saat siqnalı üçün PD3 istifadə etdim. Məlumat pinləri üçün LED -də Q0 -ı D6 -ya bağladım və bu şəkildə davam etdim (Q1 -dən D5 -ə, Q2 -dən D4 -ə və s.). Verilənləri ardıcıl olaraq göndərdiyimiz üçün, göndərmək istədiyimiz hər bir xarakterin ikili təmsilçiliyini yoxlamaq məcburiyyətindəyik, 1 -ə və 0 -a baxaraq hər bir seriyanı satırda çıxarmalıyıq. Aşağıdakı Makefile ilə birlikdə dotmatrixled.c mənbəsinin ikinci versiyasını daxil etdim. Bu simvol dəsti boyunca hərəkət edir və bütün cüt simvolları göstərir (bir məktubun tək və ya cüt ola biləcəyini düşünmək qəribədirsə, bir anlıq ikili təsvir haqqında düşünün). Bütün tək simvolları göstərərək dövriyyəni necə edəcəyinizi anlamağa çalışın. Dəyişdirmə reyestri, nöqtə matrisli LED və Arduino arasındakı əlaqələri daha da sınaqdan keçirə bilərsiniz. Məlumatların göstərildiyi zaman nəzarətinizi dəqiq tənzimləməyinizə imkan verən LED və reyestr arasında bir neçə idarəetmə xüsusiyyəti var. Belə ki.. Səkkiz G/Ç limanından istifadə etməkdən iki istifadə etmək üçün getdik!

Addım 5: Xülasə

Xülasə
Xülasə
Xülasə
Xülasə

Bu təlimatda DLO7135 nöqtəli matris LEDini və bunun necə işləməsini təqdim etdim. Əlavə olaraq, bir keçid qeydindən istifadə etməklə lazım olan I/O portlarının sayını səkkizdən yalnız ikiyə endirməyi müzakirə etdim. DLO7135 nöqtəli matrisli LED, çox göz oxşayan və maraqlı marquees etmək üçün bir -birinə bağlana bilər. Ümid edirəm ki, bu təlimatı oxuyaraq əyləndiniz! Düşündüyüm hər hansı bir irəliləyiş varsa və ya bu və ya digər ibislərim haqqında vermək istədiyiniz təkliflər varsa, onları eşitməkdən məmnunam!

Tövsiyə: