trabajo de investigación pic 16f886

11
Investigación PIC 16F886 Profesor: Juan Antonio Sarreon Ramírez Materia: Microprocesadores Integrantes: Gascón Ibarra Cristian Erick Rivera Barreiro Isaías Paredes Gamero Carlos Alonso Colalco Reinaldo

Upload: isaias-rivera

Post on 27-Dec-2015

267 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Trabajo de Investigación PIC 16F886

Investigación PIC 16F886

Profesor: Juan Antonio Sarreon Ramírez

Materia: Microprocesadores

Integrantes: Gascón Ibarra Cristian Erick

Rivera Barreiro Isaías

Paredes Gamero Carlos

Alonso Colalco Reinaldo

Page 2: Trabajo de Investigación PIC 16F886

Que son los circuitos integrados (CI)

Un CI es aquel en el cual todos los componentes, incluyendo transistores, diodos, resistencias,

condensadores y alambres de conexión, se fabrican e interconectan completamente sobre un chip o

pastilla semiconductor de silicio.

Una vez procesado, el chip se encierra en una capsula plástica o de cerámica que contiene los pines

de conexión a los circuitos externos.

Los chips digitales más pequeños contienen varios componentes sencillos como compuertas,

inversores y flip-flops, los más grandes contienen circuitos y sistemas completos como contadores,

memorias, microprocesadores, etc. La mayoría de los circuitos integrados digitales vienen en

presentación tipo DIP (Dual in-line package) o de doble hilera. Los CI’s más comunes tipo DIP son los

de 8, 14, 16,24, 40 y 64 pines.

En la capsula trae impresa la información respecto al fabricante, la referencia del dispositivo y la fecha

de fabricación.

Además del tipo DIP, existen otras presentaciones comunes de los circuitos integrados digitales como

la capsula metálica, la plana y la chip carrier. Existen circuitos integrados que utilizan capsulas SMT o

de montaje superficial, SMT son casi 4 veces más pequeños que los DIPs.

La tecnología SMT (Surface-mount technology) es la que ha permitido obtener calculadores del tamaño

de una tarjeta de crédito.

Terminales del micro-controlador PIC16F886 y sus respectivas funciones

Esta sería la disposición de sus terminales y sus respectivos nombres.

Page 3: Trabajo de Investigación PIC 16F886

Encapsulado DIP - PIC16F886

Pin 1 que es utilizado para resetear el microcontrolador.

Las cuatro entradas para los conversores análogo digital del pin 2-5 el cual tiene 14 modos y se puede

tener referencias de voltajes programados. Y tiene dos comparadores internos.

Los puertos 6,7 que son utilizados para programación puede ser conectado al puerto serial.

Los pines 9 y 10 son utilizados para el resonador externo.

Los pines 11 a 14 son salidas, controlan diferentes dispositivos.

Los pines 15-18 funcionan como entradas o salidas, pueden ser utilizados para recepción de datos o

salida control de los dispositivos externos.

Ocho salidas las cuales pueden ser agrupadas de acuerdo a la necesidad y control de diferentes

dispositivos y de control

Características principales Las características principales de estos dispositivos son:

• CPU de arquitectura RISC (Reduced Instruction Set Computer).

• Set de 35 instrucciones.

• Frecuencia de reloj de hasta 20MHz (ciclo de instrucción de 200ns).

• Todas las instrucciones se ejecutan en un único ciclo de instrucción, excepto las de salto.

• Hasta 8K x 14 palabras de Memoria de Programa FLASH (ver tabla a continuación).

• Hasta 368 x 8 bytes de Memoria de Datos tipo RAM (ver tabla a continuación).

• Hasta 256 x 8 bytes de Memoria de Datos tipo EEPROM (ver tabla a continuación).

• Hasta 15 fuentes de Interrupción posibles.

• 8 niveles de profundidad en la Pila hardware.

• Modo de bajo consumo (Sleep).

• Tipo de oscilador seleccionable (RC, HS, XT, LP y externo).

• Rango de voltaje de operación desde 2,0V a 5,5V.[3][4][5]

• Conversor Analógico/Digital de 10 bits multicanal.

• 3 Temporizadores.

• Watchdog Timer o Perro Guardián.

• 2 módulos de captura/comparación/PWM.

• Comunicaciones por interfaz USART (Universal Synchronous Asynchronous Receiver Transmitter).

• Puerto Paralelo Esclavo de 8 bits (PSP).

• Puerto Serie Síncrono (SSP) con SPI e I2C.

Page 4: Trabajo de Investigación PIC 16F886

Estructura interna Estos microcontroladores tienen la memoria de programa y la memoria de datos separadas, lo que se

conoce como arquitectura Harvard. Esta configuración interna permite entre otras cosas acceder a

las instrucciones de programa y a los datos simultáneamente a través de buses diferentes, lo que

mejora notablemente la velocidad de proceso de estos dispositivos.

Circuitería externa auxiliar Para que el microcontrolador sea capaz de funcionar en cualquier proyecto, se necesita al menos la

siguiente circuitería externa:

• La alimentación.

• El reloj (oscilador).

También, y de manera opcional:

• El circuito de reinicio.

Memoria interna Existen tres bloques bien diferenciados de memoria. Estos son:

• Memoria de programa EEPROM Flash: es el lugar físico donde se guarda el programa de usuario. Es

de tipo no volátil.

• Memoria de datos SRAM: es el lugar físico donde se guardan datos. Es de tipo volátil.

• Memoria de datos EEPROM: es el lugar físico donde se guardan datos. Es de tipo no volátil.

Memoria de datos SRAM Esta memoria es de tipo volátil, lo que significa que no conserva su contenido después de un apagado

de alimentación.

En esta memoria se encuentran los registros de funciones especiales (SFR) y los registros de propósito

general (GPR), y está particionada en cuatro bancos (0, 1, 2 y 3), seleccionables independientemente.

El banco 0 es el banco seleccionado por defecto cuando se alimenta al microcontrolador.

Registros de funciones especiales (SFR) Todos los microcontroladores cuentan con registros internos que permiten controlar y supervisar las

funciones y recursos disponibles del dispositivo.

Los registros de los microcontroladores PIC se encuentran en un espacio especial de la memoria de

datos, el SFR (Special Function Registers). En los dispositivos PIC16F87X estos registros son de 8 bits,

la mayoría de lectura y escritura. Se puede acceder a dichos bits de manera individual, o bien a todo el

registro a la vez.

Determinados pares de registros tienen funciones especiales para las cuales se pueden considerar

unidos en un único registro de 16 bits, aunque físicamente siguen estando separados.

El registro STATUS

El registro de estado (STATUS) es uno de los más importantes y empleados en el microcontrolador.

Proporciona información acerca del resultado de operaciones aritméticas, operaciones lógicas y causa

de reinicios, además de permitir la selección del banco de memoria de datos.

Page 5: Trabajo de Investigación PIC 16F886

El registro W El registro de trabajo W (Working Register) es un registro relevante especial de 8 bits que participa en

la mayoría de instrucciones. A diferencia de los SFR, se encuentra dentro de la misma CPU, y puede

ser accedido tanto para lectura como para escritura.

Set de instrucciones y sintaxis Los PIC16F87X son microcontroladores RISC. Esto se refleja en que tienen un repertorio reducido de

35 instrucciones ortogonales (prácticamente todas las instrucciones pueden utilizar cualquier

operando), éstas son rápidas y todas tienen una longitud fija de 14 bits.

Las instrucciones se pueden clasificar en:

• Instrucciones de carga.

• Instrucciones de bits.

• Instrucciones aritméticas.

• Instrucciones lógicas.

• Instrucciones de salto.

• Instrucciones de manejo de subrutinas.

• Instrucciones especiales.

Tabla resumen de instrucciones

Sintaxis Descripción Ciclos de Instrucción

Instrucciones de carga

CLRF f Borra el contenido del registro f 1

CLRW Borra el contenido del registro W 1

MOVF f,d Mueve el contenido del registro f 1

MOVWF f Mueve el contenido del registro W al registro f 1

MOVLW k Guarda en el registro W el valor k 1

Instrucciones de bit

BCF f,b Pone en "0" el bit b del registro f 1

BSF f,b Pone en "1" el bit b del registro f 1

Instrucciones aritméticas

ADDLW k Suma el valor k al registro W 1

ADDWF f,d Suma el contenido del registro W con el de f 1

DECF f,d Decrementa en una unidad el contenido del registro f 1

INCF f,d Incrementa en una unidad el contenido del registro f 1

SUBLW k Resta el valor k al registro W 1

SUBWF f,d Resta el contenido del registro W al registro f 1

Page 6: Trabajo de Investigación PIC 16F886

En todas las instrucciones donde aparece una d como operando:

• Si d = 0, el resultado de la operación se guarda en W.

• Si d = 1, el resultado de la operación se guarda en el registro f. Es el valor por defecto.

Instrucciones lógicas

ANDLW k Realiza la operación lógica AND entre el valor k y el registro W 1

ANDWF f,d Realiza la operación lógica AND entre el contenido del registro W y el de f 1

COMF f,d Niega el valor del registro f 1

IORLW k Realiza la operación lógica OR entre el valor k y el registro W 1

IORWF f,d Realiza la operación lógica OR entre el contenido del registro W y el de f 1

RLF f,d Rota el contenido del registro f hacia la izquierda a través del carry bit 1

RRF f,d Rota el contenido del registro f hacia la derecha a través del carry bit 1

SWAPF f,d Intercambia los cuatro primeros bits con los cuatro últimos del registro f 1

XORLW Realiza la operación lógica XOR entre el valor k y el registro W 1

XORWF f,d Realiza la operación lógica XOR entre el contenido del registro W con el de f 1

Instrucciones de salto

BTFSC f,b Lee el bit b del registro f y salta la instrucción siguiente si está en “0” 1 (2 si

salta)

BTFSS f,b Lee el bit b del registro f y salta la instrucción siguiente si está en “1” 1 (2 si

salta)

DECFSZ f,d Decrementa en una unidad el contenido del registro f y salta la instrucción

siguiente si es cero

1 (2 si

salta)

INCFSZ f,d Incrementa en una unidad el contenido del registro f y salta la instrucción

siguiente si es cero

1 (2 si

salta)

GOTO k Salto incondicional a la etiqueta k 2

Instrucciones de manejo de subrutinas

CALL k Llamada a la subrutina k 2

RETFIE Retorno de una interrupción 2

RETLW Retorno de una subrutina con el valor k en el registro W 2

RETURN Retorno de una subrutina 2

Instrucciones especiales

CLRWDT Borra el temporizador del Watchdog 1

NOP No realiza ninguna operación (pero consume tiempo de ejecución) 1

SLEEP Se pone el PIC en estado de reposo (dormido) 1

Page 7: Trabajo de Investigación PIC 16F886

Registro de configuración Estos microcontroladores cuentan con un registro especial llamado palabra de configuración

(Configuration Word) de 14 bits, que se encuentra en la dirección 2007h de la memoria de

programa.

Este registro debe escribirse durante el proceso de grabación del microcontrolador ya que no puede

ser modificado durante el tiempo de ejecución de un programa.

Su función es especificar ciertas características de funcionamiento del microcontrolador, como son:

• Protección de memoria de programa.

• Uso del modo de depuración en circuito.

• Permiso de escritura en memoria Flash.

• Protección de memoria EEPROM de datos.

• Uso de programación en modo de bajo voltaje.

• Uso de reinicio por caída de tensión.

• Uso del temporizador de conexión de alimentación.

• Uso del Watchdog.

• Tipo de oscilador empleado.

Existen dos formas de configurar estos bits: una de ellas es desde MPLAB, mediante la opción

Configuration bits del menú configure. La otra es mediante la directiva CONFIG dentro del programa

ensamblador.

Controlando el conversor A/D Los registros asociados al conversor A/D son:

• ADRESH (completo)

• ADRESL (completo)

• ADCONO (completo)

• ADCON1 (completo)

Como la resolución del convertidor A/D es de 10 bits y los registros del |iC son de 8 bits, se utilizan dos

registros, ADRESL y ADRESH (AD Result Low y AD Result High), de forma concatenada.

Es decir, los 8 bits de ADRESL y 2 bits de ADRESH.

Los registros ADC0N0 y ADCON1 permiten controlar, configurar y poner en marcha al conversor.

Los bits 6 y 7 del registro ADCON0 sirven para ajustar la frecuencia del oscilador del conversor, que

está ligada directamente con la frecuencia de oscilación del ^C. Los bits 3,4 y 5 sirven para elegir el

canal de conversión. El bit 2 sirve para iniciar la conversión. Debe ponerse en nivel lógico alto (1) para

comenzar el proceso de conversión. Automáticamente, este bit pasará a nivel lógico bajo (0) cuando la

conversión haya finalizado. El bit 1 no se usa. El bit 0 sirve para activar el módulo de conversión. Si

este bit está a nivel lógico bajo, el módulo de conversión estará deshabilitado.

El registro ADCON1 es el encargado de definir qué patita del |iC usaremos como entrada analógica.

Esto es muy útil cuando, por ejemplo, se usa un mismo terminal del |iC como salida/entrada digital y en

un determinado momento se quiere que ese mismo terminal lea un voltaje analógico externo. Este

registro también es el responsable de la selección de la “justificación” del resultado de la conversión (bit

7) y de configurar cual/es serán los terminales donde aplicaremos la tensión de referencia en caso de

necesitarla.

Page 8: Trabajo de Investigación PIC 16F886

Conversión Terminada El tiempo que le toma al ^C realizar la conversión se denomina Tj^d y nunca debe ser menor que 1,6

^s para la familia 16F87X. el tiempo Tad es configurado por software según la relación Tad =

kTosc donde K es el divisor de la frecuencia del conversor. Por ejemplo, si trabajamos con

Tose- 1^s y en los bits 7 y 6 del registro ADC0N0 ponemos 00, quedará: Tad = 2Tose = 2 * lfis =

2fis lo cual está dentro del rango permitido.

Una vez terminada la conversión, el resultado se almacena en los registros ADRESH y ADRESL según

estén configurados en el bit 7 del registro ADC0N1. La "justificación" a la derecha o izquierda es

sencilla de comprender; se trata de guardar el resultado de 10 bits en dos registros de 8 bit’s c/u, o sea

que se elegirá si se quieren los 8 primeros bits en el ADRESL y los dos restantes en el ADRESH o

viceversa.

Generalmente la elección de la justificación está directamente emparentada con la resolución que

queremos leer, es decir, si se quiere conectar un potenciómetro y según la tensión aumentar o

disminuir el tiempo de parpadeo de un led, se puede justificar a la izquierda y leer como resultado de la

conversión solo los 8 bits del ADRESH y descartar o despreciar los dos bits de menor peso significativo

que se guardarán en el ADRESL.

Pasos necesarios para la conversión A/D A modo de algoritmo los pasos necesarios para una correcta utilización del módulo A/D son los

siguientes:

1. Configurar el módulo A/D:

1. Terminales de entrada analógica y de referencia.

2. Seleccionar el canal adecuado.

3. Seleccionar la velocidad de conversión.

4. Prender el conversor: Setear el bit 0 del registro ADCON0

2. Empezar la conversión: Setear el bit 1 del registro ADCON0

3. Esperar que el bit 2 del registro ADC0N0 se ponga a 0

4. Leer el resultado en los registros ADRESH:ADRESL

En estos pasos no se tiene en cuenta que se pueden necesitar más de una conversión por distintos

canales o bien que se realicen varias conversiones y luego tomar un promedio. Esta última técnica es

muy usada cuando las variaciones de tensión son rápidas y promediando tres o cuatro conversiones se

tiene así el resultado, hasta que se realice una segunda conversión.

Acerca de la programación de los dispositivos La familia de los PIC16F88X cuenta con un set reducido de 35 instrucciones, lo que facilita

enormemente su memorización. La mayoría de estas instrucciones se ejecutan en un solo ciclo de

instrucción, mientras que aquellas instrucciones que realizan saltos de ejecución lo hacen en dos ciclos

de instrucción. Cada una de estas instrucciones se codifica en una palabra de 14 bits única e

inequívoca, que conforman en conjunto lo que se conoce como código máquina del dispositivo.

Aunque podría emplearse directamente este código máquina para programar el dispositivo (ya fuera en

formato binario o en hexadecimal), resultaría demasiado lento y complicado. Por esta razón, cada una

de las instrucciones se representa de manera equivalente con un nemónico, que es más fácil de

recordar y de interpretar por el programador. A este tipo de lenguaje de programación se le llama

Page 9: Trabajo de Investigación PIC 16F886

lenguaje ensamblador.

Actualmente, para la programación de microcontroladores puede emplearse tanto el lenguaje

ensamblador como lenguajes de más alto nivel, tipo C o Pascal, empleando el compilador adecuado.

Los microcontroladores tienen un espacio de memoria que varía según el modelo y este espacio de

memoria es limitado. Hay que tener en cuenta que a cada instrucción escrita en lenguaje de alto nivel le

corresponderán por lo general varias instrucciones en lenguaje ensamblador, lo que significa que un

programa escrito en lenguaje de alto nivel ocupa más espacio de memoria que uno escrito en lenguaje

ensamblador. Por este motivo, la elección de uno u otro tipo de lenguaje a la hora de programar deberá

hacerse teniendo en cuenta el espacio de memoria disponible.

En caso de utilizar un lenguaje de alto nivel, siempre se requerirá compilar el pograma terminado para

obtener el archivo hexadecimal (lenguaje máquina) con el cual se programará el microcontrolador.

La programación física del dispositivo se hará normalmente mediante un programador, capaz de grabar

el programa de usuario en la memoria del microcontrolador.

Ejemplo sencillo: encender y apagar un LED

El ejemplo propuesto ilustra cómo conectar un LED por medio de una resistencia limitadora de corriente

a un terminal de salida de un PIC16F88X para que éste se encienda al presionar un pulsador y se

apague al soltarlo.

Circuito eléctrico

El circuito completo se debe alimentar a 5 V. Se utiliza un cristal de cuarzo de 10 MHz con

condensadores de 27 nF como circuito de reloj y un circuito de reset.

Se agrega un pulsador conectado a la patita RA0 (entrada) y un LED con su resistencia limitadora

conectado a la patita RB7 (salida).

Programa

Para crear el programa que se grabará en el PIC se puede usar MPLAB, que es el entorno de

desarrollo gratuito ofrecido por el fabribante Microchip Technology Inc.

Básicamente este sencillo ejemplo se puede modelar con el siguiente pseudocódigo:

Inicio programa Repetir:

RA0 = 1?

Si —> Encender LED No —>

Apagar LED Fin Repetir Fin

programa

Page 10: Trabajo de Investigación PIC 16F886

Ensamblador Empleando MPLAB, se genera el programa en lenguaje ensamblador a partir del pseudocódigo

anterior. El archivo generado deberá tener la extensión ".asm":

El símbolo ; permite escribir comentarios en el programa.

Inicio, Comienzo, Apaga y Enciende son etiquetas que ayudan a identificar una

dirección de memoria del programa. Éstas se reemplazan por la dirección de memoria

correspondiente.

En el programa se pueden observar las directivas comentadas, instrucciones, literales, configuración

de registros, etc.

Lenguaje máquina Al compilar el archivo ".asm" creado se obtienen varios archivos. Uno de ellos, con extensión ".hex",

es el que se grabará en el PIC, y contiene todas las instrucciones traducidas al lenguaje máquina del

microcontrolador.

El archivo ".hex" obtenido es el siguiente:

:020000040000FA

:10000000831600308600FF308500831205180B2808

:0A0010000 9280 6100 6280 6140 6282 9 :00000001FF

LIST P= PIC16F873 ;Indica que Pic se usa

INCLUDE "P16F8 7 3.inc" ;Agrega la definición estándar de registros

ORG 0 0h ;Comienza el programa en la dirección 00h

Inicio bsf STATUS,5 ;Selecciona el banco 1 de memoria

movlw 0 0h ;Guarda en W el n° 0

movwf TRISB ;Indica que el puerto B es salida

movlw 0ffh ;Guarda en W el n° 255d

movwf TRISA ;Indica que el puerto A es entrada

bcf STATUS,5 ;Selecciona el banco 0 de memoria

Comienzo btfsc P0RTA,0 ;Comprueba el estado de RA0

goto Enciende ;Si está en “1” salta a "Enciende"

goto Apaga ;Si está en “0” salta a "Apaga"

Apaga bcf P0RTB,0 ;Pone un “0”en RB7

goto Comienzo ;Salta a Comienzo

Enciende bsf P0RTB,0 ;Pone un “1”en RB7

goto Comienzo ;Salta a Comienzo

end ;Fin del programa

Page 11: Trabajo de Investigación PIC 16F886

Referencias

[1] Microcontroladores PIC. Diseño práctico de aplicaciones, página 34 [2] Microcontrolador PIC16F84. Desarrollo de proyectos. 2a edición, página 4 [3] PIC16F87XA Datasheet [4] PIC16F870/871 Datasheet [5] PIC16F872 Datasheet