INHOUDSOPGAWE:

BloodBowl-toonbank met 7-segment-LED's: 5 stappe
BloodBowl-toonbank met 7-segment-LED's: 5 stappe

Video: BloodBowl-toonbank met 7-segment-LED's: 5 stappe

Video: BloodBowl-toonbank met 7-segment-LED's: 5 stappe
Video: Gregory Chaitin: Complexity, Metabiology, Gödel, Cold Fusion 2024, Julie
Anonim
BloodBowl-toonbank met 7-segment-LED's
BloodBowl-toonbank met 7-segment-LED's

Hierdie projek was vir 'n BloodBowl-toonbank met ses Charlieplexed 7-segment LED's.

Stap 1: Konsep

Konsep
Konsep

'N Vriend van my het my uitgevra oor idees vir die bou van Bloodbowl Turn counter vir sy bordspel. Omdat ek nie geweet het wat dit is en wat hy wil nie, het dit 'n rukkie geneem om te besluit of en hoe ek dit gaan doen. Ek moes eers 'n idee hê van wat hy wil hê, en ek het begin met konsepkuns (prentjie). Die basiese idee is om drie drukknoppies te hê, elk met 3 LED's, en dit sal in 'n pasgemaakte toring geplaas word. vertonings tel af van 8 tot 0 en ry terug. Ek sou die kring voltooi en hy sou die toring voltooi.

Stap 2: Ontwerp en onderdele lys

Ontwerp en onderdele lys
Ontwerp en onderdele lys

Aangesien die konsep 6 LED's met 7 segmente vereis het, en ek 'n paar 8-bis Microchip PIC's byderhand het, het ek ondersoek ingestel na die gebruik van die PIC's om LED's te beheer. Ek het hierdie skakel gevind https://www.mikroe.com/en/books /picbook/7_08chapter.htm wat lui: "U kan tot 6 skerms so kry sonder dat die helderheid van elke skerm beïnvloed word." Ek beskou dit as 'n uitdaging en iets om te ondersoek as deel van my projek. Die eerste ding wat ek gedoen het, was om 'n paar gloeilampe van 7 segmente uit my boks te haal en te sien hoe dit sou werk. Slegte nuus. Die spesifieke dele wat ek gekies het, gedra hulle nie soos ek wou nie. Die segment sou op die broodbord, wanneer nodig, brand, maar lekstroom is na die ander 6 segmente versprei. Ek het besef dat gloeilampe moontlik nie die regte pad is nie, of ek moes dit op 'n ander manier gebruik. Dus, vir die eenvoud, het ek geverifieer dat die 7-segment-LED's wat ek byderhand het, sal werk vir broodplank, en ek het 'n paar algemene anode-skerms bestel. Die tweede ding wat ek moes doen, was om my ontwerp op te stel en aan die kode te begin werk. Op die foto is my kring. Nie veel nie, want die kode in die PIC sorg vir die multiplexing … errr Charlieplexing. Let wel: ALLE 6 skerms het dieselfde lyne van die bestuurder -IC. Die selector IC stel elke skerm een vir een in staat, en die reëls van 7 segmente word dienooreenkomstig deur die PIC opgedateer. Baie eenvoudige idee. Daarna is die voltooiing van kode en hardeware al wat nodig was. "PCB6 klein drukknoppies skakelaars (NO) 1 74LS47, 7-segment skerm IC1 PIC16F627 1 CD4028, 1 van 10 selector IC 6 10KOhm weerstande1 470Ohm weerstand1 spoel draad. Ek het verskillende kleure en meters gebruik, maar dit was net ek.1 78L05 5V -reguleerder1 9V -batteryklem 1 9V -battery1 klein skakelaar (vir aan-/afskakel) Ek beskou dit as 'n matig komplekse projek, as gevolg van; 1) Mikroprosessorkode benodig2) Soldeer en breadboarding 3) Ontwerpoptimalisering. Nie een van hierdie probleme op sigself is te ingewikkeld nie, maar dit kan baie vir die beginner baie wees om dit sonder enige ervaring aan te pak. 'N Hardeware-programmeerder is nodig om die toestel, soldeerstasie, ens. Te verbrand … Die EERSTE ding wat iemand kan agterkom, is dat die LED's van die 7 segmente NIE reeksweerstande (stroombeperkend) het nie! Laat ek dit vinnig aanpak deur te sê dat my oorspronklike ontwerp dit bevat het … maar lees die volgende stap vir verduideliking!

Stap 3: Breadboarding en mikrokode

Breadboarding en mikrokode
Breadboarding en mikrokode

Breadboard was 'n moet hiervoor. My algemene broodbord word getoon, maar vir die grootte van hierdie projek het ek eintlik hierdie een en 'n kleiner broodbord gebruik, want daar was baie drade wat uitmekaar geplaas moes word. Eerstens het ek 'n enkele LED met 7 segmente getoets met die aanvanklike kode. Dit het 3 dinge bevestig; 1) Die bedrading van die IC's is goed geverifieer! 2) het my gelei om my kode te optimaliseer en te finaliseer. 3) het my laat besef dat ek nie die huidige beperkende weerstande nodig het nie! 1 WIRING om met my kode te werk, aangesien die LED deur 'n drukknopskakelaar deur getalle sou blaai, sodat my kode en uitleg geverifieer is. Nie veel was nodig nie, maar broodplanking het bevestig dat ek in 'n goeie toestand was. Na broodbordtoetse het ek die roetines omgekeer, sodat die meeste van die tyd voortdurend getalle vertoon en die ISR om na knoppies te kyk. Die rede waarom ek dit gedoen het, was net om 'n konstante vertoning te hê, aangesien die PIC met 'n interne 4Mhz -horlosie werk, verloor ek baie min tyd om na knoppies te soek. Dit maak nie saak nie … hang net af van hoe u die kode wil doen en wat die meeste sin vir elke toepassing is. Hiervoor is die vertoning belangrik, en ek het dit in die hoofroetine geplaas. Toe my eerste dele aankom (al 6 skerms!), Het ek die bedraad van die broodbord voltooi en 'n ander probleem gevind. Toe ek op die knoppie druk, het my kode 'n paar slordige registers gehad wat nie skoongemaak is nie, en die ISR het geringe vertonings veroorsaak.; ========================= ====================================================== =====; Draai toonbank;; -----------; Dsply3 Dsply2; Dsply4 Dsply1; Led1 Led3; A5 | 4 15 | A6 - Led2; Vss | 5 14 | Vdd; Knoppie1 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;; ===================================== ==================================================; Hersieningsgeskiedenis en aantekeninge:; V1.0 Aanvanklike kop, kode 3/30/09;;; (C) 5/2009; Hierdie kode kan gebruik word vir persoonlike leer/toepassing/wysiging.; Enige gebruik van hierdie kode in kommersiële produkte oortree hierdie freeware -uitgawe.; Vir vrae/kommentaar, kontak circuit dot mage by yahoo dot com.; ------------------------------------------------- -------------------------------#sluit P16F627A. INC in; =============== ====================================================== ==================; Definieer; ------------------------------------------------- -------------------------------; ==================== ====================================================== ============; Data; ------------------------------------------------ -------------------------------; Tyd hou veranderlikes tel1 ewe 20 tel2 ewen 21 dis1 ewe 22dis2 ewen 23dis3 ekw 24dis4 ewe 25dis5 ewe 26dis6 ewe 27w_temp ekw 28status_temp ekw 29ISRCNTR ewe 2A; ======================= ====================================================== ========; Stel vektore terug;; TEKEN KONFIG. BITTE VOOR BRANDING !!!; INTOSC; MCLR: GEMAKKELIK; PWRUP: GEMAKKELIK; ALLE ANDER: UITGESKAKELD !!;; ------------------------------------------ ------------------------------------- RESET_ADDR EQU 0x00 ISR_ADDR EQU 0x04 org RESET_ADDR begin; == ====================================================== ==============================; ISR;; ----------------------------------------------- -------------------------------- org ISR_ADDR movwf w_temp swapf STATUS, w movwf status_temp;; ISR HIER; Gaan PB0-PB5-skakelaars na btfsc PORTB, 0; Gaan SW1 -oproep na sw1debounce btfsc PORTB, 1; Gaan SW1 -oproep na sw2debounce btfsc PORTB, 2; Gaan SW1 -oproep na sw3debounce btfsc PORTB, 3; Gaan SW1 -oproep na sw4debounce btfsc PORTB, 4; Kontroleer SW1 -oproep sw5debounce btfsc PORTB, 5; Gaan SW1 -oproep sw6debounce na endisrsw1debounce call debounce; Wag 0.2 sek oproep debounce incf dis1; Werk teller movf dis1, W; Kyk vir oorloop xorlw 0x1A; 10 op 7-seg? btfss STATUS, Z terug; Nee, keer terug na die skandering. movlw h'10 '; Ja, stel die skerm terug. movwf dis1 gee terugw2debounce oproep debounce; Wag 0.2 sek oproep debounce incf dis2; Dateer teller movf dis2, W op; Kyk vir oorloop xorlw 0x4A; 10 op 7-seg? btfss STATUS, Z terug; Nee, keer terug na die skandering. movlw h'40 '; Ja, stel die skerm terug. movwf dis2 gee terugw3debounce oproep debounce; Wag 0.2 sek oproep debounce incf dis3; Opdateer teller movf dis3, W; Kyk vir oorloop xorlw 0x5A; 10 op 7-seg? btfss STATUS, Z terug; Nee, keer terug na die skandering. movlw h'50 '; Ja, stel die skerm terug. movwf dis3 gee terugw4debounce oproep debounce; Wag 0.2 sek oproep debounce incf dis4; Opdateer teller movf dis4, W; Kyk vir oorloop xorlw 0x8A; 10 op 7-seg? btfss STATUS, Z terug; Nee, keer terug na die skandering. movlw h'80 '; Ja, stel die skerm terug. movwf dis4 gee terugw5debounce oproep debounce; Wag 0.2 sek oproep debounce incf dis5; Opdateer teller movf dis5, W; Kyk vir oorloop xorlw 0x9A; 10 op 7-seg? btfss STATUS, Z terug; Nee, keer terug na die skandering. movlw h'90 '; Ja, stel die skerm terug. movwf dis5 returnw6debounce call debounce; Wag 0.2 sek oproep debounce incf dis6; Dateer toonbank movf dis6, W op; Kyk vir oorloop xorlw 0xCA; 10 op 7-seg? btfss STATUS, Z terug; Nee, keer terug na die skandering. movlw h'C0 '; Ja, stel die skerm terug. movwf dis6 returnendisr bcf INTCON, T0IF swapf status_temp, w movwf STATUS swapf w_temp, f swapf w_temp, wretfie; ============================== ====================================================== =; Begin hier!;---------------------------------------------- --------------------------------- begin; Config I/O -poorte clrf PORTA movlw 0x07 movwf CMCON bcf STATUS, RP1 bsf STATUS, RP0 movlw h'00 '; RA -uitsette, RA5 Geen uitset movwf TRISA bcf STATUS, RP0 clrf PORTB bsf STATUS, RP0 movlw h'FF; RB Insette movwf TRISB; Stel interne timer bsf PCON, 3; Stel op 4Mhz. movlw h'CF '; Tmr0 Interne bron, voorafgroot TMR0 1: 256 movwf OPTION_REG movlw h'A0 'movwf INTCON; Aktiveer TMR0 -onderbrekings, bcf STATUS, RP0; Initialiseer registers clrf PORTA; Maak PortA clrf PORTB skoon; Maak PortB -uitsette skoon 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 oproep verswak; 0.2 sek.; Toets LED's, vertoon 8 ???; ======================================== ============================================; Hoof; Kry insette van skakelaars, debounces en incriments -skerms.;; Dit werk die skerms op, by 4Mhz met TMR0 prescal 1: 4, teen 'n 1Khz -koers.; Display 0 word gebruik om aan 'n ongebruikte skerm toe te ken. Skerm 1-6 is bedraad.; Eerstens word BCD-7Seg IC gelaai met vertoningswaarde, en BCD-Des IC is geaktiveer vir; vertoonkeuse.; Tweedens word 'n vertraging van ms vir vertoning gehou.; Derde, BCD-Des IC is gedeaktiveer … display0 is gekies om die skerm af te sluit;; Dit word herhaal vir elk van die 6 skerms en herhaal.; ISR hanteer skakelaarswaarneming teen 'n frekwensie van 15Hz. -------------------------------------------------- --------------- main; Disp1 movf dis1, 0 movwf PORTA bel ledon gaan na main; ======================= ====================================================== =========; Ledon; Vestigingstyd vir LED -krag aan; 6 skerms-> 1/6 werksiklus by 1Khz = 166 siklusse; ----------------------------------- -------------------------------------------- ledon movlw.54 movwf count1ledloop decfsz count1, F goto ledloopreturn; ============================================= =========================================; Afbreeksein; 4 siklusse om te laai en te bel, 2 siklusse om terug te keer.; 4Mhz Tc:: count2 = 255-> 0,2 sek; -------------------------------------- ----------------------------------------- debounce movlw.255; Vertraag vir 1/5 sekonde terugslag. movwf count2 bel pon_wait terug; -------------------------------------------- -----------------------------------; count1 = 255d:: 775 siklusse na 0, + 3 siklusse om terug te keer.; --------------------------------- ---------------------------------------------- pon_waitbig_loopS movlw.255 movwf count1short_loopS decfsz count1, F goto short_loopS decfsz count2, F goto big_loopSreturnend3 CIRCUITI het oorspronklik 470Ohm weerstande van elke display driver line van die 74LS47 en CD4028 enable line gehad. Ek het egter my stroombaan se huidige trekking getoets en gevind dat dit slegs ~ 31mA trek. En aangesien die werklike bestuurder vir die skerms direk van die 74LS47 afkomstig is en die aktivering van 'n ander IC is, 'n vinnige afname van die gemiddelde en piekvereistes en die onderskeie gegewensblaaie … ! Dit blyk dat dit reg is om die CA -lyn vanaf die 4028 te ry terwyl u al die segmente direk bestuur! …soortvan.:) EK HET 'n fout in my kode gehad wat my registers nie skoongemaak het toe 'n knoppie ingedruk is nie, wat veroorsaak het dat die laaste skerm 2 segmente baie helder verlig het toe 'n knoppie ingedruk is. Dit was erg. Deur die register skoon te maak, is hierdie probleem opgelos, en deurlopende kragkontroles bevestig dat dit konstant ongeveer 30mA trek. Dit behoort my (op grond van vorige ervaring met soortgelyke stroombane) ~ 20 uur se gebruikstyd te gee met behulp van 'n 9V -battery (500mAH/30mAH onder 5V -regulering) … as iets gebeur, op lang termyn.

Stap 4: PCB soldeer

PCB soldeer
PCB soldeer

Elke keer as ek op hierdie punt in my projek kom, vertraag ek dit. Eers het ek hierdie ding met draad toegedraai, maar ek het vinnig die idee laat vaar. Ek dink eers: 'n Paar drade om te soldeer, nie 'n groot probleem nie … dan, teen die tyd dat my projek gereed is om te soldeer, dink ek, ' Ek moes óf gestuur het om 'n protobord te laat maak, of my eie bord te ets. .. Ek het ongeveer 3 uur lank aan hierdie ding gesoldeer. Dit is ongeveer 150 drade, so dit is 300 soldeerpunte, plus touch-ups vir soldeerbrue. In elk geval, hier is die agterkant van die bord op die foto …. Ek het 20 minute gedink, want op die skerm is die verkeerde #getoon in 'n logiese patroon wat ek moes ontsyfer. Daarna het ek die kort, en bam! Dit het perfek gewerk.

Stap 5: Gevolgtrekking

Afsluiting
Afsluiting

DIT WERK! Hierdie projek het ongeveer ~ ongeveer 2 weke geneem om na te dink en e -pospunte na die versoeker te stuur, ~ 3 uur voltooiing van kode en ontfouting, ~ 4 uur broodplank en ontfouting, ~ 3 uur soldeer. Met slegs 3 IC's is dit moontlik om Charlieplex 6 7-segment LED's. Die kragopname is ongeveer 30mA met hierdie ontwerp, wat nie sleg is as ek dit self sê nie. Ek vermoed dat meer 7-segment LED's gebruik kan word, maar het nie die koevert gedruk nie. Hierdie idee kan toegepas word op byna elke toepassing met behulp van 7-segment LED's; termometer, horlosie, teksvertoning, ens. Met 'n moeilike kode kan u 'n bewegende skerm of foto's hê … miskien selfs 'n basis vir 'n POV -projek (volharding van visie). Die laaste implementering word oorgelaat aan my vriend om sy toring te bou en plaas die bord daarin, soos hy wil. As/wanneer dit gedoen is, sal ek 'n foto oplaai. Maar wat die kring betref, blyk dit dat dit op bestelling gebou is!

Aanbeveel: