Obsah:

Otáčkoměr BloodBowl pomocí 7segmentových LED: 5 kroků
Otáčkoměr BloodBowl pomocí 7segmentových LED: 5 kroků

Video: Otáčkoměr BloodBowl pomocí 7segmentových LED: 5 kroků

Video: Otáčkoměr BloodBowl pomocí 7segmentových LED: 5 kroků
Video: Basics of Blood Bowl in 3 Minutes by Wowcrendor | WoWcrendor 2024, Červenec
Anonim
Otáčkoměr BloodBowl pomocí 7segmentových LED diod
Otáčkoměr BloodBowl pomocí 7segmentových LED diod

Tento projekt byl určen pro počítadlo her BloodBowl využívající šest segmentových LED diod Charlieplexed.

Krok 1: Koncept

Pojem
Pojem

Můj přítel se mě zeptal na nápady na stavbu Bloodbowl Turn Counter pro jeho deskovou hru. Když jsem nevěděl, co to je a co chce, chvíli trvalo, než jsem se rozhodl, jestli a jak to udělám. Nejprve jsem musel mít představu o tom, co chce, a tak jsem začal s konceptem umění (obrázek). Základní myšlenkou je mít 3 tlačítka, z nichž každé bude ovládat 3 LED a bude umístěno uvnitř vlastní vestavěné věže. Jediným velkým požadavkem bylo, aby se horní 4 displeje počítaly od 0 do 8 a resetovaly, a spodní 2 displeje odpočítávají od 8 do 0 a cyklují zpět. Dokončil bych okruh a on dokončil věž.

Krok 2: Design a seznam dílů

Design a seznam dílů
Design a seznam dílů

Vzhledem k tomu, že koncept vyžadoval 6 7segmentových LED diod a měl jsem po ruce několik 8bitových mikročipových PIC, zkoumal jsem způsoby, jak pomocí PIC ovládat LED diody. Našel jsem tento odkaz https://www.mikroe.com/en/books /picbook/7_08chapter.htm, který uvádí „Takto lze přistupovat až k 6 displejům, aniž by byl ovlivněn jas každého displeje.“Považoval jsem to za výzvu a něco, co bych měl prozkoumat jako součást svého projektu. První věc, kterou jsem udělal, bylo vytáhnout z krabice nějaké žhavící 7segmentové displeje a zjistit, jak budou fungovat. Špatné zprávy. Jednotlivé části, které jsem vybral, se nechovaly tak, jak bych chtěl. Segment by se v případě potřeby na prkénku rozsvítil, ale svodový proud byl distribuován do dalších 6 segmentů. Uvědomil jsem si, že žárovkové displeje nemusí být tou správnou cestou, nebo jsem je musel použít jiným způsobem. Takže pro jednoduchost jsem ověřil, že 7segmentové LED diody, které jsem měl po ruce, budou fungovat pro prkénko, a objednal jsem si některé běžné anodové displeje. Druhá věc, kterou jsem musel udělat, bylo rozložení mého návrhu a zahájení práce na kódu. Na obrázku je můj obvod. Nic moc, protože kód v PIC se stará o multiplexování … errr Charlieplexing. Poznámka: VŠECHNY 6 displejů má STEJNÉ řádky z IC ovladače. Volič IC umožňuje každé zobrazení, vždy po 1, a 7segmentové řádky jsou odpovídajícím způsobem aktualizovány PIC. Velmi jednoduchý nápad. Poté už stačí jen dokončení kódu a hardwaru. Seznam dílů Po 3 malých objednávkách od společnosti Digi-Key při rozhodování o konkrétních komponentách jsem měl vše, co jsem potřeboval (s některými věcmi po ruce); 1 ~ 3 "x4 "Malé tlačítkové spínače PCB6 (NO) 1 74LS47, 7segmentový displej IC1 PIC16F627 1 CD4028, 1 z 10 voličů IC 6 odpory 10KOhm1 rezistor 470Ohm1 cívka drátu. Použil jsem různé barvy a kryty, ale to jsem byl jen já. breadboarding 3) Optimalizace designu. Žádný z těchto problémů sám o sobě není příliš komplikovaný, ale jejich zvládnutí bez zkušeností může být pro začátečníka hodně. K vypálení zařízení, pájecí stanice atd. Je zapotřebí hardwarový programátor. PRVNÍ, než si někdo může všimnout, je, že 7segmentové LED diody NEMAJÍ sériové rezistory (omezující proud)! Dovolte mi, abych se k tomu rychle vyjádřil tím, že uvedu, že je měl můj původní návrh … ale přečtěte si další krok k vysvětlení!

Krok 3: Breadboarding a mikrokód

Breadboarding a mikrokód
Breadboarding a mikrokód

Breadboard byl pro to nutností. Zobrazen je můj obecný prkénko, ale pro velikost tohoto projektu jsem ve skutečnosti použil tento a menší prkénko, protože bylo potřeba rozmístit mnoho vodičů. Nejprve jsem testoval jednu jedinou 7segmentovou LED pomocí počátečního kódu. To potvrdilo 3 věci; 1) Zapojení integrovaných obvodů bylo ověřeno dobře! 2) Vedlo mě to k optimalizaci a dokončení kódu. 3) Uvědomil jsem si, že nepotřebuji současné omezující odpory! 1 WIRING Jak bylo uvedeno, můj schematický návrh byl nalezen pracovat s mým kódem, protože LED dioda bude procházet čísly pomocí jednoho tlačítkového přepínače, takže se ověří můj kód a rozložení. Nebylo potřeba mnoho, ale breadboarding potvrdil, že jsem v dobré kondici.2 CODEI původně měl můj kód nastavený s hlavní rutinou pro vyhledávání tlačítek a ISR (Interrupt Service Routine) zobrazoval čísla,. Po chlebových testech jsem rutiny obrátil, takže většina času neustále zobrazovala čísla a ISR pro kontrolu tlačítek. Důvod, proč jsem to udělal, byl jen neustálý displej, protože PIC běží s interními 4Mhz hodinami, ztrácím velmi málo času skenováním tlačítek. Žádný velký problém … záleží na tom, jak chcete kód dělat a co má pro každou aplikaci největší smysl. Z tohoto důvodu je zobrazení důležité, proto jsem to zařadil do hlavní rutiny. Když dorazily moje první díly (všech 6 displejů!), Dokončil jsem zapojení prkénka a našel další problém. Při stisknutí tlačítka měl můj kód několik nedbalých registrů, které nebyly vymazány a ISR způsoboval drobné závady displeje.; =========================== ======================================================================== =====; Počitadlo otáček;; -----------; 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;; ======================================== ===============================================; Historie revizí a poznámky:; Počáteční záhlaví V1.0, kód 3/30/09;;; (C) 5/2009; Tento kód lze použít k osobnímu učení/aplikaci/úpravám.; Jakékoli použití tohoto kódu v komerčních produktech porušuje toto bezplatné vydání..; ------------------------------------------------ -------------------------------#include P16F627A. INC; ============== ======================================================================== =================; Definuje; ------------------------------------------------ -------------------------------; ==================== ======================================================================== ============; Data;------------------------------------------------ -------------------------------; Proměnné pro udržování času počet1 ekv. ======================================================================== ========; Resetovat vektory;; ZKONTROLUJTE KONFIGURACI. Kousky PŘED SPÁLENÍM !!!; INTOSC; MCLR: POVOLENO; PWRUP: POVOLENO; VŠECHNY OSTATNÍ: ZAKÁZAT !!;; ------------------------------------------ ------------------------------------- RESET_ADDR EQU 0x00 ISR_ADDR EQU 0x04 org RESET_ADDR začít; == ======================================================================== =============================; ISR;; ----------------------------------------------- -------------------------------- org ISR_ADDR movwf w_temp swapf STATUS, w movwf status_temp;; ISR ZDE; Zkontrolujte přepínače PB0-PB5 btfsc PORTB, 0; Zkontrolujte SW1 volání sw1debounce btfsc PORTB, 1; Zkontrolujte SW1 volání sw2debounce btfsc PORTB, 2; Zkontrolujte SW1 volání sw3debounce btfsc PORTB, 3; Zkontrolujte SW1 volání sw4debounce btfsc PORTB, 4; Zkontrolujte SW1 volání sw5debounce btfsc PORTB, 5; Zkontrolujte volání SW1 sw6debounce, přejděte na endisrsw1debounce hovor debounce; Počkejte 0,2 s, debounce hovoru včetně dis1; Aktualizovat čítač movf dis1, W; Zkontrolujte přetečení xorlw 0x1A; 10 na 7-seg? btfss STAV, Z návrat; Ne, vraťte se ke skenování. movlw h'10 '; Ano, resetovat displej. movwf dis1 returnsw2debounce volání debounce; Počkejte 0,2 s debounce hovoru včetně dis2; Aktualizovat čítač movf dis2, W; Zkontrolujte přetečení xorlw 0x4A; 10 na 7-seg? btfss STAV, Z návrat; Ne, vraťte se ke skenování. movlw h'40 '; Ano, resetovat displej. movwf dis2 returnsw3debounce volání debounce; Počkejte 0,2 s, debounce hovoru včetně dis3; Aktualizovat čítač movf dis3, W; Zkontrolujte přetečení xorlw 0x5A; 10 na 7-seg? btfss STAV, Z návrat; Ne, vraťte se ke skenování. movlw h'50 '; Ano, resetovat displej. movwf dis3 returnsw4debounce volání debounce; Počkejte 0,2 s, debounce hovoru včetně dis4; Aktualizovat čítač movf dis4, W; Zkontrolujte přetečení xorlw 0x8A; 10 na 7-seg? btfss STAV, Z návrat; Ne, vraťte se ke skenování. movlw h'80 '; Ano, resetovat displej. movwf dis4 returnsw5debounce volání debounce; Počkejte 0,2 s, debounce hovoru včetně dis5; Aktualizovat čítač movf dis5, W; Zkontrolujte přetečení xorlw 0x9A; 10 na 7-seg? btfss STAV, Z návrat; Ne, vraťte se ke skenování. movlw h'90 '; Ano, resetovat displej. movwf dis5 returnsw6debounce volání debounce; Počkejte 0,2 s, debounce hovoru včetně dis6; Aktualizovat čítač movf dis6, W; Zkontrolujte přetečení xorlw 0xCA; 10 na 7-seg? btfss STAV, Z návrat; Ne, vraťte se ke skenování. movlw h'C0 '; Ano, resetovat displej. movwf dis6 returnendisr bcf INTCON, T0IF swapf status_temp, w movwf STATUS swapf w_temp, f swapf w_temp, wretfie; ================================= ======================================================================== =; Začněte zde! ---------------------------------------------- ---------------------------------Start; Konfigurační I/O porty clrf PORTA movlw 0x07 movwf CMCON bcf STATUS, RP1 bsf STATUS, RP0 movlw h'00 '; RA výstupy, RA5 Žádný výstup movwf TRISA bcf STATUS, RP0 clrf PORTB bsf STATUS, RP0 movlw h'FF'; Vstupy RB movwf TRISB; Nastavit interní časovač bsf PCON, 3; Nastaveno na 4 MHz. movlw h'CF '; Tmr0 Interní zdroj, předvolba TMR0 1: 256 movwf OPTION_REG movlw h'A0 'movwf INTCON; Povolit přerušení TMR0, bcf STATUS, RP0; Inicializovat registry clrf PORTA; Clear PortA clrf PORTB; Vymazat 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čit; 0,2 s; testovací LED, displej 8 ???; ============================================ =============================================; Hlavní; Získá vstupy z přepínačů, odskoků a přírůstků displejů;; To aktualizuje displeje @4Mhz s TMR0 prescal 1: 4, při frekvenci 1Khz.; Displej 0 se používá k přiřazení nepoužívaného displeje. Displej 1-6 je zapojen do kabelů. Za prvé, IC BCD-7Seg je načteno s hodnotou zobrazení a IC BCD-Dec je aktivováno pro; výběr displeje; Za druhé, pro zobrazení je drženo zpoždění ms; Za třetí, BCD-Dec IC je deaktivován … displej0 je vybrán pro vypnutí displeje;; To se opakuje pro každý ze 6 displejů a je ve smyčce.; ISR zpracovává snímání spínače rychlostí 15 Hz. -------------- ---------------------------------------------------------- --------------- hlavní; Disp1 movf dis1, 0 movwf PORTA call ledon goto main; ======================== ======================================================================== =========; Ledon; Doba ustálení zapnutí LED; 6 displejů-> 1/6 pracovního cyklu při 1Khz = 166 cyklů; ----------------------------------- -------------------------------------------- ledon movlw.54 movwf count1ledloop počet dešifs1 ======================================; Signál odskoku; 4 cykly k načtení a volání, 2 cykly k návratu.; 4Mhz Tc:: count2 = 255-> 0,2 s; -------------------------------------- ----------------------------------------- debounce movlw, 255; Zpoždění při odskoku 1/5 sekundy. movwf count2 volání pon_wait návrat; -------------------------------------------- -----------------------------------; count1 = 255d:: 775 cyklů do 0, + 3 cykly pro návrat; --------------------------------- ---------------------------------------------- pon_waitbig_loopS movlw.255 movwf count1short_loopS decfsz count1, F goto short_loopS decfsz count2, F goto big_loopSreturnend3 CIRCUITI původně mělo 470Ohm odpory z každého řádku ovladače displeje z povolující linky 74LS47 a CD4028. Testoval jsem však proudový odběr mého obvodu a zjistil jsem, že táhne pouze ~ 31mA. A protože skutečný ovladač pro displeje je přímo z 74LS47 a povolení je z jiného IC, rychlé spuštění průměrných a špičkových požadavků a příslušných datových listů ….. Stáhl jsem odpory z prkénka a našel jsem rozdíl 1 mA ! Zdá se, že přímé řízení linky CA ze 4028 a přímé řízení všech segmentů je v pořádku! … Tak nějak.:) Měl jsem v kódu závadu, která při stisknutí tlačítka nevymazala mé registry, což způsobilo, že poslední displej měl při stisknutí tlačítka velmi jasně osvětlené 2 segmenty. To bylo špatné. Vymazání registru však tento problém vyřešilo a průběžné kontroly napájení potvrzují, že je trvale kolem 30 mA. To by mi mělo dát (na základě předchozích zkušeností s podobnými obvody) ~ 20 hodin běhu s použitím 1 9V baterie (500mAH/30mAH pod 5V regulací) … Doufám! Rozhodl jsem se nechat LED přímo napájené, ale dát je do zásuvek v kdyby se něco stalo, dlouhodobě.

Krok 4: Pájení DPS

Pájení DPS
Pájení DPS

Pokaždé, když se ve svém projektu dostanu k tomuto bodu, odložím ukončení. Zpočátku jsem chtěl tuto věc zabalit, ale rychle jsem tuto myšlenku upustil. Nejprve si myslím: „Pár drátů k pájení, žádný problém“… pak, když je můj projekt připraven k pájení, přemýšlím, „ Měl jsem buď rozeslat nechat vyrobit desku proto, nebo vyleptat vlastní desku . Nejsem v leptání PCB (zatím) a nechtěl jsem platit $$ za výrobu desky, takže …. Jo ….. Pájení této věci jsem strávil asi 3 hodiny. Je to asi 150 drátů, takže je to 300 pájecích bodů, plus dotyky pro pájecí můstky. Každopádně tady je zadní strana desky na obrázku … jo … konec nepořádku, ale když bylo vše hotovo, měl jsem jen 1 páječku krátkou. Trvalo 20 minut přemýšlení, protože displej ukázal, že se nesprávné #zobrazuje v logickém vzoru, který jsem musel rozluštit. Poté jsem našel short a bam! Fungovalo to perfektně.

Krok 5: Závěr

Závěr
Závěr

Fungovalo to! Tento projekt trval asi; ~ 2 týdny na přemýšlení a zaslání jemných bodů žadateli, ~ 3 hodiny dokončení kódu a ladění, ~ 4 hodiny breadboardingu a ladění, ~ 3 hodiny pájení Pomocí pouhých 3 integrovaných obvodů je možné 7-segmentové LED diody Charlieplex 6. Odběr energie je u tohoto designu asi 30 mA, což není špatné, pokud to sám řeknu. Mám podezření, že by bylo možné použít více 7segmentových LED, ale netlačil na obálku. Tato myšlenka by mohla aplikovat na téměř JAKÉKOLI aplikaci pomocí 7segmentových LED; teploměr, hodiny, zobrazení textu atd. S nějakým záludným kódem byste mohli mít pohyblivý displej nebo obrázky … možná dokonce základ pro projekt POV (persistence of vision). Konečná implementace je ponechána na mém příteli, aby postavil svou věž a umístěte desku, jak uzná za vhodné. Pokud/Až to bude hotové, nechám nahrát obrázek. Ale pokud jde o obvod, zdá se, že je to stavěno na zakázku!

Doporučuje: