Sisukord:

BloodBowli pöörde loendur 7-segmendiliste LED-ide abil: 5 sammu
BloodBowli pöörde loendur 7-segmendiliste LED-ide abil: 5 sammu

Video: BloodBowli pöörde loendur 7-segmendiliste LED-ide abil: 5 sammu

Video: BloodBowli pöörde loendur 7-segmendiliste LED-ide abil: 5 sammu
Video: Счетчик оборотов, использование arduino 2024, November
Anonim
BloodBowli pöörde loendur 7-segmendiliste LED-ide abil
BloodBowli pöörde loendur 7-segmendiliste LED-ide abil

See projekt oli mõeldud BloodBowli mängude pöördloendurile, kasutades kuut Charlieplexed 7-segmendilist LED-i.

1. samm: kontseptsioon

Mõiste
Mõiste

Üks mu sõber küsis minult ideid, kuidas oma lauamängu jaoks Bloodbowl Turn letti ehitada. Kuna ma ei teadnud, mis see oli ja mida ta soovis, võttis tükk aega aega, enne kui otsustasin, kas ja kuidas ma seda teen. Ma pidin kõigepealt ette kujutama, mida ta tahab, nii et alustasin kontseptsioonikunstiga (pilt). Põhiidee on 3 vajutusnuppu, mis juhivad 3 LED -i ja see asetatakse kohandatud ehitatud torni. Ainus suur soov oli, et 4 parimat kuvarit loendataks 0 -st 8 -ni ja lähtestataks ning alumine 2 kuvarid loendavad 8 -st 0 -ni ja liiguvad tagasi. Ma teeksin vooluringi lõpule ja ta täidaks torni.

2. samm: disaini ja osade loend

Disain ja osade loend
Disain ja osade loend

Kuna kontseptsioon nõudis kuut 7-segmendilist LED-i ja mul oli käepärast mõni 8-bitine mikrokiibiga PIC, uurisin, kuidas PIC-sid LED-ide juhtimiseks kasutada. Leidsin selle lingi https://www.mikroe.com/en/books /picbook/7_08chapter.htm, mis ütleb, et "niimoodi pääseb ligi kuuele kuvarile, ilma et see mõjutaks iga ekraani heledust." Ma pidasin seda oma projekti osaks väljakutseks ja uurimiseks. Esimene asi, mida ma tegin, oli haarata oma kastist mõned hõõguvad 7-segmendilised kuvarid ja näha, kuidas need toimivad. Halvad uudised. Minu valitud osad ei käitunud nii, nagu ma soovisin. Segment süttib vajadusel leivaplaadil, kuid lekkevool jaotati ülejäänud 6 segmendile. Ma mõistsin, et hõõglambid ei pruugi olla õige tee, või ma pidin neid teistmoodi kasutama. Nii et lihtsuse huvides kontrollisin, et 7-segmendilised LED-id, mis mul olid käepärast, töötaksid leivalaua jaoks ja tellisin mõned tavalised anoodkuvarid. Teine asi, mida ma pidin tegema, oli minu kujunduse paigutus ja koodiga töötamise alustamine. Pildil on minu vooluring. Mitte palju, sest PIC -i kood hoolitseb multipleksimise eest … errr Charlieplexing. Märkus. KÕIK 6 kuvaril on draiveri IC -lt samad read. Valija IC võimaldab iga ekraani, 1 korraga ja PIC värskendab vastavalt 7-segmendilisi ridu. Väga lihtne idee. Pärast seda on vaja ainult koodi ja riistvara valmimist. Osade loend Pärast kolme väikest Digi-Key tellimust konkreetsete komponentide üle otsustades oli mul kõik vajalik olemas (mõned asjad käepärast); 1 ~ 3 "x4 "PCB6 väikesed vajutusnuppude lülitid (NO) 1 74LS47, 7-segmendiline ekraan IC1 PIC16F627 1 CD4028, 1/10 valija IC 6 10KOhm takistid1 470Ohm takisti1 traatpool. Ma kasutasin erinevaid värve ja näpunäiteid, kuid see oli ainult mina.1 78L05 5V regulaator1 9V akuklamber1 9V aku1 väike lüliti (toite sisse/välja lülitamiseks) Pean seda mõõdukalt keerukaks projektiks, mis tuleneb; 1) vajalik mikroprotsessori kood2) jootmine ja leivalaud 3) Disaini optimeerimine. Ükski neist probleemidest ei ole iseenesest liiga keeruline, kuid algaja jaoks võib see kõik kogemusteta edasi minna. Seadme, jootmisjaama jne põletamiseks on vaja riistvaraprogrammeerijat. ESIMENE, mida keegi võib märgata, on see, et 7-segmendilistel LED-idel EI OLE seeria (voolu piiravaid) takistid! Lubage mul seda kiiresti käsitleda, teatades, et minu esialgne kujundus oli need olemas … kuid lugege selgitamiseks järgmist sammu!

3. samm: leivalaud ja mikrokood

Leivalaud ja mikrokood
Leivalaud ja mikrokood

Leivalaud oli selleks kohustuslik. Näidatud on minu üldine leivaplaat, kuid selle projekti suuruse jaoks kasutasin tegelikult seda ja väiksemat leivaplaati, kuna seal oli palju juhtmeid, mis tuli eraldada. Esiteks katsetasin ühte 7-segmendilist LED-i, kasutades algkoodi. See kinnitas 3 asja; 1) IC -de juhtmestik kinnitati heaks! 2) Juhtisin mind oma koodi optimeerima ja lõplikult vormistama. 3) Sain aru, et ma ei vaja praeguseid piiravaid takistusi! 1 WIRING Nagu öeldud, leiti minu skemaatiline disain minu koodiga töötamiseks, kuna valgusdiood sirviks numbreid ühe nupuvajutusega lüliti abil, nii et see kinnitas minu koodi ja paigutuse. Palju ei nõutud, kuid leivalaud kinnitas, et olen heas vormis.2 CODEI -l oli algselt minu kood seatud peamise rutiiniga nuppude skannimiseks ja numbrid ISR (Interrupt Service Rutin) kuvavad,. Pärast leivatööde testimist muutsin rutiini vastupidiseks, nii et enamus ajast kuvati pidevalt numbreid ja ISR -i nuppude kontrollimiseks. Põhjus, miks ma seda tegin, oli lihtsalt pidev kuvamine, kuna PIC töötab sisemise 4Mhz kellaga, kaotan nuppude otsimiseks väga vähe aega. Pole hullu … sõltub ainult sellest, kuidas soovite koodi teha ja mis on iga rakenduse jaoks kõige mõttekam. Selle jaoks on kuvamine oluline, nii et panin selle põhirutiini. Kui mu esimesed osad saabusid (kõik 6 näidikut!), Lõpetasin leivaplaadi juhtmestiku ja leidsin teise probleemi. Nupule vajutamisel oli minu koodil lohakasid registreid, mida ei kustutatud ja ISR põhjustas mõningaid väiksemaid tõrkeid ekraanil. = ======================== ================================================== =====; Pöörde loendur;; -----------; Dsply3 Dsply2; Dsply4 Dsply1; Led1 Led3; A5 | 4 15 | A6 - Led2; Vss | 5 14 | Vdd; Nupp1 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;; ================================== ==============================================; Revision History & Notes:; V1.0 Esialgne päis, kood 3/30/09;;; (C) 5/2009; Seda koodi võib kasutada isiklikuks õppimiseks/rakendamiseks/muutmiseks.; Selle koodi mis tahes kasutamine kaubanduslikes toodetes rikub seda tasuta tarkvara väljalaset..; ------------------------------------------------ -------------------------------#sisaldavad P16F627A. INC; ============= ================================================== ================; Määrab; ------------------------------------------------ -------------------------------; ================== ================================================== ===========; Andmed; ------------------------------------------------ -------------------------------; Aja hoidmise muutujate arv ================================================== =======; Lähtesta vektorid;; Kontrollige seadistust. BITS ENNE PÕLETAMIST !!!; INTOSC; MCLR: LUBATUD; PWRUP: LUBATUD; KÕIK MUUD: LUBATUD !!;; ------------------------------------------ ------------------------------------- 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 SIIN; Kontrollige PB0-PB5 lülitid btfsc PORTB, 0; Saate SW1 kõne sw1debounce btfsc PORTB, 1; Saate SW1 kõne sw2debounce btfsc PORTB, 2; Saate SW1 kõne sw3debounce btfsc PORTB, 3; Saate SW1 kõne sw4debounce btfsc PORTB, 4; Saate SW1 kõne sw5debounce btfsc PORTB, 5; Saate SW1 kõne sw6debounce goto endisrsw1debounce kõne debounce; Oodake 0,2 s kõne tühistamine incf dis1; Uuenda loendit movf dis1, W; Kontrollige ülevoolu xorlw 0x1A; 10 7-segmendil? btfss STATUS, Z return; Ei, naaske skannimise juurde. movlw h'10 '; Jah, lähtestage ekraan. movwf dis1 returnsw2debounce kõne debounce; Oodake 0,2 sek kõne tühistamine incf dis2; Uuenda loendit movf dis2, W; Kontrollige ülevoolu xorlw 0x4A; 10 7-segmendil? btfss STATUS, Z return; Ei, naaske skannimise juurde. movlw h'40 '; Jah, lähtestage ekraan. movwf dis2 returnsw3debounce kõne debounce; Oodake 0,2 sek kõne tühistamine incf dis3; Uuenda loendit movf dis3, W; Kontrollige ülevoolu xorlw 0x5A; 10 7-segmendil? btfss STATUS, Z return; Ei, naaske skannimise juurde. movlw h'50 '; Jah, lähtestage ekraan. movwf dis3 returnsw4debounce kõne debounce; Oodake 0,2 sek kõne tühistamine incf dis4; Uuenda loendit movf dis4, W; Kontrollige ülevoolu xorlw 0x8A; 10 7-segmendil? btfss STATUS, Z return; Ei, naaske skannimise juurde. movlw h'80 '; Jah, lähtestage ekraan. movwf dis4 returnsw5debounce kõne debounce; Oodake 0,2 sek kõne tühistamine incf dis5; Uuenda loendit movf dis5, W; Kontrollige ülevoolu xorlw 0x9A; 10 7-segmendil? btfss STATUS, Z return; Ei, naaske skannimise juurde. movlw h'90 '; Jah, lähtestage ekraan. movwf dis5 returnsw6debounce kõne debounce; Oodake 0,2 sek kõne tühistamine incf dis6; Uuenda loendit movf dis6, W; Kontrollige ülevoolu xorlw 0xCA; 10 7-segmendil? btfss STATUS, Z return; Ei, naaske skannimise juurde. movlw h'C0 '; Jah, lähtestage ekraan. movwf dis6 returnendisr bcf INTCON, T0IF swapf status_temp, w movwf STATUS swapf w_temp, f swapf w_temp, wretfie; ============================ ================================================== =; Alusta siit!;---------------------------------------------- --------------------------------- algus; Konfigureeri I/O pordid clrf PORTA movlw 0x07 movwf CMCON bcf STATUS, RP1 bsf STATUS, RP0 movlw h'00 '; RA väljundid, RA5 Väljund puudub movwf TRISA bcf STATUS, RP0 clrf PORTB bsf STATUS, RP0 movlw h'FF'; RB Sisendid movwf TRISB; Seadistage sisemine taimer bsf PCON, 3; Seadke 4Mhz. movlw h'CF '; Tmr0 Sisemine allikas, eelskaala TMR0 1: 256 movwf OPTION_REG movlw h'A0 'movwf INTCON; Luba TMR0 katkestused, bcf STATUS, RP0; Initialize Registers clrf PORTA; Kustuta portA clrf PORTB; Kustuta PortB väljundid 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 kõne tagasilöök; 0,2 sekundit; test -LED -id, ekraan 8 ???; ====================================== ==========================================; Peamine; Saab sisendeid lülititelt, tagasilöökidelt ja sisselülitamise näidikutelt.;; See värskendab kuvasid, @4Mhz TMR0 prescal 1: 4, 1Khz sagedusega.; Ekraani 0 kasutatakse kasutamata ekraanile eraldamiseks. Ekraan 1-6 on juhtmega.; Esiteks laaditakse BCD-7Seg IC ekraaniväärtusega ja AND BCD-Dec IC aktiveeritakse; ekraani valimine.; Teiseks, kuvamiseks hoitakse ms viivitust.; Kolmandaks, BCD-Dec IC on deaktiveeritud … kuvar 0 lülitatakse ekraani väljalülitamiseks;; Seda korratakse iga kuue kuvari puhul ja lülitatakse silmusesse.; ISR haldab lülitite tuvastamist sagedusel 15 Hz. -------------------------------------------------- --------------- peamine; Disp1 movf dis1, 0 movwf PORTA kõne ledon goto main; ===================== ================================================== ========; Ledon; LED -toite sisselülitamise aeg; 6 näidikut-> 1/6 töötsükkel 1Khz = 166 tsüklit; ----------------------------------- -------------------------------------------- ledon movlw.54 movwf count1ledloop decfsz count1, F goto ledloopreturn; =========================================== ====================================; Tagasilöögisignaal; 4 tsüklit laadimiseks ja helistamiseks, 2 tsüklit tagastamiseks.; 4Mhz Tc:: count2 = 255-> 0,2 s; -------------------------------------- ----------------------------------------- debounce movlw.255; Viivitus 1/5 sekundit tagasi. movwf count2 helista tagasi pon_wait; -------------------------------------------- -----------------------------------; count1 = 255d:: 775 tsüklit kuni 0, + 3 tsüklit tagasi.; --------------------------------- ---------------------------------------------- pon_waitbig_loopS movlw.255 movwf count1short_loopS decfsz count1, F goto short_loopS decfsz count2, F goto big_loopSreturnend3 CIRCUITI -l oli algselt 470Ohm takistid igalt kuvari draiverirealt 74LS47 ja CD4028 lubamisliinilt. Siiski testisin oma vooluahela voolutugevust ja leidsin, et see tõmbab ainult ~ 31mA. Ja kuna kuvarite tegelik draiver pärineb otse 74LS47 -st ja lubamine on teisest IC -st, siis kiire jooksmine keskmistest ja tipphetkedest ning vastavatest andmelehtedest ….. Tõmbasin takistid leivaplaadilt maha ja leidsin 1mA erinevuse ! Tundub, et otse CA -liini juhtimine 4028 -lt, samal ajal kõigi segmentide otsejuhtimine on OK! …mingis mõttes.:) Mul oli koodis tõrge, mis ei kustutanud minu registreid nupu vajutamisel, mistõttu viimasel kuval oli nupu vajutamisel 2 segmenti väga eredalt valgustatud. See oli halb. Kuid registri tühjendamine lahendas selle probleemi ja pidev võimsuskontroll kinnitab, et see on pidevalt umbes 30 mA. See peaks andma mulle (tuginedes varasematele sarnaste vooluahelate kogemustele) ~ 20 tundi tööaega, kasutades 1 9 V akut (500 mAh/30 mAh 5 V regulatsiooni alusel) kui midagi juhtus, pikaajaline.

4. samm: trükkplaatide jootmine

PCB jootmine
PCB jootmine

Iga kord, kui oma projekti sellesse punkti jõuan, lükkan edasi. Alguses kavatsesin selle asja traadist mähkida, kuid jätsin selle idee kiiresti maha. Alguses arvan, et "paar juhet jootmiseks, pole suurt probleemi" … siis, kui mu projekt on jootmiseks valmis, mõtlen ma, " Ma oleksin pidanud saatma protoplaadi või söövitama oma tahvli ". Ma ei tegele PCB söövitamisega (veel) ja ei taha maksta $$ selle eest, et plaat oleks tehtud, nii et…. Jah….. Mul kulus selle asja jootmiseks umbes 3 tundi. See on umbes 150 juhtmest, nii et see on 300 jootepunkti, pluss jootmissildade puudutused. Igatahes, siin on kujutatud tahvli tagumine külg…. Jah… jama, kuid kui see kõik oli tehtud, oli mul ainult 1 jootmislühike. Mõtlesin 20 minutit, kuna ekraan näitas vale numbrit loogilises mustris, mille pidin dešifreerima. Pärast seda leidsin lühikese ja bam! See töötas ideaalselt.

5. samm: järeldus

Järeldus
Järeldus

See toimis! See projekt võttis aega umbes ~ 2 nädalat, et mõelda ja saata e -posti teel trahvipunktid taotlejale, ~ 3 tundi koodi lõpetamist ja silumist, ~ 4 tundi leivalauda ja silumist, ~ 3 tundi jootmist Ainult 3 IC -d kasutades on võimalik Charlieplex 6 7-segmendilised valgusdioodid. Selle disainiga on voolutugevus umbes 30 mA, mis pole halb, kui ma seda ise ütlen. Ma kahtlustan, et võiks kasutada rohkem 7-segmendilisi LED-e, kuid pole ümbrikku lükanud. See idee võib rakendatakse peaaegu igas rakenduses, kasutades 7-segmendilisi LED-e; termomeeter, kell, tekstiekraan jne. Mõne keerulise koodiga võib teil olla liikuv ekraan või pildid… võib -olla isegi alus POV (nägemise püsivuse) projektile. Lõplik rakendamine jääb minu sõbrale oma torni ehitamiseks ja asetage tahvel oma äranägemise järgi. Kui/kui see on tehtud, laen pildi üles. Kuid vooluringi osas näib see olevat ehitatud tellimuse järgi!

Soovitan: