Microcontroladores PIC -PIC16F84 1 - Campus Virtual · Aplicaciones de los microcontroladores....

110
1 Microcontroladores PIC - PIC16F84

Transcript of Microcontroladores PIC -PIC16F84 1 - Campus Virtual · Aplicaciones de los microcontroladores....

1Microcontroladores PIC - PIC16F84

¿Qué es un microcontrolador?¿Qué es un microcontrolador?

Se denomina controlador al dispositivo que se emplea para el gobierno de uno o varios procesos. Por ejemplo, el controlador que regula el funcionamiento de un horno eléctrico dispone de un sensor que mide constantemente la temperatura del horno y actúa sobre las resistencias para mantener la temperatura dentro del rango establecido.

Un microcontrolador es un circuito integrado de alta escala de integración, que incorpora la mayor parte de los elementos que

2 Prof. Mario Gomikian - IHDA

integración, que incorpora la mayor parte de los elementos que configuran un controlador, que contiene todos los componentes fundamentales de un ordenador, y que se suele destinar a gobernar una sola tarea.

En su memoria reside un programa que controla la ejecución de una tarea determinada. Sus líneas de entrada/salida (E/S) se conectan a los sensores y actuadores del dispositivo a controlar y, debido a su pequeño tamaño, suele ir integrado en el propio dispositivo al que gobierna. Por ello son muy útiles para controlar diferentes tipos de dispositivos y procesos.

En la fotografía se puede observar el

tamaño de un microcontrolador, en

3 Prof. Mario Gomikian - IHDA

microcontrolador, en comparación con el de

una aguja.

Aplicaciones de los microcontroladores.Aplicaciones de los microcontroladores.

Sistemas de comunicación: centrales telefónicas, teléfonos fijos, móviles, fax, etc.

Electrodomésticos. Medida y control de procesos.

Enseñanza e investigación.

Periféricos y dispositivos auxiliares de

4 Prof. Mario Gomikian - IHDA

Periféricos y dispositivos auxiliares de las computadoras.

Automoción: climatización, seguridad, ABS, sistemas de navegación, etc.

Automatización industrial, robótica, control de procesos, etc.

Domótica: sistemas de supervisión, vigilancia y alarma, ascensores, calefacción, aire acondicionado, alarmas de incendio, robo, etc.

Otros: instrumentación, electromedicina, tarjetas (smartcard), sistemas de navegación, etc.

Aplicaciones de los microcontroladores.Aplicaciones de los microcontroladores.

5 Prof. Mario Gomikian - IHDA

Ejemplo de aplicación: el automóvil.Ejemplo de aplicación: el automóvil.

6 Prof. Mario Gomikian - IHDA

Ejemplo de aplicación: el automóvil.Ejemplo de aplicación: el automóvil.

•Control del motor.•Consumo, gases, etc. •Climatización. •Seguridad (airbag). •Control frenado (ABS).

7 Prof. Mario Gomikian - IHDA

•Control frenado (ABS). •Instrumentación. •Control de velocidad. •Sistemas de seguridad. •Mantenimiento. •Sistema de navegación. •Control de luces.•ETC.

Ejemplo de aplicación: el automóvil.Ejemplo de aplicación: el automóvil.

8 Prof. Mario Gomikian - IHDA

Características de los microcontroladores:Características de los microcontroladores:

9 Prof. Mario Gomikian - IHDA

¿Qué tiene un microcontrolador?¿Qué tiene un microcontrolador?

Procesador o CPU (Unidad Central de Proceso).

Memoria RAM de datos (donde están los registros).

Memoria para contener el programa del tipo: ROM, OTP, EPROM, EEPROM o FLASH.

Puertos de comunicación con

10 Prof. Mario Gomikian - IHDA

Puertos de comunicación con varias líneas de E/S para comunicarse con el exterior.

Diversos módulos y buses para el control de periféricos: temporizadores, puertos serie y paralelo, conversor analógico-digital y digital-analógico, etc.

Generador de pulsos de reloj que sincronizan el funcionamiento de todo el sistema.

Memoria de programa.Memoria de programa.

11 Prof. Mario Gomikian - IHDA

Memoria de programa.Memoria de programa.

Según el tipo de memoria de programa del que dispongan los microcontroladores, la aplicación y utilización de los mismos es diferente.

Los cinco tipos de memoria no volátil que se pueden encontrar en los microcontroladores del mercado son:

12 Prof. Mario Gomikian - IHDA

• ROM con máscara.

• OTP

• EPROM

• EEPROM

• FLASH

Memoria ROM con máscara.Memoria ROM con máscara.

• Es una memoria no volátil de sólo lectura cuyo contenido se graba durante la fabricación del chip.

• Los circuitos integrados se fabrican en obleas que contienen varias decenas de chips. Estas obleas se obtienen a partir de procesos fotoquímicos: se impregnan capas de silicio y oxido de silicio y se erosionan exponiéndolos a la luz.

13 Prof. Mario Gomikian - IHDA

de silicio y se erosionan exponiéndolos a la luz.

• Para la selección de los puntos del circuito que deben ser erosionados, se sitúa entre la luz y la oblea una máscara con agujeros que permiten el paso de la luz.

• El elevado costo del diseño de la máscara sólo hace aconsejable el empleo de este tipo de memoria cuando se precisan integrados en cantidades superiores a varios miles de unidades.

Memoria OTP.Memoria OTP.

• Es una memoria no volátil de sólo lectura, que puede ser programada una sola vez OTP (One Time Programmable).

• La versión OTP es aconsejable cuando es muy corto el ciclo de diseño del producto, o bien, en la construcción de prototipos y

14 Prof. Mario Gomikian - IHDA

diseño del producto, o bien, en la construcción de prototipos y series muy pequeñas.

• Tanto en este tipo de memoria como en la EPROM, se suele usar la encriptación para proteger el código contenido.

Memoria EPROM.Memoria EPROM.

• Las memorias EPROM (Erasable/Programmable Read Only Memory) pueden borrarse y grabarse muchas veces.

• La grabación se realiza, como en el caso de los OTP, con un dispositivo gobernado desde un PC.

15 Prof. Mario Gomikian - IHDA

dispositivo gobernado desde un PC.

• Si posteriormente se desea borrar el contenido, disponen de una ventana de cristal en su superficie por la que se somete a la EPROM a radiación UV durante varios minutos.

• Hoy en día se utilizan poco, siendo sustituidas por memorias EEPROM o Flash.

Memoria EEPROM.Memoria EEPROM.

• Se trata de memorias de sólo lectura, programables y borrables eléctricamente EEPROM (Electrical Erasable Programmable Read OnIy Memory).

• Tanto la programación como el borrado, se realizan eléctricamente desde el propio grabador y bajo el control de una PC, lo que hace más cómodas y rápidas dichas operaciones. No disponen de ventana de cristal en la superficie.

16 Prof. Mario Gomikian - IHDA

cristal en la superficie.• Los microcontroladores dotados de memoria EEPROM, una vez

instalados en el circuito, pueden grabarse y borrarse cuantas veces se quiera sin ser retirados de dicho circuito (Programacion en circuito).

• El número de veces que puede grabarse y borrarse una memoria EEPROM es finito, por lo que no es recomendable una reprogramación continua.

• Si bien este tipo de memoria es relativamente lenta, es bastante común que los fabricantes incluyan una pequeña zona de memoria EEPROM en los dispositivos programables para guardar y modificar cómodamente una serie de datos o parámetros de utilidad.

• Hoy en día están siendo sustituidas por memorias de tipo Flash.

Memoria FLASH.Memoria FLASH.

• Se trata de una memoria no volátil, de bajo consumo, que se puede escribir y borrar. Funciona como una ROM y una RAM pero consume menos y es más pequeña.

• La memoria FLASH es programable en circuito y es más rápida y de mayor densidad que la EEPROM.

• La alternativa FLASH está recomendada frente a la EEPROM cuando se

17 Prof. Mario Gomikian - IHDA

• La alternativa FLASH está recomendada frente a la EEPROM cuando se precisa gran cantidad de memoria de programa no volátil. Es más veloz y tolera más ciclos de escritura/borrado. Son idóneas para la enseñanza y la ingeniería de diseño.

• Las memorias EEPROM y FLASH son muy útiles al permitir que los microcontroladores que las incorporan puedan ser reprogramados en circuito, es decir, sin tener que sacar el circuito integrado de la tarjeta. Así, un dispositivo con este tipo de memoria, incorporado al control del motor de un automóvil, permite que pueda modificarse el programa durante la rutina de mantenimiento periódico. Así, la reprogramación del microcontrolador puede convertirse en una labor rutinaria dentro de la puesta a punto.

¿Microcontrolador = PIC?¿Microcontrolador = PIC?

Existen distintos fabricantes de microcontroladores (por ejemplo, Analog Devices, National, Philips, Texas, Intel, Motorola, etc.)

18 Prof. Mario Gomikian - IHDA

Otro fabricante de microcontroladores -quizá el más conocido- es Microchip.

Sólo los microcontroladores de Microchip se denominan PIC.

¿Por qué elegir Microchip?¿Por qué elegir Microchip?

Gran facilidad de uso.

Gran cantidad de información disponible en libros, revistas e Internet.

19 Prof. Mario Gomikian - IHDA

Herramientas de desarrollo muy asequibles.

Bajo precio y fácil disponibilidad.

Gran cantidad de dispositivos y versiones de distinta gama, lo que permite lograr la mejor opción para resolver un problema.

Arquitectura HarvardArquitectura Harvard..

Esta es la arquitectura que utilizan los microcontroladores PIC.

La unidad central de proceso (CPU) está conectada a dos memorias (una con las instrucciones y otra con los datos) por medio de dos buses diferentes.

20 Prof. Mario Gomikian - IHDA

Arquitectura HarvardArquitectura Harvard::

21 Prof. Mario Gomikian - IHDA

Una de las memorias contiene solamente las instrucciones del programa(Memoria de Instrucciones o de Programa), y la otra sólo almacena datos(Memoria de Datos). Los buses de instrucciones y datos son totalmenteindependientes, lo que permite: 1- a la CPU poder acceder de formaindependiente y simultánea a la memoria de datos y a la de instrucciones; 2-que los mismos puedan tener distintos contenidos en la misma dirección ytambién distinta longitud; 3- que la longitud de los datos y las instruccionespuede ser distinta, lo que optimiza el uso de la memoria en general; 4- que laCPU pueda acceder a los datos para completar la ejecución de una instrucción y,al mismo tiempo, leer la siguiente instrucción a ejecutar.

Arquitectura HarvardArquitectura Harvard::

22 Prof. Mario Gomikian - IHDA

Ventajas de esta arquitectura:

El tamaño de las instrucciones no esta relacionado con el de los datos, y por lo tanto puede ser optimizado para que cualquier instrucción ocupe una sola posición de memoria de programa, logrando así mayor velocidad y menor longitud de programa.

El tiempo de acceso a las instrucciones puede superponerse con el de los datos, logrando una mayor velocidad en cada operación.

El PIC16F84.El PIC16F84.

23 Prof. Mario Gomikian - IHDA

El PIC16F84.El PIC16F84.

Dentro de la familia PIC de Microchip -en la

gama media- quizá el modelo más difundido, con mayor disponibilidad para utilizarlo en montajes y prácticas, y del que existe mayor información es el PIC16F84A.

24 Prof. Mario Gomikian - IHDA

información es el PIC16F84A.

Si bien es cierto que hoy puede sustituirse por otros modelos con mas prestaciones, incluso más baratos, no por ello deja de ser ideal para comenzar el estudio.

Conociendo al PIC16F84A…Conociendo al PIC16F84A…

Repertorio de 35 Instrucciones. Todas las instrucciones se ejecutan en un solo ciclo excepto las de

salto que necesitan dos. Versiones para bajo consumo (16LF84A), de 4 MHz (PIC16F84A-04) y

20 MHz (PIC16F84A-20). Un ciclo máquina del PIC son 4 ciclos de reloj, por lo cual si tenemos

un PIC con un cristal de 4 MHz, se ejecutarán 1 millón de instrucciones por segundo.

25 Prof. Mario Gomikian - IHDA

un PIC con un cristal de 4 MHz, se ejecutarán 1 millón de instrucciones por segundo.

Memoria de programa Flash de 1 K x 14 bits. Memoria RAM dividida en 2 áreas: 22 registros de propósito específico

(SFR) y 68 de propósito general (GPR) como memoria de datos. 15 registros de funciones especiales. Memoria de datos RAM de 68 bytes (68 registros de propósito

general). Memoria de datos EEPROM de 64 bytes. Contador de programa de 13 bit (lo que en teoría permitiría

direccionar 4 KB de memoria, aunque el 16F84 solo dispone de 1KB de memoria implementada).

Modos de direccionamiento directo, indirecto y relativo.

Conociendo al PIC16F84A…Conociendo al PIC16F84A…

4 fuentes de interrupciones: A través del pin RB0/INT. Por desborde del temporizador TMR0. Por cambio de estado de los pins 4:7 del Puerto B. Por finalización de la escritura de la memoria EEPROM.

1.000.000 de ciclos de borrado/escritura de la memoria EEPROM. 40 años de retención de la memoria EEPROM.

26 Prof. Mario Gomikian - IHDA

40 años de retención de la memoria EEPROM. 13 pins de E/S con control individual de dirección. PORTA de 5 bits <RA0:RA4>. PORTB de 8 bits <RB0:RB7>. Contador/Temporizador TMR0 de 8 bits con divisor programable. Power-on Reset (POR). Power-up Timer (PWRT). Oscillator Start-up Timer (OST). Watchdog Timer (WDT). Protección de código.

Conociendo al PIC16F84A…Conociendo al PIC16F84A…

Modo de bajo consumo SLEEP. Puede operar bajo 4 modos diferentes de oscilador. Programación en serie a través de dos pines. Tecnología de baja potencia y alta velocidad CMOS Flash/EEPROM. Temperatura ambiente máxima para funcionamiento de -55°C a

+125°C. Rango de alimentación:

27 Prof. Mario Gomikian - IHDA

Rango de alimentación: 16LF84A: de 2V a 5,5 V en configuración de oscilador XT, RC y LP. 16F84A: de 4V a 5,5V en configuración de oscilador XT, RC y LP; y de 4,5V a 5.5V en configuración de oscilador HS.

Máxima corriente del puerto "A" como fuente: 50 mA. Máxima corriente del puerto "A" como sumidero: 80 mA. Máxima corriente del puerto "B" como fuente: 100 mA. Máxima corriente del puerto "B" como sumidero: 150 mA. Máxima corriente que puede suministrar una salida: 25 mA.

Tipos de encapsulado.Tipos de encapsulado.

El encapsulado más común para este microcontrolador es el DIP (Dual inline Pin) de 18 pines. Sin embargo, hay otros tipos de encapsulado, porejemplo, el encapsulado de montaje superficial (Surface mount), muchomás pequeño.

28 Prof. Mario Gomikian - IHDA

Diagrama del PIC16F84A.Diagrama del PIC16F84A.

29 Prof. Mario Gomikian - IHDA

Descripción de los pines.Descripción de los pines.

VDD: Alimentación positiva. VSS: Alimentación negativa. OSC1/CLKIN: Oscilador externo que

proporciona la frecuencia de trabajo del microcontrolador.

OSC2/CLKOUT: Auxiliar del circuito oscilador.

MCLR: Reset del PIC. Se activa con un nivel lógico bajo y reinicia el PIC.

30 Prof. Mario Gomikian - IHDA

nivel lógico bajo y reinicia el PIC. También se utiliza durante la grabación de la memoria de programa para introducir VPP, la tensión de grabado, que está comprendida entre 12 y 14 VDC.

RA0–RA4: Puerto A. Son 5 (cinco) líneas de I/O. La línea RA4 multiplexa otra función expresada por TOCKI. Esta línea sirve para recibir una frecuencia externa de reloj para el temporizador interno TMR0.

RB0-RB7: Puerto B. Son 8 (ocho) líneas de I/O. La línea RB0 multiplexa otra función (INT) que sirve como entrada a una petición externa de interrupción.

31 Prof. Mario Gomikian - IHDA

¿Cómo se ejecuta una instrucción?¿Cómo se ejecuta una instrucción? Para ejecutar una instrucción se aplica la

técnica de la segmentación (pipe-line), que consiste en realizar en paralelo los dos ciclos que comprende cada instrucción.

En realidad cada instrucción consta de dos ciclos: en el primero se lleva a cabo la búsqueda del código de la instrucción en la memoria del programa (ciclo de búsqueda); en el segundo se decodifica y se ejecuta

32 Prof. Mario Gomikian - IHDA

en el segundo se decodifica y se ejecuta (ciclo de ejecución).

La estructura segmentada del procesador, permite realizar al mismo tiempo el ciclo de ejecución de una instrucción, y el de búsqueda de la siguiente. Cuando la instrucción ejecutada corresponde a un salto no se conoce cuál será el siguiente hasta que se complete, por eso en esta situación se sustituye el ciclo de búsqueda de la siguiente instrucción por un ciclo vacío, lo que hace que las instrucciones de salto ocupen dos ciclos de instrucción.

¿Cómo se ejecuta una instrucción?¿Cómo se ejecuta una instrucción?

33 Prof. Mario Gomikian - IHDA

Osciladores.Osciladores.

34 Prof. Mario Gomikian - IHDA

Osciladores.Osciladores.

Todo microprocesador o microcontrolador requiere de una señal de reloj que sincronice su funcionamiento. Esta señal se obtiene mediante un oscilador de frecuencia.

Existen microcontroladores que tienen un oscilador interno y no requieren de componentes externos.

35 Prof. Mario Gomikian - IHDA

El microcontrolador PIC16F84 requiere de un circuito externo de oscilación o generador de pulsos de reloj.

La frecuencia de clock máxima es de 4 MHz para el PIC16F84A-04 y de 20 MHz para el PIC16F84A-20.

El PIC16F84 puede utilizar cuatro tipo diferentes configuraciones para el oscilador. La elección dependerá de la precisión y velocidad que requiramos. Por otro lado, el costo también es un aspecto a tener en cuenta a la hora de elegir uno u otro.

Tipos de osciladores.Tipos de osciladores.

Los cuatro tipos de oscilador que admite el PIC 16F84 son:Los cuatro tipos de oscilador que admite el PIC 16F84 son:

Oscilador RC

36 Prof. Mario Gomikian - IHDA

Oscilador tipo HS

Oscilador tipo XT

Oscilador tipo LP

Oscilador RC.Oscilador RC.

Es un oscilador de bajo costo, formado por una resistencia y un capacitor.

37 Prof. Mario Gomikian - IHDA

capacitor.

No tiene una frecuencia muy estable. Su valor depende de los valores de los elementos de la red RC.

Los otros osciladores.Los otros osciladores.

Oscilador tipo HS

Es un oscilador de alta velocidad (HIGH SPEED) que alcanza una frecuencia comprendida entre los 4 y 10 MHz. Está basado en un cristal de cuarzo o un resonador cerámico.

Oscilador tipo XT

38 Prof. Mario Gomikian - IHDA

Oscilador tipo XT

Es un oscilador (de cristal o resonador cerámico) para frecuencias standard comprendidas entre 100KHz y 4MHz

Oscilador tipo LP

Oscilador de cristal de bajo consumo (LOW POWER), diseñado para trabajar en un rango de frecuencias de 35 a 200KHz.

Conexión del cristal.Conexión del cristal.

39 Prof. Mario Gomikian - IHDA

La figura muestra la forma de conectar un cristal. Se indican los capacitores (C1 y C2), recomendados por el fabricante para lograr una mayor estabilidad en la frecuencia del oscilador.

Conexión de osciladores (resumen)Conexión de osciladores (resumen)

Los pines OSC1/CLKIN (pin 16) y OSC2/CLKOUT (pin 15) sirven para la conexión del oscilador.

Los osciladores mas usados son el XT (cristal de cuarzo) y el RC (resistencia y condensador).

La forma de conectar los mismos es la siguiente:

40 Prof. Mario Gomikian - IHDA

Valores de C1 y C2 recomendados:Valores de C1 y C2 recomendados:

Valores de capacitancia (C1 y C2) recomendados por el fabricante para resonadores cerámicos.

41 Prof. Mario Gomikian - IHDA

Valores de C1 y C2 para cristales osciladores.

Esquemas mínimos de conexión: Esquemas mínimos de conexión:

42 Prof. Mario Gomikian - IHDA

CristalOscilador RC

C1 de 20pF como mínimo5KΩ ≤ R1 ≤ 100KΩ

Memoria de datos.

43 Prof. Mario Gomikian - IHDA

Memoria de datos.

La memoria de datos se divide en dos áreas diferentes:

1. El Área de RAM estática o SRAM, donde reside el banco de Registros de Funciones

44 Prof. Mario Gomikian - IHDA

Registros de Funciones Especiales (SFR) y el banco de Registros de Propósito General (GPR).

Memoria de datos.

2. El Área EEPROM, de 64 bytes donde, opcionalmente, se pueden almacenar datos que no se pierden al desconectar la alimentación. Esta parte de la memoria no está directamente mapeada. Se tiene

45 Prof. Mario Gomikian - IHDA

directamente mapeada. Se tiene acceso a la misma indirectamente a través de 4 registros SFR (usados para leer y escribir en ella) que son:

Registros de Funciones Registros de Funciones Especiales (SFR)Especiales (SFR)

Ocupan 24 posiciones -de 1 byte cada una- de la memoria de programa, aunque dos de ellas no son operativas.

Tienen como misión principal

46 Prof. Mario Gomikian - IHDA

Tienen como misión principal controlar el núcleo del microcontrolador y sus recursos.

Algunos de estos registros se hallan repetidos en la misma dirección de los dos bancos, para simplificar su acceso (INDF, STATUS, FSR, PCL, PCLATH E INTCON).

47 Prof. Mario Gomikian - IHDA

Registro STATUS.Registro STATUS.

Este registro SFR contiene el estado aritmético de la ALU (bits: C, DC y Z).

Indica el estado de RESET

48 Prof. Mario Gomikian - IHDA

Indica el estado de RESET (bits: TO y PD).

Selecciona el banco a acceder en la memoria de datos (bits:

IRP, RP0 y RP1).

49 Prof. Mario Gomikian - IHDA

Registro OPTION.Registro OPTION.

Este registro SFR (tanto de lectura como de escritura) contiene varios bits de control

50 Prof. Mario Gomikian - IHDA

contiene varios bits de control que permiten configurar el prescaler del temporizador interno (TMR0), la interrupción externa INT y las resistencias de pull-up de PORTB.

51 Prof. Mario Gomikian - IHDA

Temporizaciones.

52 Prof. Mario Gomikian - IHDA

Temporizador interno TMR0)Temporizador interno TMR0)

Cómo se temporiza en forma precisa?

o Mediante la cuenta del TMR0 (“contar para temporizar”).

o Este temporizador puede ser configurado (a través del registro

53 Prof. Mario Gomikian - IHDA

configurado (a través del registro OPTION) para que cuente más rápido o más lento, pero con ciertos límites.

o La configuración se hace mediante el prescaler.

o Sin embargo, las temporizaciones que pueden lograrse con el prescaler son pequeñas (múltiplos del ciclo de instrucción), aún cuando el TMR0 esté configurado para ir lo más lento posible.

Componentes del TMR0.Componentes del TMR0.

PRESCALER: a través del registro OPTION podemos seleccionar que el TMR0 cuente en forma sincrónica (bit T0CS en 0), al ritmo de ejecución de las instrucciones.

PRESCALER RATE SELECT(bits PS0 a PS2 de OPTION):seteando estos bits podemos seleccionar la velocidad a la

54 Prof. Mario Gomikian - IHDA

seteando estos bits podemos seleccionar la velocidad a la cual queremos que “cuente” el timer.

Tanto el PRESCALER

como el PRESCALER

RATE SELECT se configuran en el registro OPTION

Frecuencia de trabajo yFrecuencia de trabajo yciclo de instrucción.ciclo de instrucción.

La frecuencia de trabajo del microcontrolador es un parámetro fundamental a la hora de establecer la velocidad en la ejecución de instrucciones y el consumo de energía.

55 Prof. Mario Gomikian - IHDA

Un PIC16F84 que funciona a una frecuencia de 10MHz (100ns de período), posee un ciclo de instrucción de 400ns, puesto que cada instrucción tarda en ejecutarse 4 períodos de reloj, o sea 4 x 100ns.

Todas las instrucciones del PIC se realizan en un ciclo de instrucción, menos las de salto, que tardan el doble.

¿Cómo contar 1 segundo?¿Cómo contar 1 segundo?

Si el PIC trabaja a 4MHz (frecuencia de clock), el ciclo de instrucción vale 1microsegundo (la frecuencia será de 1MHz). Si elegimos un PRS de 64 (para ello seteamos en los tres bits del prescaler el valor binario 101), entonces la frecuencia que le estaría llegando al TMR0 será de:

f = 1000000 / 64 = 15625 Hz

56 Prof. Mario Gomikian - IHDA

f = 1000000 / 64 = 15625 HzComo f = 1 / T, entonces T = 64 microsegundos

Esto significa que cada 64 microsegundos se incrementará la cuenta del TMR0. Entonces si queremos saber cuántas veces tiene que aumentar dicha cuenta para llegar a 1 segundo, hacemos:

64 us por X = 1 segundo => X = 15625

Se necesita que el TMR0 “cuente” hasta 15625!!

¿Cómo contar 1 segundo?¿Cómo contar 1 segundo?

Pero recordemos que el TMR0 es un registro SFR igual que todos los otros, por lo tanto tiene sólo 8 bits, con lo que solamente puede contar hasta 255.

57 Prof. Mario Gomikian - IHDA

¿Qué se puede hacer, entonces?

¿Cómo contar 1 segundo?¿Cómo contar 1 segundo?

Contar 15625 es lo mismo que contar 125 veces 125, con la diferencia de que el número 125 sí cabe en el registro del TMR0.

Entonces la idea es contar hasta 125 con el TMR0 y,

58 Prof. Mario Gomikian - IHDA

Entonces la idea es contar hasta 125 con el TMR0 y, mediante un registro auxiliar (GPR), ir contando las veces que hacemos eso.

Cuando lleguemos a 125 en el registro auxiliar, habrá pasado exactamente un segundo.

Para que el TMR0 sólo cuente 125, tenemos que hacer que su valor inicial sea 130 (ya que de 130 a 255 hay 125).

Asimismo, al registro auxiliar lo tenemos que

¿Cómo contar 1 segundo?¿Cómo contar 1 segundo?

59 Prof. Mario Gomikian - IHDA

Asimismo, al registro auxiliar lo tenemos que inicializar con 125, para ir restándole 1 cada vez.

Cuando el registro llegue a 0, sabremos que ya pasó un segundo.

Pero… ¿Cómo sabemos que el TMR0 llegó a 255?

¿Cómo contar 1 segundo?¿Cómo contar 1 segundo?

Para reconocer si el temporizador ha desbordado (es

60 Prof. Mario Gomikian - IHDA

Para reconocer si el temporizador ha desbordado (es decir, si llegó a 255 y volvió a cero), se usa el flag de desborde del TMR0 (T0IF), ubicado en el bit 2 del registro INTCON.

Interrupciones.

61 Prof. Mario Gomikian - IHDA

62 Prof. Mario Gomikian - IHDA

63 Prof. Mario Gomikian - IHDA

Registro INTCON.Registro INTCON.

Este registro SFR se encarga de controlar todo lo que se refiere a interrupciones.

64 Prof. Mario Gomikian - IHDA

Es un registro de lectura y escritura cuyos bits nos permiten el manejo de las 4 fuentes de interrupción que

admite el PIC16F84.

65 Prof. Mario Gomikian - IHDA

Interrupciones.Interrupciones.

• El sistema de interrupciones consiste en unmecanismo por el cual un evento interno o externo,asíncrono respecto al programa, puede interrumpirla normal ejecución del mismo produciendo

66 Prof. Mario Gomikian - IHDA

la normal ejecución del mismo produciendoautomáticamente un salto a una subrutina, demanera que pueda atender inmediatamente elevento, y retomar luego la ejecución del programaexactamente en el lugar donde estaba en elmomento de ser interrumpido. Este mecanismo esmuy útil para el manejo de rutinas que debenrepetirse periódicamente.

Interrupciones.Interrupciones.

• Las interrupciones se comportan casi exactamente igual que las subrutinas. Desde el punto de vista del control del programa, al producirse una interrupción se produce el mismo efecto que ocurriría si el programa tuviese un CALL 0004h en el punto en que se produjo la

67 Prof. Mario Gomikian - IHDA

tuviese un CALL 0004h en el punto en que se produjo la interrupción.

• Como vimos, en el registro de control del sistema de interrupciones (INTCON) existe un bit de habilitación general de interrupciones: el bit 7 (GIE), que debe ser seteado a 1 para que las interrupciones puedan ocurrir. Al producirse una interrupción, este bit se borra automáticamente para evitar nuevas interrupciones.

Interrupciones.Interrupciones.

• La instrucción RETFIE se utiliza al final de la rutina de interrupción, y es idéntica a un retorno de subrutina (RETURN), salvo que además pone a 1 automáticamente el bit GIE del registro INTCON, volviendo a habilitar las interrupciones.

68 Prof. Mario Gomikian - IHDA

interrupciones.

• Dentro de la rutina de atención a la interrupción, el programa deberá comprobar el estado de las banderas de interrupción de cada una de las fuentes habilitadas, para detectar cual fue la que causó la interrupción y así decidir que acción tomar.

Interrupciones:Interrupciones:diagrama de flujo.diagrama de flujo.

El diagrama corresponde a un

69 Prof. Mario Gomikian - IHDA

corresponde a un ejemplo de interrupción externa (INT).

Interrupciones: fuentes.Interrupciones: fuentes.

El PIC16F84 posee cuatro fuentes de interrupción:

Interrupción externa por el pin RB0/INT.

Desborde del timer (TMR0).

70 Prof. Mario Gomikian - IHDA

Desborde del timer (TMR0).

Cambio de estado de los bits de mayor peso de PORTB (RB4, RB5, RB6, RB7).

Finalización de un ciclo de escritura en la memoria EEPROM.

Interrupciones: su lógica.Interrupciones: su lógica.

71 Prof. Mario Gomikian - IHDA

Interrupción externa por el pin RB0/INT.

La fuente de interrupción externa INT es sumamente importante paraatender eventos externos en tiempo real.

Cuando en la línea RB0/INT se hace una petición de interrupción,entonces, de forma automática, el bit INTF del registro INTCON sepone a 1 y si el bit GIE=1, se pone en marcha el mecanismo deatención a dicha interrupción.

72 Prof. Mario Gomikian - IHDA

atención a dicha interrupción.

Mediante el bit INTDEG del registro OPTION, se puede seleccionar elflanco activo de RBO/INT. Si INTDEG=1 el flanco activo es el de

subida, y si INTDEG=0 el flanco activo es el de bajada.

El programa de atención a la interrupción antes de regresar alprograma principal debe borrar el flag INTF, puesto que, en casocontrario, al ejecutar la instrucción de retorno de interrupción RETFIEse volverá a desarrollar el mismo proceso de interrupción.

Interrupción por desborde del timer (TMR0).Interrupción por desborde del timer (TMR0).

Esta interrupción hay que habilitarla poniendo en 1 el bit 7 (GIE) y el bit 5 (T0IE), ambos del registro INTCON.

73 Prof. Mario Gomikian - IHDA

(GIE) y el bit 5 (T0IE), ambos del registro INTCON.

Si se produce la interrupción, el bit 2 del registro INTCON (T0IF) nos lo informa. Si el TMR0 desbordó (T0IF = 1), de lo contrario (T0IF = 0).

Interrupción por cambio de estado deInterrupción por cambio de estado delos bits de PORTB (RB4, RB5, RB6, RB7).los bits de PORTB (RB4, RB5, RB6, RB7).

Para activar esta interrupción los bits RBIE y GIE del registro

INTCON deben de estar en 1.

Bajo estas condiciones cuando se produce un cambio de

74 Prof. Mario Gomikian - IHDA

Bajo estas condiciones cuando se produce un cambio de estado en cualquiera de los pines RB4 a RB7 se activa el flag RBIF del registro INTCON.

Este tipo de interrupción está especialmente pensada para el control de un teclado matricial 4 x 4 (16 teclas).

IInterrupción por finalización de unnterrupción por finalización de unciclo de escritura en la memoria EEPROM.ciclo de escritura en la memoria EEPROM.

El área de EEPROM dispone de 64 bytes donde se pueden almacenar datos que no se pierden al desconectar la alimentación. La memoria EEPROM no está mapeada en la zona de memoria de datos donde se encuentran los registros SFR y GPR. Para poder leerla y escribirla durante el funcionamiento normal del microcontrolador hay que utilizar los registros especiales EEDATA, EEADR, EECON1 y EECON2.

El Registro EEADR, se encuentra en la posición de memoria 09h del banco 0, en este registro se carga directamente la dirección a la que queremos acceder de la EEPROM de datos. Las 64 posiciones de un byte ocupan las direcciones de un mapa

75 Prof. Mario Gomikian - IHDA

EEPROM de datos. Las 64 posiciones de un byte ocupan las direcciones de un mapa que comienza en la posición 00h y termina en la 3Fh, por eso los 2 bits de más peso del registro EEADR siempre valen 0.

Los bit RD y WR indican respectivamente lectura o escritura. No hay que ponerlos a 0, solo a 1. Se borran automáticamente cuando la operación de lectura ha sido completada.

El registro EECON2 no está implementado físicamente, por lo que es imposible leerlo (si se intenta leer, todos sus bits se ponen a 0). Se emplea como dispositivo de seguridad durante el proceso de escritura de la EEPROM, para evitar las interferencias en el largo intervalo de tiempo que precisa su desarrollo. Un ciclo de escritura en una posición EEPROM de datos tiene una duración de 10 ms, que es un tiempo muy grande para la velocidad del procesador.

Lectura de la memoria EEPROM.Lectura de la memoria EEPROM.

Para leer un dato de la memoria EEPROM tienen que efectuarse

los siguientes pasos:

Escribir la dirección que hay que leer, en el registro EEADR.

EEPROM

76 Prof. Mario Gomikian - IHDA

Poner en 1 el bit RD del registro EECON para habilitar la lectura.

Leer el dato y esperar a que termine la operación.

El dato está disponible en el registro EEDATA.

Dos ejemplos prácticos: LECTURA1 y LECTURA2.Dos ejemplos prácticos: LECTURA1 y LECTURA2.

LECTURA1 ;aquí se supone que el dato en EEDATA estará disponible rápidamente BCF STATUS,RP0 ; Selecciona banco 0 MOVLW MEM1 ; Dirección a leer de MOVWF EEADR ; la EEPROM BSF STATUS,RP0 ; Selecciona banco 1 BSF EECON1,RD ; Activar lectura BCF STATUS,RP0 ; Selecciona banco 0 MOVF EEDATA,W ; W se carga con el valor leído en EEPROM

EEPROM

77 Prof. Mario Gomikian - IHDA

MOVF EEDATA,W ; W se carga con el valor leído en EEPROM

LECTURA2 ; aquí se espera hasta confirmarlo. BCF STATUS,RP0 ; Selecciona banco 0 MOVLW MEM1 ; Dirección a leer de MOVWF EEADR ; la EEPROM BSF STATUS,RP0 ; Selecciona banco 1 BSF EECON1,RD ; Activar lectura ESPERA BTFSC EECON1,RD ; Espera final de lectura GOTO ESPERA ; a que baje la bandera BCF STATUS,RP0 ; Selecciona banco 0 MOVF EEDATA,W ; W se carga con el valor leído en EEPROM

Escritura de la memoria EEPROM.Escritura de la memoria EEPROM.

Poner a 1 (si no lo estaba) el bit WREN del registro EECON1, para habilitar la operación de escritura.

Cargar en EEADR la dirección de la posición a escribir. Cargar en el registro EEDATA el valor a grabar. Ejecutar la siguiente secuencia que inicia la escritura de cada byte, y

además sirve de protección frente a errores eventuales. La secuencia siempre es la misma y ha de ejecutarse siempre.

EEPROM

78 Prof. Mario Gomikian - IHDA

MOVLW 55H MOVWF EECON2 ; Escribe 55h en EECON2 MOVWF AAH MOVWF EECON2 ; Escribe AAh en EECON2 BSF EECON1,WR ; Coloca a 1 el bit de escritura

Esta última instrucción inicia el proceso de escritura. Cuando se termina, el bit EEIF está a 1 y, si ha sido habilitada la interrupción de EEPROM haciendo uso del bit EEIE del registro INTCON, esta interrupción se genera.

Mediante software es necesario poner a cero el bit EEIF.

Ejemplo de escritura típico sin utilizar interrupciones. (1)Ejemplo de escritura típico sin utilizar interrupciones. (1)

ESCRITURA ; Establecer EEADR y EEDATA MOVLW DIRMEM1 MOVWF EEADR ; Escribe la dirección en EEADR MOVLW DATO1 MOVWF EEDATA ; Se escribe el dato en EEDATA BSF STATUS,RP0 ; Selecciona el banco 1 BSF EECON1,WREN ; Permiso de escritura activado

EEPROM

79 Prof. Mario Gomikian - IHDA

BSF EECON1,WREN ; Permiso de escritura activado ;Comienzo de la secuencia de escritura MOVLW 0x55 MOVWF EECON2 ; Se escribe el dato 55h en EECON2 MOVLW 0xAA MOVWF EECON2 ; Se escribe AA h en EECON2 BSF EECON1,WR ; Comienza la escritura BCF EECON1,WREN ; Permiso de escritura desactivado ESPERA BTFSC EECON1,WR ; Espera a que termine la escritura GOTO ESPERA BCF STATUS,R0 ; Selecciona el banco 0

Ejemplo de escritura típico sin utilizar interrupciones. (2)Ejemplo de escritura típico sin utilizar interrupciones. (2)

La escritura de cada byte no se iniciará si la secuencia de introducir 55h y AAh en EECON2 y activar el bit WR no se sigue exactamente.

Considerando lo anterior, es recomendable que durante la secuencia de inicio de escritura se deshabiliten las interrupciones, con el fin de evitar errores no deseados y habilitarlas posteriormente si van a ser utilizadas.

EEPROM

80 Prof. Mario Gomikian - IHDA

posteriormente si van a ser utilizadas. Adicionalmente, el bit WREN de EECON1 debe ser activado para

habilitar la escritura. Para evitar errores, también es recomendable que el bit WREN esté desactivado durante todo el programa excepto en el momento de la escritura. Debemos tener en cuenta que este bit no se pone a cero automáticamente mediante hardware. Una vez iniciado el ciclo de escritura, si ponemos a cero WREN, esto no afectará a el ciclo de escritura iniciado. En este caso el bit WR estará inhibido y no se podrá poner a uno.

Después del ciclo, el bit WR es puesto a cero por hardware y el EEIF es puesto a uno (si EEIE lo está). Si EEIE, está habilitado, EEIF debe ser puesto a cero por software.

Un ejemplo de escritura típico que utiliza interrupciones.Un ejemplo de escritura típico que utiliza interrupciones.

ESCRITURA BCF STATUS,RP0 ; Selecciona el banco 0 ; Establecer EEADR y EEDATA MOVLW MEM1 MOVWF EEADR ; Escribe la dirección en EEADR MOVLW DATO1 MOVWF EEDATA ; Se escribe el dato en EEDATA BSF STATUS,RP0 ; Selecciona el banco 1

EEPROM

81 Prof. Mario Gomikian - IHDA

BSF STATUS,RP0 ; Selecciona el banco 1 BSF EECON1,WREN ; Permiso de escritura activado BCF INTCON, GIE ; Desabilita interrupciones. ;Comienzo de la secuencia de escritura MOVLW 0x55 MOVWF EECON2 ; Se escribe el dato 55h en EECON2 MOVLW 0xAA MOVWF EECON2 ; Se escribe AAh en EECON2 BSF EECON1,WR ; Comienza la escritura BSF INTCON,GIE ; Habilita las interrupciones. BCF EECON1,WREN ; Permiso de escritura desactivado BCF STATUS,R0 ; Selecciona el banco 0

Verificación de la escritura en la EEPROM.Verificación de la escritura en la EEPROM.

Dependiendo de la aplicación, la experiencia indica que los datos escritos en la EEPROM deben ser verificados comparándolos con el dato que se acaba de escribir.

Generalmente el fallo de escritura en un bit de la EEPROM será un bit que se escribe como un 0 lógico pero devuelve un 1.

La siguiente porción de código es un ejemplo de verificación del dato escrito:

BCF STATUS,RP0 ; Nos situamos en el banco 0

EEPROM

82 Prof. Mario Gomikian - IHDA

BCF STATUS,RP0 ; Nos situamos en el banco 0 MOVF EEDATA,W ; Debemos estar en el banco 0 BSF STATUS,RP0 ; Cambiamos al banco 1 BSF EECON1,RD ; Leemos el dato que se guarda en BCF STATUS,RP0 ; EEDATA, y cambiamos a banco 0 ;Se comprueba si los datos en W y en EEDATA son los mismos SUBWF EEDATA,W ; Restamos ambos valores BTFSS STATUS,Z ; Si la operación es cero son iguales GOTO ERR_ESCRIT ; Si no son iguales, saltamos a ERR_ESCRIT

..... ; Si son iguales, seguimos con el programa

Dos rutinas para leer y escribir en la EEPROM.Dos rutinas para leer y escribir en la EEPROM.

;EEPROM_W: Graba un byte en la EEPROM de ;datos. La dirección será la contenida en EEADR y ;el dato se lo supone previamente introducido en ;EEDATA; EEPROM_Wbsf STATUS,RP0 ;Selecciona banco 1bsf EECON1,WREN ;Permiso de escrituramovlw b'01010101' ;Secuencia de escrituramovwf EECON2

;EEPROM_R: Lee un byte de la ;EEPROM. Se supone al registro ;EEADR cargado con la dirección a ;leer. En EEDATA aparecerá el dato ;leído.

; EEPROM_Rbsf STATUS,RP0 ;Selección banco 1

EEPROM

83 Prof. Mario Gomikian - IHDA

movwf EECON2movlw b'10101010‘movwf EECON2bsf EECON1,WR ;Orden de escriturabcf EECON1,WREN ;Desconecta permiso de

;escrituraESPERAbtfss EECON1,EEIF ;Comprobar bandera fin de goto ESPERA ;escriturabcf EECON1,EEIF ;Reponer flag fin de escriturabcf STATUS,RP0 ;Selección banco 0return

bsf STATUS,RP0 ;Selección banco 1bsf EECON1,RD ;Orden de lecturabcf STATUS,RP0 ;Selección banco 0return

El lenguaje ensamblador .

84 Prof. Mario Gomikian - IHDA

Programación del PIC y lenguaje ensamblador.Programación del PIC y lenguaje ensamblador.

Para programar el PIC puede utilizarse el Lenguaje Ensamblador (Assembly Language).

El Lenguaje Ensamblador está compuesto por pequeñas instrucciones (mnemónicos).

Para escribir los programas (código fuente) podemos usar, por ejemplo, el bloc de notas o,

85 Prof. Mario Gomikian - IHDA

podemos usar, por ejemplo, el bloc de notas o, directamente, el editor del MPLAB.

Una vez escrito se lo guarda con extensión .asm y se lo convierte (se lo ensambla) con un programa ensamblador: el MPASM (el MPLAB lo contiene). Si es necesario, se lo simula, depura y ensambla con el MPLAB, hasta que no contenga errores.

El resultado es un archivo con extensión .hex que podemos transferir al PIC mediante el programador (fase de grabación).

El programador o grabador es el

dispositivo necesario para grabar en la memoria del PIC, nuestro programa.

86 Prof. Mario Gomikian - IHDA

nuestro programa.

El que se muestra en la fotografía es el programador de Microchip (para

encapsulado DIP).

Lenguaje ensamblador.Lenguaje ensamblador.

87 Prof. Mario Gomikian - IHDA

De código fuente a código máquina…De código fuente a código máquina…

88 Prof. Mario Gomikian - IHDA

Directivas del ensamblador:Directivas del ensamblador:

Existen una serie de instrucciones -para el programa ensamblador- que nos hacen la tarea de programación mas sencilla.

EQU: Podemos ponerle un nombre (o etiqueta) a un registro GPR de la memoria, esto se hace mediante la instrucción EQU. Por ejemplo:

89 Prof. Mario Gomikian - IHDA

instrucción EQU. Por ejemplo:

VARIABLE1 EQU 0CH

#DEFINE: Es muy parecida a EQU, solo que aquí no ponemos etiquetas a un registro, sino a una instrucción entera. Por ejemplo:

#DEFINE BANCO1 BSF STATUS,5#DEFINE BANCO0 BCF STATUS,5

Directivas del ensamblador:Directivas del ensamblador:

A partir de ahora, cuando escribamos BANCO1 se pondrá a 1 el bit de selección de banco y pasaremos al banco 1 de la memoria. Del mismo modo, al escribir BANCO0 pasaremos al banco 0.

ORG: Indica al ensamblador la dirección de memoria de programa donde se guardará la primera instrucción a ser ejecutada por el programa. Por ejemplo:

90 Prof. Mario Gomikian - IHDA

programa donde se guardará la primera instrucción a ser ejecutada por el programa. Por ejemplo:

ORG 0 ;vector de reset. Apunta a la ;dirección de memoria 00H.

CLRF VARIABLE1 ;será la primera instrucción en ;ejecutarse.

END: Se escribe al final del programa para indicar que ya ha acabado. Es obligatorio.

Directivas del ensamblador:Directivas del ensamblador:

91 Prof. Mario Gomikian - IHDA

Subrutinas.Subrutinas.

Una subrutina o subprograma es una parte del programa que hace algo concreto y se repite a menudo.

Para ahorrar memoria y esfuerzo -y para hacer el programa mas comprensible- se la agrupa en un determinado lugar, apartada del programa principal.

92 Prof. Mario Gomikian - IHDA

determinado lugar, apartada del programa principal.

Para acceder a esa parte se la debe “llamar” con la instrucción CALL, seguida de la etiqueta que identifica la subrutina SUBR (por ejemplo, DEMORA).

Una vez ejecutada la subrutina, se “retorna” al programa principal, mediante la instrucción RETURN.

Siempre que existe un CALL, debe existir un RETURN.

Instrucciones en ASSEMBLERInstrucciones en ASSEMBLER

Son en total 35 instrucciones.

De ellas, 18 son orientadas al byte.

93 Prof. Mario Gomikian - IHDA

4 son orientadas al bit.

Las 13 restantes son literales y de control.

Instrucciones en ASSEMBLERInstrucciones en ASSEMBLER

94 Prof. Mario Gomikian - IHDA

Instrucciones en ASSEMBLERInstrucciones en ASSEMBLER

95 Prof. Mario Gomikian - IHDA

Instrucciones en ASSEMBLERInstrucciones en ASSEMBLER

96 Prof. Mario Gomikian - IHDA

Instrucciones en ASSEMBLERInstrucciones en ASSEMBLER

97 Prof. Mario Gomikian - IHDA

Instrucciones en ASSEMBLERInstrucciones en ASSEMBLER

98 Prof. Mario Gomikian - IHDA

Instrucciones: detalleInstrucciones: detalle

99 Prof. Mario Gomikian - IHDA

Instrucciones: detalleInstrucciones: detalle

100 Prof. Mario Gomikian - IHDA

Instrucciones: detalleInstrucciones: detalle

101 Prof. Mario Gomikian - IHDA

Instrucciones: detalleInstrucciones: detalle

102 Prof. Mario Gomikian - IHDA

Instrucciones: detalleInstrucciones: detalle

103 Prof. Mario Gomikian - IHDA

Instrucciones: detalleInstrucciones: detalle

104 Prof. Mario Gomikian - IHDA

Instrucciones: detalleInstrucciones: detalle

105 Prof. Mario Gomikian - IHDA

Instrucciones: detalleInstrucciones: detalle

106 Prof. Mario Gomikian - IHDA

Instrucciones: detalleInstrucciones: detalle

107 Prof. Mario Gomikian - IHDA

Instrucciones: detalleInstrucciones: detalle

108 Prof. Mario Gomikian - IHDA

Instrucciones: detalleInstrucciones: detalle

109 Prof. Mario Gomikian - IHDA

Ejemplo de un programa. Ejemplo de un programa.

110 Prof. Mario Gomikian - IHDA