Kazalo:

BloodBowl števec obratov z uporabo 7-segmentnih LED: 5 korakov
BloodBowl števec obratov z uporabo 7-segmentnih LED: 5 korakov

Video: BloodBowl števec obratov z uporabo 7-segmentnih LED: 5 korakov

Video: BloodBowl števec obratov z uporabo 7-segmentnih LED: 5 korakov
Video: Bloodbowl : Chaos Edition - Khorne - Match 12 Part 1 - v. Nurgle 2024, November
Anonim
BloodBowl števec obratov z uporabo 7-segmentnih LED
BloodBowl števec obratov z uporabo 7-segmentnih LED

Ta projekt je bil za števec obratov igre BloodBowl s šestimi 7-segmentnimi LED diodami Charlieplexed.

1. korak: Koncept

Koncept
Koncept

Moj prijatelj me je vprašal o idejah za izdelavo števca Bloodbowl Turn za njegovo družabno igro. Ker nisem vedel, kaj je to in kaj hoče, je trajalo nekaj časa, da sem se odločil, ali in kako bom to naredil. Najprej sem si moral zamisliti, kaj hoče, zato sem začel s konceptualno umetnostjo (slika). Osnovna ideja je imeti 3 potisne gumbe, ki upravljajo po 3 LED diode in bi bili postavljeni v stolp po meri. Edina velika zahteva je bila, da se zgornji 4 zasloni štejejo od 0 do 8 in ponastavijo, spodnja 2 pa zasloni odštevajo od 8 do 0 in se vrnejo nazaj. Jaz bi dokončal vezje, on pa stolp.

2. korak: Oblikovanje in seznam delov

Oblikovanje in seznam delov
Oblikovanje in seznam delov

Ker je koncept zahteval 6 7-segmentnih LED diod in sem imel pri roki nekaj 8-bitnih mikročipov PIC, sem raziskal načine uporabe PIC-jev za nadzor LED. To povezavo sem našel https://www.mikroe.com/en/books /picbook/7_08chapter.htm, ki pravi: "Dostop do 6 zaslonov je možen tako, ne da bi to vplivalo na svetlost vsakega zaslona." To se mi je zdelo kot izziv in nekaj, kar je treba raziskati v okviru svojega projekta. Prva stvar, ki sem jo naredil, je bila, da iz svoje škatle vzamem nekaj 7-segmentnih zaslonov z žarilno nitko in vidim, kako bodo delovali. Slabe novice. Posamezni deli, ki sem jih izbral, se niso obnašali, kot sem hotel. Odsek bi se po potrebi prižgal na plošči, vendar je tok uhajanja razdeljen na ostalih 6 segmentov. Spoznal sem, da zasloni z žarilno nitko morda niso pravi način, ali pa sem jih moral uporabiti na drugačen način. Zato sem zaradi preprostosti preveril, da bi 7-segmentne LED diode, ki sem jih imel pri roki, delovale za izdelavo načrta, in naročil nekaj skupnih anodnih prikazov. Druga stvar, ki sem jo moral narediti, je bila postavitev moje zasnove in začetek dela na kodi. Na sliki je moje vezje. Ni veliko, saj koda v PIC -u skrbi za multipleksiranje … errr Charlieplexing. Opomba: VSI 6 zasloni imajo ISTE vrstice iz gonilniške IC. Izbirni IC omogoča vsak zaslon, 1 naenkrat, PIC pa ustrezno posodobi 7-segmentne vrstice. Zelo preprosta ideja. Po tem je vse, kar je bilo potrebno, dokončanje kode in strojne opreme. Seznam delov Po treh majhnih naročilih iz Digi-Key-a pri odločanju o določenih komponentah sem imel vse, kar sem potreboval (z nekaj stvarmi pri roki); 1 ~ 3 "x4 "Majhna stikalna stikala PCB6 (NO) 1 74LS47, 7-segmentni zaslon IC1 PIC16F627 1 CD4028, 1 od 10 izbirnih IC 6 10KOhm uporov 1 470Ohm upor 1 žica žice. Uporabljal sem različne barve in oznake, toda to sem bil samo jaz.1 78L05 5V regulator 1 9V sponka za baterijo 1 9V baterija 1 majhno stikalo (za vklop/izklop vklopa) Menim, da je to zmerno kompleksen projekt zaradi: 1) potrebne kode za mikroprocesor 2) spajkanja in načrt 3) Optimizacija oblikovanja. Nobeno od teh vprašanj samo po sebi ni preveč zapleteno, vendar je za začetnike lahko veliko, če jih vse rešimo brez izkušenj. Za zapisovanje naprave, spajkalne postaje itd. Je potreben strojni programer … PRVI, ki bi ga lahko kdo opazil, je, da 7-segmentne LED-ji NEMAjo zaporov (omejevalnik toka)! Dovolite mi, da to hitro obravnavam z navedbo, da jih imam v svoji prvotni zasnovi … a za razlago preberite naslednji korak!

3. korak: Breadboarding & Micro Code

Breadboarding & Micro Code
Breadboarding & Micro Code

Za to je bila nujna deska. Prikazana je moja splošna plošča, vendar sem za velikost tega projekta dejansko uporabil to in manjšo ploščo, saj je bilo treba veliko žic razmakniti. Najprej sem preizkusil eno samo 7-segmentno LED z uporabo začetne kode. To je potrdilo 3 stvari; 1) ožičenje IC -jev je bilo preverjeno dobro! 2) vodilo me je k optimizaciji in dokončanju kode. 3) ugotovil sem, da ne potrebujem trenutnih omejevalnih uporov! 1 WIRINGA je bila moja shematska zasnova za delo z mojo kodo, saj bi LED krožila po številkah z enim stikalom na gumb, tako da je preveril mojo kodo in postavitev. Ni bilo potrebno veliko, toda načrt je potrdil, da sem v dobri formi.2 CODEI je imel prvotno nastavljeno kodo z glavno rutino za iskanje gumbov in ISR (rutina prekinitve storitev) za prikaz številk,. Po preskusih načrta sem obrnil rutine, zato je bila večina časa nenehno prikazovanje številk in ISR za preverjanje gumbov. Razlog, zakaj sem to storil, je bil le stalni zaslon, ker PIC deluje z notranjo uro 4 MHz, izgubljam zelo malo časa za iskanje gumbov. Nič hudega … samo odvisno od tega, kako želite narediti kodo in kaj je najbolj smiselno za vsako aplikacijo. Pri tem je prikaz pomemben, zato sem to uvrstil v glavno rutino. Ko so prišli moji prvi deli (vseh 6 zaslonov!), Sem dokončal ožičenje ohišja in našel drugo težavo. Ko sem pritisnil gumb, je imela moja koda nekaj zabrisanih registrov, ki niso bili izbrisani, ISR pa je povzročil manjše napake na zaslonu.; ======================== ================================================== =====; Števec obratov;; -----------; Dsply3 Dsply2; Dsply4 Dsply1; Led1 Led3; A5 | 4 15 | A6 - Led2; Vss | 5 14 | Vdd; Gumb1 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;; ================================== ===============================================; Zgodovina revizij in opombe:; V1.0 Začetna glava, koda 3/30/09;;; (C) 5/2009; Ta koda se lahko uporablja za osebno učenje/uporabo/spreminjanje.; Vsaka uporaba te kode v komercialnih izdelkih krši to brezplačno izdajo.;.; ------------------------------------------------ -------------------------------#vključuje P16F627A. INC; ============= ================================================== ================; Določa; ------------------------------------------------ -------------------------------; ================== ================================================== ===========; Podatki; ------------------------------------------------ -------------------------------; Spremenljivke vodenja časa count1 equ 20 count2 equ 21 dis1 equ 22dis2 equ 23dis3 equ 24dis4 equ 25dis5 equ 26dis6 equ 27w_temp equ 28status_temp equ 29ISRCNTR equ 2A; ==================== ================================================== =======; Ponastavi vektorje;; PREVERITE KONFIG. BITI PRED ZGORENJEM !!!; INTOSC; MCLR: Omogočeno; PWRUP: Omogočeno; VSI DRUGI: INVALIDIRANO !!;; ------------------------------------------ ------------------------------------- RESET_ADDR EQU 0x00 ISR_ADDR EQU 0x04 org RESET_ADDR pojdi na začetek; == ================================================== ===========================; ISR;; ----------------------------------------------- -------------------------------- org ISR_ADDR movwf w_temp swapf STATUS, w movwf status_temp;; ISR TUKAJ; Preverite stikala PB0-PB5 btfsc PORTB, 0; Preverite SW1 klic sw1debounce btfsc PORTB, 1; Preverite SW1 klic sw2debounce btfsc PORTB, 2; Preverite SW1 klic sw3debounce btfsc PORTB, 3; Preverite SW1 klic sw4debounce btfsc PORTB, 4; Preverite SW1 klic sw5debounce btfsc PORTB, 5; Preverite SW1 klic sw6debounce pojdi na endisrsw1debounce klic debounce; Počakajte 0,2 sekunde odpoved klica incf dis1; Posodobi števec movf dis1, W; Preverite preliv xorlw 0x1A; 10 na 7 sekund? btfss STATUS, Z vrnitev; Ne, vrni se k skeniranju. movlw h'10 '; Da, ponastavi prikaz. movwf dis1 vrne w2debounce klic debounce; Počakajte 0,2 sekunde odpoved klica incf dis2; Posodobi števec movf dis2, W; Preverite preliv xorlw 0x4A; 10 na 7 sekund? btfss STATUS, Z vrnitev; Ne, vrni se k skeniranju. movlw h'40 '; Da, ponastavi prikaz. movwf dis2 vrne w3debounce klic debounce; Počakajte 0,2 sekunde odpoved klica incf dis3; Posodobi števec movf dis3, W; Preverite preliv xorlw 0x5A; 10 na 7-seg? btfss STATUS, Z vrnitev; Ne, vrni se k skeniranju. movlw h'50 '; Da, ponastavi prikaz. movwf dis3 vrne w4debounce klic debounce; Počakajte 0,2 sekunde odpoved klica incf dis4; Posodobi števec movf dis4, W; Preverite preliv xorlw 0x8A; 10 na 7 sekund? btfss STATUS, Z vrnitev; Ne, vrni se k skeniranju. movlw h'80 '; Da, ponastavi prikaz. movwf dis4 vrnew5debounce klic debounce; Počakajte 0,2 sekunde odpoved klica incf dis5; Posodobi števec movf dis5, W; Preverite preliv xorlw 0x9A; 10 na 7 sekund? btfss STATUS, Z vrnitev; Ne, vrni se k skeniranju. movlw h'90 '; Da, ponastavi prikaz. movwf dis5 vrnew6debounce klic debounce; Počakajte 0,2 sekunde odpoved klica incf dis6; Posodobi števec movf dis6, W; Preverite preliv xorlw 0xCA; 10 na 7 sekund? btfss STATUS, Z vrnitev; Ne, vrni se k skeniranju. movlw h'C0 '; Da, ponastavi prikaz. movwf dis6 povratnik bcf INTCON, T0IF swapf status_temp, w movwf STATUS swapf w_temp, f swapf w_temp, wretfie; ============================ ================================================== =; Začni tukaj!;---------------------------------------------- --------------------------------- začetek; Konfiguriraj V/I vrata clrf PORTA movlw 0x07 movwf CMCON bcf STATUS, RP1 bsf STATUS, RP0 movlw h'00 '; RA izhodi, RA5 Brez izhoda movwf TRISA bcf STATUS, RP0 clrf PORTB bsf STATUS, RP0 movl'; RB vhodi movwf TRISB; Nastavi notranji časovnik bsf PCON, 3; Nastavljeno na 4Mhz. movlw h'CF '; Tmr0 Notranji vir, predrazmer TMR0 1: 256 movwf OPTION_REG movlw h'A0 'movwf INTCON; Omogoči prekinitve TMR0, bcf STATUS, RP0; Initialize Registers clrf PORTA; Počisti PortA clrf PORTB; Počisti izhode PortB 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'C6' klic debounce; 0,2 s; preskusne LED, zaslon 8 ???; ====================================== =========================================; Glavni; Dobi vnose iz stikal, odpovedi in prikazov.;; To posodobi zaslone, @4Mhz s TMR0 prescal 1: 4, s hitrostjo 1Khz.; Zaslon 0 se uporablja za dodelitev neuporabljenemu zaslonu. Zaslon 1-6 je ožičen.; Prvič, IC BCD-7Seg je naložen z vrednostjo prikaza, IC BCD-Dec pa je aktiviran za; izbira zaslona.; Drugič, za prikaz se zadrži zakasnitev ms.; Tretjič, BCD-Dec IC je deaktiviran … zaslon 0 je izbran za izklop prikaza;; To se ponovi za vsakega od 6 zaslonov in se ponovi.; ISR upravlja zaznavanje stikala pri hitrosti 15Hz.; -------------- -------------------------------------------------- --------------- main; Disp1 movf dis1, 0 movwf PORTA klic ledon goto main; ===================== ================================================== ========; Ledon; Čas poravnave za vklop LED diode.; 6 prikazov-> 1/6 delovni cikel pri 1Khz = 166 ciklov; ----------------------------------- -------------------------------------------- ledon movlw.54 movwf count1ledloop decfsz count1, F pojdi na ledloopreturn; =========================================== ==================================; Signal za odklop; 4 cikli za nalaganje in klic, 2 cikla za vrnitev.; 4 Mhz Tc:: count2 = 255-> 0,2 s; -------------------------------------- ----------------------------------------- debounce movlw.255; Zamuda za 1/5 sekunde debounce. movwf count2 klic pon_wait return; -------------------------------------------- -----------------------------------; count1 = 255d:: 775 ciklov do 0, + 3 cikli za vrnitev.; --------------------------------- ---------------------------------------------- pon_waitbig_loopS movlw.255 movwf count1short_loopS decfsz count1, F goto short_loopS decfsz count2, F goto big_loopSreturnend3 CIRCUITI je prvotno imel upore 470Ohm iz vsake vrstice gonilnikov zaslona iz linije za omogočanje 74LS47 in CD4028. Vendar sem preizkusil trenutno napetost svojega vezja in ugotovil, da vleče le ~ 31 mA. In ker je dejanski gonilnik za zaslone neposredno iz 74LS47, omogočanje pa iz drugega IC -ja, hiter pregled povprečnih in najvišjih zahtev ter ustreznih podatkovnih listov ….. Upor sem umaknil z mize in ugotovil razliko 1mA ! Zdi se, da je neposredna vožnja linije CA s 4028 in neposredna vožnja po vseh segmentih v redu! …nekako.:) V kodi sem imel napako, ki ni izbrisala mojih registrov ob pritisku gumba, zaradi česar sta bila na zadnjem zaslonu 2 segmenta zelo močno osvetljena, ko je bil pritisnjen gumb. To je bilo slabo. Vendar je brisanje registra odpravilo to težavo in neprekinjeno preverjanje napajanja potrjuje, da je nenehno okoli 30 mA. To bi mi moralo dati (glede na prejšnje izkušnje s podobnimi vezji) ~ 20 ur delovanja z 1 9V baterijo (500mAH/30mAH pod 5V regulacijo) … Upam! če se je kaj zgodilo, dolgoročno.

4. korak: Spajkanje tiskanih vezij

Spajkanje PCB
Spajkanje PCB

Vsakič, ko pridem do te točke v svojem projektu, odložim abit. Sprva sem to stvar želel zaviti, a sem to idejo hitro opustil. Najprej pomislim "Nekaj žic za spajkanje, nič hudega" … potem pa, ko je moj projekt pripravljen za spajkanje, razmišljam, " Moral bi poslati ali izdelati proto ploščo ali si vtisniti lastno ploščo ". Ne ukvarjam se z jedkanjem PCB (še) in nisem hotel plačati $$ za izdelavo plošče, tako da … Da…Pri spajanju te stvari sem porabil približno 3 ure. Gre za približno 150 žic, torej to je 300 spajkalnih točk, plus dotiki za spajkalne mostove. Kakorkoli že, tukaj je prikazana zadnja stran plošče….ja… nered, toda ko je bilo vse končano, sem imel le 1 spajkanje kratko. Razmišljanje je trajalo 20 minut, saj je na zaslonu prikazano napačno število #, prikazano v logičnem vzorcu, ki sem ga moral razvozlati. Po tem sem našel kratki in bam! Delalo je odlično.

5. korak: Zaključek

Zaključek
Zaključek

DEJALO JE! Ta projekt je trajal približno; 2 tedna za razmislek in pošiljanje dobrih točk po elektronski pošti prosilcu, ~ 3 ure dokončanja in odpravljanja napak kode, ~ 4 ure načrtovanja in odpravljanja napak, ~ 3 ure spajkanja Z uporabo samo 3 IC -jev je mogoče Charlieplex 6 7-segmentne LED diode. Poraba energije je pri tej zasnovi približno 30 mA, kar ni slabo, če tako rečem. Sumim, da bi bilo mogoče uporabiti več 7-segmentnih LED, vendar niso potisnile ovojnice. Ta ideja bi lahko se uporablja za skoraj vsako aplikacijo z uporabo 7-segmentnih LED; termometer, ura, prikaz besedila itd. Z nekaj zapletene kode bi lahko imeli premikajoč se zaslon ali slike… morda celo osnovo za projekt POV (vztrajnost vida). in vstavi desko, kakor se mu zdi primerno. Če/ko bo to storjeno, bom naložil sliko. Kar zadeva vezje, se zdi, da je to zgrajeno po naročilu!

Priporočena: