Obsah:

Počítadlo otáčok BloodBowl pomocou 7-segmentových LED: 5 krokov
Počítadlo otáčok BloodBowl pomocou 7-segmentových LED: 5 krokov

Video: Počítadlo otáčok BloodBowl pomocou 7-segmentových LED: 5 krokov

Video: Počítadlo otáčok BloodBowl pomocou 7-segmentových LED: 5 krokov
Video: Белокурая крыша с мокрым подвалом ► 1 Прохождение Lollipop Chainsaw 2024, November
Anonim
Počítadlo otáčok BloodBowl pomocou 7-segmentových diód LED
Počítadlo otáčok BloodBowl pomocou 7-segmentových diód LED

Tento projekt bol zameraný na počítadlo otáčok hry BloodBowl pomocou šiestich 7-segmentových diód LED Charlieplexed.

Krok 1: Koncept

Koncept
Koncept

Môj priateľ sa ma spýtal na nápady na stavbu počítadla Bloodbowl Turn pre jeho stolnú hru. Keďže nevedel, čo to je a čo chce, chvíľu trvalo, kým sa rozhodne, či a ako to urobím. Najprv som musel mať predstavu o tom, čo chce, a tak som začal s konceptuálnym umením (obrázok). Základnou myšlienkou je mať 3 tlačidlá, z ktorých každé ovláda 3 LED diódy a ktoré by bolo umiestnené vo vlastnej veži. Jedinou veľkou požiadavkou bolo, aby sa horné 4 displeje počítali od 0 do 8 a resetovali, a aby boli spodné 2. displeje odpočítavajú od 8 do 0 a vracajú sa späť. Ja by som dokončil okruh a on by dokončil vežu.

Krok 2: Dizajn a zoznam dielov

Dizajn a zoznam dielov
Dizajn a zoznam dielov

Pretože koncept vyžadoval 6 7-segmentových LED diód a mal som po ruke niekoľko 8-bitových mikročipových PIC, skúmal som spôsoby použitia PIC na ovládanie LED diód. Našiel som tento odkaz https://www.mikroe.com/en/books /picbook/7_08chapter.htm, ktorý uvádza „Takto je možné pristupovať až k 6 displejom bez toho, aby bol ovplyvnený jas každého z nich.“Považoval som to za výzvu a niečo, čo by som mal preskúmať ako súčasť svojho projektu. Prvá vec, ktorú som urobil, bolo zobrať z krabice niekoľko žiarovkových 7-segmentových displejov a zistiť, ako budú fungovať. Zlé správy. Jednotlivé časti, ktoré som vybral, sa nesprávali tak, ako by som chcel. Segment sa v prípade potreby rozsvieti na doske, ale zvodový prúd bol distribuovaný do ďalších 6 segmentov. Uvedomil som si, že žiarovky nemusia byť tou správnou cestou, alebo som ich potreboval použiť iným spôsobom. Takže pre jednoduchosť som overil, že 7-segmentové LED diódy, ktoré som mal po ruke, budú fungovať na chlebovom poli a objednal som si niekoľko bežných anódových displejov. Druhá vec, ktorú som musel urobiť, bolo rozložiť môj návrh a začať pracovať na kóde. Na obrázku je môj obvod. Nič moc, pretože kód v PIC sa stará o multiplexovanie … chyba Charlieplexing. Poznámka: VŠETKÝCH 6 displejov má ROVNAKÉ riadky z integrovaného ovládača. Volič IC umožňuje každé zobrazenie, vždy 1, a PIC zodpovedajúcim spôsobom aktualizuje 7-segmentové riadky. Veľmi jednoduchý nápad. Potom už bolo potrebné iba dokončenie kódu a hardvéru. Zoznam dielov Po troch malých objednávkach od spoločnosti Digi-Key pri rozhodovaní o konkrétnych komponentoch som mal všetko, čo som potreboval (s nejakými potrebami); 1 ~ 3 "x4 "Malé tlačidlové spínače PCB6 (NO) 1 74LS47, 7-segmentový displej IC1 PIC16F627 1 CD4028, 1 z 10 voličov IC 6 odpory 10KOhm1 rezistor 470Ohm1 cievka drôtu. Použil som rôzne farby a ochranné prvky, ale to som bol len ja. breadboarding 3) Optimalizácia dizajnu. Žiadny z týchto problémov nie je sám o sebe príliš komplikovaný, ale ich preberanie bez akýchkoľvek skúseností môže byť pre začiatočníka veľa. Na vypálenie zariadenia, spájkovacej stanice atď. Je potrebný hardvérový programátor. PRVÝ, ako si niekto môže všimnúť, je, že 7-segmentové diódy LED NEMAJÚ sériové rezistory (obmedzujúce prúd)! Dovoľte mi to rýchlo osloviť uvedením môjho pôvodného návrhu, ktorý obsahuje … ale prečítajte si ďalší krok na vysvetlenie!

Krok 3: Breadboarding a mikrokód

Breadboarding a mikrokód
Breadboarding a mikrokód

Breadboard bol k tomu nutnosťou. Zobrazený je môj generický breadboard, ale pre veľkosť tohto projektu som v skutočnosti použil tento a menší breadboard, pretože bolo potrebné rozmiestniť mnoho drôtov. Najprv som testoval jednu 7-segmentovú LED pomocou pôvodného kódu. To potvrdilo 3 veci; 1) Zapojenie integrovaných obvodov bolo overené ako dobré! 2) Viedol ma k optimalizácii a finalizácii môjho kódu. 3) Uvedomil som si, že nepotrebujem súčasné obmedzujúce odpory! 1 WIRINGA Ako bolo uvedené, môj schematický návrh bol nájdený pracovať s mojím kódom, pretože dióda LED bude cyklicky prechádzať číslami pomocou jedného tlačidlového prepínača, aby sa overil môj kód a rozloženie. Nebolo toho veľa, ale breadboarding potvrdil, že som v dobrej kondícii.2 CODEI mal pôvodne nastavený môj kód s hlavnou rutinou na vyhľadávanie tlačidiel a ISR (Interrupt Service Routine) zobrazoval čísla. Po testoch breadboardingu som rutiny obrátil, takže väčšinu času sa neustále zobrazovali čísla a ISR na kontrolu tlačidiel. Dôvod, prečo som to urobil, bol len neustály displej, pretože PIC beží s vnútornými hodinami 4 MHz, strácam veľmi málo času skenovaním tlačidiel. Žiadny veľký problém … záleží na tom, ako chcete kód urobiť a čo dáva pre každú aplikáciu najväčší zmysel. Preto je zobrazenie dôležité, preto som ho zaradil do hlavnej rutiny. Keď prišli moje prvé diely (všetkých 6 displejov!), Dokončil som zapojenie dosky a zistil som ďalší problém. Po stlačení tlačidla mal môj kód niekoľko nedbalých registrov, ktoré neboli vymazané a ISR spôsoboval menšie chyby v zobrazení.; ============================ ========================================================================== =====; Počítadlo otáčok;; -----------; 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;; ======================================== =================================================; História a poznámky k revízii:; V1.0 Počiatočný nadpis, kód 3/30/09;;; (C) 5/2009; Tento kód je možné použiť na osobné učenie/aplikáciu/úpravu.; Akékoľvek použitie tohto kódu v komerčných produktoch porušuje toto bezplatné vydanie..; ------------------------------------------------ -------------------------------#include P16F627A. INC; ============== ========================================================================== =================; Definuje; ------------------------------------------------ -------------------------------; ==================== ========================================================================== ============; Údaje; ------------------------------------------------ -------------------------------; Premenné udržiavajúce čas počítanie 1 ekv. =========================================================================== ========; Resetovať vektory;; KONTROLA KONFIGURÁCIE. KUSY PRED SPÁLENÍM !!!; INTOSC; MCLR: POVOLENÉ; PWRUP: POVOLENÉ; VŠETKY INÉ: ZAKÁZANÉ !!;; ------------------------------------------ ------------------------------------- RESET_ADDR EQU 0x00 ISR_ADDR EQU 0x04 org RESET_ADDR začať, == ========================================================================== =============================; ISR;; ----------------------------------------------- -------------------------------- org ISR_ADDR movwf w_temp swapf STATUS, w movwf status_temp;; ISR TU; Skontrolujte spínače PB0-PB5 btfsc PORTB, 0; Skontrolujte hovor SW1 sw1debounce btfsc PORTB, 1; Skontrolujte SW1 hovor sw2debounce btfsc PORTB, 2; Skontrolujte SW1 hovor sw3debounce btfsc PORTB, 3; Skontrolujte SW1, volajte sw4debounce btfsc PORTB, 4; Skontrolujte SW1 hovor sw5debounce btfsc PORTB, 5; Skontrolujte SW1 call sw6debounce choďte endisrsw1debounce hovor debounce; Počkajte 0,2 s, debounce hovoru vrátane dis1; Aktualizovať počítadlo movf dis1, W; Skontrolujte pretečenie xorlw 0x1A; 10 na 7-seg? btfss STAV, Z návrat; Nie, vráťte sa k skenovaniu. movlw h'10 '; Áno, resetovať zobrazenie. movwf dis1 returnsw2debounce zrušenie hovoru; Počkajte 0,2 s, debounce hovoru vrátane dis2; Aktualizácia počítadla movf dis2, W; Skontrolujte pretečenie xorlw 0x4A; 10 na 7-seg? btfss STAV, Z návrat; Nie, vráťte sa k skenovaniu. movlw h'40 '; Áno, resetovať zobrazenie. movwf dis2 returnsw3debounce zrušenie hovoru; Počkajte 0,2 s, debounce hovoru vrátane dis3; Aktualizácia počítadla movf dis3, W; Skontrolujte pretečenie xorlw 0x5A; 10 na 7-seg? btfss STAV, Z návrat; Nie, vráťte sa k skenovaniu. movlw h'50 '; Áno, resetovať zobrazenie. movwf dis3 returnsw4debounce call debounce; Počkajte 0,2 s, debounce hovoru vrátane dis4; Aktualizácia počítadla movf dis4, W; Skontrolujte pretečenie xorlw 0x8A; 10 na 7-seg? btfss STAV, Z návrat; Nie, vráťte sa k skenovaniu. movlw h'80 '; Áno, resetovať zobrazenie. movwf dis4 returnsw5debounce call debounce; Počkajte 0,2 s, debounce hovoru vrátane dis5; Aktualizácia počítadla movf dis5, W; Skontrolujte pretečenie xorlw 0x9A; 10 na 7-seg? btfss STAV, Z návrat; Nie, vráťte sa k skenovaniu. movlw h'90 '; Áno, resetovať zobrazenie. movwf dis5 returnsw6debounce call debounce; Počkajte 0,2 s, debounce hovoru vrátane dis6; Aktualizácia počítadla movf dis6, W; Skontrolujte pretečenie xorlw 0xCA; 10 na 7-seg? btfss STAV, Z návrat; Nie, vráťte sa k skenovaniu. movlw h'C0 '; Áno, resetovať zobrazenie. movwf dis6 returnendisr bcf INTCON, T0IF swapf status_temp, w movwf STATUS swapf w_temp, f swapf w_temp, wretfie; ================================= ========================================================================== =; Začnite tu!;---------------------------------------------- --------------------------------- štart; Konfiguračné I/O porty clrf PORTA movlw 0x07 movwf CMCON bcf STATUS, RP1 bsf STATUS, RP0 movlw h'00 '; RA výstupy, RA5 Žiadny výstup movwf TRISA bcf STATUS, RP0 clrf PORTB bsf STATUS, RP0 movlw h'FF'; Vstupy RB movwf TRISB; Nastaviť interný časovač bsf PCON, 3; Nastavené na 4 MHz. movlw h'CF '; Tmr0 Interný zdroj, predzmenka TMR0 1: 256 movwf OPTION_REG movlw h'A0 'movwf INTCON; Povoliť prerušenia TMR0, bcf STATUS, RP0; Inicializujte registre clrf PORTA; Clear PortA clrf PORTB; Vymazať výstupy 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 call odskočiť; 0,2 s; testovacie diódy LED, displej 8 ???; ============================================ ============================================; Hlavná; Získava vstupy z prepínačov, odskakovacích a inkrementálnych displejov.;; Toto aktualizuje displeje @4Mhz s TMR0 prescal 1: 4, pri frekvencii 1Khz.; Displej 0 sa používa na priradenie nepoužívanému displeju. Displej 1-6 je zapojený v kábli. Za prvé, IC BCD-7Seg je načítaná s hodnotou zobrazenia a IC BCD-Dec je aktivované pre; výber displeja; Za druhé, pre zobrazenie je držané oneskorenie ms.; Po tretie, BCD-Dec IC je deaktivovaný … displej 0 je vybraný na vypnutie displeja;; To sa opakuje pre každý zo 6 displejov a je v slučke.; ISR spracováva snímanie prepínačov pri frekvencii 15 Hz. -------------- ---------------------------------------------------------- --------------- hlavné; Disp1 movf dis1, 0 movwf PORTA call ledon goto main; ======================== ========================================================================== =========; Ledon; Čas ustálenia zapnutia LED; 6 displejov-> 1/6 pracovný cyklus pri 1 kHz = 166 cyklov; ----------------------------------- -------------------------------------------- ledon movlw.54 movwf count1ledloop počet decfsz1, Foto ======================================; Signál odskoku; 4 cykly na načítanie a volanie, 2 cykly na návrat.; 4Mhz Tc:: count2 = 255-> 0,2 s; -------------------------------------- ----------------------------------------- odskočiť movlw, 255; Oneskorenie pre 1/5 sekundový odskok. movwf count2 call pon_wait return; -------------------------------------------- -----------------------------------; count1 = 255d:: 775 cyklov až 0, + 3 cykly pre návrat.; --------------------------------- ---------------------------------------------- pon_waitbig_loopS movlw, 255 movwf count1short_loopS decfsz count1, F goto short_loopS decfsz count2, F goto big_loopSreturnend3 CIRCUITI pôvodne malo 470Ohm odpory z každého riadka ovládača displeja z povoľovacej linky 74LS47 a CD4028. Testoval som však odber prúdu môjho obvodu a zistil som, že ťahá iba ~ 31mA. A pretože skutočný ovládač pre displeje je priamo z 74LS47 a povolený je z iného IC, rýchle zníženie priemerných a špičkových požiadaviek a príslušných technických listov ….. Vytiahol som odpory z dosky a zistil som rozdiel 1 mA ! Zdá sa, že priame riadenie linky CA z 4028 pri priamej jazde všetkými segmentmi je v poriadku! …druh.:) Mal som v kóde chybu, ktorá pri stlačení tlačidla nevymazala moje registre, čo spôsobilo, že posledný displej mal pri stlačení tlačidla veľmi jasne rozsvietené 2 segmenty. Toto bolo zlé Vymazaním registra sa však tento problém vyriešil a priebežné kontroly napájania potvrdzujú, že je neustále okolo 30 mA. To by mi malo poskytnúť (na základe predchádzajúcich skúseností s podobnými obvodmi) ~ 20 hodín prevádzky s 1 batériou 9V (500mAH/30mAH pod 5V reguláciou) … Dúfam! Rozhodol som sa ponechať diódy LED priamo napájané, ale vložil ich do zásuviek ak sa niečo stane, dlhodobo.

Krok 4: Spájkovanie PCB

Spájkovanie DPS
Spájkovanie DPS

Zakaždým, keď sa dostanem k tomuto bodu svojho projektu, oddialim ukončenie. Najprv som sa chystal túto vec zabaliť, ale rýchlo som sa tejto myšlienky vzdal. Najprv si myslím, že „niekoľko drôtov na spájkovanie, žiadny problém“… potom, keď bude môj projekt pripravený na spájkovanie, premýšľam: „ Mal som buď poslať nechať vyhotoviť proto dosku, alebo vyleptať vlastnú dosku “. Nie som v leptaní PCB (zatiaľ) a nechcel som platiť $$ za výrobu dosky, takže …. Áno….. Spájkovaním tejto veci som strávil asi 3 hodiny. Je to asi 150 drôtov, to je 300 spájkovacích bodov, plus dotyky pre spájkovacie mostíky. Každopádne tu je zadná strana dosky na obrázku … áno … koniec neporiadku, ale keď bolo všetko hotové, mal som len 1 spájku krátku. Trvalo 20 minút premýšľania, pretože displej ukázal, že nesprávne #sa zobrazuje v logickom vzore, ktorý som musel dešifrovať. Potom som našiel skrat a bam! Fungovalo to perfektne.

Krok 5: Záver

Záver
Záver

Fungovalo to! Tento projekt trval asi; ~ 2 týždne na premyslenie a odoslanie jemných bodov žiadateľovi, ~ 3 hodiny dokončenia a ladenia kódu, ~ 4 hodiny breadboardingu a ladenia, ~ 3 hodiny spájkovaniaPoužitím iba 3 integrovaných obvodov je možné 7-segmentové LED diódy Charlieplex 6. Odber energie je pri tomto dizajne asi 30 mA, čo nie je zlé, ak to hovorím sám. Mám podozrenie, že by bolo možné použiť viac 7-segmentových diód LED, ale netlačilo sa na obálku. Táto myšlienka by mohla byť aplikovaný na takmer KAŽDÚ aplikáciu pomocou 7-segmentových LED diód; teplomer, hodiny, zobrazenie textu atď. S nejakým zložitým kódom by ste mohli mať pohyblivý displej alebo obrázky … možno dokonca základ pre projekt POV (pretrvávanie videnia). Konečnú implementáciu necháva môj priateľ na vybudovanie svojej veže. a umiestnite dosku, ako uzná za vhodné. Ak/Keď to bude hotové, dám nahrať obrázok. Ale pokiaľ ide o obvod, zdá sa, že je to stavané na zákazku!

Odporúča: