Hola Bloggeros!!
Este espacio esta dedicado a dar una introduccion a los interesados en usar de forma facil y sencilla ciertos elementos que nos permiten ejecutar multiples y variadas tareas como lo son los microcontroladores PIC. Estos dispositivos son integrados o encapsulados que poseen una memoria reescribible de tipo flash lo cual los hace muy utiles a la hora de modificar los programas que en ellos podemos guardar. Estos programas pueden ser muy complejos o muy simples como el que en inicio vamos a desarrollar. Para ello daremos a ustedes las herramientas necesarias para hacer el mejor uso del PIC y sacar el mayor provecho posible.
Hablaremos pues de que es un PIC, su arquitectura y distribucion, el programa y el lenguaje de programacion que utilizaremos y por ultimo como hacer para que lo que tenemos en mente lo podamos ejecutar en nuestro chip de la mejor forma.
Bienvenidos y cualquier aporte constructivo para nosotros y para los demas sera muy bien recibido!!
Intro a los Micros
Enlaces de Interés
Datasheet de Microchip
http://www.microchip.com/wwwproducts/devices.aspx?ddocname=en010210
Descargar MPLAB de:
http://www.microchip.com/stellent/idcplg?
IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en019469&part=SW007002
Descargar el manual del 16F628 de:
http://www.biltek.tubitak.gov.tr/gelisim/elektronik/dosyalar/22/16f628a.pdf
Video tutorial del uso de microcontroladores PIC
http://www.youtube.com/watch?v=Q_CqOmeiyZk
Video tutorial del uso de MPLAB:
http://www.youtube.com/watch?v=pnkUOL0mmyA
http://www.microchip.com/wwwproducts/devices.aspx?ddocname=en010210
Descargar MPLAB de:
http://www.microchip.com/stellent/idcplg?
IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en019469&part=SW007002
Descargar el manual del 16F628 de:
http://www.biltek.tubitak.gov.tr/gelisim/elektronik/dosyalar/22/16f628a.pdf
Video tutorial del uso de microcontroladores PIC
http://www.youtube.com/watch?v=Q_CqOmeiyZk
Video tutorial del uso de MPLAB:
http://www.youtube.com/watch?v=pnkUOL0mmyA
PIC 16F628A
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvSKX-_VuSw22Rg9AIYdnaniEqkSzsoQz4cPFTMhq1sxtosTmfuLx8TKJBHwxM3APdLWsLlbOBKAfCGL_KRdGh6ZVQQMpm8RVQnS-EyYIkVnIbbSr4Fa-7FOyspnXqmMFDUoW-HtgPsKlt/s320/PIC16F628A-IP.jpg)
Este proyecto inicial sera hecho en el PIC 16F628A. Toda la info de este chip la encuentras en nuestros enlaces de interes.
El PIC 16F628: Descripcion General.
Antes de hacer que nuestro diagrama de flujo se convierta en un programa, explicaremos de forma general como es nuestro PIC, como funciona y como se puede configurar para sacar el mayor provecho en nuestro diseño. Cabe decir que el diagrama de flujo es una gran ayuda ya que entre mas aproximado sea este, mas facil sera llevar a instrucciones de programa dentro de nuestro software de programacion; que para este caso usaremos MPLAB. Este no solo sera el software de construccion del programa que llevara nuestro PIC sino tambien haremos la depuracion y la simulacion para verificar que todo funciona de acuerdo a nuestras expectativas. Veamos pues algunos de los aspectos mas reelevantes del PIC.
Descripcion General
El PIC es un integrado de 18 pines que se basa en la versatil familia de PIC`s 16CXX la cual es una linea de bajo costo, alto rendimiento, tecnologia CMOS y maneja 8 bits. Tiene integradas caracteristicas que hacen reducir los componentes externos, reduciendo de esta forma los costos y el consumo de energia y aumentando la productividad y el rendimiento del sistema.
Los PIC`s emplean una avanzada arquitectura RISC lo que les permite tambien entre otras caracteristicas manejar multiples fuentes de interrupcion de entrada y de salida. Adicional a esto su arquitectura Harvard permite manejar buses de datos e instrucciones independientes, obteniendo palabras de instrucciones de 14 bits con datos separados de 8 bits.
Las instrucciones tipo Two-stage pipeline permiten ejecutar todas las instrucciones de cualquier programa en tan solo un ciclo, excepto las de los programas que requieren 2 ciclos. Un reducido juego de instrucciones (35) y un amplio set de registro hacen del PIC un dispositivo programable importante dentro de la academia y la practica por su practicidad y economia.
Arquitectura del PIC
La arquitectura Harvard permite que programa y datos sean accesados desde memorias separadas usando buses separados. Esto aventaja a la arquitectura Von Neumann ya que en ella solo accesa datos y programa desde la misma memoria lo cual aumenta los tiempos de ejecucion y acceso.
Al separar los datos y el programa logramos aumentar las velocidades de acceso y ejecucion y tambien aumentar el numero de bit por palabra, esto quiere decir que podemos encontrar instrucciones de opcode de 14 bits lo que hace que una instruccion pueda ejecutarse en un solo ciclo de 20 nS o lo que es igual trabajar a 20 Mhz por configuracion.
El PIC puede direccionar directa o indirectamente sus registros de archivo o los datos de memoria. Todas las funciones especiales del registro, incluyendo el contador de programa (PC), son ubicados en la memoria de datos. El set de instrucciones simetrico, hace posible realizar cualquier operacion en cualquier registro, usando cualquier modo de direccionamiento.
Generalmente los PIC de esta familia traen un registro de trabajo y una ALU de 8 bits, esta ultima es una unidad aritmetica de propositos generales que realiza operaciones aritmeticas y Booleanas entre el registro de trabajo y cualquier otro registro. El registro de trabajo se designa como W y solo si es mencionado otro registro o constante las operaciones siempre son entre este registro W y otro registro o constante.
El registro de trabajo W no es direccionable y solo es usado por la ALU para realizar sus operaciones.
Dos tipos de memoria son usados en los PIC: EEPROM y RAM
La EEPROM es una memoria de tipo no volatil lo que quiere decir que al quitar la fuente de energia no se perderan los datos alli almacenados, por su funcionamiento se usa para almacenar datos que requieren de mucho tiempo de almacenamiento,estos pueden ser: tablas de busqueda de datos, ajustes de calibracion de dispositivos y otros que requieran actualizaciones periodicas en la practica. En nuestro caso que contiene fines academicos podemos decir que alli es donde reposara el programa que haremos a partir del diagrama de flujo. Este se llevara al PIC mediante un dispositivo que permite electricamente grabar un nuevo programa o borrar uno existente para reutilizar el PIC.
La RAM se usa como en el PC para almacenar datos de forma temporanea durante la operacion normal y cuando la energia se interrumpe en el dispositivo, esta es borrada por completo.
Con estos datos basicos estamos listos para empezar a trabajar en nuestro programa en MPLAB. Para terminar con esta parte pondremos una vision global de la arquitectura interna mediante la grafica que se encuentra a continuacion:
En la grafica se ven dispositivos que no fueron nombrados, estos se deben tener muy en cuenta cuando se empieza a utilizar lenguaje de programacion de alto nivel, incluso si dentro de este programa a implementar necesitamos nombrar alguna instruccion o elemento del PIC que nos sirva para simplificar algunas pocas instrucciones haremos la mencion correspondiente.
Lo que nos piden hacer:
El diagrama de entradas y salidas del sistema es el siguiente:
Tempo inicial No se pulsa ningún botón Se pulsa el A pero no el B Se pulsa el B pero no el A Se pulsan los botones al tiempo. | Tiempo medio No se pulsa ningún botón Se pulsa el A pero no el B Se pulsa el B pero no el A Se pulsan los botones al tiempo. | Tiempo final No se pulsa ningún botón Se pulsa el A pero no el B Se pulsa el B pero no el A Se pulsan los botones al tiempo. |
1. Si en el tiempo inicial se pulsa el botón B, se le enciende la luz amarilla.
2. Si el usuario logra pulsar los dos botones en el tiempo medio, se le encenderá la luz verde.
3. Si el usuario deja pulsado el botón A por un tiempo que supere el tiempo final, se le encenderá la luz roja.
4. El juego debe iniciarse siempre con los botones en estado no pulsado. Duración sugerida de cada periodo de tiempo:
Tiempo inicial: 10segundos.
Tiempo medio: 5 segundos
Tiempo final: 5 segundos.
Tiempo total de duración del juego máxima: 20segundos
EL DIAGRAMA DE FLUJO
Los diagramas de flujo nunca estan mal o estan bien del todo, estos tan solo son una herramienta para llevar de forma escrita o grafica lo que en la cabeza tenemos pensado. Tampoco existe un unico camino para dar soluciones a un problema planteado pero el diagrama de flujo nos puede ayudar o nos puede alejar de la idea de proyecto o programa. Un muy buen diagrama de flujo que puede ayudarnos a la realizacion del programa es haciendo muy descriptivo el proceso esto quiere decir que si mi finalidad de programa es ´´Salir a caminar´´ debo tener la precaucion de nombrar todo con absoluto detalle para que esto sea posible: Ponerme medias, ponerme la ropa adecuada para el clima, ponerme los zapatos de caminata, ponerme de pie, acercarme a la puerta, abrir la puerta, salir de mi casa y finalmente ´´salir a caminar´´. Para este ejemplo se hizo lo mas descriptivo posible las acciones que deben ocurrir para ´´salir a caminar´´ esto con el fin de ejemplificar la forma en que el PIC sigue las instrucciones que le programemos. Sin embargo a la hora de programar es un poco mas complejo, ya que sin importar el detalle que haya en el diagrama de flujo en MPLAB las instrucciones si deben estar sin omitir nada en absoluto. Por lo tanto en nuestro programa de ejemplo estaria mal decir ``acercarme a la puerta`` ya que esta si bien es una accion que se debe ejecutar, la mejor forma de plasmarlo en el lenguaje del programa seria dando x pasos en y tiempo hasta llegar a la puerta que se encuentra en q direccion especifica.
En conclusion el diagrama de flujo es una muy buena herramienta si en el plasmamos de la mejor forma lo que es nuestra solucion de la situacion planteada, es aconsejable poner la mayor cantidad de detalles para que asi sea mas facil encontrar las instrucciones que ejecuten lo que pensamos o tener claro que para hacer alguna accion que queremos debo hacer varias pequeñas cosas.
Veamos pues nuestro diagrama de flujo planteado para la solucion de nuestro proyecto, este esta describiendo lo que va a suceder en nuestro PIC y como aproximadamente sera su configuracion y ejecucion de instrucciones.
Veamos pues nuestro diagrama de flujo planteado para la solucion de nuestro proyecto, este esta describiendo lo que va a suceder en nuestro PIC y como aproximadamente sera su configuracion y ejecucion de instrucciones.
EL SET DE INSTRUCCIONES
A continuacion trataremos de mostrar de la mejor y mas resumida forma el set de instrucciones que utilizaremos para realizar nuestro programa en MPLAB.
En MPLAB usamos el lenguaje de programacion llamado assembler, estas instrucciones hacen parte de este lenguaje y son las que el PIC guarda en su EEPROM una vez haya sido grabado el programa. Estas se ejecutan de acuerdo a la forma en que se encuentren dispuestas dentro del programa como tal. Para verificar que no hay errores el programa se puede depurar usando el simulador dentro de la aplicacion o simplemente se puede quemar el programa en el PIC y probar en el protoboard si funciona correctamente. En nuestro caso debemos hacer uso del simulador ya que la quema del programa solo se hara en el laboratorio y las correcciones alli requieren menor tiempo por lo cual les aconsejamos trabajar en grupo y en un entorno que no ejerza presion sobre ustedes.
El set de instrucciones es sencillo, consta de 35 instrucciones y se dividen en 3 grupos: Instrucciones orientadas a bits, instrucciones orientadas a bytes e instrucciones literales y de control.
Las instrucciones son palabras de 14 bits que se dividen en un codigo de operando (OPCODE) que especifica el tipo de operacion y entre quienes se ejecuta dicha operacion ya sea registros u operandos, estas toman un ciclo de maquina.
Para las instrucciones orientadas a bytes la ´f´ representa un registro designador de archivos y la ´d´ representa un designador de destino. El registro designador de archivo especifica que registro de archivo esta siendo usado por la instruccion. El designador de destino indica donde sera colocado el resultado de la operacion. Si ´d´=0 el resultado sera llevado al registro de trabajo W. Si ´d´=1 el resultado sera colocado en el registro de archivo especificado en la instruccion.
Para las instrucciones orientadas a bits la ´b´representa un campo de bit que designa el numero del bit que sera afectado por la operacion, mientras que ´f´representa el numero del archivo en el que el bit es colocado.
Para operaciones de control y entre literales la ´k´representa una constante de 8 u 11 bits o un valor literal.
Todas las instrucciones toman un ciclo de maquina o lo que es igual 4 ciclos de oscilador. Asi para un cristal externo de frecuencia 4MHz el tiempo de ejecucion de una instruccion es de 1uS. Si una prueba condicional es verdad o el contador de programa es cambiado como resultado de una instruccion, la ejecucion de la instruccion toma 2 uS, en este caso el segundo ciclo usado sera un NOP = no operation.
Veamos pues el formato de instrucciones y la lista de ellas.
NOTA: Si eres nuevo en blogger y quieres ver mejor las imagenes da click en la imagen que desees y ella se vera en el tamaño real.
NOTA: Si eres nuevo en blogger y quieres ver mejor las imagenes da click en la imagen que desees y ella se vera en el tamaño real.
Tabla 1 : Set de instrucciones.
Tabla 2. Formato de instrucciones.
PROGRAMACION EN MPLAB
Para iniciar la programacion te recomendamos descargar la version 8.8 de MPLAB desde el enlace dado en los sitios de interes de nuestro blog, ya que esta es la que nosotros usaremos para mostrarles la simulacion y el progreso del programa, las dificultades y las soluciones a dichas dificultades. La instalacion es muy facil si ya lo haz hecho con cualquier otro programa.
Una vez tienes instalado MPLAB ejecutas la aplicacion e inicias un nuevo proyecto. Listo? Pues es verdad que si nunca han utilizado este programa hay que hacer ciertos ajustes. Esta entrada les dara las herramientas necesarias para poder iniciar un proyecto en MPLAB, solo hay que seguir la presentacion y tendras exito...Eso te lo aseguramos!
http://www.slideshare.net/victorpe/uso-mplab-presentation
Una vez tengas listo el proyecto podemos usar la plantilla planteada en el slide e incluso podemos configurar nuestros puertos de acuerdo al diagrama de flujo lo cual es muy similar en ambos casos.
Basados en nuestro diagrama de flujo configuraremos el puerto A como entrada y el puerto B como salida, esto se hace poniendo en 1 todos los pines del puerto A y poniendo en 0 los pines del puerto B. Para estar sintonizados debes tener a la mano el diagrama de pines del PIC y alli encontraras cuales son sus posiciones, estas debes tenerlas en cuenta a la hora del montaje en el protoboard para evitar errores en las conexiones. Por ahora nos centraremos en la programacion : Para hacer 1 todos los pines del puerto A debo empezar a usar las instrucciones que teniamos con anterioridad, para esto usaremos una instruccion orientada a Bytes y una de literales y control. Lo que haremos es colocar los 1 que necesitamos en el registro de trabajo y luego llevarlos al puerto A; esto se hace usando la instruccion MOVLW que significa mueva un literal al registro de trabajo W y una vez este alli lo llevo a la posicion de mi puerto A. Por definicion del fabricante la parte logica del puerto A es TRISA, entonces en hexadecimal 6 unos que necesito para hacer la configuracion serian 3F ese literal lo llevo al registro de trabajo y luego lo muevo al puerto A.
http://www.slideshare.net/victorpe/uso-mplab-presentation
Una vez tengas listo el proyecto podemos usar la plantilla planteada en el slide e incluso podemos configurar nuestros puertos de acuerdo al diagrama de flujo lo cual es muy similar en ambos casos.
Basados en nuestro diagrama de flujo configuraremos el puerto A como entrada y el puerto B como salida, esto se hace poniendo en 1 todos los pines del puerto A y poniendo en 0 los pines del puerto B. Para estar sintonizados debes tener a la mano el diagrama de pines del PIC y alli encontraras cuales son sus posiciones, estas debes tenerlas en cuenta a la hora del montaje en el protoboard para evitar errores en las conexiones. Por ahora nos centraremos en la programacion : Para hacer 1 todos los pines del puerto A debo empezar a usar las instrucciones que teniamos con anterioridad, para esto usaremos una instruccion orientada a Bytes y una de literales y control. Lo que haremos es colocar los 1 que necesitamos en el registro de trabajo y luego llevarlos al puerto A; esto se hace usando la instruccion MOVLW que significa mueva un literal al registro de trabajo W y una vez este alli lo llevo a la posicion de mi puerto A. Por definicion del fabricante la parte logica del puerto A es TRISA, entonces en hexadecimal 6 unos que necesito para hacer la configuracion serian 3F ese literal lo llevo al registro de trabajo y luego lo muevo al puerto A.
Para hacer que puerto B sea salida debo usar la instruccion CLRF y a continuacion designo quien se pondra en 0, por lo tanto lo siguiente es TRISB. De esta forma nuestro programa ira de esta forma:
Fig. 1 Como ajustar entradas y salidas del PIC
Fig. 1 Como ajustar entradas y salidas del PIC
Bien, siguiendo con el proceso de escritura y habiendo definido por donde puedo ingresar la señal y por donde la puedo sacar para visualizar continuaremos con la siguiente parte que es revisar el estado de las interrupciones ocurridas en alguno de los pines de entrada del PIC y que eso se vea reflejado en en la salida para ella se debe escojer dos de los pines del puerto A y 3 de los pines del puerto B debes tener muy claro cuales son para asi incluirlos en el programa. Nosotros tomaremos en el Puerto A los pines 0 y 1 y para el puerto B los pines 0,1 y 2.
Entonces lo que haremos es convertir la parte fisica de las salidas del PIC en estados de 1 o 0 logico para que encienda los leds de acuerdo a nuestro diagrama de flujo.
1) Apagar todas las salidas y verificar si algun pulsador esta cerrado: Para ello utilizo las instrucciones de bit y lo hago pin a pin o puedo hacer todos los pines 0 v con la instruccion BCF PORTB. Ahora aplico un retardo llamando la subrutina UNSEGUNDO. Inmediatamente verifico que por los pines 1 o 0 del puerto de entradas este llegando 5v de ser asi debo encender alguno de los leds.
2) Dependiendo del tiempo en el que pulse el boton debera cumplir con las condiciones dadas en el principio del planteamiento, por lo tanto debo crear un contador del tiempo para que antes de encender cualquier salida preguntemos a este reloj si es mayor o menor que alguna condicion, debo tener cuidado de usar una logica adecuada de acuerdo a las instrucciones.
3) Una vez verificado el contador debo verificar cual de los pulsadores esta cerrado o si ambos lo estan y de acuerdo a ello hacer encender el led correspondiente.
De esta forma y con el detalle dado en los comentarios del lado derecho para que comprendan mejor lo que se plantea, el programa sera asi:
Fig. 2 Programa finalizado:
2) Dependiendo del tiempo en el que pulse el boton debera cumplir con las condiciones dadas en el principio del planteamiento, por lo tanto debo crear un contador del tiempo para que antes de encender cualquier salida preguntemos a este reloj si es mayor o menor que alguna condicion, debo tener cuidado de usar una logica adecuada de acuerdo a las instrucciones.
3) Una vez verificado el contador debo verificar cual de los pulsadores esta cerrado o si ambos lo estan y de acuerdo a ello hacer encender el led correspondiente.
De esta forma y con el detalle dado en los comentarios del lado derecho para que comprendan mejor lo que se plantea, el programa sera asi:
Fig. 2 Programa finalizado:
Suscribirse a:
Entradas (Atom)