Բովանդակություն:

BloodBowl Անջատիչ հաշվիչ ՝ օգտագործելով 7 հատվածի LED- ներ ՝ 5 քայլ
BloodBowl Անջատիչ հաշվիչ ՝ օգտագործելով 7 հատվածի LED- ներ ՝ 5 քայլ

Video: BloodBowl Անջատիչ հաշվիչ ՝ օգտագործելով 7 հատվածի LED- ներ ՝ 5 քայլ

Video: BloodBowl Անջատիչ հաշվիչ ՝ օգտագործելով 7 հատվածի LED- ներ ՝ 5 քայլ
Video: ЧТО ТАКОЕ BLOOD BOWL / САМЫЙ КРОВАВЫЙ СПОРТ ВО ВСЕЛЕННОЙ WARHAMMER 2024, Հուլիսի
Anonim
BloodBowl Turn Counter ՝ օգտագործելով 7-հատվածի LED- ներ
BloodBowl Turn Counter ՝ օգտագործելով 7-հատվածի LED- ներ

Այս նախագիծը նախատեսված էր BloodBowl խաղի շրջադարձի համար, որն օգտագործում էր վեց Charlieplexed 7-հատվածի LED:

Քայլ 1: Հայեցակարգ

Հայեցակարգ
Հայեցակարգ

Ընկերներիցս մեկն ինձ հարցրեց Bloodbowl Turn counter- ի իր խաղատախտակի համար կառուցելու գաղափարների մասին: Չիմանալով, թե ինչ է սա և ինչ է նա ուզում, որոշ ժամանակ պահանջվեց ՝ որոշելու, թե արդյոք և ինչպես եմ դա անելու: Սկզբում պետք է պատկերացում կազմեի, թե ինչ է նա ուզում, ուստի ես սկսեցի հայեցակարգային արվեստից (նկար): Հիմնական գաղափարն այն է, որ ունենա 3 կոճակ, որոնցից յուրաքանչյուրը վերահսկում է 3 LED- ը, և այն տեղադրված կլինի հատուկ կառուցված աշտարակի ներսում: Միակ մեծ խնդրանքն այն էր, որ լավագույն 4 էկրանները հաշվեին 0 -ից 8 -ը և վերակայվեին, իսկ ստորին 2 -ը: դիսփլեյները հաշվում են 8 -ից 0 -ը և շրջվում ետ: Ես կավարտեի շրջանը, և նա կավարտեր աշտարակը:

Քայլ 2: Դիզայն և մասերի ցուցակ

Դիզայնի և մասերի ցուցակ
Դիզայնի և մասերի ցուցակ

Քանի որ հայեցակարգը պահանջում էր 6 7-հատվածի LED- ներ, և ես ունեի որոշ 8-բիթանոց Microchip PIC- ներ, ես ուսումնասիրեցի LED- ները վերահսկելու համար PIC- ների օգտագործման եղանակները: Ես գտա այս հղումը https://www.mikroe.com/hy/books /picbook/7_08chapter.htm, որը նշում է. «Մինչև 6 ցուցադրում կարելի է մուտք գործել այսպես ՝ առանց յուրաքանչյուր ցուցադրման պայծառության վրա ազդելու»: Ես սա համարեցի մարտահրավեր և ինչ-որ բան, որը պետք է հետաքննել որպես իմ ծրագրի մի մաս: Առաջին բանը, որ ես արեցի, այն էր, որ տուփիցս վերցրեցի 7 հատվածից բաղկացած շիկացած էկրաններ և տեսա, թե ինչպես են դրանք աշխատելու: Վատ լուրեր. Իմ ընտրած առանձին հատվածներն այնպես չէին վարվում, ինչպես ես էի ուզում: Հատվածը պետք է լուսավորվեր անհրաժեշտության դեպքում ՝ տախտակի վրա, սակայն արտահոսքի հոսանքը բաժանվում էր մյուս 6 հատվածներին: Ես հասկացա, որ շիկացած ցուցադրումները չեն կարող լինել ճանապարհը, կամ ես կարիք ունեի դրանք օգտագործել այլ կերպ: Այսպիսով, պարզության համար ես հաստատեցի, որ 7 հատվածի LED- ները, որոնք ունեի ձեռքում, կաշխատեին ուտեստի համար և պատվիրեցի որոշ ընդհանուր անոդային էկրաններ: Երկրորդ բանը, որ պետք է անեի, իմ դիզայնի դասավորությունն էր և կոդի վրա աշխատանքը սկսելը: Նկարում պատկերված է իմ շրջանը: Դա այնքան էլ կարևոր չէ, քանի որ PIC- ի ծածկագիրը հոգ է տանում բազմապատկման մասին … errr Charlieplexing: Նշում. ԲՈԼՈՐ 6 դիսփլեյներն ունեն նույն տողերը վարորդի IC- ից: Ընտրիչի IC- ն միացնում է յուրաքանչյուր ցուցադրումը `1-ը մեկ անգամ, և 7-հատվածի տողերը համապատասխանաբար թարմացվում են PIC- ի կողմից: Շատ պարզ գաղափար: Դրանից հետո միայն անհրաժեշտ էր ծածկագրերի և ապարատային սարքավորումների լրացում: Մասերի ցուցակ Digi-Key- ի 3 փոքր պատվերներից հետո, երբ որոշեցի որոշ բաղադրիչներ, ես ունեի այն ամենը, ինչ ինձ պետք էր (ձեռքի տակ եղած որոշ իրերով); 1 ~ 3 x4 «PCB6 փոքր սեղմիչ կոճակներով անջատիչներ (NO) 1 74LS47, 7 հատվածից ցուցադրվող IC1 PIC16F627 1 CD4028, 1 ընտրիչից IC 6 10KOhm ռեզիստորներ 1 470 Օմ դիմադրություն 1 մետաղալար: Ես օգտագործել եմ տարբեր գույներ և ուղեցույցներ, բայց դա միայն ես էի: 1 78L05 5V կարգավորիչ 1 9V մարտկոցի սեղմիչ 1 9V մարտկոց 1 փոքր անջատիչ (միացման/անջատման համար) ես սա համարում եմ չափավոր բարդ նախագիծ ՝ 1) Պահանջվում է միկրոպրոցեսորային կոդ 2) oldոդման և հացաթխում 3) Դիզայնի օպտիմալացում: Այս հարցերից ոչ մեկը ինքնին չափազանց բարդ չէ, բայց դրանք բոլորը առանց որևէ փորձի վերցնելը կարող է շատ ձեռնտու լինել սկսնակների համար: Սարքավորումը ծրագրավորողից պահանջվում է այրել սարքը, զոդման կայանը և այլն … ԱՌԱԻՆ, որ ինչ-որ մեկը կարող է նկատել, որ 7-հատվածի LED- ները ՉԵՆ սերիալային (ընթացիկ սահմանափակող) դիմադրություններ: Թույլ տվեք արագ անդրադառնալ դրան ՝ նշելով, որ դրանք իմ սկզբնական դիզայնի մեջ են եղել … բայց բացատրության համար կարդացեք հաջորդ քայլը:

Քայլ 3: Breadboarding & Micro Code

Breadboarding & Micro Code
Breadboarding & Micro Code

Դրա համար պարտադիր էր Breadboard- ը: Myույց է տրված իմ ընդհանուր տախտակը, սակայն այս նախագծի չափի համար ես իրականում օգտագործել եմ այս մեկը և ավելի փոքր տախտակը, քանի որ շատ լարեր պետք է հեռացվեին միմյանցից: Նախ, ես փորձարկեցի մեկ 7-հատվածանոց մեկ LED ՝ նախնական կոդի միջոցով: Սա հաստատեց 3 բան. 1) IC- ի լարերի տեղադրումը լավ ստուգվեց: 2) ինձ ստիպեց օպտիմալացնել և վերջնականացնել իմ ծածկագիրը: 3) ինձ հասկացրեց, որ ինձ պետք չեն ընթացիկ սահմանափակող ռեզիստորները: 1 WIRING Ինչպես նշվեց, իմ սխեմատիկ նախագիծը գտնվեց աշխատել իմ կոդի հետ, քանի որ LED- ն թվերի միջով կանցներ մեկ կոճակով անջատիչ օգտագործելով, այնպես որ ստուգվեց իմ ծածկագիրը և դասավորությունը: Շատ բան չէր պահանջվում, բայց հացաթխման սեղանը հաստատեց, որ ես լավ մարզավիճակում եմ: Հացաթխման փորձարկումներից հետո ես շրջեցի ռեժիմը, ուստի ժամանակի մեծամասնությունը անընդհատ ցուցադրում էր թվեր և ISR կոճակները ստուգելու համար: Պատճառը, որ ես դա արեցի, պարզապես անընդհատ ցուցադրում ունենալն էր, քանի որ PIC- ն աշխատում է ներքին 4 ՄՀց ժամացույցով, ես շատ քիչ ժամանակ եմ կորցնում կոճակների որոնման համար: Մեծ գործարք չկա … ուղղակի կախված է նրանից, թե ինչպես եք ցանկանում անել ծածկագիրը և ինչն է առավել իմաստալից յուրաքանչյուր ծրագրի համար: Դրա համար ցուցադրումը կարևոր է, ուստի ես դա դրեցի հիմնական առօրյայի վրա: Երբ իմ առաջին մասերը հասան (բոլոր 6 դիսփլեյները), ես ավարտեցի սեղանի էլեկտրագծերը և գտա մեկ այլ խնդիր: Կոճակը սեղմելիս իմ կոդը մի քանի անփոփոխ գրանցամատյաններ ուներ, որոնք չէին մաքրվում, և ISR- ն առաջացնում էր ցուցադրման որոշ փոքր խափանումներ:; ======================== =================================================== =====; Անջատիչ հաշվիչ;; -----------; Dsply3 Dsply2; Dsply4 Dsply1; Led1 Led3; A5 | 4 15 | A6 - Led2; Vss | 5 14 | Vdd; Կոճակ 1 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;; ================================== ============================================== Վերանայման պատմություն և նշումներ.; V1.0 Սկզբնական վերնագիր, ծածկագիր 3/30/09;;; (C) 5/2009; Այս կոդը կարող է օգտագործվել անձնական ուսուցման/կիրառման/փոփոխման համար:.; ---------------------------------------------------- ----------------------------------#ներառում է P16F627A. INC; ============= ================================================== =================; Սահմանում է; ---------------------------------------------------- -----------------------------------; ================= ================================================== ============; Տվյալներ; ---------------------------------------------------- -----------------------------------; Keepingամանակի պահում փոփոխականներհաշվարկ 1 հավասար է 20 համարի 2 հավասար է 21 dis1 հավասար է 22dis2 հավասար է 23dis3 հավասար է 24dis4 հավասար է 25dis5 հավասար է 26dis6 հավասար է 27w_temp հավասար է 28status_temp հավասար է 29ISRCNTR հավասար 2A; ======================= ================================================== ========; Վերականգնել վեկտորները;; ՍՏԵԵՔ ԿԱՐԳԱՎՈՐՈՄԸ: ԿԵՏԵՐ ԱՌԱOREԻՆ !!! INTOSC; MCLR: ԱՆՎԱՐ; PWRUP: ԱՆՎBԱՐ; ԲՈԼՈՐ ՄՅՈՍՆԵՐԸ ՝ ԱՆISԱՆ !!;; ----------------------------------------- RESET_ADDR EQU 0x00 ISR_ADDR EQU 0x04 org RESET_ADDR սկսեց; == =================================================== ============================; ISR;; --------------------------------------------------- --------------------------------- org ISR_ADDR movwf w_temp swapf STATUS, w movwf status_temp;; ISR ԱՅՍՏԵ; Ստուգեք PB0-PB5 անջատիչներ btfsc PORTB, 0; Ստուգեք SW1 զանգ sw1debounce btfsc PORTB, 1; Ստուգեք SW1 զանգ sw2debounce btfsc PORTB, 2; Ստուգեք SW1 զանգ sw3debounce btfsc PORTB, 3; Ստուգեք SW1 զանգ sw4debounce btfsc PORTB, 4; Ստուգեք SW1 զանգը sw5debounce btfsc PORTB, 5; Ստուգեք SW1 զանգի sw6debounce goto endisrsw1debounce զանգի դեբոնս; Սպասեք 0.2 վրկ զանգի դեբոնս incf dis1; Թարմացրեք հաշվիչ movf dis1, W; Ստուգեք արտահոսքի համար xorlw 0x1A; 10-ը 7-ի՞՞՞՞ btfss ԿԱՐԳԱՎԻԱԿ, Z վերադարձ; Ոչ, վերադարձեք սկանավորման: շարժական h'10 '; Այո, վերականգնել ցուցադրումը: movwf dis1 վերադարձնում է w2debounce զանգի դեբունս; Սպասեք 0.2 վայրկյան զանգի դեբունս incf dis2; Թարմացրեք հաշվիչ movf dis2, W; Ստուգեք արտահոսքի համար xorlw 0x4A; 10-ը 7-ի՞՞՞՞ btfss ԿԱՐԳԱՎԻԱԿ, Z վերադարձ; Ոչ, վերադարձեք սկանավորման: շարժական h'40 '; Այո, վերականգնել ցուցադրումը: movwf dis2 վերադարձնում է w3debounce զանգի դեբունս; Սպասեք 0.2 վրկ զանգի դեբոնս incf dis3; Թարմացրեք հաշվիչ movf dis3, W; Ստուգեք արտահոսքի համար xorlw 0x5A; 10-ը 7-ի՞՞՞՞ btfss ԿԱՐԳԱՎԻԱԿ, Z վերադարձ; Ոչ, վերադարձեք սկանավորման: շարժական h'50 '; Այո, վերականգնել ցուցադրումը: movwf dis3 վերադարձնում է w4debounce զանգի դեբունս; Սպասեք 0,2 վայրկյան զանգի դեբունս incf dis4; Թարմացրեք հաշվիչ movf dis4, W; Ստուգեք արտահոսքի համար xorlw 0x8A; 10-ը 7-ի՞՞՞՞ btfss ԿԱՐԳԱՎԻԱԿ, Z վերադարձ; Ոչ, վերադարձեք սկանավորման: շարժական h'80 '; Այո, վերականգնել ցուցադրումը: movwf dis4 վերադարձնում է w5debounce զանգի դեբունս; Սպասեք 0.2 վայրկյան զանգի դեբունս incf dis5; Թարմացրեք հաշվիչ movf dis5, W; Ստուգեք արտահոսքի համար xorlw 0x9A; 10-ը 7-ի՞՞՞՞ btfss ԿԱՐԳԱՎԻԱԿ, Z վերադարձ; Ոչ, վերադարձեք սկանավորման: movlw h'90 '; Այո, վերականգնել ցուցադրումը: movwf dis5 վերադարձնում է w6debounce զանգի դեբունս; Սպասեք 0,2 վրկ զանգի դեբոնս incf dis6; Թարմացրեք հաշվիչ movf dis6, W; Ստուգեք արտահոսքի համար xorlw 0xCA; 10-ը 7-ի՞՞՞՞ btfss ԿԱՐԳԱՎԻԱԿ, Z վերադարձ; Ոչ, վերադարձեք սկանավորման: movlw h'C0 '; Այո, վերականգնել ցուցադրումը: movwf dis6 returnendisr bcf INTCON, T0IF swapf status_temp, w movwf STATUS swapf w_temp, f swapf w_temp, wretfie; ============================= ================================================== =; Սկսիր այստեղ!;---------------------------------------------- ------------------------------------ սկիզբ; Կազմաձևել I/O նավահանգիստներ clrf PORTA movlw 0x07 movwf CMCON bcf STATUS, RP1 bsf STATUS, RP0 movlw h'00 '; RA Outputs, RA5 No output movwf TRISA bcf STATUS, RP0 clrf PORTB bsf' STLUS, RP0 RB Մուտքեր movwf TRISB; Ներքին ժամաչափ սահմանել bsf PCON, 3; Սահմանել 4 ՄՀց: movlw h'CF '; Tmr0 Ներքին աղբյուր, նախածավալ TMR0 1: 256 movwf OPTION_REG movlw h'A0 'movwf INTCON; Միացնել TMR0 ընդհատումները, bcf STATUS, RP0; Initialize Registers clrf PORTA; Մաքրել PortA clrf PORTB; Մաքրել 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'C0' movwf dis6 զանգ հրաժարվել; 0,2 վրկ. Փորձարկվող LED- ներ, ցուցադրել 8 ???; ================================= ===========================================; Հիմնական; Ստանում է մուտքեր անջատիչներից, դեոնսինգներից և խափանումներից:;; Սա թարմացնում է ցուցադրումները, @4Mhz TMR0 prescal 1: 4 -ով, 1 ԿՀց արագությամբ: Displayուցադրումը 1-6-ը լարված է: Նախ, BCD-7Seg IC- ն բեռնված է ցուցադրման արժեքով, իսկ BCD-Dec IC- ն ակտիվացված է. Ցուցադրման ընտրություն; երկրորդ, ցուցադրման համար պահվում է ms- ի հետաձգումը: IC- ն անջատված է … ցուցադրումն անջատելու համար ընտրվում է display0- ը;; Սա կրկնվում է 6 էկրաններից յուրաքանչյուրի համար և օղակավորվում է. ------------------------------------------------------ --------------- հիմնական; Disp1 movf dis1, 0 movwf PORTA կանչ ledon goto հիմնական; ===================== ================================================== =========; Լեդոն; LED- ի միացման ժամանակը կարգավորելու համար; 6 էկրան-> 1/6 աշխատանքային ցիկլ 1 ԿՀց = 166 ցիկլ; -------------------------------------- ------------------------------------------------ ledon movlw.54 movwf count1ledloop decfsz count1, F goto ledloopreturn; =========================================== ======================================; Դեբունսի ազդանշան; Բեռնման և զանգի 4 ցիկլ, վերադառնալու 2 ցիկլ; 4 ՄՀց Tc:: հաշվարկ 2 = 255-> 0.2 վրկ; ------------------------------------------ -------------------------------------------- դեբոնս շարժական.255; Ուշացում 1/5 վայրկյան դեբունսի համար: movwf count2 զանգահարել pon_wait վերադառնալ; -------------------------------------------- ---------------------------------------; հաշվել 1 = 255d:: 775 ցիկլ 0-ից, + 3 ցիկլ ՝ վերադառնալ; ------------------------------------- -------------------------------------------------- pon_waitbig_loopS movlw.255 movwf count1short_loopS decfsz count1, F goto short_loopS decfsz count2, F goto big_loopSreturnend3 CIRCUITI- ն ի սկզբանե ուներ 470 Օմ դիմադրություն յուրաքանչյուր ցուցադրման վարորդի գծից 74LS47 և CD4028 միացման գծից: Այնուամենայնիվ, ես փորձարկեցի իմ սխեմայի ընթացիկ վիճակահանությունը և գտա, որ այն քաշում է միայն 31 մԱ ֆունտ: Եվ քանի որ դիսփլեյների իրական վարորդը ուղղակիորեն 74LS47- ից է և միացված է մեկ այլ IC- ից, միջին և գագաթնակետային պահանջների և համապատասխան տվյալների թերթերի արագ իջեցում ….. ! Պարզվում է, որ CA28 գիծը 4028 -ից ուղղակիորեն քշելիս, իսկ բոլոր հատվածները ուղղակիորեն քշելը, նորմալ է: … Մի տեսակ::)) Ես ունեի իմ կոդի անսարքություն, որը չի ջնջում իմ գրանցամատյանները կոճակը սեղմելիս, ինչը հանգեցրեց նրան, որ կոճակը սեղմելիս վերջին ցուցադրման 2 հատվածները շատ պայծառ լուսավորված էին: Սա վատ էր: Այնուամենայնիվ, գրանցամատյանը մաքրելը շտկեց այս խնդիրը, և էներգիայի շարունակական ստուգումները հաստատում են, որ այն անընդհատ մոտ 30 մԱ վիճակախաղի սահմաններում է: Սա պետք է ինձ տա (նման սխեմաների նախկին փորձի հիման վրա) h 20 ժամ աշխատելու ժամանակ ՝ օգտագործելով 1 9V մարտկոց (500mAH/30mAH ՝ 5V կարգավորմամբ)… Հուսով եմ. եթե ինչ -որ բան պատահեց, երկարաժամկետ:

Քայլ 4: PCB զոդում

PCB զոդում
PCB զոդում

Ամեն անգամ, երբ հասնում եմ իմ նախագծի այս կետին, հետաձգում եմ աշխատանքը: Սկզբում ես պատրաստվում էի մետաղալարով փաթաթել այս բանը, բայց արագ հրաժարվեցի այդ գաղափարից: Սկզբում ես մտածում եմ «Մի քանի լար լարելու համար, մեծ գործ չկա» … այնուհետև, երբ իմ նախագիծը պատրաստ լինի զոդման, ես մտածում եմ »: Ես պետք է կամ ուղարկեի նախատախտակ պատրաստելու, կամ իմ սեփական տախտակը փորագրեի »: Ես PCB- ի գորգագործության մեջ չեմ (դեռ) և չեմ ուզում $ $ վճարել տախտակ պատրաստելու համար, այնպես որ … Այո….. Ես մոտ 3 ժամ ծախսեցի այս բանը զոդելու համար: Խոսքը 150 լարերի մասին է, այսինքն ՝ 300 զոդման կետեր, գումարած կամուրջների համար հպումներ: Ամեն դեպքում, ահա պատկերված տախտակի հետևի կողմը … այո… խառնաշփոթի ընդհատում, բայց երբ ամեն ինչ ավարտվեց, ես ունեի ընդամենը 1 կարճ զոդում. 20 րոպե մտածեցի, քանի որ ցուցադրումը ցույց տվեց, որ սխալ #-ները ցուցադրվում են տրամաբանական ձևով, որը ես ստիպված էի վերծանել: Դրանից հետո ես գտա կարճը և բամը: Այն կատարյալ էր աշխատում:

Քայլ 5: Եզրակացություն

Եզրակացություն
Եզրակացություն

ԱՇԽԱՏԵ: Այս նախագիծը տևեց մոտ; 2 շաբաթ ՝ հայցողին մտածելու և էլ. Նամակ ուղարկելու համար, code 3 ժամ ծածկագրերի լրացման և կարգաբերման, ~ 4 ժամ տապակման և կարգաբերման, ~ 3 ժամ զոդման, ընդամենը 3 IC- ի օգտագործմամբ հնարավոր է Charlieplex 6 7-հատվածի LED- ներ: Այս նախագծով էներգիայի վիճակահանությունը մոտ 30 մԱ է, ինչը վատ չէ, եթե ինքս դա ասեմ: Կասկածում եմ, որ ավելի քան 7 հատվածի LED- ներ կարող են օգտագործվել, բայց ծրարը չեն մղել: Այս գաղափարը կարող էր կիրառել գրեթե YԱՆԿԱԱ application ծրագրում ՝ օգտագործելով 7 հատվածի LED- ներ; ջերմաչափ, ժամացույց, տեքստի ցուցադրում և այլն: Ինչ -որ բարդ կոդով կարող եք ունենալ շարժական էկրան կամ նկարներ … գուցե նույնիսկ POV (տեսողության կայունություն) նախագծի հիմք: Վերջնական իրականացումը մնացել է ընկերոջս ՝ կառուցելու իր աշտարակը և տեղադրեք տախտակը, ինչպես ինքն է հարմար: Եթե/երբ դա արվի, ես կստանամ նկար վերբեռնված: Ինչ վերաբերում է շրջանագծին, ապա այն, ըստ երևույթին, կառուցված է պատվերով:

Խորհուրդ ենք տալիս: