Está en la página 1de 27

Tutorial Microcontrolador PIC.

En este curso bsico de microntroladores PIC har referencia principalmente al PIC 16f84, por ser este el de uso ms comn entre los estudiantes. El primer paso importante el ver el diagrama de pines del PIC16F84, en el cual se observa como estn distribuidos sus pines. Este circuito integrado cuenta con 2 puertos configurables como entradas o salidas segn sea el caso y consta de 18 pines las cuales se encuentran asignadas de la siguiente manera: Pin 1: -----------RA2 Pin 2: -----------RA3 Pin 3: ---------RA4/TOCKI Pin 4:------------Reset Pin 5:--------Tierra (GND) Pin 6:------------RB0/INT Pin 7:------------RB1 Pin 8:------------RB2 Pin 9:------------RB3 Pin 10:----------RB4 Pin 11:----------RB5 Pin 12:----------RB6 Pin 13:----------RB7 Pin 14:----------Vcc Pin 15:-- ------Osc2 Pin 16:----------Osc1 Pin 17:----------RA0 Pin18:----------RA1

El puerto A est denotado por el color Azul oscuro, el cual tiene slo cinco pines que puedes configurar como entrada o salida. La pata 3, o sea, RA4/TOCKI puede ser configurado a su vez como entrada/salida o como temporizador/contador. Cuando es salida se comporta como colector abierto, por lo tanto debemos poner una resistencia Pull-up a Vcc de 1 Kohm. Cuando es configurada como entrada, funciona como disparador Schmitt Trigger por lo que puede reconocer seales con un poco de distorsin. El puerto B est denotado por el color anaranjado, y tiene ocho pines que igualmente se pueden configurar como entrada o salida. Los pines 15 y 16 son nicamente para el oscilador externo el cual estudiaremos con ms detalle ms adelante. El pin 4, o sea, el Reset se debe conectar con una resistencia de 10 Kohm a Vcc para que el Pic funcione, si lo queremos resetear entonces pondremos un micropulsador con una resistencia de 100 Ohm a tierra. La mxima capacidad de corriente para los puertos se muestra en la siguiente tabla: PUERTO A MODO SUMIDERO MODO FUENTE 80 mA 50 mA PUERTO B 150 mA 100 mA

Por ltimo tenemos los pines 14 y 5 que son la alimentacin la cual no debe sobrepasar los 5 Voltios.

Oscilador Externo: Es necesario para que nuestro PIC pueda funcionar, puede ser conectado de cuatro maneras diferentes. En la siguiente tabla encontraras los diagramas necesarios para su conexin y una breve descripcin de cada uno.

XT

Oscilador compuesto por un cristal y dos condensadores.

RC

Oscilador compuesto por una resistencia y un condensador.

HS

Oscilador compuesto por un cristal de alta velocidad.

LP

Oscilador compuesto por un cristal de baja frecuencia y bajo consumo de potencia.

El siguiente paso importante para tener claro como debemos empezar a programar es conocer la tabla de registros. Esta tabla est dividida en dos partes llamadas BANCO 0 y Banco 1. Nos debemos interesar momentneamente en: STATUS, PORTA, PORTB, TRISA y TRISB. Para que nuestro PIC pueda trabajar debemos configurar sus puertos como entrada o como salida segn sea el caso, si le asignamos un CERO(0) a un pin ste ser SALIDA y si asignamos un UNO (1) ste ser ENTRADA. Esta asignacin de pines se hace programando los registros TRISA y TRIS B. TRISA es el registro donde se almacenan los bits que asignan un pin como entrada o salida del PUERTO A. Recordemos que el puerto A slo tiene 5 pines, por lo tanto un ejemplo de esto sera:

Si TRISA (puerto A) es igual a 19 (11001) entonces esto se leera, TRISA RA0 RA1 RA2 RA3 RA4 ASIGNACIN 1 0 0 1 1 ESTADO ENTRADA SALIDA SALIDA ENTRADA ENTRADA

El bit menos significativo se asigna desde RA0. Si TRISB (puerto B) es igual a 32 (00110010), entonces esto se leera, TRISA RA0 RA1 RA2 RA3 RA4 RA5 RA6 RA7 ASIGNACIN 0 1 0 0 1 1 0 0 ESTADO SALIDA ENTRADA SALIDA SALIDA ENTRADA ENTRADA SALIDA SALIDA

NOTA: Todos los valores mencionados y que se mencionarn, estn expresados en valores hexagesimales. En la siguiente parte, comenzaremos a programar el PIC y sabremos como ingresar estos valores en el TRIS A o TRIS B segn sea el caso.

Tutorial Microcontrolador PIC. Segunda parte. Para comenzar a trabajar con el programa MPLAB debemos simplemente abrir un nuevo archivo en la ventana File opcin New como muestra la imagen 1. Nota: El MPlab es un programa, no es inteligente y no sabe que hacer por si solo. Es mas, les debemos dar las ordenes una a una y muy bien explicadas para que este las entienda. Estas ordenes estarn acompaadas por parmetros que le dirn a la mquina como se realizar esa tarea. De otra manera, esta no se ejecutar.

Fig. 1. Iniciando un nuevo programa. A continuacin analizaremos las siguientes lneas: list #include port_a port_b trisb trisa estado p=16f84 p16f84.inc equ equ equ equ equ 5 6 86 85 3

valor1 equ 0C valor2 equ 0D clrf estado clrf port_a bsf estado,5 ;seleccin del banco 1 movlw 0x19 movwf port_a clrf port_b movlw 0x32 movwf port_b bcf estado,5 ;selecciona el banco 0 clrf port_a clrf port_b Antes de analizar estas lneas debemos tener en claro los siguiente:

para mantener un orden, se recomienda presionar la tecla TAB entre la instruccin y el parmetro El smbolo de Punto y Coma " ; " indica el comienzo de un comentario, sirve para ubicarse mejor en el avance del programa y luego encontrar mas rpidamente una lnea o bloque determinado. Todo lo que siga a un " ; " no generar cdigo hexagesimal en nuestro proyecto. En pocas palabras, lo que siga al " ; " no influye en el programa. 1.- Primero debemos especificar con que microcontrolador estamos trabajando, en las dos primeras lneas especificamos que vamos a trabajar con el PIC 16F84. 2.- Luego definimos la posicin en memoria de nuestros registros, el mapa de memoria lo presento en la figura 2:

Figura 2: Mapa de memoria del PIC 16f84. Para comenzar destacaremos los registros: PORTA PORTB TRISA TRISB STATUS posicin 05h posicin 06h posicin 85h posicin 86h posicin 03h

El registro STATUS que en este caso le hemos llamado "estado" se compone de la siguiente forma: 7 IRP 6 RP1 5 RP0 4 TO 3 PD 2 Z 1 DC 0 C

Si en la casilla 5 (RP0) del registro STATUS hay un CERO entonces estamos en el BANCO 0. Si en la casilla 5 (RP0) del registro STATUS hay un UNO entonces estamos en el BANCO 1. Desde la tercera a la septima lnea definimos los nombres de nuestros registros, en el caso del Puerto A lo llamamos port_a - es importante que siempre que nos queramos referir al Puerto A lo hagamos en minsculas, ya que aqu lo definimos as (PORT_A port_a) si en un principio se define con maysculas, siempre nos tendremos que referir a este con maysculas Otro ejemplo, si en la tercera lnea en lugar de "port_a equ 5" colocamos "hola equ 5" cada vez que queramos referirnos al Puerto A debemos hacerlo como "hola". En la octava y novena lnea, definimos nuestro registros personales, los que vamos a ocupar en nuetro programa, segn el mapa de memoria este comienza en la posicin 0Ch. NOTA: Recuerden que todos los valores mencionados y que se mencionarn, estn expresados en valores hexagesimales. El siguiente paso es definir los pines de entrada y salida, recordemos el ultimo bloque de nuestro programa: clrf clrf bsf estado port_a estado,5 ; limpiar el registro estado ; limpiar el puerto a ; seleccin del banco 1

Nota: La instruccin BSF (Bit Set f) carga un 1 en el registro (en este caso el registro estado) en el bit (en este caso el 5), como vimos anteriormente el registro estado al tener un 1 en el 5to bit, entonces estamos trabajando en el banco 1, esto para poder definir los pines de entrada o salida del micro. movlw movwf 0x19 port_a ;cargo un 11001 en el acumulador ; muevo el contenido del acumulador ;al puerto a, defino los pines 0, 1 y 4 ;como entrada y 2 y 3 como salida

Nota: El mtodo para definir los pines del puerto b es exactamente el mismo clrf movlw movwf ;limpiar el puerto b ;cargo un 00110010 al acumulador ; defino los pines 1, 4 y 5 como entrada y ;los 0, 2, 3, 6 y 7 como salida bcf estado,5 ;selecciona el banco 0 clrf port_a ; limpiar el puerto a clrf port_b ; limpiar el puerto b En la siguiente parte, haremos un pequeo programa demostrativo y veremos como detectar errores y simularlo. port_b 0x32 port_b

Tutorial Microcontrolador PIC. Tercera parte. En la parte anterior vimos como inicializar un PIC, ahora, usando esa informacin haremos un pequeo programa el cual solo encender un LED segn el interruptor que se presione. Lo primero es visualizar lo que queremos, (ordenar nuestro pines de entrada y salida por ejemplo) y segn eso empezar a trabajar.

Figura 3: Circuito a implementar. Segn el circuito anterior, vemos que el puerto A lo usaremos como entrada y el puerto B como salida, a los cuales hemos conectado LED'S para poder ver los resultados. El puerto A est conectado directamente a la alimentacin con lo cual sabemos que normalmente tiene una entrada de +5 V ( 1 lgico) y al activarse el interruptor tendremos un 0 lgico. Nota: Es muy importante que todos los pines de entrada queden bien definidos si estn en un nivel alto o bajo por que de lo contrario el PIC entrar en un estado de incertidumbre y no trabajar de manera correcta. Los pines de salida, no es necesario que se conecten si no los vamos a usar.

Comenzando con el programa. Como vimos anteriormente, para abrir una nueva ventana de programacin pinchamos en la ventana FILE y le damos a la opcin NEW, luego debemos inicializar nuestro PIC, en este caso ser: ; **************************************** ; * Ejemplo tutorial PIC * ; * Este programa enciende un led dependiendo * ; * de que interruptor sea activado * ; **************************************** list p=16f84 #include p16f84.inc port_a equ 5 port_b equ 6 trisb equ 86 trisa equ 85 retard equ 11 ;RETARDO estado equ 3

clrf clrf bsf movlw movwf clrf movlw movwf bcf clrf clrf

estado port_a estado,5 0x1f port_a port_b 0x00 port_b estado,5 port_a port_b

;seleccin del banco 1 ;define RA0 como entrada ;define puerto B como salida

Luego podemos hacer que vaya preguntando a cada pin de entrada, recordemos que segun nuestro circuito los pines estn normalmente en un nivel alto, y en nuestro caso si este esta en un nivel alto hacemos que testee el siguiente, de lo contrario lo mandamos a un subrutina donde encendemos el LED correspondiente. Para esto usamos la instruccin btfss (Bit Test F, Skip if Set), es decir, testea el bit f y salta (skip) si esta en un nivel alto (set), el salto se refiere a que la siguiente instruccin no la considera y salta hasta la subsiguiente.

Al empezar un programa, marcamos el inicio de un bloque, en este caso lo llamaremos "inicio", que original no. inicio btfss call call btfss call call btfss call call btfss call call btfss call call goto port_a,0 ;si el bit 0 del puerto a esta en nivel alto se salta una instruccin enci0 retardo port_a,1 ;si el bit 1 del puerto a esta en nivel alto se salta una instruccin enci1 retardo port_a,2 ;si el bit 2 del puerto a esta en nivel alto se salta una instruccin enci2 retardo port_a,3 ;si el bit 3 del puerto a esta en nivel alto se salta una instruccin enci3 retardo port_a,4 ;si el bit 4 del puerto a esta en nivel alto se salta una instruccin enci4 retardo inicio

En la primera lnea, como dice el comentario adjunto, testea el bit 0 del puerto a, si este esta en un nivel alto entonces el programa se salta una instruccin llegando a la instruccin call (llamar) la cual llama a una subrrutina llamada retardo, de lo contrario, si est en un nivel bajo el programa considera la siguiente instruccin y ejecuta la instruccin call enci0, en la cual se activa el pin 0 del puerto b que es el puerto se salida. El resto del programa: enci0 movlw 0x00 movwf port_b call retar2 movlw B'01' movwf port_b return enci1 movlw 0x00 movwf port_b call retar2

movlw movwf return enci2 movlw movwf call movlw movwf return enci3 movlw movwf call movlw movwf return enci4 movlw movwf call movlw movwf return

B'10' port_b 0x00 port_b retar2 B'100' port_b 0x00 port_b retar2 B'1000' port_b 0x00 port_b retar2 B'10000' port_b

retardo movlw 0x96 movwf retard reta3 decfsz retard,1 goto reta3 return

end

En la primera lnea lo que hacemos es cargar un cero en el acumulador: movlw 0x00 (MOVe Literal to W) y luego la informacin que tiene el acumulador (W) la movemos la puerto b: movwf port_b (MOVe W to F), con esto nos aseguramos el todos los LED's del puerto b estn apagados. En la tercera lnea llamamos un retardo, lo cual siempre es bueno hacer para evitar que el pic colapse, este retardo esta casi al finl del programa y el mecanismo de trabajo es muy parecido al anterior: 1.- Mover el literal 96 (Hexadecimal) en el acumulador, en otras palabras cargar un 96 en el acumulador. 2.- Mover el contenido del acumulador al registro retard, el cual fue definido al comienzo de programa y ubicado en la posicin 11 en la memoria del pic, ahora el registro retard tiene cargado un 96. 3.- Decrementar en una unidad el registro retard y el valor resultante se guarda en el mismo registro y cuando el valor de este sea cero, saltar una lnea en el programa, con lo cual caer en la instruccin return con lo cual vuelve a la posicin desde donde se llamo a la subrutina. decfsz f,d (DECrement F, Skip if Zero) (decrementa el registro indicado y salta si es cero) si el valor de "d" es cero entonces el resultado se guarda en el acumulador, si este valor en cambio es uno entonces el valor se almacena en el mismo registro.

4.- Luego va al bloque de nombre "reta 3" con lo cual se volver a decrementar el registro, esto lo har durante 96 veces hexadecimales, es decir, 150 veces.

Al volver a la 4ta linea de este bloque movlw B'01' hacemos algo muy parecido al paso anterior, slo que ahora cargo un 1 binario en el acumulador y luego movemos esta informacin al puerto b, con lo cual tendremos en la salida del puerto b un 00001 considerando que se cuenta desde RB4 hasta RB0 por lo tanto se enciende el LED correspondiente al pin 0 del puerto b. De esto deducimos que si queremos encender por ejemplo el pin 3 del puerto b, debemos cargar el acumulador con un B'1000' para luego pasar esta informacin al puerto b. Otra alternativa seria: movlw 0x08 ya que 08h = 1000b. Finalmente debemos guardar este programa, para esto pinchamos en la opcion File y luego en Save As y elegimos el directorio y un nombre, en este caso le pondremos ejemplo.asm

Figura 4 Pincha aqui para bajar el programa en formato ASM En la siguiente parte veremos como compilar este programa y detectar los errores de programacin.

Tutorial Microcontrolador PIC. Cuarta parte. En la parte anterior hicimos un programa el cual prende un LED segn el interruptor que se activa. Ahora veremos como compilar este programa en lengua hexa el que finalmente cargaremos en el PIC. Lo primero es pinchar en el men en la opcin project y luego en new project, como indica la figura:

Figura 5 El siguiente paso es darle un nombre al proyecto, se recomienda darle el mismo nombre que al archivo en assembler, en este caso ejemplo.pjt.

Figura 6 Una vez echo esto, aparece la siguiente ventana:

Figura 7

En la parte de abajo, donde dice Project Files pinchamos la opcin ejemplo [.hex] al hacer esto se activa la opcin Node Properties que esta abajo a la derecha, debemos pinchar esta y se abre la siguiente ventana:

Figura 8 En esta seccin, debemos dejar las cosas por defecto (es lo mejor) y simplemente pinchar en OK. Luego volveremos a la ventana anterior solo que ahora se activ la opcin Add Node algunas opciones mas arriba de la ultima que pinchamos, por supuesto elegimos esta y se ve la siguiente pantalla:

Figura 9 Pinchamos en la opcin Browse que esta a la derecha y buscamos en el directorio el programa original, en este caso ejemplo.asm y luego en OK, con esto estamos relacionando un archivo de assembler con el proyecto en hexa. Y finalmente volvemos a la primera pantalla y le damos al OK que esta en la parte superior. A continuacin debemos verificar que no haya errores para eso vamos nuevamente a la opcin project y veremos que hay nuevas opcin que antes no estaban disponibles, elegimos B uild All, y si todo esta correcto aparecer una pantalla como esta:

Figura 10 Donde en la parte final podemos leer: Build completed successfully. En caso de haber algn error, podemos hacer doble clic en el mensaje de error y este nos enviar directamente a esta lnea.

Figura 11

Detalles ms comunes que finalmente entregan error:

Escribir nombres de registro o inicio de bloques con maysculas y luego con minsculas refirindose al mismo. Usar el nombre de un registro como nombre de inicio de bloque. Una vez que hemos pasado esta etapa, nos dedicamos a simular el programa. Lo primero es activar la simulacin yendo a .............................................................

Tutorial Microcontrolador PIC. Quinta parte. Y bueno, ahora procedemos a simular el programa, todo dentro del MPLAB. Esto consiste en ver paso a paso que est realmente haciendo el PIC, ya que si lo hacemos en tiempo real es demasiado rpido. Lo primero es activar la simulacin, para esto pinchamos la ventana de options y le damos a la opcin Development Mode. En la ventana que aparece marcamos donde dice MPLAB-SIM Simulator y adems buscamos el PIC que estamos usando, en este caso el PIC16F84.

Figura 12 Primero analizaremos las herramientas bsicas para hacer una buena simulacin, en la figura 13 estn marcados los principales botones para este trabajo.

Figura 13

1. - Conmutador de la barra de herramientas: Al pinchar esta venta tenemos mas opciones a nuestra disposicin. 2. - Step: Avanza paso a paso por las instrucciones del programa. 3. - Reset: comienza de cero el programa, equivale a activar el pin N4 del PIC, Master Clear (MCLR) 4. - Special Function Register Window: Muestra el estado de los registros especiales, por ejemplo el registro status, puerto a y b, el acumulador, etc. 5. - Watch Symbol: Ventana en la que podemos ver los registro de propsito general, que son los registro que usamos en nuestro programa y a los cuales de damos nombres propios. Al presionar sobre la ventana N4 aparece otra ventana donde debemos elegir los registros que queremos controlar, adems podemos elegir registros especiales y al terminar pinchamos en close.

Figura 14 Ahora, para comenzar la simulacin es recomendable ordenar las ventanas de forma que entren todas en la pantalla, y luego slo debemos pinchar el botn Step (N2) y con eso se marcar la lnea del programa que esta trabajando, otra opcin es presionar F7.

Como podemos simular las entradas de un PIC? Entramos en la opcin Debug - Simulator Stimulus - Asynchronous Stimulus. Como muestra la figura 15.

Figura 15 Luego aparecera una ventana en la cual debemos elegir que pin le vamos a asignar a cada opcin. Sobre el primero pinchamos con el boton secundario del mouse y elegimos la opcin Assign Pin y luego elegimos el pin que le vamos a designar haciendo doble click sobre este, esto se ve en las imagenes 16 y 17 respectivamente.

Figura 16

Figura 17

Luego es muy importante decirle al MPLAB que vamos a hacer una simulacin paso a paso y no en tiempo real, para esto una vez que le hemos designado el pin correspondiente, volvemos a hacer click con el botn secundario del mouse pero esta vez elegimos la opcin Toggle. Despus de esto podemos observar que ya no hay una (P) a la derecha de botn, sino que ahora hay una (T).

Figura 18

Figura 19 En la figura 19 voy a destacar 3 cosas.

1.

Se debe seleccionar la ventana para que al presionar F7 en el teclado o la ventana Step en la parte superior del programa, se produzca la simulacin, es decir, para que corra el programa. 2. En la ventana de funciones especiales, se pone rojo el ultimo registro en cambiar, ac podemos ver que el puerto a tiene sus pines de entrada en niveles altos, excepto el pin 2. 3. Al igual que en el punto anterior, en la ventana de registros, se pone rojo el ultimo en cambiar. 4. Si queremos agregar mas registros para poder verlos en esta ventana debemos presionar en la parte superior izquierda y elegir la opcin Add Watch. Bien ahora estamos listo para cargar este programa en el PIC.

Tutorial Microcontrolador PIC. Sexta parte. Programador.

Ahora viene lo bonito, como construir el programador para el PIC, fcil......

Este programador se conecta al puerto paralelo de PC, antes veremos la disposicin de este puerto.

A continuacin esta el listado de lo necesario para crear este dispositivo.

Listado de componentes Diagrama de circuito Superposicin de componentes Diagrama de la placa

Lista (*) Diagrama Dibujo Placa (**)

* En la lista aparece un transistor ZTX500, ocupen cualquier transistor del tipo PNP. ** Este diagrama se puede imprimir y estampar directamente sobre la placa. Debes respetar el tamao indicado sobre el dibujo.

Tutorial Microcontrolador PIC. Septima parte. ICPROG.

Una vez construido es programador debemos usar el programa ICPROG el cual no es necesario instalar, sino que se utiliza directamente. Al ser cargado por primera ves, te pregunta por la configuracin que vas a usar, debes activarlo de la siguiente forma:

Figura 20

Luego debes ir a la opcin File y elegir Open File y busca el archivo en hexa que creo el MPLAB al crear el proyecto, en el caso de nuestro ejemplo debemos elegir ejemplo.hex

Figura 21 Luego debemos tener cuidado de configurar correctamente el programa, especificar con que PIC vamos a trabajar y el tipo de oscilador que usaremos (especificado en la primera parte del curso).

Figura 22 En la figura 22 podemos apreciar lo siguiente:

1. 2. 3. 4. 5. 6.

Lee la informacin contenida en el PIC. Carga el programa al PIC. Limpia el PIC, es decir, borra cualquier programa que este contenga. Verifica el buen funcionamiento del PIC. Elegir el PIC con el cual estamos trabajando. Seleccionar el tipo de oscilador.

Una vez que presionamos en la ventana N2, la informacin se carga en el PIC y el programa entrega un mensaje diciendo si la transmisin fue exitosa o no.

También podría gustarte