Sisällysluettelo:

BloodBowl-kääntölaskuri 7-segmenttisten LEDien avulla: 5 vaihetta
BloodBowl-kääntölaskuri 7-segmenttisten LEDien avulla: 5 vaihetta

Video: BloodBowl-kääntölaskuri 7-segmenttisten LEDien avulla: 5 vaihetta

Video: BloodBowl-kääntölaskuri 7-segmenttisten LEDien avulla: 5 vaihetta
Video: Голубая стрела (1958) фильм 2024, Heinäkuu
Anonim
BloodBowl-kääntölaskuri 7-segmenttisten LEDien avulla
BloodBowl-kääntölaskuri 7-segmenttisten LEDien avulla

Tämä projekti oli tarkoitettu BloodBowl-pelikierroslaskurille käyttämällä kuutta Charlieplexedin 7-segmenttistä LEDiä.

Vaihe 1: Käsite

Konsepti
Konsepti

Ystäväni kysyi minulta ideoita Bloodbowl Turn -laskurin rakentamiseksi lautapelilleen. Koska en tiennyt, mitä tämä oli ja mitä hän halusi, kesti jonkin aikaa päättää, teenkö ja miten aion tehdä tämän. Minulla oli ensin oltava käsitys siitä, mitä hän halusi, joten aloitin konseptitaiteella (kuva). Perusajatuksena on kolme painonappia, joista kukin ohjaa 3 LEDiä, ja se sijoitettaisiin räätälöidyn tornin sisään. näytöt laskevat 8: sta 0: een ja siirtyvät takaisin.

Vaihe 2: Suunnittelu- ja varaosaluettelo

Suunnittelu- ja varaosaluettelo
Suunnittelu- ja varaosaluettelo

Koska konsepti vaati kuutta 7-segmenttistä LED-valoa ja minulla oli kätevästi noin 8-bittisiä mikrosirun PIC-kortteja, tutkin tapoja käyttää PIC-kortteja LEDien ohjaamiseen. Löysin tämän linkin /picbook/7_08chapter.htm sanoo, että "Jopa kuutta näyttöä voidaan käyttää näin ilman, että kunkin näytön kirkkaus vaikuttaisi." Pidin tätä haasteena ja tutkittavana osana projektiani. Ensimmäinen asia, jonka tein, oli napata laatikostani hehkulamppuja sisältävä 7-segmenttinen näyttö ja nähdä, miten ne toimivat. Huonoja uutisia. Valitsemani tietyt osat eivät käyttäytyneet kuten halusin. Segmentti syttyi tarvittaessa leipälaudalla, mutta vuotovirta jaettiin muille 6 segmentille. Huomasin, että hehkulamput eivät ehkä ole oikea tapa, tai minun täytyi käyttää niitä eri tavalla. Joten yksinkertaisuuden vuoksi varmistin, että käsillä olevat 7-segmenttiset LEDit toimivat leipälaudalla, ja tilasin joitain yleisiä anodinäyttöjä. Kuvassa on virtapiirini. Ei paljon, sillä PIC: n koodi hoitaa multipleksoinnin… errr Charlieplexing. Huomautus: KAIKKI 6 näyttöä sisältävät samat rivit ohjaimen IC: ltä. Valitsin IC mahdollistaa jokaisen näytön, yksi kerrallaan, ja PIC päivittää 7-segmenttiset rivit vastaavasti. Hyvin yksinkertainen idea. Sen jälkeen tarvittiin vain koodin ja laitteiston viimeistely. Osaluettelo Kolmen pienen Digi-Key-tilauksen jälkeen, kun päätin tietyistä komponenteista, minulla oli kaikki mitä tarvitsin (joitain tavaroita käsillä); 1 ~ 3 "x4 "PCB6 pienet painonappikytkimet (NO) 1 74LS47, 7-segmenttinen näyttö IC1 PIC16F627 1 CD4028, 1/10 valitsin IC 6 10KOhm vastukset1 470ohm vastus1 lankakela. Käytin erilaisia värejä ja painikkeita, mutta se oli vain minä.1 78L05 5V säädin1 9V akun pidike1 9V paristo1 pieni kytkin (virran kytkemiseksi/katkaisemiseksi) Pidän tätä kohtalaisen monimutkaisena projektina, koska; 1) vaaditaan mikroprosessorikoodi2) Juotos ja leipälautailu 3) Suunnittelun optimointi. Kumpikaan näistä asioista ei itsessään ole liian monimutkainen, mutta niiden ottaminen käyttöön ilman kokemusta voi olla aloittelijalle paljon. Laitteiston, juotosaseman jne. Polttamiseen tarvitaan laitteisto-ohjelmoija. ENSIMMÄINEN asia, jonka joku saattaa huomata, on, että 7-segmentin LED-valoissa EI OLE sarjavastuksia (virranrajoitus)! Haluan puuttua siihen nopeasti ilmoittamalla, että alkuperäinen suunnitteluni sisälsi ne … mutta lue seuraava selitysvaihe!

Vaihe 3: Breadboarding & Micro Code

Breadboarding & Micro Code
Breadboarding & Micro Code

Leipälauta oli pakollinen tähän. Kuvassa on yleinen leipälevyni, mutta tämän projektin kokoa varten käytin itse tätä ja pienempää leipälevyä, koska johdot oli erotettava toisistaan. Tämä vahvisti 3 asiaa; 1) IC: n johdotus todettiin hyväksi! 2) Johti minut optimoimaan ja viimeistelemään koodini. 3) Sain ymmärtämään, etten tarvinnut nykyisiä rajoittavia vastuksia! jotta voin työskennellä koodini kanssa, koska LED-selain selaa numeroita yhdellä painikekytkimellä, joten koodi ja asettelut vahvistettiin. Paljon ei tarvittu, mutta leipälautailu vahvisti olevani hyvässä kunnossa. Leipälautailutestien jälkeen käänsin rutiinit, joten suurin osa ajasta näytti jatkuvasti numeroita ja ISR: ää painikkeiden tarkistamiseksi. Syy, miksi tein tämän, oli vain saada jatkuva näyttö, koska PIC toimii sisäisellä 4 MHz: n kellolla, joten menetän hyvin vähän aikaa painikkeiden etsimiseen. Ei väliä … riippuu vain siitä, miten haluat tehdä koodin ja mikä on järkevin kullekin sovellukselle. Tämän vuoksi näyttö on tärkeä, joten laitoin sen päärutiiniksi. Painiketta painettaessa koodissani oli joitain huolimattomia rekistereitä, joita ei poistettu ja ISR aiheutti pieniä näyttöhäiriöitä.; ========================== ================================================== =====; Kääntölaskuri;; -----------; Dsply3 Dsply2; Dsply4 Dsply1; Led1 Led3; A5 | 4 15 | A6 - Led2; Vss | 5 14 | Vdd; Painike1 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;; ================================== ==============================================; Versiohistoria ja huomautuksia:; V1.0 Alkuperäinen otsikko, koodi 3/30/09;;; (C) 5/2009; Tätä koodia voidaan käyttää henkilökohtaiseen oppimiseen/sovellukseen/muokkaamiseen..; ------------------------------------------------ -------------------------------#sisältää P16F627A. INC; ============= ================================================== ================; Määrittää; ------------------------------------------------ -------------------------------; ================== ================================================== ===========; Tiedot; ------------------------------------------------ -------------------------------; Ajanpito -muuttujatlaskuri ================================================== =======; Nollaa vektorit;; TARKISTA MÄÄRITTELY BITS ENNEN POLTTOA !!!; INTOSC; MCLR: KÄYTÖSSÄ; PWRUP: KÄYTÖSSÄ; KAIKKI MUUT: POIS KÄYTÖSSÄ!;; ------------------------------------------ ------------------------------------- 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 TÄSTÄ; Tarkista PB0-PB5-kytkimet btfsc PORTB, 0; Tarkista SW1 -puhelu sw1debounce btfsc PORTB, 1; Tarkista SW1 -puhelu sw2debounce btfsc PORTB, 2; Tarkista SW1 -puhelu sw3debounce btfsc PORTB, 3; Tarkista SW1 -puhelu sw4debounce btfsc PORTB, 4; Tarkista SW1 -puhelu sw5debounce btfsc PORTB, 5; Tarkista SW1 -puhelu sw6debounce goto endisrsw1debounce call bobounce; Odota 0,2 sekuntia puhelun peruutus incf dis1; Päivitä laskuri movf dis1, W; Tarkista ylivuoto xorlw 0x1A; 10 7-seg? btfss TILA, Z paluu; Ei, palaa skannaukseen. movlw h'10 '; Kyllä, nollaa näyttö. movwf dis1 returnsw2debounce puhelun poistuminen; Odota 0,2 sekuntia puhelun peruutus incf dis2; Päivitä laskuri movf dis2, W; Tarkista ylivuoto xorlw 0x4A; 10 7-seg? btfss TILA, Z paluu; Ei, palaa skannaukseen. liikkuva h'40 '; Kyllä, nollaa näyttö. movwf dis2 returnsw3debounce puhelun poistuminen; Odota 0,2 sekuntia puhelun katkaisu incf dis3; Päivitä laskuri movf dis3, W; Tarkista ylivuoto xorlw 0x5A; 10 7-seg? btfss TILA, Z paluu; Ei, palaa skannaukseen. movlw h'50 '; Kyllä, nollaa näyttö. movwf dis3 returnsw4debounce puhelun poistuminen; Odota 0,2 sekuntia puhelun katkaisu incf dis4; Päivitä laskuri movf dis4, W; Tarkista ylivuoto xorlw 0x8A; 10 7-seg? btfss TILA, Z paluu; Ei, palaa skannaukseen. movlw h'80 '; Kyllä, nollaa näyttö. movwf dis4 returnsw5debounce puhelun poistuminen; Odota 0,2 sekuntia puhelun katkaisu incf dis5; Päivitä laskuri movf dis5, W; Tarkista ylivuoto xorlw 0x9A; 10 7-seg? btfss TILA, Z paluu; Ei, palaa skannaukseen. movlw h'90 '; Kyllä, nollaa näyttö. movwf dis5 returnsw6debounce puhelun poistuminen; Odota 0,2 sekuntia puhelun peruutus incf dis6; Päivitä laskuri movf dis6, W; Tarkista ylivuoto xorlw 0xCA; 10 7-seg? btfss TILA, Z paluu; Ei, palaa skannaukseen. movlw h'C0 '; Kyllä, nollaa näyttö. movwf dis6 returnendisr bcf INTCON, T0IF swapf status_temp, w movwf STATUS swapf w_temp, f swapf w_temp, wretfie; ============================ ================================================== =; Aloita tästä!;---------------------------------------------- ---------------------------------alkaa; Määritä I/O -portit clrf PORTA movlw 0x07 movwf CMCON bcf STATUS, RP1 bsf STATUS, RP0 movlw h'00 '; RA -lähdöt, RA5 Ei lähtöä movwf TRISA bcf STATUS, RP0 clrf PORTB bsf STATUS, RP0 movlw h'FF'; RB Tulot movwf TRISB; Aseta sisäinen ajastin bsf PCON, 3; Aseta 4Mhz. movlw h'CF '; TMr0 Sisäinen lähde, esiasteikko TMR0 1: 256 movwf OPTION_REG movlw h'A0 'movwf INTCON; Ota TMR0 -keskeytykset käyttöön, bcf STATUS, RP0; Alusta rekisterit clrf PORTA; Tyhjennä PortA clrf PORTB; Tyhjennä PortB -lähdöt 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 poistuminen; 0,2 s; testivalot, näyttö 8 ???; ====================================== ==========================================; Main; Ottaa syötteitä kytkimiltä, kytkeytyy pois ja käynnistyy näytöistä.;; Tämä päivittää näytöt, @4Mhz TMR0 prescal 1: 4, 1Khz.; Näyttöä 0 käytetään varaamaan käyttämättömälle näytölle. Näyttö 1-6 on langallinen.; Ensinnäkin BCD-7Seg IC on ladattu näyttöarvolla, ja BCD-Dec IC aktivoidaan; näytön valinta.; Toiseksi näytössä pidetään ms-viive.; Kolmanneksi, BCD-Dec IC on deaktivoitu… näyttö0 valitaan sammuttamaan näyttö;; Tämä toistetaan jokaiselle kuudesta näytöstä ja silmukka.; ISR käsittelee kytkimen tunnistusta 15 Hz: n taajuudella.; -------------- -------------------------------------------------- --------------- main; Disp1 movf dis1, 0 movwf PORTA call ledon goto main; ===================== ================================================== ========; Ledon; LED -virran kytkeytymisaika.; 6 näyttöä-> 1/6 käyttöjakso 1Khz = 166 jaksoa; ----------------------------------- -------------------------------------------- ledon movlw.54 movwf count1ledloop decfsz count1, F goto ledloopreturn; ============================================== ====================================; Palautumissignaali; 4 sykliä ladata ja soittaa, 2 sykliä palata.; 4Mhz Tc:: count2 = 255-> 0,2 s; -------------------------------------- ----------------------------------------- palautus movlw.255; Viive 1/5 sekuntia. movwf count2 puhelu pon_wait return; -------------------------------------------- -----------------------------------; count1 = 255d:: 775 sykliä 0, + 3 sykliä palata.; --------------------------------- ---------------------------------------------- pon_waitbig_loopS movlw.255 movwf count1short_loopS decfsz count1, F goto short_loopS decfsz count2, F goto big_loopSreturnend3 CIRCUITI -laitteessa oli alun perin 470 ohmin vastukset kustakin näytönohjainlinjasta 74LS47- ja CD4028 -käyttölinjoista. Testasin kuitenkin piirini virrankulutusta ja huomasin, että se vetää vain ~ 31mA. Ja koska näyttöjen todellinen ohjain on suoraan 74LS47: stä ja käyttöönotto on toisesta IC: stä, nopeat keskiarvo- ja huippuvaatimukset sekä vastaavat tietolomakkeet ….. Vedin vastukset irti leipälevystä ja löysin 1 mA: n eron ! Näyttää siltä, että suoraan CA -linjan ajaminen 4028: sta samalla kun ajaa suoraan kaikkia segmenttejä, on OK! … Tavallaan.:) Minulla oli koodissa häiriö, joka ei tyhjentänyt rekisteriäni, kun painiketta painettiin, minkä seurauksena viimeisessä näytössä oli kaksi segmenttiä erittäin kirkkaasti, kun painiketta painettiin. Tämä oli huono. Rekisterin tyhjentäminen kuitenkin korjasi tämän ongelman, ja jatkuva tehontarkistus vahvistaa, että se kuluttaa jatkuvasti noin 30 mA. Tämän pitäisi antaa minulle (perustuen aiempiin kokemuksiin vastaavista piireistä) ~ 20 tuntia käyttöaikaa käyttämällä 1 9 V: n akkua (500 mAh/30 mAh 5 V: n säädön mukaan) jos jotain tapahtui, pitkällä aikavälillä.

Vaihe 4: Piirilevyjuotos

PCB -juotos
PCB -juotos

Aina kun pääsen tähän pisteeseen projektissani, viivyttelen abitia. Aluksi aioin kääriä tämän jutun langalla, mutta luopuin siitä nopeasti. Aluksi ajattelen: "Muutama johto juotettavaksi, ei iso juttu" … sitten, kun projekti on valmis juotettavaksi, ajattelen, " Minun olisi pitänyt joko lähettää prototyyppi tai syövyttää oma lautani ". En ole PCB -etsaukseen (vielä) enkä halunnut maksaa $$ saadaksesi levyn, joten……Minä vietin noin 3 tuntia juottamalla tämän asian. Se on noin 150 johtoa, joten se on 300 juotospistettä ja juotosiltojen kosketus. Joka tapauksessa, tässä on taulun takapuoli …. Kesti 20 minuuttia ajattelua, koska näyttö näytti väärän numeron loogisessa mallissa, joka minun piti tulkita. Sen jälkeen löysin lyhyen ja bam! Se toimi täydellisesti.

Vaihe 5: Johtopäätös

Johtopäätös
Johtopäätös

SE TOIMI! Tämä projekti kesti noin; ~ 2 viikkoa ajatella ja lähettää sähköpostitse hienoja kohtia pyynnön esittäjälle, ~ 3 tuntia koodin viimeistelyä ja virheenkorjausta, ~ 4 tuntia leipälevyä ja virheenkorjausta, ~ 3 tuntia juottoa Vain 3 IC: n avulla on mahdollista Charlieplex 6 7-segmenttiset LEDit Virrankulutus on noin 30 mA tällä rakenteella, mikä ei ole huono, jos sanon niin itse. Epäilen, että voitaisiin käyttää enemmän 7-segmenttisiä LED-valoja, mutta en ole työntänyt kirjekuorta. voidaan soveltaa lähes mihin tahansa sovellukseen käyttämällä 7-segmenttisiä LED-valoja; lämpömittari, kello, tekstinäyttö jne. Jos sinulla on hankala koodi, sinulla voi olla liikkuva näyttö tai kuvia … ehkä jopa tukikohta POV (visio) -projektille. ja aseta lauta paikalle niin kuin hän parhaaksi näkee. Jos/kun tämä on tehty, lataan kuvan. Mutta mitä tulee piiriin, tämä näyttää olevan rakennettu tilauksesta!

Suositeltava: