Talaan ng mga Nilalaman:

BloodBowl Turn Counter Gamit ang 7-segment LEDs: 5 Hakbang
BloodBowl Turn Counter Gamit ang 7-segment LEDs: 5 Hakbang

Video: BloodBowl Turn Counter Gamit ang 7-segment LEDs: 5 Hakbang

Video: BloodBowl Turn Counter Gamit ang 7-segment LEDs: 5 Hakbang
Video: Despite Of Their Busy Schedule They Still Make Time To Watch Each Others Game Happy 33rd #KKDwight ♡ 2024, Hulyo
Anonim
BloodBowl Turn Counter Gamit ang 7-segment LEDs
BloodBowl Turn Counter Gamit ang 7-segment LEDs

Ang proyektong ito ay para sa isang BloodBowl game turn counter gamit ang anim na Charlieplexed 7-segment LEDs.

Hakbang 1: Konsepto

Konsepto
Konsepto

Tinanong ako ng isang kaibigan ko tungkol sa mga ideya para sa pagbuo ng counter ng Bloodbowl Turn para sa kanyang boardgame. Hindi alam kung ano ito, at kung ano ang gusto niya, kinakailangan upang magpasya kung at kung paano ko ito gagawin. Una kong nagkaroon ng ideya kung ano ang gusto niya, kaya nagsimula ako sa konsepto ng sining (larawan). Ang pangunahing ideya ay ang magkaroon ng 3 mga pindutan ng push, pagkontrol sa bawat 3 LED at mailalagay ito sa loob ng isang pasadyang built tower. Ang tanging malaking kahilingan lamang ay ang nangungunang 4 na ipinapakita na bilangin mula 0 hanggang 8 at i-reset, at magkaroon ng mas mababang 2 ipinapakita ang count down mula 8 hanggang 0 at paikot pabalik. Kukunin ko ang circuit, at makukumpleto niya ang tower.

Hakbang 2: Listahan ng Disenyo at Mga Bahagi

Listahan ng Disenyo at Mga Bahagi
Listahan ng Disenyo at Mga Bahagi

Dahil ang konsepto ay tumawag para sa 6 7-segment LED's, at mayroon akong madaling gamiting 8-bit Microchip PICs, nagsaliksik ako ng mga paraan ng paggamit ng mga PIC upang makontrol ang mga LED. Natagpuan ko ang link na ito https://www.mikroe.com/en/books /picbook/7_08chapter.htm na nagsasaad na "Hanggang sa 6 na pagpapakita ang maaaring ma-access tulad nito nang hindi naaapektuhan ang ningning ng bawat display." Isinasaalang-alang ko ito isang hamon at isang bagay upang siyasatin bilang bahagi ng aking proyekto. Ang Una kong ginawa, ay kumuha ng ilang maliwanag na 7-segment na nagpapakita mula sa aking kahon at tingnan kung paano gagana ang mga ito. Masamang balita. Ang mga partikular na bahagi na pinili ko ay hindi kumikilos tulad ng gusto ko. Ang segment ay magaan kapag kinakailangan, sa breadboard, ngunit ang kasalukuyang tagas ay naipamahagi sa iba pang 6 na segment. Napagtanto kong ang mga incandescent display ay maaaring hindi ang paraan upang pumunta, o kailangan kong gamitin ang mga ito sa ibang paraan. Kaya para sa pagiging simple na na-verify ko ang 7-segment LEDs na mayroon ako sa kamay ay gagana para sa breadboarding, at nag-order ng ilang karaniwang pagpapakita ng anode. Ang Pangalawang bagay na kailangan kong gawin ay ang layout ng aking disenyo at simulan ang trabaho sa code. Ang larawan ay ang aking circuit. Hindi gaanong bagay dito, dahil ang code sa PIC ay nangangalaga sa multiplexing… errr Charlieplexing. Tandaan: LAHAT ng 6 na ipinapakita ay may parehong mga linya mula sa driver IC. Pinapayagan ng tagapili ng IC ang bawat display, 1 nang paisa-isa, at ang mga linya ng 7-segment ay na-update ng PIC nang naaayon. Napakasimpleng ideya. Pagkatapos nito, ang pagkumpleto ng code at hardware ay ang kailangan lamang. Listahan ng Mga Bahagi Matapos ang 3 maliliit na order mula sa Digi-Key habang nagpapasya sa mga tukoy na bahagi, mayroon akong lahat na kailangan ko (na may ilang mga bagay na nasa kamay); 1 ~ 3 "x4 "Ang mga switch ng maliit na pindutan ng push ng PCB6 (NO) 1 74LS47, 7-segment na display IC1 PIC16F627 1 CD4028, 1 ng 10 tagapili ng IC 6 10KOhm resistors1 470Ohm resistor1 spool ng wire. Gumamit ako ng iba't ibang mga kulay at guage, ngunit iyon lamang sa akin.1 78L05 5V regulator1 9V baterya clip1 9V baterya1 maliit na switch (para sa power on / off) Isinasaalang-alang ko ito isang katamtamang kumplikadong proyekto, dahil sa; 1) Kinakailangan ang microprocessor code2) Pag-solder at breadboarding 3) Pag-optimize ng disenyo. Wala sa mga isyung ito sa kanilang sarili ang labis na kumplikado, ngunit ang pagkuha ng lahat ng ito nang walang anumang karanasan ay maaaring masulit para sa nagsisimula. Kinakailangan ang isang programmer ng hardware upang sunugin ang aparato, istasyon ng paghihinang, atbp… Ang UNA na maaaring mapansin ng isang tao ay ang 7-segment na LED na HINDI magkaroon ng serye (kasalukuyang naglilimita) ng mga resistor! Hayaan mong tugunan ko ito nang mabilis, sa pamamagitan ng pagsasabi ng aking orihinal na disenyo na nakapasok ang mga ito … ngunit basahin ang susunod na hakbang para sa paliwanag!

Hakbang 3: Breadboarding & Micro Code

Breadboarding & Micro Code
Breadboarding & Micro Code

Ang Breadboard ay kinakailangan para dito. Ipinakita ang aking pangkaraniwang breadboard, ngunit para sa laki ng proyektong ito talagang ginamit ko ang isang ito at isang mas maliit na breadboard, dahil maraming mga wire na kailangang maipalabas. Una, sinubukan ko ang isang solong 7-segment na LED na ginagamit ng paunang code. Kinumpirma nito ang 3 bagay; 1) Ang mga kable ng IC ay na-verify na mabuti! 2) Humantong sa akin na i-optimize at i-finalize ang aking code.3) Pinagtanto sa akin na hindi ko kailangan ang kasalukuyang nililimitahan ang mga resistor! 1 WIRINGAs nakasaad, natagpuan ang aking disenyo upang gumana sa aking code, tulad ng pag-ikot ng LED sa pamamagitan ng mga numero gamit ang isang switch na pindutan ng pindutan, upang mapatunayan ang aking code at layout. Hindi gaanong kinakailangan ngunit kinumpirma ng breadboarding na nasa maayos akong kalagayan.2 Ang CODEI ay orihinal na naitakda ang aking code na may pangunahing gawain upang i-scan ang mga pindutan at ipinakita ng ISR (Interrupt Service Routine) ang mga numero,. Matapos ang mga pagsubok sa breadboarding, binago ko ang mga gawain, kaya't ang karamihan ng oras ay patuloy na nagpapakita ng mga numero at ang ISR upang suriin ang mga pindutan. Ang dahilan kung bakit ko ito ginawa, ay magkaroon lamang ng isang palaging display, dahil ang PIC ay tumatakbo sa isang panloob na 4Mhz na orasan, nawawalan ako ng kaunting oras sa pag-scan para sa mga pindutan. Walang malaking pakikitungo … nakasalalay lamang sa kung paano mo nais gawin ang code at kung ano ang pinaka-kahulugan para sa bawat aplikasyon. Para dito, mahalaga ang pagpapakita, kaya inilagay ko iyon sa pangunahing gawain. Nang dumating ang aking mga unang bahagi (lahat ng 6 na ipinapakita!), Nakumpleto ko ang mga kable ng breadboard at nakakita ng isa pang isyu. Kapag pinipilit ang pindutan ang aking code ay may ilang mga sloppy registro na hindi na-clear at ang ISR ay nagdudulot ng ilang menor de edad na mga glitches sa pagpapakita.; ==== =_ ===; Turn 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;; ==== =_; Kasaysayan at Mga Tala sa Pagbabago:; V1.0 Paunang Header, Code 3/30/09;;; (C) 5/2009; Ang code na ito ay maaaring magamit para sa personal na pagkatuto / aplikasyon / pagbabago.; Ang anumang paggamit ng code na ito sa mga produktong komersyal ay lumalabag sa paglabas ng freeware na ito.; Para sa mga katanungan / komento, makipag-ugnay sa circuit dot mage sa yahoo dot com.; ------------------------------ # isama ang P16F627A. INC; ========== =_ ====; Tinutukoy; ------------------------------; ================== =_ ===========; Data; ------------------------------; Mga variable ng pag-iingat ng orascount1 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; =_ =_ ====; I-reset ang Mga Vector;; Suriin ang CONFIG. BITS BAGO BURNING !!!; INTOSC; MCLR: NAGPATAYO; PWRUP: NAGPATAYO; LAHAT NG IBA: DISABLE !!;; ------------------------------------- RESET_ADDR EQU 0x00 ISR_ADDR EQU 0x04 org RESET_ADDR goto start; == =_ =_; ISR;; ----------------- ---- ISR DITO; Suriin ang PB0-PB5 Mga switch btfsc PORTB, 0; Suriin ang tawag sa SW1 sw1debounce btfsc PORTB, 1; Suriin ang tawag sa SW1 sw2debounce btfsc PORTB, 2; Suriin ang tawag sa SW1 sw3debounce btfsc PORTB, 3; Suriin ang tawag sa SW1 sw4debounce btfsc PORTB, 4; Suriin ang tawag sa SW1 sw5debounce btfsc PORTB, 5; Suriin ang SW1 call sw6debounce goto endisrsw1debounce call debounce; Maghintay ng 0.2 sec tumawag sa pagtatalbog incf dis1; I-update ang counter Movf dis1, W; Suriin para sa overflow xorlw 0x1A; 10 sa 7-seg? btfss STATUS, Z bumalik; Hindi, bumalik upang mag-scan. ilipat ang h'10 '; Oo, i-reset ang display. Movwf dis1 returnsw2debounce call debounce; Maghintay ng 0.2 sec tumawag sa pagtatalbog incf dis2; I-update ang counter Movf dis2, W; Suriin para sa overflow xorlw 0x4A; 10 sa 7-seg? btfss STATUS, Z bumalik; Hindi, bumalik upang mag-scan. ilipat ang h'40 '; Oo, i-reset ang display. Movwf dis2 returnsw3debounce call debounce; Maghintay ng 0.2 sec tumawag sa pagtatalo incf dis3; I-update ang counter Movf dis3, W; Suriin para sa overflow xorlw 0x5A; 10 sa 7-seg? btfss STATUS, Z bumalik; Hindi, bumalik upang mag-scan. ilipat ang h'50 '; Oo, i-reset ang display. Movwf dis3 returnsw4debounce call debounce; Maghintay ng 0.2 sec tumawag sa pagtatalo incf dis4; I-update ang counter Movf dis4, W; Suriin para sa overflow xorlw 0x8A; 10 sa 7-seg? btfss STATUS, Z bumalik; Hindi, bumalik upang mag-scan. ilipat ang h'80 '; Oo, i-reset ang display. Movwf dis4 returnsw5debounce call debounce; Maghintay ng 0.2 sec tumawag sa pagtatalo incf dis5; I-update ang counter Movf dis5, W; Suriin para sa overflow xorlw 0x9A; 10 sa 7-seg? btfss STATUS, Z bumalik; Hindi, bumalik upang mag-scan. ilipat ang h'90 '; Oo, i-reset ang display. Movwf dis5 returnsw6debounce call debounce; Maghintay ng 0.2 sec tumawag sa pagtatalo incf dis6; I-update ang counter Movf dis6, W; Suriin para sa overflow xorlw 0xCA; 10 sa 7-seg? btfss STATUS, Z bumalik; Hindi, bumalik upang mag-scan. ilipat ang h'C0 '; Oo, i-reset ang display. Movwf dis6 returnendisr bcf INTCON, T0IF swapf status_temp, w Movwf STATUS swapf w_temp, f swapf w_temp, wretfie; =_ =_ =; Magsimula Dito!; ----------------- magsimula; Config I / O ports clrf PORTA movlw 0x07 Movwf CMCON bcf STATUS, RP1 bsf STATUS, RP0 Movlw h'00 '; RA Outputs, RA5 Walang output Movwf TRISA bcf STATUS, RP0 clrf PORTB bsf STATUS, RP0 Movlw h'FF'; Inilalagay ng RB ang Movwf TRISB; Itakda ang panloob na timer bsf PCON, 3; Itakda sa 4Mhz. ilipat ang h'CF '; Tmr0 Panloob na mapagkukunan, prescale TMR0 1: 256 Movwf OPTION_REG Movlw h'A0 'Movwf INTCON; Paganahin ang mga putol ng TMR0, bcf STATUS, RP0; Pasimulan ang Mga Rehistro clrf PORTA; I-clear ang PortA clrf PORTB; I-clear ang PortB outputs 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 pagwawasak; 0.2 sec; subukan ang mga LED, ipakita ang 8 ???; ================================== =_; Pangunahing; Nakakakuha ng mga input mula sa mga switch, debounce at pagpapakita ng incriment.;; Ina-update nito ang mga ipinapakita, @ 4Mhz gamit ang TMR0 prescal 1: 4, sa isang rate na 1Khz.; Ginagamit ang Display 0 upang maglaan sa isang hindi ginagamit na display. Ang display 1-6 ay naka-wire.; Una, ang BCD-7Seg IC ay puno ng halaga ng pagpapakita, AT ang BCD-Dec IC ay naaktibo para; pagpili ng display.; Pangalawa, isang pagkaantala ng ms ang gaganapin para sa pagpapakita.; Pangatlo, BCD-Dis Na-deactivate ang IC … napili ang display0 upang patayin ang display;; Ito ay paulit-ulit para sa bawat isa sa 6 na ipinapakita, at naka-loop.; Hinahawakan ng ISR ang sensing ng paglipat sa rate na 15Hz.; ---------------- ---- --------------- pangunahing; Disp1 movf dis1, 0 movwf PORTA na tinatawag na ledon goto main; ==== =_ ====; Humantong sa; Ang oras ng pag-set up para sa LED power on. 6 na ipinapakita -> 1/6 duty cycle sa 1Khz = 166 cycle; ----------------------------------- -------------------------------------------- ledon movlw.54 Movwf count1ledloop decfsz count1, F goto ledloopreturn; =_ ====================================; Signal ng pag-debounce; 4 na cycle upang mai-load at tumawag, 2 cycle upang bumalik.; 4Mhz Tc:: count2 = 255 -> 0.2 sec; ----------------- ---- Pag-antala para sa 1/5 segundong pag-aalsa. countwf count2 tumawag pon_wait return; -------------------------------------------- -----------------------------------; count1 = 255d:: 775 cycle sa 0, + 3 cycle upang bumalik.; ---------------------------------------------- pon_waitbig_loopS movlw.255 Ang Movwf count1short_loopS decfsz count1, F goto short_loopS decfsz count2, F goto big_loopSreturnend3 CIRCUITI ay orihinal na mayroong 470Ohm resistors mula sa bawat linya ng driver ng display mula sa 74LS47 at CD4028 na linya na paganahin. Gayunpaman, sinubukan ko ang kasalukuyang gumuhit ng aking circuit at nalaman na kumukuha lamang ito ng ~ 31mA. At dahil ang tunay na driver para sa mga ipinapakita ay direkta mula sa 74LS47 at paganahin ay mula sa isa pang IC, isang mabilis na pagbaba ng average at rurok na mga kinakailangan, at ang kani-kanilang mga datasheet ….. Hinila ko ang mga resistor mula sa breadboard at natagpuan ang isang pagkakaiba sa 1mA ! Lumilitaw na ang direktang pagmamaneho ng linya ng CA mula sa 4028 habang direktang pagmamaneho ng lahat ng mga segment ay OK! …medyo.:) Nagkaroon ako ng isang glitch sa aking code na hindi malinaw ang aking mga rehistro kapag ang isang pindutan ay pinindot, na sanhi ng huling display na may 2 mga segment na napaka maliwanag na naiilaw kapag ang isang pindutan ay pinindot. Masama ito Gayunpaman, ang pag-clear sa rehistro ay naayos ang problemang ito, at ang tuluy-tuloy na mga tseke ng kuryente ay nagpapatunay na patuloy ito sa paligid ng 30mA draw. Dapat itong bigyan ako (batay sa dating karanasan na may katulad na mga circuit) ~ 20 oras ng oras ng pagpapatakbo gamit ang 1 9V na baterya (500mAH / 30mAH sa ilalim ng 5V na regulasyon) … Inaasahan ko! Napagpasyahan kong panatilihing direktang hinimok ang LED, ngunit ilagay ito sa mga socket sa kaso may nangyari, pangmatagalan.

Hakbang 4: Paghihinang ng PCB

Paghihinang ng PCB
Paghihinang ng PCB

Sa tuwing makarating ako sa puntong ito sa aking proyekto naantala ko ang abit. Sa una ay pupunta ako sa balot ng bagay na ito, ngunit mabilis na nahulog ang ideyang iyon. Sa una sa palagay ko "Ang ilang mga wire upang maghinang, walang malaking pakikitungo" … pagkatapos, sa oras na ang aking proyekto ay handa na na solder naisip ko, " Dapat ay nagpadala ako upang magkaroon ng isang board ng protina na ginawa, o nakaukit ng aking sariling board ". Hindi ako nasa PCB etching (pa), at ayaw magbayad ng $$ upang magkaroon ng isang board, kaya…. Oo….. Ginugol ko ang tungkol sa 3 oras ng paghihinang sa bagay na ito. Ito ay tungkol sa 150 wires, kaya't 300 solder point, kasama ang mga touch-up para sa mga solder tulay. Gayunpaman, narito ang likod na bahagi ng board na nakalarawan….yeah…. Kinuha ang 20 minuto ng pag-iisip dahil ipinakita ang pagpapakita ng maling # na ipinakita sa isang lohikal na pattern na kailangan kong malaman. Pagkatapos nito, nakita ko ang maikli, at bam! Gumana ito ng perpekto.

Hakbang 5: Konklusyon

Konklusyon
Konklusyon

NAGAWA ITO! Tumagal ang proyektong ito; ~ 2 linggo upang maiisip at mag-email ng mga magagandang puntos sa humiling, ~ 3 oras ng pagkumpleto ng code at pag-debug, ~ 4 na oras ng breadboarding at pag-debug, ~ 3 oras ng paghihinang Gumamit lamang ng 3 IC posible na Charlieplex 6 7-segment LEDs. Ang power draw ay nasa 30mA sa disenyo na ito, na hindi masama kung sasabihin ko sa sarili ko. Pinaghihinalaan ko na mas maraming 7-segment LED's ang maaaring magamit, ngunit hindi ko naitulak ang sobre. Ang ideyang ito ay maaaring mailapat sa halos ANUMANG application na gumagamit ng 7-segment LEDs; thermometer, orasan, display ng teksto, atbp. Na may ilang nakakalito na code, maaari kang magkaroon ng isang gumagalaw na display, o mga larawan … marahil kahit isang batayan para sa isang proyekto ng POV (pagtitiyaga ng paningin). Ang huling pagpapatupad ay natitira para sa aking kaibigan na itayo ang kanyang Tower at ilagay ang board, ayon sa nakikita niyang akma. Kung / Kapag tapos na iyon, makakakuha ako ng isang larawan na na-upload. Ngunit tungkol sa circuit, lumilitaw na binuo ito upang mag-order!

Inirerekumendang: