Hoy os presentamos un pequeño proyecto, para realizar un semáforo para dar la salida en circuitos de carreras de coches de juguete, todo ello mediante un sencillo circuito con PIC.
MATERIALES Y HERRAMEINTAS:
- Programador PIC
- Computador para programar (Con software de programación PIC)
- Microcontrolador PIC16F629, Leds(x10), resistencias de 220 ohm(x5) y 10K(x1), transistores BC547(x5) y batería (o alimentador externo 5V)
- Circuito Impreso, estaño y soldador.
-
Cables, interruptor, pulsador y caja.
- Para la estructura; PVC, malla metálica, caja de plástico y tornillería.
- Herramientas y material diverso: Sierra, lima, destornilladores, pegamento epoxi, etc.
- Software para pruebas (Opcional)
|
PRECAUCIÓN: |
|
ATENCIÓN:
No nos hacemos responsables de los daños personales y/o materiales, causados por una mala manipulación, mal montaje, desconocimiento técnico o del uso indebido de esta guía. |
INTRODUCCIÓN:
Como hemos dicho, hoy os mostramos un pequeño proyecto, en el que simulamos nuestra propia versión de los semáforos de inicio de salida, para un circuito de carreras de coches de juguete. Para ello usaremos un pequeño PIC, con un sencillo y reducido montaje, el cual encenderá progresivamente las luces LED, para dar la salida.
PROCESO:
En este caso, el programa es extremadamente sencillo, ya que una vez
pulsado el botón de inicio de carrera, espera un pequeño tiempo, y luego
inicia la secuencia progresiva de encendido de los primeros cuatro LED rojos, para
finalmente apagarlos y encender el LED verde.
Y este ciclo de
repite cada vez que se pulse el botón. Este es el diagrama de flujo
correspondiente:
Con esta idea clara, redactamos el programa en ensamblador, para
posteriormente probar y compilar mediante el software de Microchip®, MPLAB.
En el caso de errores o mejoras y ajustes, podemos depurarlo,
y una vez terminado, compilarlo, para generar el archivo ASM, que usaremos
para grabar el software en el PIC.
Como en anteriores proyectos, también tenemos la posibilidad de usar un software de simulación, (Por ejemplo; PROTEUS), en el que podemos hacer funcionar el hardware y el software, sin montarlo físicamente.
ESQUEMA Y PCB:
A continuación, os mostramos el esquema del circuito. Y como se puede comprobar es extremadamente simple, ya que se ha intentado usar el menor numero de componentes posibles y porque es el software el núcleo del proyecto.
El reloj del Microcontrolador, que por norma general se usa uno externo, se
ha optado por la opción que da el fabricante de usar el reloj interno, para
economizar componentes, y por lo tanto, reducir el diseño final del circuito.
Para ampliar la información, consultar la hoja del carácteristicas del Microcontrolador del fabricante.
La primera sección, al tener conectados solo los LED, se ha optado por una placa de baquelita prefabricada, ya que siendo un circuito tan sencillo, implicaba menor trabajo a la hora de montarla.
Para el resto y al ser un prototipo, se ha hecho mediante el sistema de rotulador indeleble sobre una pequeña placa virgen. Si queréis más información de como construirla, en nuestra entrada PCB Domésticos, podéis consultar como hacerlo.
En cualquier caso, los diseños son como los que se muestran a continuación:
SOFTWARE:
Ahora es el momento de desarrollar el programa, para hacer encender
los LED's según el diagrama de flujo. Seguidamente os mostramos el listado
completo del software en Assembler, que está grabado en el PIC
16F629, comprobado y funcionando:
; ******************************************************************;
; PROGRAMA SEMAFORO.asm FECHA: XX XXXXX 2024 ;
; Programa para secuencia semáforo inicio carrera coches ;
; Usa los puertos GP0 a GP5(Pin 2,3,4,5,6 y 7) ;
; Revisión: 2.0 Programa para PIC16F629 ;
; Velocidad de Reloj: 4Mhz (Interno) ;
; WatchDog = OFF Tipo Reloj: INTERNO PIC ;
; Autor: XANUR (XMG) Por: XANUR2001/ ACME 2024 ;
; Compilado en : MPLAB X IDE v2.05 (MICROCHIP) ;
; Probado con PROTEUS Labcenter 7.7 (ISIS Professional) ************;
; ******************************************************************;
; ---------------------------------------------------------------------------------------------------
; Licencia Creative Commons BY-NC-SA (attribution - Non Commercial - Share Alike)
; El proyecto puede ser hecho y modificado por los lectores para uso privado y sin fines comerciales
; Es necesario indicar en posibles publicaciones el autor (XANUR2001 o XANUR.ES)
; ---------------------------------------------------------------------------------------------------
ERRORLEVEL -302
INCLUDE <p12f629> ; Librería del PIC que utilizaremos
LIST P =12F629, r=DEC, n=66
__CONFIG _CP_OFF & _CPD_OFF & _BOREN_OFF & _MCLRE_OFF & _WDT_OFF & _PWRTE_ON & _INTRC_OSC_NOCLKOUT
; Configuración de Registros para:
; Protección Código=OFF
; Protección Datos=OFF
; Brown-Out Reset=OFF
; Watch Dog=ON
; Power Up Timer=ON
; OSC Reloj Interno=ON
; ---------------------------------------------------------------------------------------------------
; Declaración de Variables
; ---------------------------------------------------------------------------------------------------
STATUS EQU 03h ; REGISTRO DEL ESTADO DE LA RAM
GPIO EQU 05h ; REGISTRO DEL ESTADO DE LOS PUERTOS I/O
CMCON EQU 19h ; REGISTRO DE TIPO DE PUETOS A/D
LOOP1 EQU 20h ; REGISTRO CONTADOR PARA EL RETARDO (EN DIRECC. MEM 20H)
LOOP2 EQU 21h ; REGISTRO CONTADOR PARA EL RETARDO (EN DIRECC. MEM 21H)
LOOP3 EQU 22h ; REGISTRO CONTADOR PARA EL RETARDO (EN DIRECC. MEM 22H)
; SECCIÓN CODIGO DE RESET.
ORG 0X00 ; AQUÍ APUNTA SI ENCIENDE EL PIC O EN CASO DE RESET
; SALTO AL PROGRAMA PRINCIPAL
GOTO PRINCIPAL ; IR A NUESTRO PROGRAMA PRINCIPAL
ORG 05H ; SALTANDO LA DIRECCIÓN DE INTERRUPCIÓN
; PROGRAMA PRINCIPAL
PRINCIPAL
; CONFIGURAMOS PUERTOS
BCF STATUS,5 ; SELECCIONAR BANCO 0
CLRF GPIO ; LIMPIAR ESTADO EL GPIO
MOVLW 7FH ; 0FH=1111 3fH=11 1111 7FH=111 1111
MOVWF CMCON ; CONFIGURA TODOS LOS PINES I/O DIGITAL
BSF STATUS,5 ; SELECCIONA EL BANCO 1 DE LA RAMMACRO
MOVLW 08H ; GP0,GP1,GP2,GP4 Y GP5 COMO SALIDAS (0)... 0EH
MOVWF TRISIO ; ... GP3 COMO ENTRADA (1) 08H=0000 1000
CALL CALIBRAROSC ; LLAMADA A LA RUTINA PARA CALIBRAR...
MOVWF OSCCAL ; ...EL OSCILADOR INTERNO
BCF STATUS,RP0 ; VOLVER AL BANCO 0 DE LA RAM
CALL APAGADO ; APAGAMOS TODOS LOS LED`S
; 1-CICLO PRONCIPAL BUCLE COMPROBACIÓN PULSADOR
INICIO
BTFSC GPIO, 3 ; COMPRUEBA SI SE HA ACCIONADO EL PULSADOR;
GOTO ENCENDER ; NO PULSADO COMPRUEBA DE NUEVO
CALL S1 ; SI PULSADO, LLAMA A RUTINA S1
CALL APAGADO ; REGRESA DE LA RUTINA Y APAGA TODODS LOS LED
RETURN ; Y VUELVE AL INICIO
; RUTINA S1. SECUENCIA INICIO DE CARRERA
S1
BCF GPIO,0 ;ENVIAMOS UN "0" AL GP0 (PIN7), LED1 ROJO OFF
CALL PAUSA
BSF GPIO,0 ; ENVIAMOS UN "1" AL GP0 (PIN7), LED1 ROJO ON
CALL PAUSA
BSF GPIO,1 ; ENVIAMOS UN "1" AL GP1 (PIN6), LED2 ROJO ON
CALL PAUSA
BSF GPIO,2 ; ENVIAMOS UN "1" AL GP2 (PIN5), LED3 ROJO ON
CALL PAUSA ; NOTA: SE SALTA EL GP3 (PIN4), QUE ES LA ENTRADA PULSADOR
BSF GPIO,4 ; ENVIAMOS UN "1" AL GP4 (PIN3), LED4 ROJO ON
CALL PAUSA
CALL PAUSA
CALL APAGADO ; APAGAMOS TODOS LOS LED
BSF GPIO,5 ; ENVIAMOS UN "1" al GP5 (PIN 2), LED VERDE ON
CALL PAUSA
CALL PAUSA
CALL PAUSA
RETURN ; ... Y VUELVE AL INICIO
; SUBRUTINA APAGAR LED
APAGADO ; RUTINA APAGADO LED PUERTO GP0
CLRF GPIO ; ENVIAMOS UN "0" AL PUERO GPIO
RETURN
; SUBRUTINA RETARDO
PAUSA
MOVLW 0X07
MOVWF LOOP1
MOVLW 0X17
MOVWF LOOP2
MOVLW 0X03
MOVWF LOOP3
CICLO1
DECFSZ LOOP1,F
GOTO $+2
DECFSZ LOOP2,F
GOTO $+2
DECFSZ LOOP3,F
GOTO CICLO1
GOTO $+1
GOTO $+1
GOTO $+1
RETURN
; SURUTINA CALIBRAR OSCILADOR INTERNO
CALIBRAOSC
RETLW 0X20h ; CALIBRACIÓN DEL OSCILADOR A 4MHz (+/-2%)
RETURN
; FIN DEL PROGRAMA
ORG 0X3FF
END ; FIN
El software tiene un funcionamiento muy sencillo. En primer lugar declaramos las variable a usar en el programa. Luego, en el programa principal, configuramos los puertos, según el esquema electrónico. Y seguidamente, hace un bucle (INICIO), en el cual esta comprobando permanentemente si se pulsa el botón (BTFSC GP3,
pin 4).
En cuanto es pulsado, salta a la secuencia ENCENDER, en la cual hace una pequeña comprobación "Anti-rebote", y si sigue pulsado, continua la secuencia de encendido en S1.
Esta secuencia empieza haciendo una pequeña pausa y
acto seguido, enciende el primer LED rojo (GP0, pin 7) a través del
transistor. Pasa un tiempo, y activa el siguiente LED (GP1, pin 6).
Otra pequeña pausa y activa el próximo LED (GP2, pin 5), una pausa
corta más y se activa el último LED rojo (GP4, pin 3).
Y
finalmente hace una pausa algo más larga y apaga todos los LED rojos
y activa el LED verde (GP5, pin 2), manteniéndolo encendido durante un periodo de tiempo,
tras el cual se apaga, volviendo el programa a INICIO.
Y se mantiene apagado, hasta que
nuevamente se vuelve a pulsar el botón, e inicia de nuevo la
secuencia de encendido.
Si los tiempos de encendido/apagado, no encajan con los gustos del
lector, estos pueden ser modificados a voluntad, modificando los valores de la rutina de retardo.
Como se ha visto, la forma
del programa, es muy simple, y desde luego puede ser optimizada para
los más avezados, pero el objetivo es mostrar de una forma sencilla y
comprensible, como realizar un proyecto como este para iniciarse.
En el siguiente vídeo, podéis ver el circuito, las pruebas realizadas, y su puesta en marcha tras la construcción definitiva:
Por si alguien tiene curiosidad, para la estructura del puente, hemos
empleado una malla metálica, recortándola y dando la forma deseada.
Esta se ha montado
en dos tiras pequeñas a modo de base, de PVC que encajan en los laterales de la pista
de juguete.
Para los LED, una vez montados en la placa y
cableados, se han fabricado dos piezas plásticas para cada lado y se ha
atornillado en la parte inferior del puente.
Por último, se ha
pasado un cable plano por el interior de dicho puente, el cuan va
conectado a la placa principal, situada en una caja en el lateral del
puente. Esta va alimentada con una pequeña batería que se ajusta dentro
de la propia caja, pero si se desea, el circuito puede alimentarse
externamente.
Ya solo queda disfrutar de las carreras:
3..., 2..., 1...,
GOOOOOO!!!!!!
|
AVISO: |
ENLACES.
Software PICKit2 ® Programmer (y otros recursos en Microchip®):
https://www.microchip.com/en-us/development-tool/PG164120
Programador JDM del Blog XANUR:
https://blog-xanur.blogspot.com/2022/06/programador-pic-jdm.html
PCB Domésticos de Blog XANUR:
https://blog-xanur.blogspot.com/2022/03/prototipos-pcb-domesticos.html
WinPic800:
http://www.winpic800.com/
IC-PROG:
http://ic-prog.com/
MPLAB:
https://www.microchip.com/en-us/tools-resources/develop/mplab-x-ide
Transistor BC547:
https://www.farnell.com/datasheets/59764.pdf
Microcontrolador PIC 2F629 DataSheet:
https://ww1.microchip.com/downloads/en/devicedoc/41190c.pdf
© Se permite reproducción total o parcial de este contenido, siempre y cuando se reconozca la fuente de información utilizada y se incluya el enlace a este artículo.
Equipo Xanur©2024.