Sadržaj:

BloodBowl brojač okretaja koristeći 7-segmentne LED diode: 5 koraka
BloodBowl brojač okretaja koristeći 7-segmentne LED diode: 5 koraka

Video: BloodBowl brojač okretaja koristeći 7-segmentne LED diode: 5 koraka

Video: BloodBowl brojač okretaja koristeći 7-segmentne LED diode: 5 koraka
Video: Часть 08 — Аудиокнига «Моби Дик» Германа Мелвилла (гл. 089–104) 2024, Juli
Anonim
BloodBowl brojač okretaja koristeći 7-segmentne LED diode
BloodBowl brojač okretaja koristeći 7-segmentne LED diode

Ovaj projekt je bio za BloodBowl brojač okretaja igre sa š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 šta je ovo i šta želi, trebalo mi je neko vrijeme da odlučim hoću li i kako to učiniti. Prvo sam morala imati ideju šta želi, pa sam počela sa konceptom umjetnosti (slika). Osnovna ideja je imati 3 tipke, koje kontroliraju po 3 LED diode, a smjestile bi se unutar prilagođenog tornja. Jedini veliki zahtjev bio je da se prva 4 ekrana odbroje od 0 do 8 i resetiraju, a donja 2 imaju displeji odbrojavaju od 8 do 0 i vraćaju se natrag. Ja bih dovršio krug, a on kompletan.

Korak 2: Dizajn i lista dijelova

Lista dizajna i dijelova
Lista 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/en/books /picbook/7_08chapter.htm koji kaže "Do 6 ekrana se može pristupiti na ovaj način bez uticaja na osvetljenost svakog ekrana." Smatrao sam da je ovo izazov i nešto za istražiti kao dio mog projekta. Prvo što sam učinio, bilo je da iz svoje kutije izvadim neke 7-segmentne zaslone sa žarnom niti i vidim kako će funkcionirati. Loše vijesti. Određeni dijelovi koje sam odabrao nisu se ponašali kako sam želio. Segment bi svijetlio kada je potrebno, na matičnoj ploči, ali je struja curenja raspodijeljena na ostalih 6 segmenata. Shvatio sam da ekrani sa žarnom niti možda nisu način na koji treba ići, ili sam ih morao koristiti na drugačiji način. Stoga sam radi jednostavnosti provjerio da li LED diode sa 7 segmenata koje imam pri ruci rade za izradu matične ploče i naručio neke uobičajene anodne zaslone. Drugo što 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: SVIH 6 ekrana imaju ISTE linije iz upravljačkog sklopa upravljačkog programa. IC birača omogućuje svaki prikaz, 1 odjednom, a PIC odgovarajuće ažurira linije od 7 segmenata. Vrlo jednostavna ideja. Nakon toga, sve što je bilo potrebno je kompletiranje koda i hardvera. Lista dijelova Nakon 3 male narudžbe od Digi-Key-a pri odlučivanju o konkretnim komponentama, imao sam sve što mi je potrebno (s nekim stvarima pri ruci); 1 ~ 3 "x4 "Prekidači s malim gumbom 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 različite boje i oznake, ali to sam bio samo ja.1 78L05 5V regulator1 9V kopča za bateriju 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, ali preuzimanje svih bez ikakvog iskustva početniku može biti dosta. Potreban je hardverski programer za spaljivanje uređaja, stanice za lemljenje itd … PRVO što bi neko mogao primijetiti je da 7-segmentne LED diode NEMAJU serijske (ograničavače struje) otpornike! Dopustite mi da to riješim brzo, navodeći da ih je moj originalni dizajn unio … 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 generička 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. Ovo je potvrdilo 3 stvari; 1) ožičenje IC -a je provjereno dobro! 2) dovelo me do optimizacije i finalizacije koda. 3) Učinilo mi je da shvatim da mi ne trebaju otpornici za ograničavanje struje! 1 WIRINGA je rekla da je moj shematski dizajn pronađen za rad s mojim kodom, jer bi LED dioda kružila kroz brojeve pomoću jednog prekidača, tako da je verificiran moj kôd i raspored. 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 i ISR (rutina prekida usluga) prikazivanje brojeva,. Nakon matičnih testova, promijenio sam rutine, tako da je većinu vremena stalno prikazivao brojeve i ISR kako bi provjerio ima li dugmadi. Razlog zašto sam to učinio je samo stalni prikaz, budući da PIC radi s internim taktom od 4 MHz, gubim vrlo malo vremena na traženje tipki. 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 ekrana!), Završio sam ožičenje matične ploče i otkrio drugi problem. Kada sam pritisnuo dugme, moj kôd je imao neke traljave registre koji se nisu brisali, a ISR je uzrokovao neke manje greške na ekranu.; ======================== ================================================== =====; Counter Counter;; -----------; Dsply3 Dsply2; Dsply4 Dsply1; Led1 Led3; A5 | 4 15 | A6 - Led2; Vss | 5 14 | Vdd; Button1 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;; ================================== ===============================================; Istorija revizija i bilješke:; V1.0 Početno zaglavlje, Kod 3/30/09;;; (C) 5/2009; Ovaj kôd se može koristiti za lično 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; ============= ================================================== ================; Definiše; ------------------------------------------------ -------------------------------; ================== ================================================== ===========; Podaci; ------------------------------------------------ -------------------------------; Varijable evidentiranja 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; ====================== ================================================== =======; Reset Vectors;; PROVJERITE KONFIG. BITOVI PRIJE PALJENJA !!!; INTOSC; MCLR: ENABLED; PWRUP: ENABLED; 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 HERE; Provjerite PB0-PB5 Prekidači 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, resetujte ekran. 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, resetujte ekran. 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, resetujte ekran. movwf dis3 vraćaw4debounce poziv debounce; Sač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, resetujte ekran. 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, resetujte ekran. 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, resetujte ekran. movwf dis6 povratnik bcf INTCON, T0IF swapf status_temp, w movwf STATUS swapf w_temp, f swapf w_temp, wretfie; ============================ ================================================== =; Počni ovdje!;---------------------------------------------- --------------------------------- početak; Konfiguracija 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 tajmer 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 prekide TMR0, bcf STATUS, RP0; Initialize Registers clrf PORTA; Obriši PortA clrf PORTB; Obriši 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 sek; testne LED diode, prikaz 8 ???; ====================================== =========================================; Main; Dobiva ulaze sa prekidača, diskusija i prikaza sa prikazima.;; Ovim se ažuriraju prikazi, @4Mhz sa TMR0 prescal 1: 4, brzinom od 1Khz.; Prikaz 0 se koristi za dodjeljivanje nekorištenom ekranu. Ekran 1-6 je ožičen.; Prvo, BCD-7Seg IC je učitan vrijednošću prikaza, a IC BCD-Dec je aktiviran za; izbor prikaza.; Drugo, kašnjenje od ms se zadržava za prikaz.; Treće, BCD-Dec IC je deaktiviran … odabran je display0 za isključivanje prikaza;; Ovo se ponavlja za svaki od 6 ekrana 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 diode.; 6 prikaza-> 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.; 4Mhz Tc:: count2 = 255-> 0,2 sec; -------------------------------------- ----------------------------------------- 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 prvobitno imao otpornike od 470Ohm iz svake linije upravljačkog programa ekrana iz linije za omogućavanje 74LS47 i CD4028. Međutim, testirao sam strujno napajanje svog kruga i otkrio da vuče samo ~ 31mA. A budući da je stvarni upravljački program za zaslone izravno iz 74LS47, a omogućavanje je s drugog IC -a, brzo pregledavanje prosječnih i vršnih zahtjeva, te odgovarajućih tablica s podacima … Izvukao sam otpornike s ploče i otkrio razliku od 1 mA ! Čini se da je izravna vožnja CA linije s 4028, dok izravno vozite sve segmente u redu! … Nekako.:) JA SAM imao grešku u kodu koja nije obrisala moje registre kada je pritisnuto dugme, zbog čega su na posljednjem ekranu 2 segmenta jako osvijetljena kada je pritisnuto dugme. 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. Ovo bi mi trebalo dati (na osnovu 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 direktno pogonjene, ali sam ih stavio u utičnice u slučaju da se nešto desilo, dugoročno.

Korak 4: Lemljenje PCB -a

Lemljenje PCB -a
Lemljenje PCB -a

Svaki put kad dođem do ove tačke u svom projektu odlažem abit. U početku sam ovo namjeravao omotati žicom, ali sam brzo odustao od te ideje. Prvo pomislim "Nekoliko žica za lemljenje, ništa strašno" … onda, dok moj projekt bude spreman za lemljenje, razmišljam, " Trebao sam ili poslati da mi se napravi proto ploča, ili sam urezati vlastitu ploču ". Ne bavim se bakropisom na PCB -u (još), 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 tačaka lemljenja, plus dodaci za mostove za lemljenje. U svakom slučaju, evo slike stražnje strane ploče ….aha … u neredu, ali kad je sve bilo gotovo, imao sam samo 1 lem kratko. Trebalo je 20 minuta razmišljanja jer je na ekranu bilo prikazano pogrešno označavanje #logičkim obrascem 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 sedmice za razmišljanje i slanje slabih bodova e -poštom podnositelju zahtjeva, ~ 3 sata dovršavanja koda i otklanjanja grešaka, ~ 4 sata izrade matične ploče i otklanjanja grešaka, ~ 3 sata lemljenjaKorištenjem samo 3 IC -a moguće je Charlieplex 6 7-segmentne LED diode. Potrošnja energije 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 ideja bi mogla primijeniti na gotovo BILO KOJU aplikaciju koristeći 7-segmentne LED diode; termometar, sat, prikaz teksta itd. S nekim lukavim kodom mogli biste imati pokretni ekran ili slike … možda čak i bazu za projekat POV (postojanost vida). Konačna implementacija je ostavljena mom prijatelju da izgradi svoj Toranj i postavite ploču prema svom nahođenju. Ako/Kada to bude učinjeno, dobit ću postavljenu sliku. Ali što se tiče kola, čini se da je ovo napravljeno po narudžbi!

Preporučuje se: