BloodBowl vuelta contador utilizando LEDs de 7 segmentos (3 / 5 paso)

Paso 3: Diseño y código Micro

Breadboard era una necesidad para ello. Es mi protoboard genérico, pero para el tamaño de este proyecto en realidad usé éste y un tablero más pequeño, ya que hay muchos alambres que deben ser espaciadas.

En primer lugar, he probado un solo LED de 7 segmentos mediante código inicial. Esto confirmó las 3 cosas;
1) cableado de la IC se verificó bien!
2) me ha llevado a optimizar y concretar mi código.
3) me hizo darme cuenta que no necesitaba las resistencias limitantes actuales!

1 cableado
Como se dijo, mi diseño esquemático se encontró con mi código, como el LED ciclo a través de números usando un interruptor pulsador, que verificado mi código y el diseño. No mucho era necesario pero diseño confirmó que estaba en buena forma.

2 código
Originalmente tenía mi código para buscar botones y la pantalla de la ISR (rutina de servicio de interrupción) los números, con una rutina principal. Después de pruebas de diseño, invirtió las rutinas, por lo que la mayoría del tiempo fue mostrando constantemente números y el ISR para los botones. La razón que hizo esto, era sólo para tener una visualización constante, desde el PIC se ejecuta con un reloj interno de 4Mhz, estoy perdiendo muy poco tiempo buscando botones. No es gran cosa... sólo depende de cómo quieres hacer el código y lo que tiene más sentido para cada aplicación. Para ello, pantalla es importante, por lo puse en la rutina principal.

Cuando mis primeras piezas llegaron (todas las 6 pantallas!), completó el cableado del tablero y otro tema. Al pulsar el botón de mi código tenía algunos registros descuidados que no se despejaron y el ISR estaba causando algunos problemillas de pantalla menor.

;===============================================================================
; Gire
;
; -----------
; Dsply3 <---A2 |1 18| A1---> Dsply2
; Dsply4 <---A3 |2 17| A0---> Dsply1
; Led1 <---A4 |3 16| A7---> 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
; -----------
;
; LED 1-3---> dec BCD IC---> LEDSeg's1-6
; Dsply1-3---> BCD-7seg IC---> Dsply #1-9
;

;===============================================================================
; Historia de revisión y notas:
; Cabecera inicial v1.0, código 30/03/09
;
;
; (C) 5 / 2009
; Este código puede usarse para aprendizaje/uso/modificación de personal.
; Cualquier uso de este código en productos comerciales viola esta versión freeware.
; Para preguntas o comentarios, póngase en contacto con el circuito punto mago arroba yahoo punto com.
;-------------------------------------------------------------------------------

#include P16F627A. INC

;===============================================================================
; Define
;-------------------------------------------------------------------------------

;===============================================================================
; Datos
;-------------------------------------------------------------------------------
; Variables de tiempo de mantenimiento

count1 equ 20
count2 equ 21
dis1 equ 22
dis2 equ 23
dis3 equ 24
dis4 equ 25
dis5 equ 26
dis6 equ 27
w_temp equ 28
status_temp equ 29
ISRCNTR equ 2A

;===============================================================================
; Vectores de RESET
;
; COMPRUEBE LA CONFIGURACIÓN. PEDACITOS ANTES DE GRABAR!!!!!!
; INTOSC
; MCLR: HABILITADO
; PWRUP: HABILITADO
; TODOS LOS DEMÁS: DESACTIVAR!!!!
;
;-------------------------------------------------------------------------------
RESET_ADDR EQU 0 X 00
ISR_ADDR EQU 0 X 04

org RESET_ADDR
Goto Inicio
;===============================================================================
; ISR
;
;-------------------------------------------------------------------------------
org ISR_ADDR
movwf w_temp
swapf STATUS, w
movwf status_temp;

; ISR AQUÍ
; Comprobar interruptores PB0-PB5

btfsc PORTB, 0; Compruebe SW1
llamar al sw1debounce
btfsc PORTB, 1; Compruebe SW1
llamar al sw2debounce
btfsc PORTB, 2; Compruebe SW1
llamar al sw3debounce
btfsc PORTB, 3; Compruebe SW1
llamar al sw4debounce
btfsc PORTB, 4; Compruebe SW1
llamar al sw5debounce
btfsc PORTB, 5; Compruebe SW1
llamar al sw6debounce

Goto endisr

sw1debounce
debounce llamada; Esperar de 0,2 seg.
llamada debounce
incf dis1; Contador de actualización
movf dis1, W; Verificación de desbordamiento
xorlw 0x1A; ¿10 en el 7-seg?
btfss STATUS, Z
retorno; No, volver a escanear.
movlw h '10'; Sí, restablecer la pantalla.
movwf dis1
volver
sw2debounce
debounce llamada; Esperar de 0,2 seg.
llamada debounce
incf dis2; Contador de actualización
movf dis2, W; Verificación de desbordamiento
xorlw 0x4A; ¿10 en el 7-seg?
btfss STATUS, Z
retorno; No, volver a escanear.
movlw h '40'; Sí, restablecer la pantalla.
movwf dis2
volver
sw3debounce
debounce llamada; Esperar de 0,2 seg.
llamada debounce
incf dis3; Contador de actualización
movf dis3, W; Verificación de desbordamiento
xorlw 0x5A; ¿10 en el 7-seg?
btfss STATUS, Z
retorno; No, volver a escanear.
movlw h '50'; Sí, restablecer la pantalla.
movwf dis3
volver
sw4debounce
debounce llamada; Esperar de 0,2 seg.
llamada debounce
incf dis4; Contador de actualización
movf dis4, W; Verificación de desbordamiento
xorlw 0x8A; ¿10 en el 7-seg?
btfss STATUS, Z
retorno; No, volver a escanear.
movlw h '80'; Sí, restablecer la pantalla.
movwf dis4
volver
sw5debounce
debounce llamada; Esperar de 0,2 seg.
llamada debounce
incf dis5; Contador de actualización
movf dis5, W; Verificación de desbordamiento
xorlw 0x9A; ¿10 en el 7-seg?
btfss STATUS, Z
retorno; No, volver a escanear.
movlw h '90'; Sí, restablecer la pantalla.
movwf dis5
volver
sw6debounce
debounce llamada; Esperar de 0,2 seg.
llamada debounce
incf dis6; Contador de actualización
movf dis6, W; Verificación de desbordamiento
xorlw 0xCA; ¿10 en el 7-seg?
btfss STATUS, Z
retorno; No, volver a escanear.
movlw h 'C0'; Sí, restablecer la pantalla.
movwf dis6
volver

endisr
BCF INTCON, T0IF
swapf status_temp, w
movwf STATUS
swapf w_temp, f
swapf w_temp, w
retfie

;===============================================================================
; ¡ Comience aquí!
;-------------------------------------------------------------------------------
Inicio
; Puertos de la entrada-salida de config
clrf PORTA
movlw 0x07
movwf CMCON
BCF STATUS, RP1
bsf STATUS, RP0
movlw h '00'; RA < 0-7 > salidas, RA5 sin salida
movwf TRISA

BCF STATUS, RP0
clrf PORTB
bsf STATUS, RP0
movlw h'FF'; RB < 0-7 > entradas
movwf TRISB

; Sistema temporizador interno
BSF PCON, 3; Situado a 4Mhz.
movlw h'CF'; Fuente interna de Tmr0, prescale 1:256 TMR0
movwf OPTION_REG
movlw h 'A0'
movwf INTCON; Permitir interrupciones de TMR0,
BCF STATUS, RP0

; Inicializar los registros
clrf PORTA; PortA claro
clrf PORTB; Borrar PortB salidas

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

debounce llamada; 0,2 seg.

; LEDs de prueba, exhibición de 8???

;===============================================================================
; Principal
; Recibe entradas de interruptores, debounces y incriments de la muestra.
;
; Esto actualiza las pantallas, con TMR0 prescal 1:4, en una frecuencia de 1Khz.
Pantalla 0 se utiliza para asignar a un despliegue inusitado. Visualización 1-6 están conectados.
; En primer lugar, BCD-7Seg IC está cargado de valor indicado, y IC Dec BCD se activa para
; Mostrar selección.
; En segundo lugar, un retraso de ms se lleva a cabo para la exhibición.
; En tercer lugar, Dec BCD IC se desactiva... display0 es seleccionado para cerrar la pantalla
;
; Esto es repetido para cada una de las 6 pantallas y bucle.
ISR maneja interruptor de detección a 15Hz de velocidad.
;-------------------------------------------------------------------------------
principal

Disp1
movf dis1, 0
movwf PORTA
Llame a ledon

Goto principal

;===============================================================================
; LEDOn
; Tiempo para la energía LED de adaptación en.
; 6 muestra -> ciclo de trabajo de 1/6 a 1 Khz = 166 ciclos
;-------------------------------------------------------------------------------
LEDOn

movlw 54
movwf count1
ledloop
decfsz count1, F
Goto ledloop
volver
;===============================================================================
; Debounce señal
; 4 ciclos de carga y llamar, 2 ciclos para volver.
; 4 Tc Mhz:: count2 = 255 -> 0,2 seg.
;-------------------------------------------------------------------------------
Debounce

movlw.255; Retardo de 1/5 de segundo debounce.
movwf count2
llamar al pon_wait
volver
;-------------------------------------------------------------------------------
; count1 = d:: 775 255 ciclos ciclos 0, + 3 para volver.
;-------------------------------------------------------------------------------
pon_wait

big_loopS
movlw.255
movwf count1
short_loopS
decfsz count1, F
Goto short_loopS
decfsz count2, F
Goto big_loopS
volver

final

3 circuito
Originalmente tenía resistencias de 470 Ohm de cada línea del controlador de pantalla del 74LS47 y CD4028 Habilitar línea. Sin embargo, he probado de corriente de mi circuito y encontró sólo era tirar ~ 31mA. Y puesto que el controlador actual para la muestra es directamente el 74LS47 y habilitar otro IC, un rápido funcionamiento de la media y requisitos del pico y las respectivas hojas de datos... Me arrancaron las resistencias de la placa y encontró una diferencia de 1mA. Parece ser que conducir directamente la línea de CA de la 4028 mientras se conduce directamente todos los segmentos es OK! .. .sort de. :)

Tengo un error en mi código que despejar mis registros cuando se pulsa un botón, haciendo que la última pantalla que 2 tramos muy brillantemente iluminado cuando presionó un botón. Esto era malo. Sin embargo, limpiar el registro había corregido este problema y controles de potencia continua confirman es constantemente alrededor de 30mA sorteo. Esto debería darme (basado en la experiencia previa con circuitos similares) ~ 20 horas de duración con 1 pila de 9V (500mAH/30mAH bajo regulación de 5V)... ¡Eso espero!

Decidí mantener el LED directamente conducido, pero ponerlos en tomas de corriente en caso de que algo sucedió, a largo plazo.

Artículos Relacionados

Construir una pantalla de LED de 7 segmentos enorme 8 dígitos rojos

Construir una pantalla de LED de 7 segmentos enorme 8 dígitos rojos

este instructables presenta cómo hacer un panel de pantalla de LED 7 segmentos enorme 8 dígitos. El propósito de esta exhibición es mostrar la hora, fecha, temperatura o para ser utilizado como un cronómetro en diversos concursos de ejecución, concur
Pantalla de LED de 7 segmentos de 4 dígitos + Arduino

Pantalla de LED de 7 segmentos de 4 dígitos + Arduino

recientemente consiguió una pantalla de LED de 7 segmentos de 4 dígitos de Sparkfun y no podía esperar para utilizarlo. Aquí, les mostraré cómo cablear y algunos programas de muestra para usar con él!Paso 1: Información de pantallaEste es el funciona
Conectar un LED de 7 segmentos a un puerto paralelo

Conectar un LED de 7 segmentos a un puerto paralelo

este instructivo puede consultarse en la web del autor - http://www.neatinformation.com/Si usted enlace a este instructable desde otro sitio web, por favor incluya un enlace a la Web de Información aseado .El proyecto descrito en este artículo requie
Diseño digital: Automático Simple cuenta contador utilizando Velostat presostato

Diseño digital: Automático Simple cuenta contador utilizando Velostat presostato

En este Tutorial, aprenderás cómo hacer un simple recuento automático contador utilizando sensores de presión (que también vamos a hacer)!El contador-registrador avanzará por uno cada vez que las almohadillas de presión se caminaban a través de la cu
Auto de noche lámpara utilizando LEDs de alta potencia

Auto de noche lámpara utilizando LEDs de alta potencia

este es uno de los circuitos muy útil llamados "Auto noche lámpara utilizando LEDs de alta potencia". Se trata de un simple circuito que enciende luces de encendido el LED conectadas a él por la noche y apaga las luces automáticamente cuando es
Cómo hacer una pantalla LED de 7 segmentos con Arduino

Cómo hacer una pantalla LED de 7 segmentos con Arduino

Voy a mostrarte cómo hacer un 7 segmentos display con LEDS. Combinan con Arduino para crear cuentas regresivas, texto simple y mucho más. Me gusta hacer proyectos originales. He buscado en el conjunto de instructables y no encontrar uno como este. De
Calculadora de resistencia utilizando leds RGB

Calculadora de resistencia utilizando leds RGB

Es común que un montón de sucios resistencias diferentes y desea que un valor específico pero no memorizar el código de color resistor.En este proyecto he intentado solucionar este problema haciendo un circuito que utiliza Arduino que permite introdu
Binario a BCD contador utilizando 74LS185 de TTL

Binario a BCD contador utilizando 74LS185 de TTL

En este proyecto aprenderás cómo construir un contador de 8 bits. No se requiere ninguna codificación. Usaremos tres 74LS185 IC para que esto sea posible. Si estos chips todavía existen! Están disponibles en www.bits4bots.comVoy a usar un protoboard
Interfaz pantalla de LED de 7 segmentos con FT232

Interfaz pantalla de LED de 7 segmentos con FT232

En este Instructable vamos a controlar un display de 7 segmentos LEDsin necesidad de utilizar un microcontrolador (microcontrolador menos pantalla) y mostrar caracteres alfanuméricos en él.Aquí vamos a utilizar USB a Serial Chip FT232 para una exhibi
Contador de LED

Contador de LED

puede hacer un contador LED atractivo que tiene varias frecuencias con unos pocos componentes electrónicos simples.Paso 1: Coloque el interruptor intermitente de IC Colocar el IC LM3909N sobre tres filas de agujeros desde el lado izquierdo de la Asam
Arduino seguidor Solar utilizando LEDs!

Arduino seguidor Solar utilizando LEDs!

Así que me encontré recientemente con un poco de información me había olvidado. LEDs de generan un poco de tensión bajo la iluminación de una gama de longitudes de onda. Tiempo para explotar esta peculiaridad para hacer un seguidor solar de DIY para
Ripstick de resplandor de neón utilizando LEDs! ¿

Ripstick de resplandor de neón utilizando LEDs! ¿

Que siempre quisiste tener un brillo de neón en la noche va montando su RipStik®?Este instructable le mostrará cómo instalar cualquier número o color de LEDs a su RipStik®.VideoVideo 2Paso 1: Componentes y herramientas Para este mod necesita algunas
Lámpara de botella de vodka (utilizando LEDs)

Lámpara de botella de vodka (utilizando LEDs)

esto es una lámpara de LED poco fresca que es sorprendentemente brillante y se ve fresca en cualquier habitación. El vidrio helado de la botella de vodka hace el efecto que brilla intensamente más liso. Esto es bastante complicado y tendrá mucha paci
BRICOLAJE grande iluminado 7 segmento de la exhibición de LED

BRICOLAJE grande iluminado 7 segmento de la exhibición de LED

una amiga que enseña la ciencia de la high School secundaria me encargó hacer un controlador de juego de quiz de estilo de peligro con un temporizador de gran pantalla y botones para los jugadores. El mejor tipo de temporizador que pude pensar fue un