Sadržaj:

BloodBowl brojač okreta pomoću 7-segmentnih LED dioda: 5 koraka
BloodBowl brojač okreta pomoću 7-segmentnih LED dioda: 5 koraka

Video: BloodBowl brojač okreta pomoću 7-segmentnih LED dioda: 5 koraka

Video: BloodBowl brojač okreta pomoću 7-segmentnih LED dioda: 5 koraka
Video: TIPS AND TRICKS TO GET THE CHAMPION AND MORE - Raid Shadow Legends (Faction Wars) 2024, Srpanj
Anonim
BloodBowl brojač okretaja pomoću 7-segmentnih LED dioda
BloodBowl brojač okretaja pomoću 7-segmentnih LED dioda

Ovaj je projekt bio za brojač okreta u igri BloodBowl koji je koristio šest Charlieplexed 7-segmentnih LED dioda.

Korak 1: Koncept

Koncept
Koncept

Moj prijatelj me pitao o idejama za izgradnju Bloodbowl Turn brojača za njegovu društvenu igru. Ne znajući što je to i što želi, trebalo mi je neko vrijeme da odlučim hoću li i kako to učiniti. Prvo sam morala imati ideju što želi, pa sam počela s konceptom umjetnosti (slika). Osnovna ideja je imati 3 tipke za upravljanje, svaka sa 3 LED diode i bit će smještena unutar prilagođenog tornja. Jedini veliki zahtjev bio je da se prva 4 zaslona broje od 0 do 8 i resetiraju, a donja 2 imaju zasloni odbrojavaju od 8 do 0 i vraćaju se natrag. Ja bih dovršio krug, a on bi dovršio toranj.

Korak 2: Popis dizajna i dijelova

Popis dizajna i dijelova
Popis dizajna i dijelova

Budući da je koncept zahtijevao 6 7-segmentnih LED dioda, a ja sam imao pri ruci nekih 8-bitnih mikročipova PIC-ova, istraživao sam načine korištenja PIC-ova za kontrolu LED-ova. Našao sam ovu vezu https://www.mikroe.com/hr/books /picbook/7_08chapter.htm koji kaže "Do 6 ekrana se može pristupiti na ovaj način bez utjecaja na svjetlinu svakog zaslona." Smatrao sam da je to izazov i nešto za istražiti kao dio mog projekta. Prvo što sam učinio, bio je izvaditi neke 7-segmentne zaslone sa žarnom niti iz svoje kutije i vidjeti kako će oni funkcionirati. Loše vijesti. Određeni dijelovi koje sam odabrao nisu se ponašali kako sam htio. Segment bi svijetlio kad je potrebno, na ploči, ali je struja curenja raspodijeljena na ostalih 6 segmenata. Shvatio sam da zasloni sa žarnom niti možda nisu najbolji način ili sam ih morao koristiti na drugačiji način. Stoga sam radi jednostavnosti provjerio da li LED diode od 7 segmenata koje imam pri ruci rade za izradu matične ploče i naručio neke uobičajene anodne zaslone. Druga stvar koju sam trebao učiniti je postaviti svoj dizajn i početi raditi na kodu. Na slici je moje kolo. Ne mnogo, jer kod u PIC -u brine o multipleksiranju … pogrešno Charlieplexing. Napomena: SVI 6 ekrana imaju ISTE retke iz upravljačkog sklopa upravljačkog programa. IC birača omogućuje svaki prikaz, jedan po jedan, a PIC odgovarajuće ažurira linije od 7 segmenata. Vrlo jednostavna ideja. Nakon toga sve što je bilo potrebno je dovršenje koda i hardvera. Popis dijelova Nakon tri male narudžbe od Digi-Key-a pri odlučivanju o posebnim komponentama, imao sam sve što mi je potrebno (s nekim stvarima pri ruci); 1 ~ 3 "x4 "Prekidači s malim gumbom od PCB6 (NO) 1 74LS47, 7-segmentni zaslon IC1 PIC16F627 1 CD4028, 1 od 10 selektorskih IC 6 10KOhm otpornika1 otpornik 470Ohm1 kalem žice. Koristio sam razne boje i oznake, ali to sam bio samo ja.1 78L05 5V regulator1 9V isječak baterije 1 9V baterija1 mali prekidač (za uključivanje/isključivanje) Smatram da je ovo umjereno složen projekt zbog: 1) potrebnog koda mikroprocesora2) lemljenja i 3) Optimizacija dizajna. Nijedno od ovih pitanja samo po sebi nije pretjerano komplicirano, no početnicima se sve može učiniti bez ikakvog iskustva. Za spaljivanje uređaja, stanice za lemljenje itd. Potreban je hardverski programer … PRVO što bi netko mogao primijetiti je da 7-segmentne LED-ice NEMAJU serijske (ograničavače struje) otpornike! Dopustite mi da to riješim brzo, navodeći da ih je moj originalni dizajn ugradio … ali pročitajte sljedeći korak za objašnjenje!

Korak 3: Breadboarding i mikro kod

Breadboarding & Micro Code
Breadboarding & Micro Code

Okvir je za to bio neophodan. Prikazana je moja opća ploča, ali za veličinu ovog projekta zapravo sam koristio ovu i manju ploču jer je bilo mnogo žica koje je potrebno razmaknuti. Prvo sam testirao jednu pojedinačnu 7-segmentnu LED diodu koristeći početni kôd. To je potvrdilo 3 stvari; 1) Ožičenje IC -a je provjereno dobro! 2) Dovelo me do optimizacije i finalizacije koda. 3) Učinio sam da shvatim da mi ne trebaju trenutni ograničavajući otpornici! 1 WIRINGA je rekla da je moj shematski dizajn pronađen za rad s mojim kodom, jer bi LED kružio kroz brojeve pomoću jednog prekidača, tako da je potvrdio moj kôd i izgled. Nije bilo potrebno mnogo, ali je matična ploča potvrdila da sam u dobroj formi.2 CODEI je izvorno imao moj kôd postavljen s glavnom rutinom za traženje gumba, a ISR (rutina prekida usluga) prikazuje brojeve,. Nakon matičnih testova, promijenio sam rutine, pa je većina vremena stalno prikazivala brojeve i ISR za provjeru gumba. Razlog zašto sam to učinio je samo stalni prikaz, budući da PIC radi s unutarnjim taktom od 4 MHz, gubim vrlo malo vremena na traženje gumba. Ništa strašno … samo ovisi o tome kako želite napraviti kod i što ima najviše smisla za svaku aplikaciju. Za ovo je prikaz važan, pa sam to stavio u glavnu rutinu. Kad su stigli moji prvi dijelovi (svih 6 zaslona!), Dovršio sam ožičenje ploče i otkrio drugi problem. Kada sam pritisnuo gumb, moj kôd je imao neke traljave registre koji se nisu brisali, a ISR je uzrokovao neke manje greške na zaslonu.; ======================== ================================================== =====; Brojač okretaja;; -----------; 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;; ================================== ===============================================; Povijest revizije i bilješke:; V1.0 Početno zaglavlje, kôd 3/30/09;;; (C) 5/2009; Ovaj kôd se može koristiti za osobno učenje/primjenu/izmjenu.; Svaka upotreba ovog koda u komercijalnim proizvodima krši ovo besplatno izdanje.; Za pitanja/komentare kontaktirajte dot mage na yahoo dot com.; ------------------------------------------------ -------------------------------#uključuje P16F627A. INC; ============= ================================================== ================; Definira; ------------------------------------------------ -------------------------------; ================== ================================================== ===========; Podaci;------------------------------------------------ -------------------------------; Varijable mjerenja vremena 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; ====================== ================================================== =======; Poništi vektore;; PROVJERITE KONFIG. BITOVI PRIJE PALJENJA !!!; INTOSC; MCLR: Omogućeno; PWRUP: Omogućeno; SVI OSTALI: NEMOGUĆI !!;; ------------------------------------------ ------------------------------------- RESET_ADDR EQU 0x00 ISR_ADDR EQU 0x04 org RESET_ADDR goto start; == ================================================== ===========================; ISR;; ----------------------------------------------- -------------------------------- org ISR_ADDR movwf w_temp swapf STATUS, w movwf status_temp;; ISR OVDJE; Provjerite prekidače PB0-PB5 btfsc PORTB, 0; Provjerite SW1 poziv sw1debounce btfsc PORTB, 1; Provjerite SW1 poziv sw2debounce btfsc PORTB, 2; Provjerite SW1 poziv sw3debounce btfsc PORTB, 3; Provjerite SW1 poziv sw4debounce btfsc PORTB, 4; Provjerite SW1 poziv sw5debounce btfsc PORTB, 5; Provjerite SW1 poziv sw6debounce idite na endisrsw1debounce poziv debounce; Pričekajte 0,2 sekunde debounce incf dis1; Ažuriraj brojač movf dis1, W; Provjerite ima li preljeva xorlw 0x1A; 10 na 7 sekundi? btfss STATUS, Z povratak; Ne, vrati se na skeniranje. movlw h'10 '; Da, resetiraj zaslon. movwf dis1 vraćaw2debounce poziv debounce; Pričekajte 0,2 sekunde debounce incf dis2; Ažuriraj brojač movf dis2, W; Provjerite ima li preljeva xorlw 0x4A; 10 na 7 sekundi? btfss STATUS, Z povratak; Ne, vrati se na skeniranje. movlw h'40 '; Da, resetiraj zaslon. movwf dis2 vraćaw3debounce poziv debounce; Pričekajte 0,2 sekunde debounce incf dis3; Ažuriraj brojač movf dis3, W; Provjerite ima li preljeva xorlw 0x5A; 10 na 7 sekundi? btfss STATUS, Z povratak; Ne, vrati se na skeniranje. movlw h'50 '; Da, resetiraj zaslon. movwf dis3 vraćaw4debounce poziv debounce; Pričekajte 0,2 sekunde debounce incf dis4; Ažuriraj brojač movf dis4, W; Provjerite ima li preljeva xorlw 0x8A; 10 na 7 sekundi? btfss STATUS, Z povratak; Ne, vrati se na skeniranje. movlw h'80 '; Da, resetiraj zaslon. movwf dis4 vraćaw5debounce poziv debounce; Pričekajte 0,2 sekunde debounce incf dis5; Ažuriraj brojač movf dis5, W; Provjerite ima li preljeva xorlw 0x9A; 10 na 7 sekundi? btfss STATUS, Z povratak; Ne, vrati se na skeniranje. movlw h'90 '; Da, resetiraj zaslon. movwf dis5 vraćaw6debounce poziv debounce; Pričekajte 0,2 sekunde debounce incf dis6; Ažuriraj brojač movf dis6, W; Provjerite ima li preljeva xorlw 0xCA; 10 na 7 sekundi? btfss STATUS, Z povratak; Ne, vrati se na skeniranje. movlw h'C0 '; Da, resetiraj zaslon. movwf dis6 povratnik bcf INTCON, T0IF swapf status_temp, w movwf STATUS swapf w_temp, f swapf w_temp, wretfie; ============================ ================================================== =; Započni ovdje!;---------------------------------------------- ---------------------------------početak; Konfiguriranje I/O portova clrf PORTA movlw 0x07 movwf CMCON bcf STATUS, RP1 bsf STATUS, RP0 movlw h'00 '; RA izlazi, RA5 Nema izlaza movwf TRISA bcf STATUS, RP0 clrf PORTB bsf STATUS, RP0 movw' RB Ulazi movwf TRISB; Postavite interni mjerač vremena bsf PCON, 3; Postavljeno na 4Mhz. movlw h'CF '; Tmr0 Interni izvor, predmjer TMR0 1: 256 movwf OPTION_REG movlw h'A0 'movwf INTCON; Omogući TMR0 prekide, bcf STATUS, RP0; Inicijalizacija registra clrf PORTA; Obriši PortA clrf PORTB; Očisti PortB izlaze 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' poziv debounce; 0,2 s; testne LED diode, zaslon 8 ???; ====================================== ===========================================; Glavni; Dobiva ulaze sa prekidača, prikaza i prigovora.;; Ovo ažurira zaslone, @4Mhz s TMR0 prescal 1: 4, brzinom od 1Khz.; Zaslon 0 se koristi za dodjeljivanje nekorištenom zaslonu. Zaslon 1-6 je ožičen.; Prvo, BCD-7Seg IC je učitan vrijednošću prikaza, a IC BCD-Dec je aktiviran za; odabir prikaza.; Drugo, kašnjenje od ms zadržano je za prikaz.; Treće, BCD-Dec IC je deaktiviran … odabran je display0 za isključivanje prikaza;; To se ponavlja za svaki od 6 zaslona i ponavlja se.; ISR upravlja senziranjem prekidača brzinom od 15Hz.; -------------- -------------------------------------------------- --------------- main; Disp1 movf dis1, 0 movwf PORTA poziv ledon goto main; ===================== ================================================== ========; Ledon; Vrijeme mirovanja za uključivanje LED dioda.; 6 zaslona-> 1/6 radni ciklus pri 1Khz = 166 ciklusa; ----------------------------------- -------------------------------------------- ledon movlw.54 movwf count1ledloop decfsz count1, F idi na ledloopreturn; ============================================= ==================================; Debounce signal; 4 ciklusa za učitavanje i pozivanje, 2 ciklusa za povratak.; 4 Mhz Tc:: count2 = 255-> 0,2 sek; -------------------------------------- ----------------------------------------- debounce movlw.255; Odgoda za 1/5 sekunde debounce. movwf count2 poziv pon_wait return; -------------------------------------------- -----------------------------------; count1 = 255d:: 775 ciklusa do 0, + 3 ciklusa za povratak.; --------------------------------- ---------------------------------------------- pon_waitbig_loopS movlw.255 movwf count1short_loopS decfsz count1, F goto short_loopS decfsz count2, F goto big_loopSreturnend3 CIRCUITI je izvorno imao 470Ohm otpornike iz svake linije pogonitelja zaslona iz linije za omogućavanje 74LS47 i CD4028. Međutim, testirao sam strujno napajanje strujnog kruga i otkrio da vuče samo ~ 31mA. A budući da je stvarni upravljački program za zaslone izravno s 74LS47, a omogućavanje je s drugog IC -a, brzo premošćivanje prosječnih i vršnih zahtjeva i odgovarajućih podatkovnih listova ….. Izvukao sam otpornike s ploče i otkrio razliku od 1 mA ! Čini se da je izravna vožnja CA linijom s 4028, dok izravno vozite sve segmente u redu! …Nekako.:) JA SAM imao grešku u kodu koja mi nije obrisala registre kada je pritisnuta tipka, zbog čega su na zadnjem zaslonu 2 segmenta jako osvijetljena kada je pritisnuta tipka. Ovo je bilo loše. Međutim, brisanje registra je riješilo ovaj problem, a stalne provjere napajanja potvrđuju da je konstantno oko 30 mA. To bi mi trebalo dati (na temelju prethodnog iskustva sa sličnim krugovima) ~ 20 sati rada s 1 9V baterijom (500mAH/30mAH pod 5V regulacijom) … Nadam se! Odlučio sam LED diode držati izravno pogonjene, ali sam ih stavio u utičnice u slučaju da se nešto dogodilo, dugoročno.

Korak 4: Lemljenje PCB -a

Lemljenje na PCB -u
Lemljenje na PCB -u

Svaki put kad dođem do ove točke u svom projektu, odgađam abit. Isprva sam namjeravao ovo omotati žicom, ali brzo sam odustao od te ideje. Prvo pomislim "Nekoliko žica za lemljenje, ništa strašno" … onda, do trenutka kada je moj projekt spreman za lemljenje, razmišljam, " Trebao sam ili poslati da mi se izradi proto ploča, ili sam ugravirati vlastitu ploču. "Još se ne bavim bakropisom na PCB -u i nisam želio platiti $$ da mi se napravi ploča, pa …. Da ….. Potrošio sam oko 3 sata na lemljenje ove stvari. Radi se o 150 žica, dakle to je 300 lemnih točaka, plus dodaci za lemne mostove. U svakom slučaju, evo stražnje strane ploče na slici ….aaaaaaaaaaaaaaaaaaaaaaaaaa!. Trebalo je 20 minuta razmišljanja jer je na zaslonu bilo prikazano pogrešno označavanje #logičkim uzorkom koji sam morao dešifrirati. Nakon toga sam locirao kratki, i bam! Radilo je savršeno.

Korak 5: Zaključak

Zaključak
Zaključak

URADILO JE! Ovaj projekt je trajao oko; ~ 2 tjedna za razmišljanje i slanje slabih bodova e -poštom podnositelju zahtjeva, ~ 3 sata dovršavanja koda i otklanjanja pogrešaka, ~ 4 sata izrade matične ploče i ispravljanje pogrešaka, ~ 3 sata lemljenjaKorištenjem samo 3 IC -a moguće je Charlieplex 6 7-segmentne LED diode. Snaga napajanja je oko 30 mA s ovim dizajnom, što nije loše ako to i sam kažem. Sumnjam da bi se moglo koristiti više 7-segmentnih LED dioda, ali nisu gurnule omotnicu. Ova bi ideja mogla primijeniti na gotovo BILO KOJU aplikaciju pomoću 7-segmentnih LED dioda; termometar, sat, prikaz teksta itd. S nekim lukavim kodom mogli biste imati pokretni zaslon ili slike … možda čak i bazu za projekt POV (postojanost vida). Konačna implementacija prepuštena je mom prijatelju da izgradi svoj Toranj i postavite ploču prema svome mišljenju. Ako/Kada to bude učinjeno, dobit ću postavljenu sliku. Ali što se tiče kruga, čini se da je ovo napravljeno po narudžbi!

Preporučeni: