Mündəricat:

7 seqmentli LED-lərdən istifadə edərək BloodBowl Sayğacı: 5 addım
7 seqmentli LED-lərdən istifadə edərək BloodBowl Sayğacı: 5 addım

Video: 7 seqmentli LED-lərdən istifadə edərək BloodBowl Sayğacı: 5 addım

Video: 7 seqmentli LED-lərdən istifadə edərək BloodBowl Sayğacı: 5 addım
Video: Görüş #5-29.04.2022 | ETF komandasının görüşü və dialoqu 2024, Iyul
Anonim
7 seqmentli LED-lərdən istifadə edərək BloodBowl Sayğacı
7 seqmentli LED-lərdən istifadə edərək BloodBowl Sayğacı

Bu layihə, altı Charlieplexed 7 seqmentli LED istifadə edən bir BloodBowl oyun döngəsi sayğacı üçün idi.

Addım 1: Konsepsiya

Konsepsiya
Konsepsiya

Bir dostum, taxt oyunu üçün Bloodbowl Turn sayğacının qurulması ilə bağlı fikirlərimi soruşdu. Bunun nə olduğunu və nə istədiyini bilmədən, bunu necə edəcəyimə və necə edəcəyimə qərar vermək bir müddət çəkdi, əvvəlcə nə istədiyini bilməli idim, buna görə konsept sənəti ilə başladım (şəkil). Əsas fikir, hər biri 3 LED -i idarə edən 3 düyməyə sahib olmaqdır və xüsusi olaraq inşa edilmiş bir qüllənin içərisinə yerləşdiriləcəkdir. Yeganə böyük tələb, ən yaxşı 4 ekranın 0 -dan 8 -ə qədər sayılması və sıfırlanması və aşağı 2 -nin olmasıdır. ekranlar 8 -dən 0 -a qədər geri sayılır və geri dönər. Mən dövrəni tamamlayardım, o da qülləni tamamlayardı.

Addım 2: Dizayn və Parça siyahısı

Dizayn və Parça siyahısı
Dizayn və Parça siyahısı

Konsepsiya 6 7-seqmentli LED-lər tələb etdiyindən və 8 bitlik Microchip PIC-lərim lazımlı olduğundan, LED-ləri idarə etmək üçün PIC-lərdən istifadə yollarını araşdırdım. Bu linki https://www.mikroe.com/en/books /picbook/7_08chapter.htm "Hər ekranın parlaqlığı təsirlənmədən 6 -ya qədər ekrana bu cür daxil olmaq olar." Mən bunu bir problem və layihəmin bir hissəsi olaraq araşdırmaq üçün bir şey hesab etdim. Etdiyim ilk şey, qutumdan közərməyən 7 seqmentli displeyləri götürüb necə işləyəcəklərini görmək idi. Pis xəbərlər. Seçdiyim xüsusi hissələr istədiyim kimi davranmadı. Segment çörək lövhəsində lazım olduqda yanacaqdı, lakin sızma cərəyanı digər 6 seqmentə paylandı. Anladım ki, közərməyən ekranlar getməyin yolu ola bilməz və ya fərqli bir şəkildə istifadə etməliyəm. Sadəlik üçün əlimdə olan 7 seqmentli LED-lərin çörək bişirmək üçün işləyəcəyini yoxladım və bəzi ümumi anod ekranlarını sifariş etdim. Etməyim lazım olan ikinci şey dizaynımı düzəltmək və kod üzərində işə başlamaq idi. Şəkil mənim dövrəmdir. Bu çox deyil, çünki PIC -də kod multipleksləşmə ilə məşğul olur … səhvən Charlieplexing. Qeyd: BÜTÜN 6 displeydə sürücü IC -dən eyni sətirlər var. Seçici IC hər bir ekrana bir anda 1 imkan verir və 7 seqmentli xətlər buna uyğun olaraq PIC tərəfindən yenilənir. Çox sadə bir fikir. Bundan sonra, kod və aparat tamamlanması lazım olan hər şeydir. Parça siyahısı Xüsusi komponentlərə qərar verərkən Digi-Key-dən 3 kiçik sifariş verdikdən sonra ehtiyacım olan hər şeyə sahib oldum (bəzi şeylər əlimdə); 1 ~ 3 "x4 "PCB6 kiçik düyməli açarlar (NO) 1 74LS47, 7-seqmentli ekran IC1 PIC16F627 1 CD4028, 10-dan 1-i IC 6 10KOhm rezistorlar1 470Ohm rezistor1 tel bobini. Müxtəlif rənglər və ölçülərdən istifadə etdim, amma bu yalnız mənim idi. 3) Dizaynın optimallaşdırılması. Bu məsələlərin heç biri öz -özlüyündə həddindən artıq mürəkkəb deyil, lakin heç bir təcrübə olmadan bunların hamısını götürmək yeni başlayanlar üçün çox çətin ola bilər. Cihazı, lehimləmə stansiyasını və s. Yandırmaq üçün bir proqramçı tələb olunur … Birinin görə biləcəyi ilk şey 7 seqmentli LED-lərin seriyalı (cari məhdudlaşdırıcı) rezistorlara malik olmamasıdır! Orijinal dizaynımın olduğunu söyləyərək tez bir zamanda bunu həll etməyə icazə verin … amma izahat üçün növbəti addımı oxuyun!

Addım 3: Breadboard və Mikro Kod

Çörək bortu və mikro kod
Çörək bortu və mikro kod

Çörək taxtası bunun üçün bir şərt idi. Ümumi çörək taxtam göstərilir, amma bu layihənin ölçüsü üçün bu və daha kiçik bir çörək taxtasından istifadə etdim, çünki aralarında boşluq qoyulması lazım olan çoxlu tellər var idi. İlk olaraq, ilk kodla 7 ədəd 7 seqmentli bir LED sınadım. Bu, 3 şeyi təsdiqlədi; 1) IC -nin naqilləri yaxşı yoxlandı! 2) Kodumu optimallaşdırmağa və yekunlaşdırmağa sövq etdi.3) Mövcud məhdudlaşdırıcı rezistorlara ehtiyacım olmadığını başa düşdüm! 1 WIRINGA qeyd edildiyi kimi, sxematik dizaynım tapıldı kodumla işləmək üçün, LED bir düyməni istifadə edərək nömrələr arasında keçdiyinə görə kodumu və düzənimi yoxladı. Çox şey tələb olunmurdu, amma yaxşı vəziyyətdə olduğumu təsdiqlədi. 2 CODEI əvvəlcə kodlarımı düymələri yoxlamaq üçün əsas qaydalarla təyin etdi və ISR (Interrupt Service Routine) rəqəmləri göstərdi. Çörək taxtası testlərindən sonra gündəlikləri dəyişdirdim, buna görə də çox vaxt düymələri yoxlamaq üçün nömrələri və ISR -ni göstərdi. Bunu etməyimin səbəbi daimi bir ekrana sahib olmaq idi, çünki PIC daxili 4Mhz saatla işlədiyindən düymələri axtarmağa çox az vaxt itirirəm. Böyük bir şey yoxdur … yalnız kodu necə etmək istədiyinizə və hər bir tətbiq üçün ən mənalı olana bağlıdır. Bunun üçün ekran vacibdir, buna görə də bunu əsas qaydada qoydum. İlk hissələrim gəldikdə (hamısı 6 displey!) Çörək taxtasının naqillərini tamamladım və başqa bir problem tapdım. Düyməni basarkən kodumun silinməyən bəzi laqeyd qeydləri vardı və ISR bəzi kiçik ekran qüsurlarına səbəb oldu.; ======================= ================================================= =====; Sayğacı çevirin;; -----------; Dsply3 Dsply2; Dsply4 Dsply1; Led1 Led3; A5 | 4 15 | A6 - Led2; Vss | 5 14 | Vdd; Düymə1 B0 | 6 13 | B7; B1 | 7 12 | B6; B2 | 8 11 | B5; B3 | 9 10 | B4; -----------;; LED1-3-BCD-dec IC -LEDSeg's1-6; Dsply1-3-BCD-7seg IC -Dsply#1-9;; =============================== ============================================; Revizyon Tarixi və Qeydlər:; V1.0 İlk Başlıq, Kod 3/30/09;;; (C) 5/2009; Bu kod şəxsi öyrənmə/tətbiq/modifikasiya üçün istifadə edilə bilər.; Ticarət məhsullarında bu kodun hər hansı bir istifadəsi bu pulsuz proqram buraxılışını pozur.; Suallar/şərhlər üçün yahoo dot com saytındakı elektron nöqtə mage ilə əlaqə saxlayın..; ------------------------------------------------ ------------------------------#P16F627A. INC daxildir; ============= ================================================= =================; Müəyyən edir; ------------------------------------------------ -------------------------------; ================== ================================================= ===========; Məlumat; ------------------------------------------------ -------------------------------; Zaman saxlayan dəyişənlərsayı1 bərabər 20 say2 bərabər 21 dis1 bərabər 22dis2 bərabər 23dis3 bərabər 24dis4 bərabər 25dis5 bərabər 26dis6 bərabər 27w_temp bərabər 28status_temp bərabər 28ISRCNTR bərabər 2A; ==================== ================================================= =======; Vektorları sıfırlayın; Konfiqurasiyanı yoxlayın. YANMADAN ƏVVƏL BITS !!!; INTOSC; MCLR: ENABLED; PWRUP: ENABLED; BÜTÜN BAŞQALARI: Əlil !!;; ------------------------------------------ ------------------------------------- RESET_ADDR EQU 0x00 ISR_ADDR EQU 0x04 org RESET_ADDR başlamalıdır; == ================================================= ===========================; ISR;; ----------------------------------------------- -------------------------------- təşkilat ISR_ADDR movwf w_temp swapf STATUS, w movwf status_temp;; ISR BURADA; PB0-PB5 açarlarını yoxlayın btfsc PORTB, 0; SW1 zəngini yoxlayın sw1debounce btfsc PORTB, 1; SW1 zəngini yoxlayın sw2debounce btfsc PORTB, 2; SW1 zəngini yoxlayın sw3debounce btfsc PORTB, 3; SW1 zəngini yoxlayın sw4debounce btfsc PORTB, 4; SW1 zəngini yoxlayın sw5debounce btfsc PORTB, 5; SW1 zəngini yoxlayın sw6debounce goto endisrsw1debounce zəngdən çıxma; 0.2 saniyə gözləyin, zəngdən imtina incf dis1; Movf dis1, W sayğacını yeniləyin; Xorlw 0x1A daşmasını yoxlayın; 7-də 10? btfss STATUS, Z qaytarılması; Xeyr, taramaya qayıdın. movlw h'10 '; Bəli, ekranı sıfırlayın. movwf dis1 qaytarırw2debounce zəngdən imtina edir; 0.2 saniyə gözləyin, debf inc inc dis2; Movf dis2, W sayğacını yeniləyin; Xorlw 0x4A daşmasını yoxlayın; 7-də 10? btfss STATUS, Z qaytarılması; Xeyr, taramaya qayıdın. movlw h'40 '; Bəli, ekranı sıfırlayın. movwf dis2 qaytarırw3debounce zəngdən imtina edir; 0.2 saniyə gözləyin, zəngi ləğv edin incf dis3; Movf dis3, W sayğacını yeniləyin; Xorlw 0x5A daşmasını yoxlayın; 7-də 10? btfss STATUS, Z qaytarılması; Xeyr, taramaya qayıdın. movlw h'50 '; Bəli, ekranı sıfırlayın. movwf dis3 qaytarırw4debounce zəngdən imtina edir; 0.2 saniyə gözləyin, zəngi inkf dis4; Movf dis4, W sayğacını yeniləyin; Xorlw 0x8A daşmasını yoxlayın; 7-də 10? btfss STATUS, Z qaytarılması; Xeyr, taramaya qayıdın. movlw h'80 '; Bəli, ekranı sıfırlayın. movwf dis4 qaytarırw5debounce zəngdən imtina edir; 0.2 saniyə gözləyin, zəngi endirmək incf dis5; Movf dis5, W sayğacını yeniləyin; Xorlw 0x9A daşmasını yoxlayın; 7-də 10? btfss STATUS, Z qaytarılması; Xeyr, taramaya qayıdın. movlw h'90 '; Bəli, ekranı sıfırlayın. movwf dis5 qaytarırwwdedeounce zəngdən imtina edir; 0.2 saniyə gözləyin, zəngi ləğv edin incf dis6; Movf dis6, W sayğacını yeniləyin; Xorlw 0xCA daşmasını yoxlayın; 7-də 10? btfss STATUS, Z qaytarılması; Xeyr, taramaya qayıdın. movlw h'C0 '; Bəli, ekranı sıfırlayın. movwf dis6 returnendisr bcf INTCON, T0IF swapf status_temp, w movwf STATUS swapf w_temp, f swapf w_temp, wretfie; =========================== ================================================= =; Buradan Başlayın!; ---------------------------------------------- ---------------------------------başlamaq; Konfiqurasiya I/O portları clrf PORTA movlw 0x07 movwf CMCON bcf STATUS, RP1 bsf STATUS, RP0 movlw h'00 '; RA Çıxışları, RA5 Çıxış movwf TRISA bcf STATUS, RP0 clrf PORTB bsf STATUS, h'FF movlf; RB Girişləri movwf TRISB; Daxili taymer bsf PCON, 3 qurun; 4Mhz -ə təyin edin. movlw h'CF '; Tmr0 Daxili mənbə, əvvəlcədən ölçülmüş TMR0 1: 256 movwf OPTION_REG movlw h'A0 'movwf INTCON; TMR0 kəsilmələrini aktiv edin, bcf STATUS, RP0; Qeydləri başladın clrf PORTA; Təmiz PortA clrf PORTB; Clear PortB çıxışları clrf count1 clrf count2 movlw h'10 'movwf dis1 movlw h'40' movwf dis2 movlw h'50 'movwf dis3 movlw h'80' movwf dis4 movlw h'90 'movwf dis5 movlw h'C0' movwf dis6 call çıxarmaq; 0.2 saniyə; sınaq LEDləri, 8 ekran ???; ================================== =========================================; Əsas; Açarlardan, geri çəkilmələrdən və təhrif olunan ekranlardan giriş əldə edir.;; Bu, TMR0 prescal 1: 4 ilə @4Mhz olan displeyləri 1Khz dərəcəsi ilə yeniləyir. 1-6 nömrəli ekran tellidir; Birincisi, BCD-7Seg IC ekran dəyəri ilə yüklənir və BCD-Dec IC aktivləşdirilir; ekran seçimi.; İkincisi, ekran üçün ms gecikməsi saxlanılır.; Üçüncüsü, BCD-Dek IC deaktiv edilir … ekranı bağlamaq üçün display0 seçilir;; Bu 6 ekranın hər biri üçün təkrarlanır və döngələnir.; ISR 15Hz sürətlə keçid algılamasını idarə edir. -------------------------------------------------- --------------- əsas; Disp1 movf dis1, 0 movwf PORTA zəng ledon goto main; ==================== ================================================= ========; Ledon; LED gücünün açılma vaxtı.; 6 ekran-1Khz-də 1/6 iş dövrü = 166 dövr; ----------------------------------- -------------------------------------------- ledon movlw.54 movwf count1ledloop decfsz count1, F goto ledloopreturn; ======================================== ====================================; Çıxış siqnalı; Yükləmək və çağırmaq üçün 4 dövr, geri dönmək üçün 2 dövr.; 4Mhz Tc:: count2 = 255-> 0.2 san; -------------------------------------- ----------------------------------------- debl movlw.255; 1/5 saniyəlik geri çəkilmə üçün gecikmə. movwf count2 zəng pon_wait qayıt; -------------------------------------------- -----------------------------------; count1 = 255d:: 0-775 dövr, geri dönmək üçün + 3 dövr.; --------------------------------- ---------------------------------------------- pon_waitbig_loopS movlw.255 movwf count1short_loopS decfsz count1, F goto short_loopS decfsz count2, F goto big_loopSreturnend3 CIRCUITI əvvəlcə 74LS47 və CD4028 imkan xəttindən hər bir ekran sürücüsü xəttindən 470Ohm rezistora malik idi. Bununla birlikdə, dövrəmin cari çəkilişini sınadım və yalnız ~ 31mA çəkdiyini gördüm. Və displeylər üçün əsl sürücü birbaşa 74LS47 -dən və aktivləşdirmə başqa bir IC -dən olduğundan orta və pik tələblərin sürətlə aşağı düşməsi və müvafiq məlumat cədvəlləri… ! Göründüyü kimi, bütün seqmentləri birbaşa idarə edərkən CA xəttini 4028 -dən birbaşa idarə etmək yaxşıdır! … bir növ.:) Kodumda bir düyməyə basıldıqda qeydlərimi silməyən bir səhv var idi, bu da son ekranda bir düyməyə basıldıqda 2 seqmentin çox parlaq yanmasına səbəb oldu. Bu pis idi. Bununla birlikdə, reyestrin silinməsi bu problemi həll etdi və davamlı güc yoxlamaları onun 30mA ətrafında çəkildiyini təsdiqləyir. Bu mənə (oxşar sxemlərlə əvvəlki təcrübəyə əsaslanaraq) 1 9V batareya (5V tənzimləmə altında 500mAH/30mAH) istifadə edərək ~ 20 saat işləmə müddəti verməlidir … Ümid edirəm! LED -ləri birbaşa idarə etməyə qərar verdim, ancaq onları prizlərə bir şey baş verərsə, uzun müddətdir.

Addım 4: PCB Lehimləmə

PCB Lehimləmə
PCB Lehimləmə

Layihəmdə hər dəfə bu nöqtəyə çatanda gecikirəm. Əvvəlcə bu şeyi tellə bağlayacaqdım, amma bu fikri tez bir zamanda atdım. Əvvəlcə "Lehimləmək üçün bir neçə tel, böyük bir şey yoxdur" düşünürəm … sonra layihəmin lehimləməyə hazır olduğu vaxt düşünürəm " Ya bir proto lövhə hazırlamaq üçün göndərməli idim, ya da öz lövhəmi həkk etməli idim ". PCB aşındırma ilə məşğul deyiləm (hələ) və bir lövhə düzəltmək üçün $$ ödəmək istəməmişəm, buna görə də …. Bəli ….. Bu şeyi lehimləmək üçün təxminən 3 saat vaxt sərf etdim. Təxminən 150 teldən ibarətdir, buna görə də 300 lehim nöqtəsi, üstəgəl lehim körpüləri üçün rötuşlar. Hər halda, lövhənin arxa tərəfi təsvir edilmişdir ….. Səhifənin səhvini açmaq məcburiyyətində olduğum məntiqi bir nümunədə göstərildiyindən bəri 20 dəqiqə düşündüm. Bundan sonra qısa və bam -ı tapdım! Mükəmməl işləyirdi.

Addım 5: Nəticə

Nəticə
Nəticə

İŞLƏDİ! Bu layihə təxminən sürdü; İstifadəçiyə incə nöqtələri düşünmək və ya e -poçtla göndərmək üçün ~ 2 həftə, ~ 3 saat kod tamamlama və ayıklama, ~ 4 saat çörək bişirmə və ayıklama, ~ 3 saat lehimləmə Yalnız 3 IC istifadə etmək mümkündür. Charlieplex 6 7 seqmentli LEDlər. Güc çəkmə bu dizaynla təxminən 30mA-dır, özüm desəm pis olmaz. Daha çox 7 seqmentli LED-lərin istifadə oluna biləcəyindən şübhələnirəm, amma zərfi itələməmişəm. 7 seqmentli LED-lərdən istifadə edərək demək olar ki, hər hansı bir tətbiqə tətbiq oluna bilər; termometr, saat, mətn ekranı və s. Bəzi çətin kodlarla, hərəkət edən bir ekrana və ya şəkillərə sahib ola bilərsiniz … bəlkə də POV (görmə davamlılığı) layihəsi üçün bir baza ola bilər. Son tətbiqim dostumun Qülləsini qurması üçün qalıb. və lövhəni uyğun gördüyü kimi yerləşdirin. /Bu edildikdə, yüklənmiş bir şəkil alacağam. Ancaq dövrə gəldikdə, bu sifariş üçün qurulmuş görünür!

Tövsiyə: