Taula de continguts:

Comptador de torns BloodBowl mitjançant LED de 7 segments: 5 passos
Comptador de torns BloodBowl mitjançant LED de 7 segments: 5 passos

Vídeo: Comptador de torns BloodBowl mitjançant LED de 7 segments: 5 passos

Vídeo: Comptador de torns BloodBowl mitjançant LED de 7 segments: 5 passos
Vídeo: cKnoor's guide to Blood Bowl 2 - Chapter 3 - Caging and turn management 2024, Desembre
Anonim
Comptador de torns BloodBowl mitjançant LED de 7 segments
Comptador de torns BloodBowl mitjançant LED de 7 segments

Aquest projecte era per a un comptador de torns de joc BloodBowl que utilitza sis LED de 7 segments Charlieplexed.

Pas 1: concepte

Concepte
Concepte

Un amic meu em va preguntar sobre idees per construir el comptador Bloodbowl Turn per al seu joc de taula. Sense saber què era això i què volia, va trigar una estona a decidir si i com ho faria. Primer vaig haver de tenir una idea del que volia, així que vaig començar amb el concept art (imatge). La idea bàsica és tenir 3 botons polsadors, que controlin 3 LED cadascun, i es col·locarien dins d’una torre de construcció personalitzada. les pantalles compten el compte enrere de 8 a 0 i fan un cicle enrere. Jo completaria el circuit i ell completaria la torre.

Pas 2: Disseny i llista de peces

Disseny i llista de peces
Disseny i llista de peces

Com que el concepte requeria 6 LED de 7 segments i tenia alguns PIC de microchip de 8 bits a mà, vaig investigar maneres d’utilitzar els PIC per controlar els LED. Vaig trobar aquest enllaç https://www.mikroe.com/en/books /picbook/7_08chapter.htm que indica "Es pot accedir a fins a 6 pantalles així sense que es vegi afectada la brillantor de cada pantalla". Vaig considerar que era un repte i alguna cosa que cal investigar com a part del meu projecte. El primer que vaig fer va ser agafar algunes pantalles incandescents de 7 segments de la meva caixa i veure com funcionarien. Males notícies. Les parts concretes que he seleccionat no es comportaven com volia. El segment s’il·luminaria quan calgués, a la placa, però el corrent de fuita es distribuïa als altres 6 segments. Em vaig adonar que les pantalles incandescents poden no ser el camí a seguir o que les necessitava d’una altra manera. Així, per simplicitat, vaig comprovar que els LED de 7 segments que tenia a mà funcionarien per a la taula de treball i vaig demanar algunes pantalles ànodes habituals. El segon que havia de fer era dissenyar el meu disseny i començar a treballar amb el codi. A la imatge es mostra el meu circuit. No hi ha gaire, ja que el codi del PIC s’encarrega de la multiplexació … errr Charlieplexing. Nota: LES 6 pantalles tenen les MATEIXES línies de l'IC del controlador. El selector IC habilita cada visualització, 1 a la vegada, i el PIC actualitza les línies de 7 segments en conseqüència. Idea molt senzilla. Després d'això, només calia completar el codi i el maquinari. Llista de peces Després de 3 petites comandes de Digi-Key mentre decidia sobre components específics, tenia tot el que necessitava (amb algunes coses a mà); 1 ~ 3 "x4 "Commutadors de polsador petits PCB6 (NO) 1 74LS47, pantalla de 7 segments IC1 PIC16F627 1 CD4028, 1 de 10 selectors IC 6 resistències 10KOhm1 470Ohm resistència1 bobina de filferro. He utilitzat diversos colors i indicadors, però només he estat jo.1 Regulador de 5V 78L05 1 clip de bateria de 9V 1 bateria de 9V 1 interruptor petit (per encendre / apagar) Considero que és un projecte moderadament complex, a causa de; 1) Es requereix un codi de microprocessador2) Soldadura i breadboarding 3) Optimització del disseny. Cap d'aquests problemes per si mateixos és excessivament complicat, però assumir-los tots sense cap experiència pot ser molt útil per als principiants. Es necessita un programador de maquinari per gravar el dispositiu, l'estació de soldadura, etc. El PRIMER que algú pot notar és que els LED de 7 segments NO tenen resistències de sèrie (limitadores de corrent). Permeteu-me abordar-ho ràpidament, indicant que tenia el meu disseny original … però llegiu el següent pas per obtenir explicació.

Pas 3: Tauler de revisió i codi micro

Breadboarding i micro codi
Breadboarding i micro codi

La taula de pa era imprescindible per a això. Es mostra el meu tauler de suport genèric, però per a la mida d’aquest projecte he fet servir aquest i un tauler de pa més petit, ja que hi havia molts cables que s’havien de separar. En primer lloc, vaig provar un sol LED de 7 segments mitjançant el codi inicial. Això va confirmar 3 coses; 1) El cablejat de les CI es va verificar bé! 2) Em va portar a optimitzar i finalitzar el meu codi. 3) Em va fer adonar-me que no necessitava les resistències limitants actuals. per treballar amb el meu codi, ja que el LED recorreria els números mitjançant un commutador de polsador, de manera que es verificés el meu codi i la meva disposició. No calia gaire, però el taulell de confirmació confirmava que estava en bona forma. 2 CODEI originalment tenia el meu codi establert amb una rutina principal per cercar botons i la ISR (Interrupt Service Routine) mostra els números,. Després de les proves de taulers de revisió, vaig invertir les rutines, de manera que la majoria de les vegades mostrava constantment números i ISR per comprovar si hi havia botons. La raó per la qual ho vaig fer, va ser només per tenir una pantalla constant, ja que el PIC funciona amb un rellotge intern de 4 MHz, perdo molt poc temps buscant botons. No hi ha gran cosa … només depèn de com vulgueu fer el codi i del que tingui més sentit per a cada aplicació. Per a això, la visualització és important, així que ho he posat a la rutina principal. Quan van arribar les meves primeres parts (les 6 pantalles!), Vaig completar el cablejat de la placa de configuració i vaig trobar un altre problema. En prémer el botó, el meu codi tenia alguns registres descuidats que no s’estaven esborrant i l’ISR provocava alguns problemes de visualització menors.; ======================== =================================================== =====; Comptador de torns;; -----------; Dsply3 Dsply2; Dsply4 Dsply1; Led1 Led3; A5 | 4 15 | A6 - Led2; Vss | 5 14 | Vdd; Botó1 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;; ================================== ==============================================; Historial i notes de revisions:; V1.0 Capçalera inicial, Codi 30/03/09;;; (C) 5/2009; Aquest codi es pot utilitzar per a l'aprenentatge / aplicació / modificació personal.; Qualsevol ús d'aquest codi en productes comercials incompleix aquesta versió de programari gratuït..; ------------------------------------------------ ------------------------------- # include P16F627A. INC; ============= =================================================== ================; Defineix; ------------------------------------------------ -------------------------------; ================== =================================================== ===========; Dades; ------------------------------------------------ -------------------------------; Variable de manteniment del temps1 equ 20 count2 equ 21 dis1 equ 22dis2 equ 23dis3 equ 24dis4 equ 25dis5 equ 26dis6 equ 27w_temp equ 28status_temp equ 29ISRCNTR equ 2A; ======================= =================================================== =======; Restableix els vectors;; VERIFICAR CONFIG. BITS ABANS DE CREMAR-SE !!!; INTOSC; MCLR: HABILITAT; PWRUP: HABILITAT; TOTS ELS ALTRES: DESACTIVATS !!;; ------------------------------------------ ------------------------------------- RESET_ADDR EQU 0x00 ISR_ADDR EQU 0x04 org RESET_ADDR anar a començar; == =================================================== ============================; ISR;; ----------------------------------------------- -------------------------------- org ISR_ADDR movwf w_temp swapf STATUS, w movwf status_temp;; ISR AQUÍ; Comproveu els commutadors PB0-PB5 btfsc PORTB, 0; Comproveu SW1 call sw1debounce btfsc PORTB, 1; Comproveu SW1 call sw2debounce btfsc PORTB, 2; Comproveu SW1 call sw3debounce btfsc PORTB, 3; Comproveu SW1 call sw4debounce btfsc PORTB, 4; Comproveu SW1 call sw5debounce btfsc PORTB, 5; Marqueu SW1 call sw6debounce go endisrsw1debounce call debounce; Espereu 0,2 segons de rebounce de trucades incf dis1; Actualitza el comptador movf dis1, W; Comproveu si hi ha desbordament xorlw 0x1A; 10 a 7-seg? btfss ESTAT, retorn Z; No, torna a escanejar. movlw h'10 '; Sí, restableix la pantalla. movwf dis1 retorna w2debounce trucada rebounce; Espereu 0,2 segons rebounce de trucades incf dis2; Actualització del comptador movf dis2, W; Comproveu si hi ha desbordament xorlw 0x4A; 10 a 7-seg? btfss ESTAT, retorn Z; No, torna a escanejar. movlw h'40 '; Sí, restableix la pantalla. movwf dis2 retorna w3debounce trucada rebounce; Espereu 0,2 segons de rebounce de trucades incf dis3; Actualització del comptador movf dis3, W; Comproveu si hi ha desbordament xorlw 0x5A; 10 a 7-seg? btfss ESTAT, retorn Z; No, torna a escanejar. movlw h'50 '; Sí, restableix la pantalla. movwf dis3 retorna w4debounce rebounce trucada; Espereu 0,2 segons de rebounce de trucades incf dis4; Actualitza el comptador movf dis4, W; Comproveu si hi ha desbordament xorlw 0x8A; 10 a 7-seg? btfss ESTAT, retorn Z; No, torna a escanejar. movlw h'80 '; Sí, restableix la pantalla. movwf dis4 retorna w5debounce trucada rebounce; Espereu 0,2 segons de rebounce de trucades incf dis5; Actualitza el comptador movf dis5, W; Comproveu si hi ha desbordament xorlw 0x9A; 10 a 7-seg? btfss ESTAT, retorn Z; No, torna a escanejar. movlw h'90 '; Sí, restableix la pantalla. movwf dis5 retorna w6debounce rebounce trucada; Espereu 0,2 segons de rebounce de trucades incf dis6; Actualitza el comptador movf dis6, W; Comproveu si hi ha desbordament xorlw 0xCA; 10 a 7-seg? btfss ESTAT, retorn Z; No, torna a escanejar. movlw h'C0 '; Sí, restableix la pantalla. movwf dis6 returnendisr bcf INTCON, T0IF swapf status_temp, w movwf STATUS swapf w_temp, f swapf w_temp, wretfie; ============================ =================================================== =; Comença aquí!;---------------------------------------------- ---------------------------------començar; Ports d'E / S de configuració clrf PORTA movlw 0x07 movwf CMCON bcf STATUS, RP1 bsf STATUS, RP0 movlw h'00 '; Sortides RA, RA5 Sense sortida movwf TRISA bcf STATUS, RP0 clrf PORTB bsf STATUS, RP0 movlw h'FF'; Entrades RB movwf TRISB; Estableix el temporitzador intern BSON PCON, 3; Estableix a 4Mhz. movlw h'CF '; Tmr0 Font interna, prescala TMR0 1: 256 movwf OPTION_REG movlw h'A0 'movwf INTCON; Activa les interrupcions TMR0, bcf STATUS, RP0; Inicialitzar Registers clrf PORTA; Esborra PortA clrf PORTB; Esborra les sortides del PortB recompte clrf1 recompte clrf2 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 debounce; 0,2 seg; LED de prova, pantalla 8 ???; ======================================= =========================================; Principal; Obté les entrades de pantalles de commutadors, rebots i increments.;; S'actualitzen les pantalles, @ 4Mhz amb TMR0 prescal 1: 4, a una velocitat d'1Khz.; La pantalla 0 s'utilitza per assignar-la a una pantalla no utilitzada. La pantalla 1-6 està cablejada.; En primer lloc, el BCD-7Seg IC es carrega amb el valor de visualització, I s’activa l’IC BCD-Dec; selecció de la pantalla.; En segon lloc, es manté un retard de ms per a la visualització.; En tercer lloc, BCD-Dec L'IC està desactivat … display0 està seleccionat per apagar la pantalla;; Es repeteix per a cadascuna de les 6 pantalles i es fa en bucle.; ISR maneja la detecció del commutador a una velocitat de 15Hz.; -------------------------------------------------- --------------- principal; Disp1 movf dis1, 0 movwf PORTA ledon goon main; ====================== =================================================== ========; Ledon; Temps de resolució de l’encesa del LED.; 6 pantalles -> 1/6 cicle de treball a 1 Khz = 166 cicles; ----------------------------------- -------------------------------------------- ledon movlw.54 movwf count1ledloop decfsz count1, F goto ledloopreturn; ============================================ ====================================; Senyal de rebut; 4 cicles per carregar i trucar, 2 cicles per tornar.; 4Mhz Tc:: count2 = 255 -> 0,2 seg; -------------------------------------- ----------------------------------------- debounce movlw.255; Retard de rebot de 1/5 de segon. movwf count2 call pon_wait return; -------------------------------------------- -----------------------------------; count1 = 255d:: 775 cicles a 0, + 3 cicles per tornar.; --------------------------------- ---------------------------------------------- pon_waitbig_loopS movlw.255 movwf count1short_loopS decfsz count1, F goto short_loopS decfsz count2, F goto big_loopSreturnend3 CIRCUITI tenia originalment 470 Ohm resistències de cada línia de controlador de pantalla de la línia d'activació 74LS47 i CD4028. No obstant això, he provat el corrent del meu circuit i he comprovat que només tirava de ~ 31mA. I com que el controlador real de les pantalles prové directament del 74LS47 i l’activació prové d’un altre CI, es redueixen ràpidament els requisits mitjans i màxims i les respectives fitxes tècniques … Vaig treure les resistències de la placa i vaig trobar una diferència d’1 mA ! Sembla que conduir directament la línia CA des del 4028 mentre condueix directament tots els segments està bé. … una mena de.:) Tenia un error al meu codi que no esborrava els meus registres quan es premia un botó, cosa que provocava que l'última pantalla tingués 2 segments molt il·luminats quan es premia un botó. Això va ser dolent. No obstant això, si esborrava el registre, es va solucionar aquest problema i les comprovacions de potència contínues confirmen que està constantment al voltant dels 30 mA. Això m’hauria de donar (basat en l’experiència prèvia amb circuits similars) ~ 20 hores de temps d’execució amb 1 bateria de 9 V (500 mAH / 30 mAH sota regulació de 5 V) … Espero! cas que passés alguna cosa, a llarg termini.

Pas 4: soldadura de PCB

Soldadura de PCB
Soldadura de PCB

Sempre que arribo a aquest punt del meu projecte, retardo l’abit. Al principi anava a embolicar aquesta cosa, però ràpidament vaig deixar caure aquesta idea. Al principi crec que "Uns quants cables per soldar, no hi ha cap problema" … després, quan el meu projecte estigui a punt per soldar, estic pensant " Hauria d'haver enviat per fer una placa proto o gravar la meva pròpia placa ". Encara no estic en gravat amb PCB i no volia pagar $ $ perquè es fabriqués una placa, així que … Sí ….. He passat unes 3 hores soldant aquesta cosa. Són uns 150 cables, de manera que són 300 punts de soldadura, a més de retocs per a ponts de soldadura. De totes maneres, aquí teniu la part posterior del tauler a la imatge … sí … és un embolic, però quan es va acabar tot, només em quedava una soldadura curta. Vaig trigar 20 minuts a pensar, ja que a la pantalla es mostraven els # equivocats en un patró lògic que havia de desxifrar. Després d’això, vaig localitzar el curt i bam! Va funcionar perfectament.

Pas 5: Conclusió

Conclusió
Conclusió

FUNCIONA! Aquest projecte ha trigat aproximadament; ~ 2 setmanes per pensar i enviar punts de correu electrònic al sol·licitant, ~ 3 hores de completació i depuració de codi, ~ 4 hores de revisió i depuració, ~ 3 hores de soldadura Utilitzant només 3 CI és possible Charlieplex 6 LED de 7 segments. El consum d’energia és d’uns 30 mA amb aquest disseny, cosa que no està malament si ho dic jo mateix. Sospito que es podrien utilitzar més LED de 7 segments, però no heu empès el sobre. Aquesta idea podria s'aplica a gairebé qualsevol aplicació mitjançant LED de 7 segments; termòmetre, rellotge, visualització de text, etc. Amb algun codi complicat, podríeu tenir una pantalla en moviment o imatges … potser fins i tot una base per a un projecte de POV (persistència de visió). La implementació final queda perquè el meu amic construeixi la seva torre i col·loqueu el tauler, segons cregui convenient. Si / Quan això es fa, rebré una foto carregada. Però pel que fa al circuit, sembla que està construït a mida.

Recomanat: