Tartalomjegyzék:

BloodBowl fordulatszámláló 7 szegmenses LED-ek használatával: 5 lépés
BloodBowl fordulatszámláló 7 szegmenses LED-ek használatával: 5 lépés

Videó: BloodBowl fordulatszámláló 7 szegmenses LED-ek használatával: 5 lépés

Videó: BloodBowl fordulatszámláló 7 szegmenses LED-ek használatával: 5 lépés
Videó: ЧТО ТАКОЕ BLOOD BOWL / САМЫЙ КРОВАВЫЙ СПОРТ ВО ВСЕЛЕННОЙ WARHAMMER 2024, Július
Anonim
BloodBowl fordulatszámláló 7 szegmenses LED-ek használatával
BloodBowl fordulatszámláló 7 szegmenses LED-ek használatával

Ez a projekt egy BloodBowl játékforduló számlálóra vonatkozott, hat Charlieplexed 7 szegmenses LED segítségével.

1. lépés: Koncepció

Koncepció
Koncepció

Egy barátom ötleteket kérdezett tőlem a Bloodbowl Turn számláló építéséhez társasjátékához. Mivel nem tudtam, mi ez, és mit akar, egy kis időbe telt, amíg eldöntöttem, hogy ezt hogyan fogom -e csinálni. Először el kellett képzelnem, hogy mit akar, ezért a koncepcióművészettel kezdtem (kép). Az alapötlet az, hogy 3 nyomógombbal rendelkezzen, amelyek egyenként 3 LED -et vezérelnek, és egy egyedi építésű toronyba kerülnek. Az egyetlen nagy kérés az volt, hogy a felső 4 kijelző 0 -tól 8 -ig számoljon, és állítsa vissza, és az alsó 2 a kijelzők visszaszámlálnak 8 -ról 0 -ra, és visszalépnek. Befejezném az áramkört, és ő befejezné a tornyot.

2. lépés: Tervezés és alkatrészlista

Tervezés és alkatrészek listája
Tervezés és alkatrészek listája

Mivel a koncepció 6 darab 7 szegmenses LED-et igényelt, és volt néhány 8 bites Microchip PIC-m kéznél, kutattam a PIC-k LED-ek vezérlésének módjait. Ezt a linket találtam: https://www.mikroe.com/en/books A /picbook/7_08chapter.htm azt írja ki, hogy "Akár 6 kijelző érhető el így, anélkül, hogy ez befolyásolná a kijelző fényerejét." Ezt kihívásnak és vizsgálnivalónak tartottam a projektem részeként. Az első dolgom az volt, hogy előkaptam néhány izzólámpás, 7 szegmenses kijelzőt a dobozból, és megnéztem, hogyan fognak működni. Rossz hírek. A kiválasztott részek nem úgy viselkedtek, ahogy szerettem volna. A szegmens szükség esetén világít a kenyértáblán, de a szivárgási áramot elosztották a többi 6 szegmensnek. Rájöttem, hogy az izzókijelzők nem biztos, hogy jó út, vagy más módon kell használni őket. Tehát az egyszerűség kedvéért ellenőriztem, hogy a kezemben lévő 7 szegmenses LED-ek működnek-e a panelezéshez, és rendeltem néhány közös anód kijelzőt. A második dolog, amit meg kellett tennem, a tervezés elrendezése és a kódon való munka megkezdése. A képen az áramköröm látható. Nem sokat, hiszen a PIC kódja gondoskodik a multiplexelésről … errr Charlieplexing. Megjegyzés: MINDEN 6 kijelző ugyanazokat a sorokat tartalmazza az illesztőprogram IC -jétől. Az IC választógomb minden egyes kijelzőt engedélyez, egyenként 1-et, és a 7 szegmenses sorokat a PIC ennek megfelelően frissíti. Nagyon egyszerű ötlet. Ezt követően csak a kód- és hardver-befejezésre volt szükség. Alkatrészlista A Digi-Key 3 kis megrendelése után, miközben konkrét alkatrészekről döntött, minden megvolt, amire szükségem volt (néhány dologgal a kezemben); 1 ~ 3 "x4 "PCB6 kis nyomógombos kapcsolók (NO) 1 74LS47, 7 szegmenses kijelző IC1 PIC16F627 1 CD4028, 1/10 választó IC 6 10KOhm ellenállások1 470 Ohm ellenállás1 huzaltekercs. Különböző színeket és módszereket használtam, de ez csak én voltam. 1 78L05 5 V -os szabályozó 1 9 V -os elemcsipesz kenyérfal 3) Tervezés optimalizálása. Ezek a kérdések önmagukban nem túl bonyolultak, de a tapasztalat nélküli átvételük sokat jelenthet a kezdők számára. A készülék, a forrasztóállomás stb. Égetéséhez hardverprogramozóra van szükség. Az első, amit valaki észrevehet, hogy a 7 szegmenses LED-ek NEM rendelkeznek soros (áramkorlátozó) ellenállásokkal! Hadd foglalkozzam ezzel gyorsan azáltal, hogy kijelentem, hogy az eredeti tervemben szerepeltek … de olvassa el a magyarázat következő lépését!

3. lépés: Breadboarding és mikrokód

Breadboarding és mikrokód
Breadboarding és mikrokód

A kenyértábla ehhez elengedhetetlen volt. Az általános kenyértáblám látható, de a projekt méretéhez valójában ezt és egy kisebb kenyérsütőt használtam, mivel sok vezetéket kellett elosztani. Először egyetlen 7 szegmenses LED-et teszteltem a kezdeti kód használatával. Ez 3 dolgot erősített meg; 1) Az IC -k vezetékezése jónak bizonyult! 2) Engem optimalizált és véglegesítettem a kódomat. 3) Tudatosítottam, hogy nincs szükségem az áramkorlátozó ellenállásokra! 1 WIRING hogy dolgozzak a kódommal, mivel a LED egy nyomógombos kapcsolóval ciklusozik a számok között, így ellenőrizve a kódomat és az elrendezésemet. Nem sok mindenre volt szükség, de a kenyérsütés megerősítette, hogy jó formában vagyok.2 A CODEI -ben eredetileg a kódomat állítottam be a gombok keresésének fő rutinjával, és az ISR (Interrupt Service Rutin) megjeleníti a számokat,. A kenyértáblás tesztek után megfordítottam a rutinokat, így az idő nagy részében folyamatosan megjelenítettem a számokat és az ISR -t a gombok ellenőrzésére. Ennek az volt az oka, hogy állandó kijelzőt kaptam, mivel a PIC belső 4Mhz -es órával működik, így nagyon kevés időt veszítek a gombok keresésére. Nem nagy ügy… csak attól függ, hogyan szeretné végrehajtani a kódot, és mi a legértelmesebb az egyes alkalmazásokhoz. Ehhez fontos a kijelző, ezért ezt a fő rutinba helyeztem. Amikor megérkeztek az első alkatrészeim (mind a 6 kijelző!), Befejeztem a kenyérpirító kábelezését, és találtam egy másik problémát. Amikor megnyomtam a gombot, a kódomban néhány hanyag regiszter volt, amelyeket nem töröltek, és az ISR kisebb hibákat okozott a kijelzőn. ========================== ================================================== =====; Fordulatszámláló;; -----------; Dsply3 Dsply2; Dsply4 Dsply1; Led1 Led3; A5 | 4 15 | A6 - LED2; Vss | 5 14 | Vdd; Gomb1 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;; ================================== ==============================================; Felülvizsgálati előzmények és megjegyzések:; V1.0 Kezdeti fejléc, 3/30/09 kód;;; (C) 5/2009; Ez a kód személyes tanulásra/alkalmazásra/módosításra használható.; A kód kereskedelmi célú felhasználása sérti ezt az ingyenes szoftverkiadást..; ------------------------------------------------ -------------------------------#tartalmazza P16F627A. INC; ============= ================================================== ================; Meghatározza; ------------------------------------------------ -------------------------------; ================== ================================================== ===========; Adat;------------------------------------------------ -------------------------------; Időmegtartó változók száma1 egyenlő ================================================== =======; Vektorok visszaállítása;; BEÁLLÍTÁS ELLENŐRZÉSE. BITS ÉGÉS ELŐTT !!!; INTOSC; MCLR: ENGEDÉLYEZETT; PWRUP: ENGEDÉLYEZETT; MINDEN MÁS: TILTVA !!;; ------------------------------------------ ------------------------------------- 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 ITT; Ellenőrizze a PB0-PB5 kapcsolókat btfsc PORTB, 0; Ellenőrizze az SW1 hívást sw1debounce btfsc PORTB, 1; Ellenőrizze az SW1 hívást sw2debounce btfsc PORTB, 2; Ellenőrizze az SW1 hívást sw3debounce btfsc PORTB, 3; Ellenőrizze az SW1 hívást sw4debounce btfsc PORTB, 4; Ellenőrizze az SW1 hívást sw5debounce btfsc PORTB, 5; Check SW1 call sw6debounce goto endisrsw1debounce call debounce; Várjon 0,2 mp hívás visszavonása incf dis1; Frissítés számláló movf dis1, W; Ellenőrizze a túlcsordulást xorlw 0x1A; 10 a 7-szegmensen? btfss STATUS, Z return; Nem, térjen vissza a szkenneléshez. movlw h'10 '; Igen, állítsa vissza a kijelzőt. movwf dis1 returnsw2debounce hívás debounce; Várjon 0,2 mp hívás visszavonása incf dis2; Frissítés számláló movf dis2, W; Ellenőrizze a túlcsordulást xorlw 0x4A; 10 a 7-szegmensen? btfss STATUS, Z return; Nem, térjen vissza a szkenneléshez. movlw h'40 '; Igen, állítsa vissza a kijelzőt. movwf dis2 returnsw3debounce hívás debounce; Várjon 0,2 mp hívás visszavonása incf dis3; Frissítés számláló movf dis3, W; Ellenőrizze a túlcsordulást xorlw 0x5A; 10 a 7-szegmensen? btfss STATUS, Z return; Nem, térjen vissza a szkenneléshez. movlw h'50 '; Igen, állítsa vissza a kijelzőt. movwf dis3 returnsw4debounce hívás debounce; Várjon 0,2 mp hívás visszavonása incf dis4; Frissítés számláló movf dis4, W; Ellenőrizze a túlcsordulást xorlw 0x8A; 10 a 7-szegmensen? btfss STATUS, Z return; Nem, térjen vissza a szkenneléshez. movlw h'80 '; Igen, állítsa vissza a kijelzőt. movwf dis4 returnsw5debounce hívás visszavonása; Várjon 0,2 mp hívás visszavonása incf dis5; Frissítés számláló movf dis5, W; Ellenőrizze a túlcsordulást xorlw 0x9A; 10 a 7-szegmensen? btfss STATUS, Z return; Nem, térjen vissza a szkenneléshez. movlw h'90 '; Igen, állítsa vissza a kijelzőt. movwf dis5 returnsw6debounce hívás debounce; Várjon 0,2 mp hívás visszavonása incf dis6; Frissítés számláló movf dis6, W; Ellenőrizze a túlcsordulást xorlw 0xCA; 10 a 7-szegmensen? btfss STATUS, Z return; Nem, térjen vissza a szkenneléshez. movlw h'C0 '; Igen, állítsa vissza a kijelzőt. movwf dis6 returnendisr bcf INTCON, T0IF swapf status_temp, w movwf STATUS swapf w_temp, f swapf w_temp, wretfie; ============================ ================================================== =; Kezdd itt!;---------------------------------------------- ---------------------------------Rajt; Config I/O portok clrf PORTA movlw 0x07 movwf CMCON bcf STATUS, RP1 bsf STATUS, RP0 movlw h'00 '; RA kimenetek, RA5 Nincs kimenet movwf TRISA bcf STATUS, RP0 clrf PORTB bsf STATUS, RP0 movlw h'FF'; RB bemenetek movwf TRISB; Belső időzítő beállítása bsf PCON, 3; Állítsa 4Mhz -re. movlw h'CF '; Tmr0 Belső forrás, előskála TMR0 1: 256 movwf OPTION_REG movlw h'A0 'movwf INTCON; TMR0 megszakítások engedélyezése, bcf STATUS, RP0; Initialize Registers clrf PORTA; PortA törlése clrf PORTB; PortB kimenetek törlése visszakapcsolás; 0,2 mp; teszt LED -ek, 8. kijelző ???; ====================================== =========================================; Fő; Bemenetet kap a kapcsolókról, a visszakapcsolásokról és az indító kijelzőkről.;; Ez frissíti a kijelzőket, @4Mhz TMR0 prescal 1: 4 -vel, 1Khz sebességgel. Az 1-6 kijelző vezetékes.; Először is, a BCD-7Seg IC meg van töltve a kijelzett értékkel, ÉS a BCD-Dec IC aktiválva van; a kijelző kiválasztása.; Másodszor, a kijelzőn ms késleltetés van.; Harmadszor, BCD-Dec Az IC deaktiválva … a kijelző0 van kiválasztva a kijelző kikapcsolásához;; Ez mind a 6 kijelzőnél megismétlődik, és hurok.; Az ISR kezeli a kapcsolók érzékelését 15 Hz-es frekvencián. -------------------------------------------------- --------------- main; Disp1 movf dis1, 0 movwf PORTA call ledon goto main; ===================== ================================================== ========; Ledon; A LED bekapcsolási ideje; 6 kijelző-> 1/6 terhelési ciklus 1Khz = 166 ciklus; ----------------------------------- -------------------------------------------- ledon movlw.54 movwf count1ledloop decfsz count1, F goto ledloopreturn; =========================================== ====================================; Visszakapcsolási jel; 4 ciklus a betöltéshez és a híváshoz, 2 ciklus a visszatéréshez.; 4Mhz Tc:: count2 = 255-> 0,2 mp; -------------------------------------- ----------------------------------------- debounce movlw.255; 1/5 másodperces késleltetés. movwf count2 call pon_wait return; -------------------------------------------- -----------------------------------; count1 = 255d:: 775 ciklus 0-ig, + 3 ciklus a visszatéréshez.; --------------------------------- ---------------------------------------------- pon_waitbig_loopS movlw.255 movwf count1short_loopS decfsz count1, F goto short_loopS decfsz count2, F goto big_loopSreturnend3 A CIRCUITI eredetileg 470 Ohm ellenállással rendelkezett a 74LS47 és a CD4028 engedélyezési vonal minden kijelzővezérlő sorából. Azonban teszteltem az áramkör áramfelvételét, és megállapítottam, hogy csak ~ 31mA húz. És mivel a kijelzők tényleges illesztőprogramja közvetlenül a 74LS47 -ből származik, és az engedélyezés egy másik IC -ről történik, az átlagos és csúcsigények gyors lefutása, valamint a megfelelő adatlapok… ! Úgy tűnik, hogy a CA vonal közvetlen vezetése a 4028 -ból, míg az összes szegmens közvetlen vezetése rendben van! …féle.:) Volt egy hibám a kódomban, amely nem törölte a regisztereimet, amikor megnyomtak egy gombot, ami azt eredményezte, hogy az utolsó kijelzőn 2 szegmens nagyon fényesen világított, amikor megnyomtak egy gombot. Ez rossz volt. A regiszter törlése azonban megoldotta ezt a problémát, és a folyamatos teljesítmény -ellenőrzések megerősítik, hogy az állandóan 30 mA körül van. Ennek körülbelül 20 órányi üzemidőt kell adnom (a hasonló áramkörökkel kapcsolatos korábbi tapasztalatok alapján) 1 9 V -os akkumulátor használatával (500 mAh/30 mAh, 5 V -os szabályozás alatt) … remélem! Úgy döntöttem, hogy a LED -eket közvetlenül meghajtom, de dugom őket aljzatba ha valami történt, hosszú távon.

4. lépés: PCB forrasztás

NYÁK forrasztás
NYÁK forrasztás

Valahányszor eljutok idáig a projektemben, késleltetem az abit. Eleinte dróthálóval akartam bekötni ezt a dolgot, de gyorsan elvetettem ezt az ötletet. Először azt gondolom: "Néhány huzal forrasztásra, nem nagy ügy" … aztán mire a projektem forrasztásra kész lesz, arra gondolok, Vagy ki kellett volna küldenem, hogy elkészítsem a proto táblát, vagy maratni a saját táblámat. ". Nem foglalkozom a NYÁK -os maratással (még), és nem akartam $ $ -ért fizetni a tábla elkészítéséért, ezért……Kb. 3 órát töltöttem a forrasztással. Ez körülbelül 150 vezeték, tehát 300 forrasztási pont, plusz a forrasztóhidak javítása. Egyébként itt a tábla hátsó oldala …… igen… egy káosz. 20 perc gondolkodásba telt, mivel a kijelzőn rossz #-es logikai mintázat volt látható, amit meg kellett fejtenem. Ezt követően megtaláltam a rövid, és bam! Tökéletesen működött.

5. lépés: Következtetés

Következtetés
Következtetés

MŰKÖDTETT! Ez a projekt körülbelül 2 hetet vett igénybe, hogy elgondolkozzon és e -mailben küldje el a finom pontokat a kérelmezőnek, ~ 3 óra kódkiegészítést és hibakeresést, ~ 4 órát a deszkázást és a hibakeresést, ~ 3 órát a forrasztást. Csak 3 IC segítségével Charlieplex 6 7 szegmenses LED-ek. Az áramfelvétel körülbelül 30 mA-es, ezzel a kialakítással, ami nem rossz, ha én magam mondom. Gyanítom, hogy több 7 szegmenses LED-et is lehet használni, de nem nyomtam le a borítékot. szinte minden alkalmazásra alkalmazható 7 szegmenses LED-ek használatával; hőmérő, óra, szövegkijelző, stb. Néhány trükkös kóddal mozgó kijelzővel vagy képekkel rendelkezhet … talán még egy POV (látásmegmaradás) projekt alapja is. A végső megvalósítás a barátomnak marad, hogy felépítse tornyát és helyezze be a táblát, ahogy jónak látja. Ha/ha ez megtörténik, feltöltök egy képet. De ami az áramkört illeti, ez úgy tűnik, megrendelésre készült!

Ajánlott: