Hola nuevamente ha Artes Electrónicas Pachani, hoy
continuaremos con la serie programación en componentes
PIC, tutorial dirigido a lectores novatos,
aficionados (hobbistas), estudiantes, que deseen implementar
programas para microcontroladores en lenguaje ensamblador (ASM), para
el desarrollo de aplicaciones.
¿Como lo hago?(El inicio)
Una vez hemos logrado realizar
nuestro primer “Hola Mundo”, la
pregunta que viene a nuestra cabeza es ¿Como lo hago?, muchos de los retos en cuanto a la programación
viene a ser en la manera como se plantee la solución a un
determinado problema, empecemos:
Problema 2.-
Se desea realizar un juego donde se busca que los
participantes escojan colores y cuando la combinación
sea correcta se repita en el panel de colores.
Respuesta: La manera
como nos plantearon el problema lo podemos ver en nuestra mente como
el manejo de bits por un puerto de entrada, que
sera el PUERTOA y que la
combinación este limitada a una correcta contraseña/clave
correcta siempre y cuando sea
así la contraseña
pre-programada y luego
tengamos la secuencia de luces por el PUERTOB:
1er Paso:
Planteemos nuestra idea y tratemos de esquematizarla de la siguiente
manera:
Primero notamos que la entrada de datos es por el PUERTOA , donde
podemos utilizar switches, botoneras dependiendo de nuestro juego,
para nuestro prototipo y simulación lo realizaremos con los
LOGICSTATE que ofrece Proteus para simular la entrada de datos y para
la la vista de la salida de datos por el PUERTOB que sera por medio
de los LOGICPROBE que simularan la salida de datos.
2do Paso: Ahora tenemos la configuración de nuestro
Pic16f877a ya colocado para nuestro prototipo de
simulación , tenemos que realizar nuestro código con el cual
funcionara nuestro PIC16F877A, para ello haremos uso de nuestro IDE
Mplab , primero realizamos un nuevo proyecto y empezamos a escribir
código de la siguiente manera:
Listo ahora que hemos configurado nuestro proyecto, empecemos a
programar.
3er Paso: En mi opinión es bueno tener un código lo mas
ordenado posible para poder revisar y cambiar alguna instrucción que
este de mas o bien le falte mas comentarios en una instrucción, bien
empecemos por la cabecera de nuestro código:
Acá ademas de las especificaciones de nuestro código, como
microprocesador a utilizar , también podemos indicar a Mplab o bien
el compilador de Proteus la manera como se comportara el puertoA, ya
que el puertoA se comporta también como entrada analógica.
En la imagen habrán notado también que existe un DATO
EQU 0x30 , esta es una
asignación de dirección para la variable DATO
que nos servirá de auxiliar para nuestras operaciones, a medida que
vayamos escribiendo códigos notaremos que nos serán útiles para
reducir instrucciones ya que en ellos podemos caragar un valor
literal para luego llamarlo para una operación especifica sin
necesidad de tener que cargar el valor cada vez.
4to Paso: Ahora configuremos los bancos y el comportamiento de
cada uno de los puerto de modo que podamos utilizar tanto el puertoA
como entrada y el puertoB como salida:
Dentro del código de configuración y asignación habrán notado la
instrucción NOP, este código le
dice al microprocesador que pare por 4 ciclos maquina, por lo cual
podemos utilizarlo si queremos, pero para nuestro ejercicio sera
suficiente con mencionarlo un par de veces.
Para entender un poco mas la manera como debemos configurar el
puertoA lo he separado de modo que lo distingamos desde la entrada al
banco1 hasta la habilitación del puertoA como entrada digital por
medio de la instrucción ADCON1 ,
esta instrucción permite habilitar el puertoA como Entrada
digital, ahora luego con la instrucción TRISA
simplemente le indicamos que este puertoA es de Entrada de Datos ,
luego CLRF TRISB
indicamos que el puertoB se comportara como salida de
datos.
Ya luego de habilitar los puertos A y B , retornamos al banco0 para
escribir nuestras instrucciones.
5to Paso: Ya empecemos con el codigo:
Ya que estamos en el banco cero, empecemos por recoger los datos del
puertoA y lo guardamos al acumulador (W), una vez hecho esto
guardamos el valor del acumulador a la dirección DATO
, de modo que lo podamos comparar con la contraseña/clave de la
siguiente manera:
Una vez cargamos el literal 0x30 , este
nos servirá de contraseña , bien para comparar dos números lo que
hacemos es lo siguiente: SUBWF DATO,W
; W=DATO –
0x30 ,
luego sigue la instrucción:
BTFSS STATUS,Z
; que pregunta por la bandera Z , revisa si hay cambios y dependiendo
de la respuesta salta una instrucción o bien continua con la
siguiente, para el salto entre etiquetas dependiendo de la decisión
se lo realiza por medio de GOTO el cual hace que una vez se escoja la
etiqueta se siga con las instrucciones siguientes, de la siguiente
manera:
Dependiendo del valor del bit Z, puede saltar a ES_IGUAL
o bien NO_ES_IGUAL, y continuar con las
instrucciones. Para cada decisión existe una posible respuesta donde
el microcontrolador continuara , para ello debemos de tomar énfasis
en cada acción que queramos que realice el microcontrolador, en este
caso se muestra el valor de la respuesta verdadera 0x30h
cuando la contraseña sea correcta.
Para que el microcontrolador este atento al puertoA de entrada de
datos, hacemos que salte hacia la etiqueta INICIO,
para cuando haya cambio en el puertoA , digamos que otra
contraseña/clave, vuelva a comparar y si la respuesta no es la
correcta podemos hacer que el puertoB muestre 0x00h.
Ahora probamos si compila y recuperaremos el archivo HEX, en el
compilador de Mplab muestra que nuestro codigo esta sin errores y se
ha generado el el archivo ejer03.hex.
Simulación en
Proteus
Una vez tenemos el archivo ejer003.hex de Mplab , ahora iniciamos
Proteus y creamos u proyecto y lo guardamos donde nuestro archivo
hex, de modo que podamos realizar la simulación y tengamos todo el
código ordenado de manera adecuada.
Ya en proteus cargamos el archivo hex al microcontrolador:
Ahora deben notar que Proteus pide el archivo *.asm, en nuestro caso
escogeremos el archivo HEX generado por Mplab y lo cargamos:
Ahora la parte final, iniciamos la simulación de Proteus y
verificaremos para nuestra contraseña verdadera si se repite en la
siguiente imagen:
Según la simulación cuando ingresamos el valor verdadero/clave
correcta la respuesta indica que es verdadera por lo cual hasta aquí
el código que hemos escrito es adecuado.
Ahora probemos que sucede cuando la contraseña/clave no es la
adecuada:
Como se tenia previsto/planeado, para cuando la contraseña/calve no
sean adecuados, no se debe mostrar nada por las salidas del puertoB,
por lo cual nuestro código es adecuado. Y con ello hemos podido
resolver el problema que nos habían planteado para el juego de
secuencia de luces.
Al final confirmamos el buen funcionamiento de nuestro código y su
simulación en proteus, la implementación en protoboard ya puede
ser efectiva, con lo cual nuestro código es funcional, ahora para lo
siguientes ejercicios vamos a realizar la misma metodología pero ya
con menos pasos y mas imágenes para luego entrar en la programación
en basic y posteriormente en C.
Hasta aquí ha sido la manera como debemos de realizar un programa
paso a paso, ahora si bien ensamblador es moroso, eso me hizo
recuerdo a una reflexión que una vez nos digo nuestro docente
Microcntroladores Laboratorio, acerca de ensamblador:
“Algunas vez has jugado con legos (rastris), si la respuesta es
SI , entonces sabrás que para diseñar un tanque o bien un avión
cada uno de las piezas van formando el modelo, y el tiempo que se
requiera dependerá de la destreza y el modelo que se pretende
realizar”
Ingeniero Roger Guachalla Narváez
Con esta analogía mi docente quería decir que la base de todo
programa por mas complicado que parezca se reduce a pequeños
elementos y que su diseño depende del tiempo que le dediquemos. Bien
nos vemos en el siguiente tutorial.
Todo el material que aquí se encuentra es de mi autoría, ademas de
una recopilación de información de Internet de recursos que se
pueden descargar como libros los cuales son usados como referencia
para los ejercicios y los ejemplos. Cualquier consulta la puedes
realizar en la parte de comentarios.
Bibliografia:
1.- Enrique Palacios , Fernando Ramiro y Lucas J. López,
Microcontrolador PIC16F84 Editorial Alfa Omega; Publicado el año
2004;[Fecha de consulta 10 de Marzo de 2017].
2.-Christian Bodignton Estava; Mikro Basic ; descargada de
WWW.CONEXIONELECTRONICA.COM;
Publicado el año 2010; [Fecha de consulta 5 de Marzo de 2017].
Software
utilizados:
1.- MpLab version 8.52 descargado de la pagina oficial de Microchip;
No hay comentarios.:
Publicar un comentario
Hola, con tu comentario puedes aportar para mejorar la calidad de mi trabajo