Përmbajtje:

Counter TurnBowl BloodBowl Duke përdorur LED me 7 segmente: 5 hapa
Counter TurnBowl BloodBowl Duke përdorur LED me 7 segmente: 5 hapa

Video: Counter TurnBowl BloodBowl Duke përdorur LED me 7 segmente: 5 hapa

Video: Counter TurnBowl BloodBowl Duke përdorur LED me 7 segmente: 5 hapa
Video: 10 молодых людей жестоко избили Чарльза Янга до смерти ... 2024, Korrik
Anonim
BloodBowl Turn Counter Duke përdorur LED me 7 segmente
BloodBowl Turn Counter Duke përdorur LED me 7 segmente

Ky projekt ishte për një sportel kundër lojës BloodBowl duke përdorur gjashtë LED me 7 segmente Charlieplexed.

Hapi 1: Koncepti

Koncept
Koncept

Një miku im më pyeti për idetë për ndërtimin e sportelit të Bloodbowl Turn për lojën e tij të bordit. Duke mos ditur se çfarë ishte kjo dhe çfarë donte ai, u desh pak kohë për të vendosur nëse dhe si do ta bëja këtë. Së pari duhej të kisha një ide se çfarë donte ai, kështu që fillova me artin koncept (foto). Ideja themelore është që të keni 3 butona shtytës, duke kontrolluar 3 LED secila dhe do të vendoset brenda një kullë të ndërtuar me porosi. Kërkesa e vetme e madhe ishte që 4 ekranet e para të numëronin nga 0 në 8 dhe të rivendoseshin, dhe të kishin 2 të ulëtat ekranet numërojnë mbrapsht nga 8 në 0 dhe kthehen prapa. Unë do të përfundoja qarkun, dhe ai do të përfundonte kullën.

Hapi 2: Dizajni & Lista e Pjesëve

Dizajni & Lista e Pjesëve
Dizajni & Lista e Pjesëve

Meqenëse koncepti kërkonte 6 LED me 7 segmente, dhe kisha disa PIC Mikroçip 8-bit të dobishëm, hulumtova mënyrat e përdorimit të PIC-ve për të kontrolluar LED-të. Gjeta këtë lidhje https://www.mikroe.com/en/books /picbook/7_08chapter.htm që thotë "Deri në 6 ekrane mund të ketë qasje si kjo pa ndikuar shkëlqimi i secilës ekran." Unë e konsiderova këtë një sfidë dhe diçka për të hetuar si pjesë e projektit tim. Gjëja e parë që bëra, ishte të kapja disa ekrane inkandeshente me 7 segmente nga kutia ime dhe të shihja se si do të funksiononin. Lajm i keq. Pjesët e veçanta që zgjodha nuk silleshin ashtu siç doja. Segmenti do të ndizet kur është e nevojshme, në tabelën e bukës, por rryma e rrjedhjes u shpërnda në 6 segmentet e tjera. Kuptova që ekranet inkandeshente mund të mos jenë rruga për të shkuar, ose më duhej t'i përdorja ato në një mënyrë tjetër. Kështu për thjeshtësi verifikova që LED-të me 7 segmente që kisha në dorë do të punonin për ngrirjen e bukës dhe porosita disa ekrane të zakonshëm të anodës. Gjëja e dytë që duhej të bëja ishte paraqitja e modelit tim dhe fillimi i punës në kod. Në foto është qarku im. Jo aq shumë, pasi kodi në PIC kujdeset për shumëfishimin … gabim Charlieplexing. Shënim: T ALL 6 ekranet kanë të njëjtat rreshta nga IC shoferi. IC-ja përzgjedhëse mundëson çdo ekran, 1 në të njëjtën kohë, dhe linjat me 7 segmente azhurnohen nga PIC në përputhje me rrethanat. Ide shumë e thjeshtë. Pas kësaj, kompletimi i kodit dhe harduerit është gjithçka që nevojitej. Lista e Pjesëve Pas 3 porosish të vogla nga Digi-Key ndërsa vendosja për komponentë të veçantë, kisha gjithçka që më duhej (me disa gjëra në dorë); 1 ~ 3 "x4 "Çelësat e butonave të vegjël të shtypjes PCB6 (JO) 1 74LS47, ekran me 7 segmente IC1 PIC16F627 1 CD4028, 1 nga 10 përzgjedhës IC 6 Rezistenca 10KOhm1 Rezistencë 470Ohm1 rrotull teli. Kam përdorur ngjyra dhe udhëzime të ndryshme, por kjo ishte vetëm unë. 1 78L05 5V rregullator 1 kapëse baterie 9V 1 bateri 9V 1 ndërprerës i vogël (për ndezje/fikje) e konsideroj këtë një projekt mesatarisht kompleks, për shkak të: 1) Kërkohet kodi i mikroprocesorit2) Saldimi dhe përpunimi i bukës 3) Optimizimi i dizajnit. Asnjëra nga këto çështje në vetvete nuk është tepër e komplikuar, por marrja e të gjithave pa ndonjë përvojë mund të jetë shumë e rëndësishme për fillestarët. Nga një programues hardueri kërkohet të djegë pajisjen, stacionin e saldimit, etj … Gjëja e parë që dikush mund të vërejë është se LED-të me 7 segmente NUK KAN series rezistencë serike (kufizuese aktuale)! Më lejoni ta trajtoj atë shpejt, duke deklaruar se dizajni im origjinal i kishte ato … por lexoni hapin tjetër për shpjegim!

Hapi 3: Breadboarding & Mikro Code

Breadboarding & Mikro Code
Breadboarding & Mikro Code

Breadboard ishte një domosdoshmëri për këtë. Tregohet buka ime e përgjithshme, por për madhësinë e këtij projekti në të vërtetë kam përdorur këtë dhe një tabelë më të vogël, pasi kishte shumë tela që duheshin ndarë. Së pari, testova një LED të vetëm me 7 segmente duke përdorur kodin fillestar. Kjo konfirmoi 3 gjëra; 1) Lidhja e IC -ve u verifikua mirë! 2) Më çoi në optimizimin dhe përfundimin e kodit tim. 3) Më bëri të kuptoj se nuk kisha nevojë për rezistencat aktuale kufizuese! 1 WIRINGSiç u tha, modeli im skematik u gjet për të punuar me kodin tim, pasi LED do të kalonte nëpër numra duke përdorur një ndërprerës të butonit, në mënyrë që të verifikohej kodi dhe paraqitja ime. Nuk kërkohej shumë por ngrirja e bukës konfirmoi se isha në gjendje të mirë. 2 CODEI fillimisht kishte vendosur kodin tim me një rutinë kryesore për të skanuar për butona dhe ISR (Ndërprerja e Shërbimit Rutina) shfaqte numrat,. Pas testeve të ngrënies, unë përmbysa rutinat, kështu që shumica e kohës po shfaqte vazhdimisht numra dhe ISR për të kontrolluar për butonat. Arsyeja pse e bëra këtë, ishte vetëm për të pasur një ekran konstant, pasi PIC po funksionon me një orë të brendshme 4Mhz, unë jam duke humbur shumë pak kohë duke skanuar për butona. Asnjë punë e madhe … varet vetëm nga mënyra se si doni të bëni kodin dhe çfarë ka më shumë kuptim për secilin aplikim. Për këtë, shfaqja është e rëndësishme, kështu që e vendosa atë në rutinën kryesore. Kur mbërritën pjesët e mia të para (të gjitha 6 ekranet!), Unë përfundova instalimet elektrike të bordit të bukës dhe gjeta një çështje tjetër. Kur shtypja butonin, kodi im kishte disa regjistra të çrregullt që nuk po pastroheshin dhe ISR po shkaktonte disa defekte të vogla në ekran.; ======================== =================================================== =====; Turn Counter;; -----------; Dsply3 Dsply2; Dsply4 Dsply1; Led1 Led3; A5 | 4 15 | A6 - Led2; Vss | 5 14 | Vdd; Butoni1 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;; ================================== =============================================; Historia e Rishikimit dhe Shënimet:; V1.0 Titulli fillestar, Kodi 3/30/09;;; (C) 5/2009; Ky kod mund të përdoret për mësim/aplikim/modifikim personal.; Çdo përdorim i këtij kodi në produktet komerciale shkel këtë lëshim të freeware.; Për pyetje/komente, kontaktoni qarkun mage në yahoo dot com.; ---------------------------------------------------- -------------------------------#përfshijnë P16F627A. INC; ============== ================================================== =================; Përcakton; ---------------------------------------------------- -------------------------------; ================== ================================================== ============; Të dhëna; ---------------------------------------------------- -----------------------------------; Mbajtja e ndryshoreve numërimi 1 i barazuar me 20 numër2 i barabartë me 21 dis1 i barabartë me 22dis2 me 23dis3 me 24dis4 me 25dis5 me 26dis6 me 27w_temp me 28status_temp me 29ISRCNTR barabartë 2A; ======================= =================================================== =======; Rivendosni vektorët;; KONTROLLONI KONFIG. PJESA PARA T B Djegur !!!; INTOSC; MCLR: ANALIZUAR; PWRUP: AKTIVIZUAR; T ALL GJITH T OTHER TJERT: TIS PAKTUAR !!;; ------------------------------------------ ------------------------------------- RESET_ADDR EQU 0x00 ISR_ADDR EQU 0x04 org RESET_ADDR filloj; == =================================================== ============================; ISR;; --------------------------------------------------- --------------------------------- org ISR_ADDR movwf w_temp swapf STATUS, w movwf status_temp;; ISR KETU; Kontrolloni Çelësat PB0-PB5 btfsc PORTB, 0; Kontrolloni thirrjen SW1 sw1debounce btfsc PORTB, 1; Kontrolloni thirrjen SW1 sw2debounce btfsc PORTB, 2; Kontrolloni thirrjen SW1 sw3debounce btfsc PORTB, 3; Kontrolloni thirrjen SW1 sw4debounce btfsc PORTB, 4; Kontrolloni thirrjen SW1 sw5debounce btfsc PORTB, 5; Kontrolloni thirrjen SW1 sw6debounce goto endisrsw1debounce thirrje debounce; Prisni 0.2 sekonda thirrje debounce incf dis1; Përditëso numëruesin movf dis1, W; Kontrolloni për tejmbushje xorlw 0x1A; 10 në 7-seg? btfss STATUSI, Z kthimi; Jo, kthehuni në skanim. movlw h'10 '; Po, rivendosni ekranin. movwf dis1 kthehetw2debounce thirrje debounce; Prisni 0.2 sekonda thirrje debounce incf dis2; Përditëso numëruesin movf dis2, W; Kontrolloni për tejmbushje xorlw 0x4A; 10 në 7-seg? btfss STATUSI, Z kthimi; Jo, kthehuni në skanim. movlw h'40 '; Po, rivendosni ekranin. movwf dis2 kthehetw3debounce thirrje debounce; Prisni 0.2 sekonda thirrje debounce incf dis3; Përditëso numëruesin movf dis3, W; Kontrolloni për tejmbushje xorlw 0x5A; 10 në 7-seg? btfss STATUSI, Z kthimi; Jo, kthehuni në skanim. movlw h'50 '; Po, rivendosni ekranin. movwf dis3 kthehetw4debounce thirrje debounce; Prisni 0.2 sekonda thirrje debounce incf dis4; Përditëso numëruesin movf dis4, W; Kontrolloni për tejmbushje xorlw 0x8A; 10 në 7-seg? btfss STATUSI, Z kthimi; Jo, kthehuni në skanim. movlw h'80 '; Po, rivendosni ekranin. movwf dis4 kthehetw5debounce thirrje debounce; Prisni 0.2 sekonda thirrje debounce incf dis5; Përditëso numëruesin movf dis5, W; Kontrolloni për tejmbushje xorlw 0x9A; 10 në 7-seg? btfss STATUSI, Z kthimi; Jo, kthehuni në skanim. movlw h'90 '; Po, rivendosni ekranin. movwf dis5 kthehetw6debounce thirrje debounce; Prisni 0.2 sekonda thirrje debounce incf dis6; Përditëso numëruesin movf dis6, W; Kontrolloni për tejmbushje xorlw 0xCA; 10 në 7-seg? btfss STATUSI, Z kthimi; Jo, kthehuni në skanim. movlw h'C0 '; Po, rivendosni ekranin. movwf dis6 returnendisr bcf INTCON, T0IF swapf status_temp, w movwf STATUS swapf w_temp, f swapf w_temp, wretfie; ============================== ================================================== =; Fillo Ketu!;---------------------------------------------- --------------------------------- fillimi; Konfiguro portat I/O clrf PORTA movlw 0x07 movwf CMCON bcf STATUS, RP1 bsf STATUS, RP0 movlw h'00 '; Daljet RA, RA5 Pa dalje movwf TRISA bcf STATUS, RP0 clrf PORTB bsf' STATUS, RP0 RB Inputet movwf TRISB; Vendosni kohëmatësin e brendshëm bsf PCON, 3; Vendoseni në 4Mhz. movlw h'CF '; Tmr0 Burimi i brendshëm, i paracaktuar TMR0 1: 256 movwf OPTION_REG movlw h'A0 'movwf INTCON; Aktivizo ndërprerjet TMR0, bcf STATUS, RP0; Inicimi i Regjistrave clrf PORTA; Pastro PortA clrf PORTB; Pastroni daljet PortB clrf numër 1 clrf numër 2 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 thirrje debounce; 0.2 sek; test LED, ekran 8 ???; ==================================== ==========================================; Kryesore; Merr hyrje nga çelsat, debounces dhe incriments displays.;; Kjo përditëson ekranet, @4Mhz me TMR0 prescal 1: 4, me një normë 1Khz.; Ekrani 0 përdoret për të alokuar në një ekran të papërdorur. Ekrani 1-6 janë të lidhur.; Së pari, BCD-7Seg IC është e ngarkuar me vlerën e ekranit, DHE BCD-Dec IC është aktivizuar për; përzgjedhja e ekranit.; Së dyti, një vonesë e ms mbahet për shfaqje.; Së treti, BCD-Dhjetor IC është çaktivizuar… ekrani0 zgjidhet për të fikur ekranin;; Kjo përsëritet për secilën nga 6 ekranet dhe bëhet me lak. ------------------------------------------------------ --------------- kryesore; Disp1 movf dis1, 0 movwf PORTA thirrje ledon mori drejtimin; ===================== ================================================== =========; Ledon; Koha e vendosjes për ndezjen e LED. 6 ekrane-> 1/6 cikli i punës në 1Khz = 166 cikle; ----------------------------------- ------------------------------------------------ ledon movlw.54 movwf count1ledloop decfsz count1, F goto ledloopreturn; ============================================ ======================================; Sinjali i debitimit; 4 cikle për t'u ngarkuar dhe thirrur, 2 cikle për t'u kthyer.; 4Mhz Tc:: numërimi2 = 255-> 0.2 sek; ------------------------------------------ -------------------------------------------- debounce movlw.255; Vonesa për debutimin 1/5 të dytë. movwf count2 telefononi pon_pritni kthimin; -------------------------------------------- ---------------------------------------; numërimi 1 = 255d:: 775 cikle në 0, + 3 cikle për t'u kthyer.; --------------------------------- -------------------------------------------------- pon_waitbig_loopS movlw.255 movwf count1short_loopS decfsz count1, F goto short_loopS decfsz count2, F goto big_loopSreturnend3 CIRCUITI fillimisht kishte rezistenca 470Ohm nga secila linjë shoferi të ekranit nga linja e aktivizimit 74LS47 dhe CD4028. Sidoqoftë, testova barazimin aktual të qarkut tim dhe zbulova se ai tërhiqte vetëm 31mA. Dhe meqenëse drejtuesi aktual për ekranet është drejtpërdrejt nga 74LS47 dhe aktivizimi është nga një IC tjetër, një rënie e shpejtë e kërkesave mesatare dhe pik, dhe fletëve të të dhënave përkatëse ….. I tërhoqa rezistorët nga pjata e bukës dhe gjeta një ndryshim 1mA ! Duket se drejtimi direkt i linjës CA nga 4028 ndërsa drejtoni drejtpërdrejt të gjitha segmentet është në rregull! …dicka e tille.:) KAM një defekt në kodin tim që nuk i pastroi regjistrat e mi kur u shtyp një buton, duke shkaktuar që ekrani i fundit të ketë 2 segmente të ndriçuar shumë kur shtypet një buton. Kjo ishte e keqe. Sidoqoftë, pastrimi i regjistrit e rregulloi këtë problem dhe kontrollet e vazhdueshme të energjisë konfirmojnë se ai është vazhdimisht rreth barazim 30mA. Kjo duhet të më japë (bazuar në përvojën e mëparshme me qarqe të ngjashme) ~ 20 orë kohë të funksionimit duke përdorur 1 bateri 9V (500mAH/30mAH nën rregullimin 5V) … Shpresoj! Vendosa t'i mbaj LED -të drejtuar drejtpërdrejt, por i vendos ato në priza në rast se diçka ka ndodhur, afatgjatë.

Hapi 4: Saldimi i PCB

Saldim me PCB
Saldim me PCB

Sa herë që arrij në këtë pikë në projektin tim, unë vonoj abit. Në fillim do ta mbështillja me tela këtë gjë, por shpejt e hoqa idenë. Në fillim mendoj "Disa tela për t'u lidhur, nuk ka punë të madhe" … pastaj, deri në kohën kur projekti im është gati për tu lidhur, po mendoj, " Unë ose duhet të kisha dërguar për të bërë një tabelë proto, ose të gdhendja bordin tim ". Unë nuk jam i gdhendur me PCB (akoma), dhe nuk doja të paguaja $ $ për të bërë një tabelë, kështu që …. Po ….. Kam kaluar rreth 3 orë duke e bashkuar këtë gjë. Bëhet fjalë për 150 tela, pra 300 pika saldimi, plus prekje për urat e saldimit. Gjithsesi, këtu është ana e pasme e tabelës në foto…. Po… një rrëmujë, por kur u bë e gjitha unë kisha vetëm 1 lidhës të shkurtër Me U deshën 20 minuta për të menduar pasi ekrani tregoi se numrat e gabuar të shfaqen në një model logjik që më duhej të deshifroja. Pas kësaj, gjeta të shkurtër, dhe bam! Punoi në mënyrë perfekte.

Hapi 5: Përfundimi

Përfundim
Përfundim

PUNOI! Ky projekt u desh rreth; ~ 2 javë për të menduar dhe dërguar me email pikë kërkuese, ~ 3 orë përfundimi dhe korrigjimi të kodit, ~ 4 orë përpunim buke dhe korrigjim, ~ 3 orë saldim Duke përdorur vetëm 3 IC është e mundur Charlieplex 6 LED me 7 segmente. Tërheqja e energjisë është rreth 30mA me këtë dizajn, gjë që nuk është e keqe nëse e them vetë. Unë dyshoj se më shumë LED me 7 segmente mund të përdoren, por nuk e kanë shtyrë zarfin. Kjo ide mund të të aplikohet në pothuajse çdo aplikim duke përdorur LED me 7 segmente; termometër, orë, ekran teksti, etj. Me ndonjë kod të ndërlikuar, ju mund të keni një ekran lëvizës, ose fotografi… ndoshta edhe një bazë për një projekt POV (këmbëngulja e vizionit). Zbatimi përfundimtar i lihet mikut tim që të ndërtojë Kullën e tij dhe vendoseni tabelën, sipas gjykimit të tij. Nëse/Kur kjo të bëhet, do të ngarkoj një fotografi. Por sa i përket qarkut, kjo duket se është ndërtuar me porosi!

Recommended: