Está en la página 1de 150

REPÚBLICA BOLIVARIANA DE VENEZUELA

UNIVERSIDAD NACIONAL EXPERIMENTAL POLITÉCNICA


“ANTONIO JOSÉ DE SUCRE”
VICERECTORADO DE PUERTO ORDAZ
DEPARTAMENTO DE INGENIERÍA ELECTRÓNICA

SIMULACION DE APLICACIONES PARA


MICROCONTROLADORES PIC DE 8 BITS

Proyecto de trabajo de ascenso para optar


a la categoría de Profesor Asistente

AUTOR: Rodríguez José Luis

Ciudad Guayana, 13 de Julio de 2019

SIMULACIÓN DE APLICACIONES PARA MICROCONTROLADORES PIC DE 8 BITS. AGOSTO DE 2019


i
DEDICATORIA

A mi familia; mi esposa Johana, mi hija Natalia, mi madre Cándida, mi hermano


José y los sobrinos alber y Samuel.

SIMULACIÓN DE APLICACIONES PARA MICROCONTROLADORES PIC DE 8 BITS. AGOSTO DE 2019


ii
RECONOCIMIENTOS

En primer instancia a Jehová Dios por la vida y todo lo maravilloso que nos
permite disfrutar. A los profesores Antonio Pateti, y Rafael Surga por su asesoría y
asistencia técnica haciendo disponible valioso material de consulta útil para el
desarrollo de este trabajo. A Manuel Gragirena, Sergio Velazquez, y Zulay Franco,
quienes me orientaron y me apoyaron de diversas formas y contribuyeron a la
realización de este trabajo y especialmente a Jehová el Dios Todopoderoso por
permitirme ver un día más de vida.

SIMULACIÓN DE APLICACIONES PARA MICROCONTROLADORES PIC DE 8 BITS. AGOSTO DE 2019


iii
ÍNDICE GENERAL

DEDICATORIA ........................................................................................................................ii

RECONOCIMIENTOS ............................................................................................................. iii

LISTA DE CUADROS ............................................................................................................. vii

LISTA DE FIGURAS .............................................................................................................. viii

RESUMEN ........................................................................................................................... xii

PRÓLOGO............................................................................................................................. 1

OBJETIVO DEL TEXTO ........................................................................................................... 2

ORGANIZACIÓN DEL CONTENIDO ......................................................................................... 2

CAPÍTULO I ........................................................................................................................... 4

1. ARQUITECTURA DEL MICROCONTROLADOR ................................................................. 4

1.1 Características generales ........................................................................................ 4

1.2 Arquitectura Interna ............................................................................................... 6

1.3 Organización de la memoria ................................................................................. 10

1.4 Métodos de direccionamiento en la memoria de datos......................................... 16

Aplicación 1.1: Métodos de direccionamiento y manejo de Mplab ............................. 23

Aplicación 1.2 Manejo de direccionamiento lineal y tradicional .................................. 30

CAPÍTULO II ........................................................................................................................ 36

2. PUERTOS ENTADA/SALIDA .......................................................................................... 36

2.1 Características generales ...................................................................................... 36

2.2. Pines con Función alternativa .............................................................................. 39

Aplicación 2.1 Manejo y configuración de puertos E/S ................................................ 41

CAPÍTULO III ....................................................................................................................... 44

3. INTERRUPCIONES ....................................................................................................... 44

SIMULACIÓN DE APLICACIONES PARA MICROCONTROLADORES PIC DE 8 BITS. AGOSTO DE 2019


iv
3.1 Características generales ...................................................................................... 44

3.2 Configuración de Interrupciones ........................................................................... 45

3.3 Interrupciones por cambio de nivel IOC ............................................................... 50

3.4 Interrupción externa INT ...................................................................................... 51

Aplicación 3.1 Manejo de Interrupciones .................................................................... 52

CAPÍTULO IV....................................................................................................................... 57

4. Temporizadores TIMERS ............................................................................................ 57

4.1 Características generales ...................................................................................... 57

4.2 Temporizador/Contador (TMR0) ......................................................................... 57

4.3 Temporizador/Contador 1 (TMR1) ........................................................................... 62

4.4 TIMER 2 ................................................................................................................ 69

Aplicación 4.1 Uso de teclado matricial y display ....................................................... 72

Aplicación 4.2 Temporizador programable ................................................................. 76

Aplicación 4.3 Manejo de LCD 16x2 ............................................................................ 78

Aplicación 4.4 Manejo de LCD 16x4 ............................................................................ 80

Aplicación 4.5 Reloj digital usando TIMER1 como contador ........................................ 81

CAPÍTULO V........................................................................................................................ 83

5. MÓDULO CCP CAPTURA/COMPARACIÓN/PWM......................................................... 83

5.1 Características generales ...................................................................................... 83

5.2 Modo Captura ...................................................................................................... 84

Aplicación 5.1 Uso del modo captura para medir periodo de señal externa ................ 85

5.3 Modo Comparación .............................................................................................. 87

Aplicación 5.2 Uso del modo comparación para generar señales periodicas ............... 89

5.4 Modo PWM .......................................................................................................... 91

Aplicación 5.3 Manejo de motor mediante PWM ........................................................ 94

SIMULACIÓN DE APLICACIONES PARA MICROCONTROLADORES PIC DE 8 BITS. AGOSTO DE 2019


v
CAPÍTULO VI....................................................................................................................... 97

6. CONVERTIDOR ANALÓGICO DIGITAL ADC ................................................................... 97

6.1 Características generales ...................................................................................... 97

6.3 Tiempo de adquisición y de conversión ............................................................... 105

6.4 Cálculo del tiempo de adquisición (TACQ) ........................................................... 107

Ejemplo con el Conversor A/D: ................................................................................. 108

Aplicación 6.1 Uso del ADC para controlar velocidad de motor DC por PWM ............ 109

Aplicación 6.2 Uso del ADC para medir temperatura usando el sensor LM35 ............ 113

CAPÍTULO VII.................................................................................................................... 116

7. MODULO DE COMUNICACIÓN EEUSART ................................................................... 116

7.1 Características generales .................................................................................... 116

7.2 Características del EUSART del PIC 16F1787 ........................................................ 117

7.3 Velocidad en la comunicación serial asíncrona .................................................... 118

7.4 Estándar de comunicación RS232........................................................................ 118

7.5 Modo asíncrono del EUSART ............................................................................... 120

Pasos a seguir para implementar la transmisión: ...................................................... 123

7.6 Generador de Baud Rate (BRG) ........................................................................... 127

Pasos a seguir para programar la recepción .............................................................. 129

Aplicación 7.1. Transmisión-Recepción EUSART asíncrono ....................................... 129

CONCLUSIONES ................................................................................................................ 134

REFERENCIAS ................................................................................................................... 136

ANEXOS ........................................................................................................................... 137

SIMULACIÓN DE APLICACIONES PARA MICROCONTROLADORES PIC DE 8 BITS. AGOSTO DE 2019


vi
LISTA DE CUADROS

Pág.
Tabla 1.1: Resumen comparativo entre PIC16F877 Vs PIC16F1787……..…….. 6
Tabla 2.1 Registros asociados al manejo de puertos E/S……..……..……..……. 38
Tabla 2.2 Configuración de registro para el manejo de puertos ……..…………. 41
Tabla 4:1 PS2:PS0: Valor con que se programa el divisor de frecuencia……….. 59
Tabla 5.1: Selección de operación del modo captura……..……..……..………... 84
Tabla 6.1: Selección del canal entrada positiva diferencial del ADC……..……... 103
Tabla 6.2 Selección del Periodo para el reloj del conversor AD……..………….. 103
Tabla 6.3 Selección para la Auto conversión del ADC……..……..……..……… 104
Tabla 6.4 Selección del Periodo para el reloj del conversor AD……..………….. 105
Tabla 7.1 Sumario de registrosasociados al modo de tranmisión asíncrono……. 123
Tabla 7.2 Formulas de rata de baudios……..………..…..……..……..…………. 128

SIMULACIÓN DE APLICACIONES PARA MICROCONTROLADORES PIC DE 8 BITS. AGOSTO DE 2019


vii
LISTA DE FIGURAS

Pág.
Fig. 1.1: Diagrama de distribución de pines……..……..……..……..……..…….. 5
Fig. 1.2: Arquitectura Von Neumann……..……..……..……..……..…………… 7
Fig. 1.3: Arquitectura Harvard……..……..……..……..……..……..……..…….. 7
Fig. 1.4: Diagrama de bloques 16f1787……..……..……..……..……..……..…….. 8
Fig. 1.5: Diagrama de bloques del núcleo del 16f1787……..……..……..………….. 9
Fig. 1.6: Organización de la memoria de programa……..……..……..………….. 10
Fig. 1.7: Organización de la memoria de programa……..……..……..………….. 12
Fig. 1.8: Direccionamiento de la memoria de programa……..……..……..…….. 13
Fig. 1.9: Registros Núcleo en la memoria de datos……..……..……..………….. 14
Fig. 1.10: Registros de propósitos especiales SFR……..……..……..…………… 15
Fig. 1.11: Direccionamiento tradicional de la memoria de datos……..……..……..… 17
Fig. 1.12: Direccionamiento lineal de la memoria de datos……..……..……..……. 18
Fig. 1.13: Debugger>Select Tool>MPLAB SIM……..……..……..……………… 19
Fig. 1.14: Herramientas de simulation……..……..……..……..……..……..……..… 20
Fig. 1.15: Para visualizer la memoria de programa……..……..……..…………… 20
Fig. 1.16: Despliegue de la memoria de programa……..……..……..…………… 21
Fig. 1.17: Vista de la memoria Ram de datos……..……..……..………………… 21
Fig. 1.18: Vista de la opción Watch……..……..……..……..……..……..……..…… 22
Fig. 1.19: Formato numérico disponible……..……..……..……..……..……..…….. 23
Fig. 1.20: Comprobación valor 4 en nible alto registro 0x20. Salto a resta………. 23
Fig. 1.21: Llamada y ejecución de rutina de extracción BCD……………………. 27
Fig. 1.22: Complemento a 1 del NUM2, registros del 0x44 al 0x47……………… 27
Fig. 1.23 Comprobación de Resta con resultado positivo……..……..……..…… 28
Fig. 1.24 Llamado a la subrutina TABLA……..……..……..…………………… 28
Fig. 1.25 Ejecución de la subrutina TABLA……..……..……..………………… 29
Fig. 1.26 Resultado final. Resultados guardados en registros 0x22 y 0x23, Números 29
convertidos a 7SEG guardados en registros del 0x50 al 0x53…………………….
Fig. 1.27 (a), (b), (c) y (d) evolución de la simulación en MPlab……..……..…….. 31

SIMULACIÓN DE APLICACIONES PARA MICROCONTROLADORES PIC DE 8 BITS. AGOSTO DE 2019


viii
Fig. 1.28 Página 2 y datos cargados en las localidades pertenecientes a las listas… 33
Fig. 1.29 Se asigna el puntero FSR0 a la lista del banco 0……..……..……..……. 34
Fig. 1.30 Comprobando dato guardado en la última locación del banco 0………. 34
Fig. 1.31 Resguardo de los resultados según las especificaciones del programa.... 35
Fig. 2.1 Hardware general de puertos……..……..……..…………………………. 37
Fig. 2.2 Registros de propósito especiales SFR para manejo de puertos…………. 37
Fig. 2.3 Simulación de lectura/escritura de puertos……..……..……..…………. 43
Fig. 3.1 Configuración de Interrupciones……..……..……..……..……..……..…….. 45
Fig. 3.2 Lógica de Interrupción……..……..……..……..……..……..……..…… 50
Fig. 3.3 (a), (b), (c), (d); (e) y (f) Resultado de la simulación en diferentes eventos 54
Fig. 4.1 Diagrama de bloques del Timer0……..……..……..…………………….. 58
Fig. 4.2 Timer0 modo temporizador……..……..……..……..……..……..……..…… 60
Fig. 4.3 Timer0 modo contador……..……..……..……..……..……..……..……. 62
Fig. 4.4 Diagrama de bloques del TMR1……..……..……..……..……..……..…….. 63
Fig. 4.5 TIMER1 modo temporizador Fosc/4……..……..……..……..……..……… 67
Fig. 4.6 Operación del TIMER1 modo temporizador……..……..……..…………… 68
Fig. 4.7 Diagrama de bloques del TIMER2……..……..……..………………….. 70
Fig. 4.8 Operación del TIMER 2 como temporizador……..……..……..………... 71
Fig. 4.9 Diagrama esquemático elaborado en proteus……..……..……..………… 72
Fig. 4.10 Simulación mostrando inicialización de circuito……..……..……..…. 74
Fig. 4.11 Simulación mostrado los dígitos 1234……..……..……..…………….. 74
Fig. 4.12 Implementación mostrado inicialización 75
Fig. 4.13 Implementación mostrado los dígitos 1234 75
Fig. 4.14 Vista inicial Standby 76
Fig. 4.15 (a) Valor parametrizado a la espera de INICIO (b) Resta 1 minuto con 47
segundo. D3 encendido (c) Restan 3 segundos (d) Fin de temporización led D1
77
activo……..……..……..……..……..……..……..……..……..……..……..……..
Fig. 4.16 Simulación de mensajes en LCD 16x2……..……..……..…………….. 79
Fig. 4.17 Simulación de mensajes en LCD 16x4……..……..……..…………….. 80
Fig. 4.18 Simulación del reloj en diferentes eventos……..……..……..……….. 82
Fig. 5.1 Diagrama de bloques del CCP modo Captura……..……..……..………. 84
Fig. 5.2 Modo Captura en cada flanco descendente………………………………. 85
Fig. 5.3 Captura de señal de (a) 500Hz, (b) 1 KHz, (c) 4 KHz, (d) 13KHz…… 86

SIMULACIÓN DE APLICACIONES PARA MICROCONTROLADORES PIC DE 8 BITS. AGOSTO DE 2019


ix
Fig. 5.4 Diagrama de bloques del CCP modo Comparación……………………… 87
Fig. 5.5 Modo Comparación disparos de eventos especiales inicio ADC………… 88
Fig. 5.6 Modo Comparación (a) a la espera de la comparación, (b) Interrupción
por comparación, (c) genera señal de 2KHz (d) genera señal de 1KHz……… 90
Fig. 5.7 Diagrama de bloque Modo PWM……..……..……..……..……..……..…… 91
Fig. 5.8 Funcionamiento del modo PWM……..……..……..……..……..……..…….. 93
Fig. 5.9 Diagrama esquemático modo PWM……..……..……..……..……..……..… 95
Fig. 5.10 (a) 0% CU, (b) 20% CU, (c) 50% CU, (d) 95% CU……………… 95
Fig. 6.1 Diagrama de bloques del control de nivel……..……..……..…………… 97
Fig. 6.2 Controlador digitalbasado en microcontrolador……..……..……..……… 98
Fig. 6.3 ADC de 4 bit de resolucion……..……..……..……..……..……..……. 98
Fig. 6.4 Esquema simplificado de un ADC de 4 bit……..……..……..………….. 99
Fig. 6.5 Diagrama de bloque del ADC……..……..……..……..……..……..……. 100
Fig. 6.6 Registros asociados al ADC……..……..……..……..……..……..…….. 101
Fig. 6.7 ADC 10 bit formato magnitud y signo y complemento a 2…………….. 104
Fig. 6.8 ADC 12 bit formato magnitud y signo y complemento a 2……………... 105
Fig. 6.9 Resultados en formato con signo y en complemento a 2 del ADC……... 105
Fig. 6.10 Modelo de entrada del ADC del PIC16f1787……..……..……..………. 106
Fig. 6.11 Ejemplo de ADC/PWM……..……..……..……..……..……..……..……. 108
Fig. 6.12 Esquema de configuración……..……..……..……..……..……..……..…… 109
Fig. 6.13 Diagrama de flujo para ADC/PWM……..……..……..………………… 109
Fig. 6.14 Diagrama squemático ADC/PWM……..……..……..…………………. 110
Fig. 6.15 (a) 0% Cu de PWM. (b) 25% Cu de PWM……..……..……..………… 111
Fig. 6.16 (a) 50% Cu de PWM. (b) 75% Cu de PWM……..……..……..………. 111
Fig. 6.17 (a) 97% Cu de PWM (b) 98% Cu de PWM……..……..……..………… 112
Fig. 6.18 (a) Temperatura de 0 °C, 29.0 °C y 49.9 °C……..……..……..……….. 114
Fig. 6.18 (b) Temperatura de 87.9 °C y 99.9 °C……..……..……..……………… 115
Fig. 7.1 Comunicación asíncrona y síncrona……..……..……..…………………. 117
Fig. 7.2 Comunicación asíncrona……..……..……..……..……..……..……..…… 117
7.3 Velocidad de transmision……..……..……..……..……..……..……..……… 118
7.4 Distribución de pines del conector DB9……..……..……..………………….. 119
7.5 Niveles y margenes detensión……..……..……..……..……..……..……..…. 119

SIMULACIÓN DE APLICACIONES PARA MICROCONTROLADORES PIC DE 8 BITS. AGOSTO DE 2019


x
7.6 Driver MC1489……..……..……..……..……..……..……..…………………. 119
7.7 Driver MAX232……..……..……..……..……..……..……..………………… 120
7.8 Diagrama de bloques del modulo EUSART……..……..……..……………… 121
7.9 Diagrama de tiempo de transmisión asíncrona……..……..……..……..……..… 123
7.10 Diagrama de flujo de Tx asincrona……..……..……..……..……..……..…….. 124
7.11 Diagrama de de bloques del modulo receptor asincrona……..……..……..…… 125
7.12 Formulas de rata de baudios……..……..……..……..……..……..……..…… 127
7.13 Diagrama esquemático Tx-Rx asincrono……..……..……..……………….. 130
7.14 Transmisión y recepción del valor 0000001……..……..……..……………... 131
7.15 Transmisión y recepción del valor 1000001……..……..……..……………... 131
7.16 Transmisión y recepción del valor 1111001……..……..……..……………... 132
7.17 Transmisión y recepción del valor 11111111……..……..……..…………… 132

SIMULACIÓN DE APLICACIONES PARA MICROCONTROLADORES PIC DE 8 BITS. AGOSTO DE 2019


xi
REPÚBLICA BOLIVARIANA DE VENEZUELA
UNIVERSIDAD NACIONAL EXPERIMENTAL POLITÉCNICA
“ANTONIO JOSÉ DE SUCRE”
VICERRECTORADO DE PUERTO ORDAZ
DEPARTAMENTO DE INGENIERÍA ELECTRÓNICA

SIMULACION DE APLICACIONES PARA MICROCONTROLADORES


PIC DE 8 BITS

AUTOR: RODRÍGUEZ, JOSÉ LUIS


AÑO: 2019

RESUMEN

En el presente trabajo se describe la teoría necesaria para microcontroladores PIC de


8 bit de forma que permitan desarrollar aplicaciones mediante el uso de software compilador
(MPlab) y de simulación a través (Proteus), de manera que puedan ser implementados en la
práctica; se describe la arquitectura interna, disposición y métodos de direccionamiento de la
memoria interna y los principales recursos periféricos, tales como puertos E/S, fuentes de
interrupciones, Temporizadores, módulo CCP, convertidor ADC y comunicación USART. El
material de estudio se basó en consultas a diversas fuentes especializadas de información
tanto física como electrónica y el desarrollo de aplicaciones. De los resultados obtenidos
destacan la explicación completa y sencilla de cada tema, reforzados con aplicaciones
compiladas y luego simuladas; éstas vienen acompañadas de los diagramas esquemáticos, la
explicación y el código fuente, para ser fácilmente usadas en la práctica. En conclusión queda
a disposición de estudiantes, docentes, aficionados y profesionales una completa herramienta
de consulta relacionada con el diseño, y simulación de aplicaciones para microcontroladores
PIC de 8 bit. Finalmente la asignatura Microprocesadores I, que se imparte en la carrera de
Ingeniería Electrónica de la UNEXPO vice-rectorado Puerto Ordaz, contara con tal
herramienta.

SIMULACIÓN DE APLICACIONES PARA MICROCONTROLADORES PIC DE 8 BITS. AGOSTO DE 2019


xii
REPÚBLICA BOLIVARIANA DE VENEZUELA
UNIVERSIDAD NACIONAL EXPERIMENTAL POLITÉCNICA
“ANTONIO JOSÉ DE SUCRE”
VICERRECTORADO DE PUERTO ORDAZ
DEPARTAMENTO DE INGENIERÍA ELECTRÓNICA

SIMULACION DE APLICACIONES PARA MICROCONTROLADORES


PIC DE 8 BITS

POR: RODRÍGUEZ, JOSÉ LUIS

Trabajo de ascenso aprobado en nombre de la UNIVERSIDAD NACIONAL


EXPERIMENTAL POLITÉCNICA “ANTONIO JOSÉ DE SUCRE”,
VICERECTORADO – PUERTOORDAZ, por el siguiente jurado examinador, a los -
----- días del mes de Julio de 2019

SIMULACIÓN DE APLICACIONES PARA MICROCONTROLADORES PIC DE 8 BITS. AGOSTO DE 2019


xiii
PRÓLOGO

Unos de los mayores inconvenientes al momento de desarrollar aplicaciones


utilizando microcontroladores, son los costos en que se incurre para adquirir los
diversos componentes involucrado en el diseño; aunado a ello el tiempo que se
invierte para realizar las diversas pruebas en físico dificulta de manera significativa el
progreso debido a la necesidad de realizar las pruebas del código en el hardware
implementado. Esta tarea se hace recurrente ya que cada modificación del código
debe grabarse en el hardware para verificar el comportamiento y corrección de
errores.

En la actualidad el uso de herramientas computacionales ha permitido reducir


de manera significativa este inconveniente en vista de que permite realizar pruebas de
código mediante ventanas de compilación y corrida del programa; mejor aún la
aparición de software de simulación gráfica permiten al desarrollador visualizar casi
en tiempo real el comportamiento del diseño en desarrollo, lográndose así la
modificación y depuración del código sin la necesidad de grabarlo en el hardware.

Actualmente la asignatura Microprocesadores I y en general el área de


Ingeniería Electrónica de la UNEXPO no cuenta con un material didáctico de
consulta, dedicado exclusivamente al desarrollo de aplicaciones para
microcontroladores PIC mediante el uso de compiladores y software de simulación.
El presente trabajo pretende generar una completa herramienta didáctica de
consulta que permitirá tanto a estudiantes como a docentes en el área profundizar en
conocimiento, optimizar la integración entre hardware y software, mejorar las
técnicas para el diseño de aplicaciones y su posterior simulación de manera que su
implementación en la práctica resulte además de sencilla, eficaz. Se tendrá además a
disposición un abanico de recursos que van desde las etapas básicas de configuración
y funcionamiento de los microcontroladores PIC como del manejo de puertos de I/O

SIMULACIÓN DE APLICACIONES PARA MICROCONTROLADORES PIC DE 8 BITS. AGOSTO DE 2019


1
e Interrupciones hasta los módulos avanzados como Captura, Comparación PWM,
EUSART y ADC.

Cada unidad desarrollada ira acompañada de la simulación correspondiente, lo


que implica código fuente, explicación de los recursos, diagrama esquemático
(cuando aplique) y simulación en MPlab o PROTEUS, según sea el caso.

OBJETIVO DEL TEXTO

El objetivo del presente trabajo es desarrollar un conjunto de aplicaciones


mediante el uso de software compilador y de simulación que puedan ser
implementados en microcontroladores PIC de 8 bit, para la asignatura
Microprocesadores I, que se imparte en la carrera de Ingeniería Electrónica de la
UNEXPO vice-rectorado Puerto Ordaz, a la vez que sirva como herramienta
didáctica de consulta e investigación no solo para estudiantes sino también para
docentes y profesionales.

ORGANIZACIÓN DEL CONTENIDO

El texto está estructurado de la siguiente manera:

En el capítulo 1 se describe la arquitectura del microcontrolador PIC16f1787,


organización de la memoria de datos y programa, acumulador W y métodos de
direccionamientos. De igual manera se incluye el desarrollo de aplicaciones
didácticas para reforzar el tema basado en el compilador MPlab.

En el capítulo 2 se explica el manejo y configuración de puertos de


entrada/salida. En el capítulo 3 se presentan las principales fuentes de interrupciones

SIMULACIÓN DE APLICACIONES PARA MICROCONTROLADORES PIC DE 8 BITS. AGOSTO DE 2019


2
que maneja el microcontrolador. Igualmente se incluyen simulaciones de aplicaciones
mediante el uso del software MPlab y PROTEUS.

En el capítulo 4 se describe de manera detallada la función y los registros de


configuración de los TIMER en sus diversos modos de operación, temporizador,
contador, así como las ecuaciones que describen su comportamiento. Se incluyen
simulaciones de los modos de operación de los TIMER a través de PROTEUS
visualizados en pantalla LCD.

En el capítulo 5 encontramos el módulo CCP, Captura, Comparación y PWM.


Su explicación, registros de configuración, ecuaciones características y simulación
correspondiente mediante el uso de PROTEUS.

Finalmente tenemos los Capítulos 6 y 7, los cuales abarcan los módulos ADC
(Conversor Analógico Digital) y EUSART (Enhanced Universal Synchronous
Asynchronous Receiver Transmitter) respectivamente, lo que incluye principio de
funcionamiento, registros de configuración, ecuaciones características y simulación
de aplicaciones. Nota importante: a menos que se especifique la fuente, las
imágenes aquí utilizadas son en su mayoría tomadas del manual del fabricante del
microcontrolador (DS41637B), la empresa microchip y del material didáctico de
clases de los profesores Antonio Pateti y Rafael surga.

SIMULACIÓN DE APLICACIONES PARA MICROCONTROLADORES PIC DE 8 BITS. AGOSTO DE 2019


3
CAPÍTULO I

En este capítulo serán expuestas las definiciones básicas del microcontrolador


PIC16F1787, organización de memoria, así como su arquitectura interna con sus
diferentes métodos de direccionamiento.

1. ARQUITECTURA DEL MICROCONTROLADOR

1.1 Características generales

El PIC16F1787 es un microcontrolador de gama media del fabricante


Microchip Technology fabricado en tecnología CMOS, cuyas características lo hacen
ideal para ser utilizado en diversas aplicaciones y proyectos, gracias a los diversos
recursos y periféricos con que cuenta, su bajo consumo, velocidad de procesamiento
y cantidad de memoria disponible. La figura 1 muestra la distribución de pines tipo
DIP la cual permite su inserción en protoboard para prueba preliminares de prototipos
y tarjetas PCB para destino final, de igual manera este microcontrolador está presente
en la librería del software de simulación PROTEUS, haciéndolo ideal para
simulaciones de numerosas aplicaciones.

Es un microcontrolador de 8 Bits, es decir, su registro de trabajo W es de 8


Bits, de manera que las operaciones aritmética y de registros que realiza son de hasta
8 Bits. La figura 1.1

SIMULACIÓN DE APLICACIONES PARA MICROCONTROLADORES PIC DE 8 BITS. AGOSTO DE 2019


4
Figura 1.1 Diagrama de distribución de pines

En el mercado existen numerosos microcontroladores, sin embargo algo que


destaca en la familia de los PIC para este trabajo es su versatilidad y amplia difusión
en internet, de manera que existe mucha información disponible. Dentro de la familia
de microchip existe una gran variedad de dispositivos, sin embargo cabe destacar que
recientemente en la asignatura microprocesadores 1 se dictaba con el famoso
PIC16F877, luego se sustituyó por el PIC16F1787 por presentar mejoras
significativas y otros beneficios; se conserva su disposición de pines y el set de
instrucciones es en su mayoría idéntico al del anterior microcontrolador, aspectos que
hacen que su migración y adaptación sea muy sencilla, logrando asi una continuidad
en el aprendizaje.

La tabla 1.1 muestra un resumen de las características más relevantes entre el


PIC16F1787 y su predecesor, el PIC16F877, siendo una de las más notables la
memoria RAM de datos pasando de 368 bytes en el 877 e a 1024 bytes en el 1787 y
las fuentes de interrupciones pasando de 14 a 22.

SIMULACIÓN DE APLICACIONES PARA MICROCONTROLADORES PIC DE 8 BITS. AGOSTO DE 2019


5
Tabla 1.1 Resumen comparativo entre PIC16F877 Vs PIC16F1787

Modelo PIC16F877 PIC16F1787

Mem. Programa FLASH 8192x14 8192x14

Mem. Datos EEPROM 256 256


(Bytes)
RAM 368 1024

Puertos E/S 33 36

Temporizadores 1-16 bits, 2-8 bits, 1-WDT 1-16 bits, 2-8 bits, 1-WDT

CCP 2 3

Comunicación Serial USART/MSSP EUSART/MSSP

ADC/DAC 8 (10 bits)/0 14 (12 bits)/1

Fuentes de Interrupción 14 22

Encapsulado 40P,44L,44PQ,44PT 40P,44L,44PQ,44PT

Pila 8 16

Comparadores/OPAMP 0 4/3

1.2 Arquitectura Interna

Los PIC16F87X de Microchip pertenecen al tipo de procesador RICS que es


un procesador de instrucciones reducidas, se caracteriza porque el número de
instrucciones es pequeño y además casi todas se realiza en la misma cantidad de
tiempo, salvo las instrucciones de salto. Este tipo de procesador emplea una
arquitectura Harvard lo que significa que el procesador puede tener acceso a las
memorias de datos y de programa en simultáneo ya que están en bloques separados y
disponen cada una de un bus de datos y direcciones. Esto se traduce en menor tiempo
de ejecución de instrucciones.

La figura 1.2 muestra la arquitectura von Neumann que posee en un mismo


bloque la memoria de datos y programa, compartiendo el bus de datos y direcciones y

SIMULACIÓN DE APLICACIONES PARA MICROCONTROLADORES PIC DE 8 BITS. AGOSTO DE 2019


6
por tanto haciendo más lento el acceso a la memoria. La figura 1.3 presenta la
arquitectura Harvard que soluciona este inconveniente.

Bus
Direcciones
Memoria

CPU Programa
+
Bus Datos
Datos

Figura 1.2. Arquitectura Von Neumann

Bus Bus
Direcciones Direcciones
M. Datos M. Prog Memoria
Memoria

Datos
Bus
Datos
CPU Bus
Datos
Programa
M. Datos M. Prog

Figura 1.3. Arquitectura Harvard

Es importante conocer la arquitectura interna del microcontrolador, de manera


que pueda optimizarse los algoritmos que se diseñen. La figura 1.4 presenta el
diagrama de bloques de la estructura interna del PIC16F1787, donde se aprecian los
periféricos, y diversos recursos con que cuenta. En los siguientes capítulos se
describirán los aspectos más importantes pertinentes a este trabajo.

La figura 1.5 muestra el diagrama completo del núcleo del PIC, allí se observa
a detalles de cada elemento de su composición, los buses de conexión a los diversos
periféricos así como la relación del bloque ALU, el registro de trabajo W y los
métodos de direccionamiento. En los microcontroladores tradicionales todas las
operaciones se realizan sobre el acumulador. La salida del acumulador está conectada
a una de las entradas de la Unidad Aritmética y Lógica (ALU), y por lo tanto éste es

SIMULACIÓN DE APLICACIONES PARA MICROCONTROLADORES PIC DE 8 BITS. AGOSTO DE 2019


7
siempre uno de los dos operandos de cualquier instrucción. Por convención, las
instrucciones de simple operando (borrar, incrementar, decrementar, complementar),
actúan sobre el acumulador. La salida de la ALU va solamente a la entrada del
acumulador, por lo tanto el resultado de cualquier operación siempre quedara en este
registro. Para operar sobre un dato de memoria, luego realizar la operación siempre
hay que mover el acumulador a la memoria con una instrucción adicional.

En los microcontroladores PIC, la salida de la ALU va al registro W y


también a la memoria de datos, por lo tanto el resultado puede guardarse en
cualquiera de los dos destinos. En las instrucciones de doble operando, uno de los dos
datos siempre debe estar en el registro W, como ocurría en el modelo tradicional con
el acumulador. En las instrucciones de simple operando el dato en este caso se toma
de la memoria (también por convención). La gran ventaja de esta arquitectura es que
permite un gran ahorro de instrucciones ya que el resultado de cualquier instrucción
que opere con la memoria, ya sea de simple o doble operando, puede dejarse en la
misma posición de memoria o en el registro W, según se seleccione con un bit de la
misma instrucción. Las operaciones con constantes provenientes de la memoria de
programa (literales) se realizan solo sobre el registro W.

Figura 1.4. Diagrama de bloques

SIMULACIÓN DE APLICACIONES PARA MICROCONTROLADORES PIC DE 8 BITS. AGOSTO DE 2019


8
Figura 1.5 Diagrama de bloques del núcleo

SIMULACIÓN DE APLICACIONES PARA MICROCONTROLADORES PIC DE 8 BITS. AGOSTO DE 2019


9
1.3 Organización de la memoria

El microcontrolador dispone de los siguientes tipos de memoria:


 Memoria de programa
 Memoria RAM de datos
 Memoria EEPROM

1.3.1 Memoria de programa

La memoria de programa es de 8 KW, o lo que es igual a 8K palabra de


tamaño, dividida en cuatro bloques llamados páginas. Es utilizada como su nombre lo
indica para almacenar programa, es decir el código desarrollado bajo el set de
instrucciones. La figura 1.6 muestra la disposición de la memoria de programa.

Figura 1.6. Organización de la memoria de programa

SIMULACIÓN DE APLICACIONES PARA MICROCONTROLADORES PIC DE 8 BITS. AGOSTO DE 2019


10
Las siguientes características están asociadas con el acceso y control de la
memoria de programa: PCL, PCLATH, PILA, Direccionamiento indirecto. Para
direccionar el bloque de memoria de programa se tiene un contador de programa,
(PC por sus siglas en inglés), de 15 bits, este se divide en dos partes llamados PCL y
PCH, a este último se accede desde otro registro ubicado en la memoria RAM de
datos llamado PCLATH. El PC, es totalmente equivalente al de todos los
microprocesadores y contiene la dirección de la próxima instrucción a ejecutar. Se
incrementa automáticamente al ejecutar cada instrucción, de manera que la secuencia
natural de ejecución del programa es lineal, una instrucción después de la otra.

Algunas instrucciones que llamaremos de control, cambian el contenido del


PC alterando la secuencia lineal de ejecución. Dentro de estas instrucciones se
encuentran el GOTO y el CALL que permiten cargar en forma directa un valor
constante en el PC haciendo que el programa salte a cualquier posición de la
memoria. Otras instrucciones de control son los SKIP o “salteos” condicionales, que
producen un incremento adicional del PC si se cumple una condición específica,
haciendo que el programa saltee, sin ejecutar, la instrucción siguiente . Al resetearse
el microprocesador, todos los bits del PC toman valor 1, de manera que la dirección
de arranque del programa es siempre la última posición de memoria de programa. En
esta posición se deberá poner una instrucción de salto al punto donde verdaderamente
se inicia el programa.

El siguiente segmento de código permite cambiar de página para escribir el


programa en cualquiera de las cuatro páginas. Para ello se utilizan los bits 3 y 4 del
registro PCLATH. Por ejemplo queremos escribir nuestro programa a partir de la
dirección 1800H, es decir, en la página 3.

Bsf PCLATH,3 ;Preparamos el PC para que al ejecutar la


Bsf PCLATH,4 ;instrucción call se posicione en la dirección
Call Pagina_3 ; 1800H
Org 0x1800
Pagina_3 nop ; Aquí inicia el código escrito a partir de la dirección 1800H

SIMULACIÓN DE APLICACIONES PARA MICROCONTROLADORES PIC DE 8 BITS. AGOSTO DE 2019


11
Pila o Stack. En los microcontroladores PIC el stack es una memoria interna
dedicada, de tamaño limitado, separada de las memorias de datos y de programa,
inaccesible al programador, y organizada en forma de pila, que es utilizada
solamente, y en forma automática, para guardar las direcciones de retorno de
subrutinas e interrupciones. Cada posición es de 15 bits y permite guardar una copia
completa del PC. Como en toda memoria tipo pila, los datos son accedidos de manera
tal que el primero que entra es el último que sale. Es de 16 niveles, lo que permite
salvar la dirección del PC ante un evento de llamado a subrutinas o interrupciones. En
importante que el programador tenga presente que al ser la pila de 16 niveles puede
desbordarse si se supera este valor, de manera que la primera dirección de retorno que
se guarda en la pila pudiera perderse y no conseguir que el PC se cargue nuevamente
con la dirección correcta de retorno.

Figura 1.7. Organización de la memoria de programa

SIMULACIÓN DE APLICACIONES PARA MICROCONTROLADORES PIC DE 8 BITS. AGOSTO DE 2019


12
Y por supuesto asegurarse de ubicarse físicamente en la página donde se esté
ejecutando el programa, para ello se hace uso de los registros PCL y PCLATH. La
longitud de las instrucciones es de 14 bits, y dependiendo de cómo se cargue el PC
después del uso se instrucciones de salto como CALL, GOTO, o de BRW o BRA.

1.3.2 Métodos para acceder a la memoria de programa como datos

Existen dos métodos para acceder a constantes en la memoria de programa. El


primer método es usar tablas mediante el uso de la instrucción RETLW. Para ello se
utiliza la instrucción BRW para modificar a conveniencia el contador de programa,
que es el puntero a la memoria de programa, y así con la instrucción RETLW
devuelve un valor literal en W de interés para el programador. La instrucción BRW
hace que este tipo de tabla sea muy fácil de implementar.

El segundo método consiste utilizar direccionamiento indirecto para


acceder a la memoria de programa. El bloque de memoria inicia en la dirección
8000H hasta la 7FFFH, de manera que para inicializar el direccionamiento, basta con
colocar el bit 7 del registro FSRnH en “1” y luego modificando el FSRnL y los 7 bits
menos significativo del FSRnH podemos movernos a lo largo de la memoria según la
necesidad.

Figura 1.8. Direccionamiento de la memoria de programa

SIMULACIÓN DE APLICACIONES PARA MICROCONTROLADORES PIC DE 8 BITS. AGOSTO DE 2019


13
1.3.3 Memoria RAM de datos

La memoria RAM de datos se divide en 32 bancos con 128 bytes por banco. Cada
banco está formado por:
• 12 Registros de núcleo duplicados en los 32 bancos para fácil acceso
• 20 Registros de funciones especiales (SFR)
• Hasta 80 bytes de RAM de uso general (GPR)
• 16 bytes de RAM común

Los registros de núcleo contienen los registros que directamente afectan el


funcionamiento básico del CPU. Estos registros ocupan las primeras 12 direcciones
de todos los bancos de memoria de datos (direcciones x00h/x80h al x0Bh/x8Bh).

Figura 1.9. Registros Núcleo en la memoria de datos

Los registros de propósito especiales o SFR son registros utilizados por la


aplicación para controlar la operación deseada de funciones periféricas en el
dispositivo. Estos registros ocupan los 20 bytes después de los registros de núcleos en

SIMULACIÓN DE APLICACIONES PARA MICROCONTROLADORES PIC DE 8 BITS. AGOSTO DE 2019


14
todos los bancos de memoria de datos (direcciones x0Ch/x8Ch al x1Fh/x9Fh). La
figura 1.10 muestra, los SFR asociado a los bancos 0 y 1. En el datasheet del
fabricante están todos los registros de la memoria RAM de datos.

Banco 0 Banco 1

000h 080h
Registros de Nucleo Registros de Nucleo
00Bh 08Bh

00Ch PORTA 08Ch TRISA


00Dh PORTB 08Dh TRISB
00Eh PORTC 08Eh TRISC
00Fh PORTD 08Fh TRISD
010h PORTE 090h TRISE
011h PIR1 091h PIE1
012h PIR2 092h PIE2
013h PIR3 093h PIE3
014h PIR4 094h PIE4
015h TMR0 095h OPTION_REG
016h TMR1L 096h PCON
017h TMR1H 097h WDTCON
018h T1CON 098h OSCTUNE
019h T1GCON 099h OSCCON
01Ah TMR2 09Ah OSCSTAT
01Bh PR2 09Bh ADRESL
01Ch T2CON 09Ch ADRESH
01Dh 09Dh ADCON0
01Eh 09Eh ADCON1
01Fh 09Fh ADCON2
020h 0A0h
Registros de proposito Registros de proposito
general 80 Bytes general 80 Bytes
06Fh 0EFh
070h 0F0h
RAM COMUN 70h – 7Fh RAM COMUN 70h – 7Fh
07Fh 0FFh

Figura 1.10. Registros de propósitos especiales SF

SIMULACIÓN DE APLICACIONES PARA MICROCONTROLADORES PIC DE 8 BITS. AGOSTO DE 2019


15
1.4 Métodos de direccionamiento en la memoria de datos

La memoria de datos utiliza 12 bits para el direccionamiento de los registros,


de los cuales los 7 bits menos significativos definen la dirección dentro del banco,
mientras que los 5 bits más significativo definen el banco. Existen dos tipos de
direccionamientos para acceder a la totalidad de la memoria de datos, estos son el
direccionamiento directo y el indirecto.

1.4.1 Direccionamiento Directo

En el direccionamiento directo se selecciona el banco activo escribiendo el


número del mismo en el registro selector de banco (BSR), para ello hacemos uso de
la instrucción MOVL. Por ejemplo para ubicarse en un registro ubicado en el banco 6
se procede así: movlb 6

El número 6 se carga en el registro BSR, ubicándose de esta manera en el banco


6. Y mediante el código de operación de la instrucción se accede a cualquier registro
dentro del banco.

1.4.2 Direccionamiento Indirecto

Este método consiste en acceder a la memoria a través del uso del puntero FSR, y
para leer o escribir en el registro que apunta el FSR se usa el INDF.
Los registros INDFn no son registros físicos. Alguna instrucción que accede a un
registro INDFn en realidad accede al registro en la dirección especificada por el
puntero de selección de registros (FSR). Se crea el valor de registro FSRn por el par
de registros FSRnH y FSRnL. Los registros FSR forman una dirección de 16 bits que
permite una abordar el espacio con 65536 ubicaciones. Estos lugares se dividen en
dos regiones de memoria

 Memoria de datos tradicional


 Memoria de datos lineal

SIMULACIÓN DE APLICACIONES PARA MICROCONTROLADORES PIC DE 8 BITS. AGOSTO DE 2019


16
1.4.3 Memoria de datos tradicional

La memoria de datos tradicional es una región de FSR que inicia en la


dirección 0x000 hasta la 0xFFF. Las direcciones corresponden a las direcciones
absolutas de todos los SFR, GPR y registros comunes. En vista de que existen dos
punteros, FSR0 y FSR1 es posible tener acceso simultaneo a dos bancos diferentes
en la menoria, leyendo los registros INDF correspondientes. Esto lo hace muy
versátil, especialmente cuando se tienen grupos de registros continuos, pero ubicados
en bancos diferentes.

Por ejemplo cuando se requiere tener acceso a un grupo continuo de registros


ubicado en el banco “0” y otro grupo ubicado en el banco “3”, puede utilizarse el
FSR0 para acceder a los datos del banco “0” y el FSR1 para los del “3”, así es posible
optimizar la búsqueda y actuación sobre el contenido de cada registro. La figura 1.11
muestra la manera en que se accede a la memoria tradicional

Figura 1.11. Registros de próposito especiales SFR


Fuente: Datasheet Micrichip P16f1787
Figura 1.11. Direccionamiento tradicional de la memoria de datos

SIMULACIÓN DE APLICACIONES PARA MICROCONTROLADORES PIC DE 8 BITS. AGOSTO DE 2019


17
1.4.4 Memoria de datos lineal

La memoria de datos lineales es la región desde la dirección FSR 0x2000 a


dirección FSR 0x29AF. Esta es una región virtual que apunta a los bloques de 80
bytes de memoria GPR en todos los bancos, para un total de 2400 registros; sin
embargo algunos bloques de memoria no están implementados físicamente; estos se
leen como 0x00. El uso de la región de memoria de datos lineales permite que los
buffers sean más grandes hasta de 80 bytes porque al incrementar el FSR más allá un
banco irá directamente a la memoria GPR del siguiente banco. Los 16 bytes de
memoria común no están incluidos en la región de memoria de datos lineal.

Este método de direccionamiento es especialmente útil cuando se requiere


gestionar grandes grupos de datos ubicados de forma continua. A través de una rutina
simple se puede tener acceso a estos, cosa que sería muy extenso y complicado
usando el método de direccionamiento directo.

Figura 1.12. Direccionamiento lineal de la memoria de datos

SIMULACIÓN DE APLICACIONES PARA MICROCONTROLADORES PIC DE 8 BITS. AGOSTO DE 2019


18
Antes de realizar la primera aplicación explicaremos de manera sencilla la forma de
simular el código en Mplab. Usaremos la versión 8.92

Para simular en MPLAB IDE 8.92 lo primero que se debe hacer es abrir el programa
y el código que queremos simular en la aplicación. Acto seguido, hay que
posicionarse en la barra de herramientas, en la parte superior, desde donde se debe
acceder a la casilla Debugger, luego se debe seleccionar la opción Select Tool y
escoger MPLAB SIM

Figura 1.13 Debugger>Select Tool>MPLAB SIM

Al hacer esto, aparecerán nuevas opciones en la parte derecha de la barra de


herramientas, con las cuales se puede simular el programa, bien sea automáticamente
o paso por paso, así como pausar o determinar un cierre anticipado del mismo.
(Fig.1.14)

SIMULACIÓN DE APLICACIONES PARA MICROCONTROLADORES PIC DE 8 BITS. AGOSTO DE 2019


19
Figura 1.14 Herramientas de simulation

Para acceder a la Memoria de programa, sólo se debe hacer click en la casilla View
de la barra de tareas. Luego se debe seleccionar la opción Program Memory.

Figura 1.15 Para visualizer la memoria de programa

Esto hará que se abra una nueva sub-ventana dentro del programa, la cual muestra la
memoria de programa del microcontrolador

SIMULACIÓN DE APLICACIONES PARA MICROCONTROLADORES PIC DE 8 BITS. AGOSTO DE 2019


20
Figura 1.16 Despliegue de la memoria de programa

Para acceder y manejar los registros de propósito general de la memoria, se debe


hacer click nuevamente en la casilla View del programa, sólo que esta vez hay que
seleccionar la Watch.

Figura 1.17 Vista de la memoria Ram de datos

SIMULACIÓN DE APLICACIONES PARA MICROCONTROLADORES PIC DE 8 BITS. AGOSTO DE 2019


21
Al hacerlo se abrirá una nueva sub-ventana, donde se encontrará una tabla con los
siguientes renglones: Update, Address, Symbol Name, Value. Para poder acceder al
algún registro, sólo se debe incluir su dirección en hexadecimal bajo el renglón
Address. Por ejemplo se ha accedido al registro 0x420

Figura 1.18 Vista de la opción Watch

Bajo el renglón Value se puede observar el valor actual del registro en hexadecimal,
no obstante también existe la posibilidad de verlo en otros sistemas numéricos con
sólo dar click derecho sobre la parte superior de la tabla y seleccionar una de las
opciones que se presentan. La opción seleccionada aparecerá como un nuevo renglón
en la tabla. La figura 1.19 muestra este hecho.

SIMULACIÓN DE APLICACIONES PARA MICROCONTROLADORES PIC DE 8 BITS. AGOSTO DE 2019


22
Figura 1.19 Formato numérico disponible

Aplicación 1.1: Métodos de direccionamiento y manejo de Mplab

Enunciado: Elabore un programa que funcione según la siguiente condición: Si el


código presente en el nible alto de un registro ubicado en la dirección 20H es 1110 la
operación a realizar es la suma de dos números BCD de cuatro dígitos cada uno, el
número 1 (Num1) se encuentra a partir de la dirección 340h, el número 2 (Num2), se
encuentra a partir de la dirección 3BCh. El resultado debe depositarse a partir de la
dirección 420h. Si el código es 0100 la operación a realizar es la resta de Num1
menos el Num2. El resultado debe depositarse a partir de la dirección 22H

Además debe convertir el resultado BCD obtenido de la suma o resta a su equivalente


código 7 Segmento mediante el uso de tablas en la memoria de programa, el valor 7
segmentos debe depositarlo en las direcciones que elija el programador. El programa

SIMULACIÓN DE APLICACIONES PARA MICROCONTROLADORES PIC DE 8 BITS. AGOSTO DE 2019


23
deberá estar escrito a partir de la dirección 18F0h en la memoria de programa. Debe
utilizar Sub Rutinas.

Principio de funcionamiento: La siguiente aplicación muestra mediante un ejemplo


los métodos de direccionamientos a la memoria RAM de datos y de programa
utilizando el software MPlab, a la vez que observamos la aplicación de operaciones
aritméticas, conversión de código y otras funciones, para lo cual hacemos uso del set
de instrucciones.

Para poder realizar operaciones con número BCD, se deben separar cada una
de las cifras en un registro independiente. Por ende cada registro en el cual está
contenido el número debe ser separado en los nibles que lo componen (alto y bajo) y
cada uno deberá ser guardado en registros auxiliares dentro de la memoria.

La suma en BCD presenta dos situaciones particulares: la primera es, si el


resultado es un número válido BCD, es decir un número binario entre 0 y 9; la
segunda si no lo es, en otras palabras, si el total está comprendido entre el 10 al 18 en
binario, ya que la máxima suma de dos números BCD es 9+9=18. Es por esto que al
realizar la adición se debe comprobar si el total es o no válido BCD. Para lograrlo,
debemos verificar que el total no exceda al número 10. Por lo tanto, si se resta éste
número al resultado obtenido, se puede emplear el bit C del registro status como
bandera indicadora, donde si su valor es 0 la suma es un número válido BCD. En caso
contrario el total sería no válido BCD, pero ya estaría parcialmente convertido en un
registro del microcontrolador, bien sea en el de trabajo o en alguno auxiliar, e
implicaría un acarreo hacia la siguiente cifra; es decir cuando en A-B, A es mayor
que B o viceversa. Para realizar la operación de sustracción en BCD e identificar el
signo del resultado se usa la suma BCD en complemento a 1 y el EAC (End Around
Carry).

SIMULACIÓN DE APLICACIONES PARA MICROCONTROLADORES PIC DE 8 BITS. AGOSTO DE 2019


24
El método consiste en complementar a 1 el sustraendo y luego sumarlo cifra a
cifra con el minuendo. Posteriormente se debe verificar si la operación ha generado
algún acarreo en las cifras mayores, la unidad de mil en este caso particular, el cual es
el EAC. Si éste acarreo es 1, el resultado es un número positivo, si es cero es
negativo. Si el EAC=1, la diferencia es positiva, entonces se debe verificar en cual
otra suma ha existido acarreo, empezando desde las cifras menores (unidad) hacia las
mayores (decena, centena). En caso de existir un acarreo, el resultado de la suma ya
representa al verdadero resultado de la resta, y el acarreo debe sumarse a la cifra
siguiente. En caso de no existir acarreo, se le debe sumar 10 al resultado e ignorar
cualquier acarreo generado por ésta última operación, tomando sólo los 4LSB como
número BCD.

Si el EAC=0, la diferencia es negativa, nuevamente se debe verificar en cual


otra suma ha existido acarreo, empezando desde las cifras menores (unidad) hacia las
mayores (decena, centena). En caso de no existir un acarreo, el resultado de la suma
debe complementarse a 1 para que represente su verdadero valor. En caso de existir el
acarreo éste se le debe sumar a la siguiente cifra, mientras tanto el resultado debe
complementarse a 1 y se le debe sumar 10. El anexo 1.1 contiene el código fuente de
este ejercicio.

SIMULACIÓN DE APLICACIONES PARA MICROCONTROLADORES PIC DE 8 BITS. AGOSTO DE 2019


25
Simulación:

Para verificar el correcto funcionamiento se realizará la resta de dos números


arbitrarios, el 6543 menos 5253, el resultado deberá ser 1290.

Figura 1.20. Comprobación valor 4 en nible alto registro 0x20. Salto a resta

SIMULACIÓN DE APLICACIONES PARA MICROCONTROLADORES PIC DE 8 BITS. AGOSTO DE 2019


26
Figura 1.21. Llamada y ejecución de rutina de extracción BCD

Figura 1.22. Complemento a 1 del NUM2, registros del 0x44 al 0x47

SIMULACIÓN DE APLICACIONES PARA MICROCONTROLADORES PIC DE 8 BITS. AGOSTO DE 2019


27
1.23. Comprobación de Resta con resultado positivo

1.24. Llamado a la subrutina TABLA

SIMULACIÓN DE APLICACIONES PARA MICROCONTROLADORES PIC DE 8 BITS. AGOSTO DE 2019


28
Figura 1.25. Ejecución de la subrutina TABLA

Figura 1.26. Resultado final. Resultados guardados en registros 0x22 y 0x23, Números
convertidos a 7SEG guardados en registros del 0x50 al 0x53

SIMULACIÓN DE APLICACIONES PARA MICROCONTROLADORES PIC DE 8 BITS. AGOSTO DE 2019


29
Aplicación 1.2 Manejo de direccionamiento lineal y tradicional

Enunciado: Elabore un programa que cuente los números comprendido en el


siguiente intervalo: mayores o iguales a 83 y los menores a 155 de una lista de
registros que se encuentra dividida de la siguiente forma: inicia en la dirección 20h
hasta la 6Fh; y continúa en la A0h hasta la EFh. El conteo de los números [83, 155)
deben guardarse en la dirección 70h. Utilice direccionamiento indirecto tradicional y
lineal para acceder a la lista (Explique cómo funciona cada método de
direccionamiento y las ventajas). El programa deberá estar escrito a partir de la
dirección 1000h en la memoria de programa. Explique cómo cambiarse de página.

Principio de funcionamiento: El direccionamiento indirecto tradicional trabaja con


los registros FSRXL y FSRXH, los cuales manejan el banco y la locación de la
siguiente manera Así, accediendo a la información que se encuentra distribuida en
diversos bancos con tan solo ir incrementando el puntero FSRX correspondiente. Con
el método tradicional, se puede saber de manera directa en qué banco se encuentra el
dato con tan solo concatenar el bit 7 del FSRXL con el nible bajo del FSRXH. Sin
embargo, el incremento sólo se puede hacer hasta la dirección final del banco
correspondiente, puesto que luego de los bytes de propósito general queda la RAM
común y por ello hay que reasignar los punteros a la nueva dirección. Eso sí, sigue
siendo un mejor método que el direccionamiento directo al momento de leer una lista
de datos.

El direccionamiento indirecto lineal tiene la característica de que concatena


los bytes de la memoria de propósito general de cada banco, dando la impresión de
que están uno debajo del otro, haciendo así el recorrido de una lista de datos que está
en diversos bancos de forma consecutiva con un único inicio y fin, ventaja que tiene
este método sobre el tradicional. Para realizar este método es necesario iniciar el
FSRX en la dirección 2000h. La dirección final de este método es la 29EFh.

SIMULACIÓN DE APLICACIONES PARA MICROCONTROLADORES PIC DE 8 BITS. AGOSTO DE 2019


30
Para realizar el cambio de página se requiere usar el registro núcleo PCLATH, en el
cuál los bits 3 y 4 manejan el número de página. Si los bits 4 y 3 son 0, se está en la
página cero y si se desea estar en la página 2, se hace un BFS en el bit 4 y el bit 3
mantiene el 0, queda 10 que es 2 en binario y por ello se inicia el programa en la
página 2.

Simulación: Por direccionamiento lineal

(a)

(b)

SIMULACIÓN DE APLICACIONES PARA MICROCONTROLADORES PIC DE 8 BITS. AGOSTO DE 2019


31
(c)

(d)

Figura 1.27 (a), (b), (c) y (d) evolución de la simulación en MPlab

SIMULACIÓN DE APLICACIONES PARA MICROCONTROLADORES PIC DE 8 BITS. AGOSTO DE 2019


32
Finalizando el recorrido del programa, una vez leído y comparado los datos de las
listas ubicadas en sus respectivos bancos, la cantidad de números que cumplen el
intervalo de (83,155] son 4, ubicados en sus respectivas locaciones:
- 20h tiene el número 100
- 22h tiene el número 100
- 6Fh tiene el número 90
- EFh tiene el número 139

Simulación: Por direccionamiento tradicional

Figura 1.28. Inicio del programa en la página 2 y datos cargados en las localidades
pertenecientes a las listas

SIMULACIÓN DE APLICACIONES PARA MICROCONTROLADORES PIC DE 8 BITS. AGOSTO DE 2019


33
Figura 1.29. Se asigna el puntero FSR0 a la lista del banco 0

Figura 1.30. Comprobando dato guardado en la última locación del banco 0

SIMULACIÓN DE APLICACIONES PARA MICROCONTROLADORES PIC DE 8 BITS. AGOSTO DE 2019


34
Figura 1.31. Resguardo de los resultados según las especificaciones del programa

Las figuras 1.28 a 1.31muestran la ejecución del programa usando como


único simulador el software MPlab, allí se observan el desplazamiento a lo largo de la
memoria de datos mediante el direccionamiento indirecto tradicional. Además, se
tiene la cantidad de números que cumplen el intervalo de (83,155], en total son 4
ubicados en:
- 20h con el valor de 83
- 6Fh con el valor de 139
- A0h con el valor de 90
- EFh con el valor de 100

El anexo 1.21 y 1.2.2 contiene el código fuente de este ejercicio.

SIMULACIÓN DE APLICACIONES PARA MICROCONTROLADORES PIC DE 8 BITS. AGOSTO DE 2019


35
CAPÍTULO II

El presente capítulo describe la definición, uso, características y


configuración de periféricos puertos de entradas y salidas dispone el
microcontrolador. Igualmente se suministra en ejemplo de configuración completo
que muestra de manera sencilla el comportamiento de los puertos en configuración,
de entrada y salida.

2. PUERTOS ENTADA/SALIDA

2.1 Características generales

Los puertos E/S son la interfaz de comunicación del microcontrolador con el


exterior. A través de ellos podemos leer valores digitales y analógicos provenientes
de diversas fuentes, por supuesto, siempre que estén dentro de los parámetros de
voltajes admisibles, según las características descritas en el manual del fabricante, asi
como escribir sobre ellos para activar diversos elementos actuadores, visualizar el
estado de algún evento mediante diodos leds o mostrar información a través de
pantallas lcd, display, entre otros. El microcontrolador PIC17F1787 dispone de 5
puertos E/S muchos de los cuales sus pines son compartidos por diversos recursos

Puerto A: 8 pines de entrada y salidas (RA0- RA7)


Puerto B: 8 pines de entrada y salidas (RB0- RB7)
Puerto C: 8 pines de entrada y salidas (RC0- RC7)
Puerto D: 8 pines de entrada y salidas (RD0- RD7)
Puerto E: 4 pines de entrada y salidas (RE0- RE3)

SIMULACIÓN DE APLICACIONES PARA MICROCONTROLADORES PIC DE 8 BITS. AGOSTO DE 2019


36
La figura 2.1 muestra el diagrama general de puertos E/S

Figura 2.1. Hardware general de puertos

Para el manejo y configuración de los puertos se utilizan una serie de registros de


propósito especial, ellos son: TRISn, PORTn, LATn, ANSELn, WPUn y
OPTION_REG donde n es la letra asociada al puerto. Estos registros están presentes
en la memoria RAM de datos, específicamente es la sección de registros de propósito
especial o SFR, distribuidos entre los bancos 0 al 4. (Ver figura 2.2)

Figura 2.2. Registros de propósito especiales SFR para manejo de puertos

SIMULACIÓN DE APLICACIONES PARA MICROCONTROLADORES PIC DE 8 BITS. AGOSTO DE 2019


37
Tabla 2.1 Registros asociados al manejo de puertos E/S

REGISTROS FUNCIÓN
TRISn Permite configurar los puertos como entradas o salidas
PORTn Permite leer o escribir el puerto
LATn Permite leer o escribir latch del puerto
ANSELn Permite configurar el puerto como entrada/salida digital o entrada analógica
OPTION_REG Habilitador general de las resistencias Pull-Up mediante el bit 7
WPUn Permite habilitar las resistencias Pull-Up individualmente de cada puerto

El dato del latch (registros LATn) es útil para las operaciones de


modificación lectura/escritura en el valor que manejan los pines de E/S. Una
operación de escritura en el registro LATn tiene el mismo efecto que una escritura en
el registro PORTn correspondiente. Sin embargo una lectura de las lecturas del
registro LATn de los valores mantenidos en los pestillos E/S PORT, mientras que una
lectura del registro PORTn lee el valor real del pin de E/S. A continuación se
describen los principales registros de configuración, utilizando como ejemplo el
puerto A, esto aplica por lo general a los demás puertos.

OPTION_REG

WPUEN: Habilitador General de las Resistencias Pull-Up


1: Se Deshabilitan todas las Resistencias Pull-Up
0: Permite Habilitar individualmente las Resistencias Pull-Up

WPUA

WPUA0: Habilita la Resistencias Pull-Up del pin RA0


0: Resistencias Pull-Up Deshabilitada
1: Resistencias Pull-Up Habilitada

SIMULACIÓN DE APLICACIONES PARA MICROCONTROLADORES PIC DE 8 BITS. AGOSTO DE 2019


38
ANSELA

0: Configura el pin asociado como entrada/salida digital


1: Configura el pin asociado como entrada analógica

TRISA

0: Configura el pin asociado como entrada


1: Configura el pin asociado como salida

2.2. Pines con Función alternativa

Los registros de control de funciones Pin alternativo (APFCON1 y


APFCON2) se utilizan para dirigir funciones específicas de entrada y salida de
periféricos entre distintos pines. Para esta familia de dispositivos, las siguientes
funciones se pueden mover entre diferentes pines.

 Pin C2OUT
 Pin CCP1
 Pin SDO
 Pin SCL / SCK
 Pin SDA / SDI
 Pin TX / RX
 Pin CCP2
 Pin CCP3

SIMULACIÓN DE APLICACIONES PARA MICROCONTROLADORES PIC DE 8 BITS. AGOSTO DE 2019


39
APFCON1

C2OUTSEL: Bit de selección del pin C2OUT


1: C2OUT está en el pin RA6
0: C2OUT es el pin RA5

CCP1SEL: Bit de selección del pin CCP1


1: CCP1 es el pin RB0
0: CCP1 es el pin RC2

SDOSEL: Bit de seleccion del pin MSSP SDO


1: SDO está en el pin RB5
0: SDO está en el pin RC5

SCKSEL: Bit de selección del pin MSSP (SCL / SCK)


1: SCL/SCK es el pin RB7
0: SCL/SCK es el pin RC3

SDISEL: Bit de selección del pin MSSP (SDA / SDI)


1: SDA /SDI es en el pin RB6
0: SDA /SDI es en el pin RC4

TXSEL: Bit de selección del pin TX


1: TX es el pin RB6
0: TX es el pin RC6

RXSEL: Bit de selección del pin RX


1: RX está en el pin RB7
0: RX está en el pin RC7

CCP2SEL: Bit de selección del pin CCP2


1: CCP2 es en el pin RB3
0: CCP2 es en el pin RC1

SIMULACIÓN DE APLICACIONES PARA MICROCONTROLADORES PIC DE 8 BITS. AGOSTO DE 2019


40
APFCON2

CCP3SEL: Bit de selección del pin CCP3


1: CCP3 es en el pin RB5
0: CCP3 es en el pin RE0

Aplicación 2.1 Manejo y configuración de puertos E/S

Enunciado: Se desea leer el estado de un dipswich (4 suiche) conectado al nible bajo


del puerto C y mostrar su valor en un display siete segmento conectado al puerto D
(desde 0 hasta F).

Principio de funcionamiento: Para realizar esta aplicación debemos inicialmente


configurar los puertos C y D. vamos a utilizar los siguientes registros:
TRISC, TRISD, ANSELC, ANSELD, PORTC, PORTD, OPTION_REG y WPUC.

Como mediante el Puerto C se leerá el estado de los dispswich, debe configurarse


como entrada, el puerto D como salida y salida digital (excepto RD7), además
activamos las resistencias pull-up en el nible bajo del puerto C. Así tenemos la tabla
2.2.
Tabla 2.2 Configuración de registro para el manejo de puertos

REGISTRO Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0


TRISC 1 1 1 1 1 1 1 1
TRISD 1 0 0 0 0 0 0 0
ANSELD 0 0 0 0 0 0 0 0
OPTION 0 X X X X X X X
WPUC 0 0 0 0 1 1 1 1

SIMULACIÓN DE APLICACIONES PARA MICROCONTROLADORES PIC DE 8 BITS. AGOSTO DE 2019


41
En esta ocasión por la brevedad del código fuente lo colocaremos directamente en
este apartado:

org 0x00 retlw B'11111001'; Uno


goto INICIO retlw B'10100100'; Dos
org 0x5 retlw B'10110000'; Tres
INICIO; CONFIGURACION retlw B'10011001'; Cuatro
BANKSEL OSCCON retlw B'10010010'; Cinco
movlw 0x5f retlw B'10000011'; Seis
movwf OSCCON retlw B'11111000'; Siete
BANKSEL TRISB retlw B'10000000'; Ocho
movlw b'11111111' retlw B'10011000'; Nueve
movwf TRISC retlw B'10001000'; letra A
movlw b'10000000' retlw B'10000011'; letra b
movwf TRISD retlw B'11000110'; letra C
; ENTRADASALIDA DIGITAL retlw B'10100001'; letra d
BANKSEL ANSELD retlw B'10000110'; letra E
clrf ANSELD retlw B'10001110'; letra F
BANKSEL OPTION_REG END
bcf OPTION_REG,7
;RESISTENCIA PULL-UP
BANKSEL WPUC
movlw b'00001111'
movwf WPUC
CICLO
BANKSEL PORTC
movlw 0x0f
andwf PORTC,w
call tabla
movwf PORTD
goto CICLO
;TABLA BIN BCD_7SEGMENTO
tabla BRW
retlw B'11000000';
Cero

SIMULACIÓN DE APLICACIONES PARA MICROCONTROLADORES PIC DE 8 BITS. AGOSTO DE 2019


42
Este código permite configurar los puertos de entrada y salidas, leer su estado y poder
escribir en ellos. A continuación presentamos el resultado de la simulación:

Simulación:

U1 DSW1
U1 DSW1 2 15 8 OFF ON
1
2 15 8 OFF ON
1 RA0 RC0
RA0 RC0 3 16 7 2
3 16 7 2 RA1 RC1
RA1 RC1 4 17 6 3 (COM)
4 17 6 3 (COM) RA2 RC2
RA2 RC2 5 18 5 4
5 18 5 4 RA3 RC3
RA3 RC3 6 23
6 23 RA4 RC4
RA4 RC4 7 24 DIPSW_4
7 24 DIPSW_4 RA5 RC5
RA5 RC5 14 25
14 25 RA6 RC6
RA6 RC6 13 26
13 26 RA7 RC7
RA7 RC7
33 19
33 19 RB0 RD0
RB0 RD0 34 20
34 20 RB1 RD1
RB1 RD1 35 21
35 21 RB2 RD2
RB2 RD2 36 22
36 22 RB3 RD3
RB3 RD3 37 27
37 27 RB4 RD4
RB4 RD4 38 28
38 28 RB5 RD5
RB5 RD5 39 29
39 29 RB6/ICSPCLK RD6
RB6/ICSPCLK RD6 40 30
40 30 RB7/ICSPDAT RD7
RB7/ICSPDAT RD7
8 8
RE0 RE0
9 9
RE1 RE1
10 10
RE2 RE2
1 1
RE3/MCLR/Vpp RE3/MCLR/Vpp

PIC16F1787 PIC16F1787
U1 DSW1
2 15 8 OFF ON
1 U1 DSW1
RA0 RC0 OFF ON
3 16 7 2 2
RA0 RC0
15 8 1
RA1 RC1
4 17 6 3 (COM) 3 16 7 2
RA2 RC2 RA1 RC1
5 18 5 4 4 17 6 3 (COM)
RA3 RC3 RA2 RC2
6 23 5 18 5 4
RA4 RC4 RA3 RC3
7 24 DIPSW_4 6 23
RA5 RC5 RA4 RC4
14 25 7 24 DIPSW_4
RA6 RC6 RA5 RC5
13 26 14 25
RA6 RC6
RA7 RC7 13 26
RA7 RC7
33 19
RB0 RD0 33 19
34 20 RB0 RD0
RB1 RD1 34 20
35 21 RB1 RD1
RB2 RD2 35 21
36 22 RB2 RD2
RB3 RD3 36 22
37 27 RB3 RD3
RB4 RD4 37 27
38 28 RB4 RD4
RB5 RD5 38 28
39 29 RB5 RD5
RB6/ICSPCLK RD6 39 29
RB6/ICSPCLK RD6
40 30 40 30
RB7/ICSPDAT RD7 RB7/ICSPDAT RD7
8 8
RE0 RE0
9 9
RE1 RE1
10 10
RE2 RE2
1 1
RE3/MCLR/Vpp RE3/MCLR/Vpp

PIC16F1787 PIC16F1787

U1 DSW1 U1 DSW1
OFF ON
2 15 8 OFF ON
1 2 15 8 1
RA0 RC0 RA0 RC0
3 16 7 2 3 16 7 2
RA1 RC1 RA1 RC1
4 17 6 3 (COM) 4 17 6 3 (COM)
RA2 RC2 RA2 RC2
5 18 5 4 5 18 5 4
RA3 RC3 RA3 RC3
6 23 6 23
RA4 RC4 RA4 RC4
7 24 DIPSW_4 7 24 DIPSW_4
RA5 RC5 RA5 RC5
14 25 14 25
RA6 RC6 RA6 RC6
13 26 13 26
RA7 RC7 RA7 RC7
33 19 33 19
RB0 RD0 RB0 RD0
34 20 34 20
RB1 RD1 RB1 RD1
35 21 35 21
RB2 RD2 RB2 RD2
36 22 36 22
RB3 RD3 RB3 RD3
37 27 37 27
RB4 RD4 RB4 RD4
38 28 38 28
RB5 RD5 RB5 RD5
39 29 39 29
RB6/ICSPCLK RD6 RB6/ICSPCLK RD6
40 30 40 30
RB7/ICSPDAT RD7 RB7/ICSPDAT RD7
8 8
RE0 RE0
9 9
RE1 RE1
10 10
RE2 RE2
1 1
RE3/MCLR/Vpp RE3/MCLR/Vpp
PIC16F1787 PIC16F1787

Figura 2.2. Simulación de lectura/escritura de puertos

La figura 2.2 muestra la simulación de la aplicación donde se observa claramente el


correcto funcionamiento de la configuración, lectura de datos en puertos, tratamiento
de información y posterior escritura de datos. Para ver código fuente ver anexo 2.1

43
CAPÍTULO III

En este capítulo se explica el uso de interrupciones, definición, características,


configuración y aplicaciones mediante MPlab Y PROTEUS. En este apartado solo se
explicaran las interrupciones asociadas a cambio de nivel en los pines de los puertos
IOC y la interrupción externa INT. En los siguientes capítulos se explicaran
interrupciones que apliquen a cada uno.

3. INTERRUPCIONES

3.1 Características generales

Las interrupciones permiten que ciertos eventos anticipen el flujo normal del
programa. El código dentro de la rutina de servicio de interrupción (ISR) debe
determinar el origen de la interrupción encuestando los bits de las banderas de
interrupción individuales, esto debido a que existe un único vector de atención a
interrupciones, de manera que el programador determinara la prioridad, es decir a
saber.

Al entrar en una interrupción, la dirección de retorno PC es guardado en la pila.


Además, los siguientes registros se guardan automáticamente en los registros de la
sombra:
 Registro W
 Registro STATUS (a excepción de TO y PD)
 Registro BSR
 Registros FSR
 Registro PCLATH

44
Al salir de la rutina de servicio de interrupción, estos registros se restauran
automáticamente. Cualquier modificación en estos registros durante el ISR se
perderá. Si modificaciones a cualquiera de estos registros se desean, el
correspondiente registro sombra debe ser modificado y el valor se restablece al salir
de la ISR. La registros de sombra están disponibles en el Banco 31 son lectura y
escritura. Dependiendo de la aplicación del usuario, también pueden ser salvado otros
registros. La figura 3.1 muestra el circuito de la lógica de interrupción.

TMROIF Despertar del


Interrupciones de
TMROIE modo SLEEP
Periféricos
INTF
(TMR1IF) PIR1<0> INTE
(TMR1IF) PIE1<0>
IOCIF
IOCIE Interrupción
del CPU

PEIE

PIRn<7>
PIEn<7> GIE

Figura 3.1. Lógica de Interrupción

3.2 Configuración de Interrupciones

El bit más importante a tener en cuenta al momento de configurar cualquier


interrupción es el Global Interrupt Enable o es el permiso global de Interrupción
(GIE), de manera que si no está seteado no podrá generarse ninguna interrupción,
aunque las banderas que señalizan el evento se activen

Los bits de la bandera de interrupción deben ser borrados antes de salir del ISR
(Interrupt Service Routine o servicio de atención a interrupción) para evitar repetir la
interrupción una y otra vez. Ahora bien, debido a que el bit GIE está desactivado

45
durante el ISR, cualquier interrupción que se produzca durante su ejecución se
grabará a través de su indicador de interrupción, pero no hará que el procesador
redirija al vector de interrupción. Algunas interrupciones se pueden configurar para
despertar la MCU del modo de suspensión.

La instrucción RETFIE hace salir del ISR y recupera de la pila la dirección


anterior, restaura los registros críticos de los registros sombra y restaura el bit GIE.
Los siguientes registros son utilizados para la configuración de las interrupciones, se
encuentran entre los bancos 0 al 7 en la sección de Registros de propósito especiales
(SFR), a excepción del registro INTCON que por su importancia en la configuración
se encuentra dentro de los registros Núcleo.

INTCON
OPTION_REG
PIR1, PIR2, PIR3, PIR4
PIE1, PIE2, PIE3, PIE4
IOCAP, IOCAN, IOCAF
IOCBP, IOCBN, IOCBF
IOCCP, IOCCN, IOCCF
IOCEP, IOCEN, IOCEF

A continuación desglosaremos algunos registros importantes.

INTCON: Registro de Control de Interrupciones

GIE: Bit de habilitación global de interrupción


1: Habilita todas las interrupciones para activadas de forma individual
0: Desactiva todas las interrupciones

46
PEIE: Bit de habilitación de interrupciones no controlador por INTCON
1: Habilita todas las interrupciones periféricas para activadas de forma individual
0: Desactiva todas las interrupciones periféricas

TMR0IE: Bit de habilitación del Timer0 por desbordamiento


1: Habilita la interrupción Timer0
0: Deshabilita la interrupción Timer0

INTE: Bit de habilitación de la interrupción externa INT


1: Habilita la interrupción externa INT
0: Deshabilita la interrupción externa INT

IOCIE: Bit de habilitación de interrupción por cambio de nivel


1: Habilita interrupción por cambio de nivel
0: Desactiva interrupción por cambio de nivel

TMR0IF: Bandera de señalización de interrupción por desbordamiento del Timer0


1: TMR0 se ha desbordado
0: TMR0 no se ha desbordado

INTF: Bandera de señalización de interrupción por INT externa


1: Se produjo la interrupción externa INT
0: No se produjo la interrupción externa INT

IOCIF: Bandera de señalización de interrupción por cambio de nivel (1)


1: Uno de los pines de interrupción por cambio de nivel ha cambiado de estado
0: Ninguno de los pines de interrupción por cambio de nivel han cambiado de estado

OPTION_REG: Solo se utiliza el bit 6 para interrupciones

INTEDG: Flanco activo de la Interrupción Externa.


0: Flanco Descendente.
1: Flanco Ascendente

47
PIE1: Registro de habilitación de interrupciones periféricas

TMR1GIE: Bit de habilitación de interrupción por disparo de puerta del Timer1


1: Habilita la interrupción por disparo de puerta del Timer1
0: Deshabilita la interrupción por disparo de puerta del Timer1

ADIE: Bit de habilitación de interrupción por conversión analógico a digital


1: Habilita la interrupción por conversión analógico a digital
0: Deshabilita la interrupción por conversión analógico a digital

RCIE: Bit de habilitación de interrupción por recepción en el USART


1: Habilita la interrupción por recepción en el USART
0: Deshabilita la interrupción por recepción en el USART

TXIE: Bit de habilitación de interrupción por transmisión en el USART


1: Habilita la interrupción por transmisión en el USART
0: Deshabilita la interrupción por transmisión en el USART

SSP1IE: Bit de habilitación de interrupción por transferencia en el puerto serial


síncrono (MSSP)
1: Habilita la interrupción por transferencia en el puerto serial síncrono (MSSP)
0: Deshabilita la interrupción por transferencia en el puerto serial síncrono (MSSP)

CCP1IE: Bit de habilitación de interrupción del CCP1


1: Habilita la interrupción del CCP1
0: Deshabilita la interrupción del CCP1

TMR2IE: Bit de habilitación de interrupción al igualarse TMR2 con PR2


1: Habilita la interrupción al igualarse TMR2 con PR2
0: Dehabilita la interrupción al igualarse TMR2 con PR2

TMR1IE: Bit de habilitación de interrupción al desbordarse el Timer1


1: Habilita la interrupción de desbordamiento Timer1
0: Deshabilita la interrupción de desbordamiento Timer1

48
PIR1: Registro de señalización de interrupciones periféricas

TMR1GIF: Bandera de interrupción de disparo por puerta del Timer1


1: interrupción está pendiente
0: interrupción no se encuentra pendiente

ADIF: Bandera de interrupción por conversión analógico a digital (ADC)


1: interrupción está pendiente
0: interrupción no se encuentra pendiente

RCIF: Bandera de interrupción por recepción en el USART


1: interrupción está pendiente
0: interrupción no se encuentra pendiente

TXIF: Bandera de interrupción de por transmisión en el USART


1: interrupción está pendiente
0: interrupción no se encuentra pendiente

SSP1IF: Bandera de interrupción por transferencia en el puerto serial síncrono


(MSSP)
1: interrupción está pendiente
0: interrupción no se encuentra pendiente

CCP1IF: Bandera de interrupción del CCP1


1: interrupción está pendiente
0: interrupción no se encuentra pendiente

TMR2IF: Bandera de interrupción al igualarse el TMR2 con PR2


1: interrupción está pendiente
0: interrupción no se encuentra pendiente

TMR1IF: Bandera de interrupción por desbordamiento del Timer1


1: interrupción está pendiente
0: interrupción no se encuentra pendiente

49
De manera similar se tratan los registros PIE2, PIE3, PIE4, PIR2, PIR3 y PIR4. Para
más detalles consulte la sección 8.8 del anexo 1.

3.3 Interrupciones por cambio de nivel IOC

El módulo de interrupción IOC tiene las siguientes características:

 Habilitar la interrupción IOC (IOCIE)


 Configuración de pines individuales
 Detección de flancos ascendentes y descendentes.
 Banderas individuales de interrupción de pin

Para permitir que los pines individuales generen una interrupción, se debe
configurar el bit IOCIE del registro INTCON. Si el bit IOCIE está deshabilitado, la
detección cambio en el pin seguirá ocurriendo, pero no se generará una interrupción.

Cualquier pin individual, o combinación de pines de los puertos se pueden


configurar para funcionar como Pines de Interrupción por Cambio (IOC o
INTERRUPT-ON-CHANGE). Una interrupción puede ser generada por la detección
de un flanco ascendente o un flanco descendente. La figura 3.2 presenta el circuito
esquemático para las interrupciones IOC.

Figura 3.2. Lógica de Interrupción

50
Para permitir que un pin detecte un flanco ascendente, se pone a “1” el bit
asociado del registro IOCxP; lo mismo ocurre cuando se requiera detectar un flanco
descendente, colocando a “1” el bit asociado del registro IOCxN. Un mismo pin
puede configurarse para detectar flancos de subidas y bajadas simultáneamente al
poner a “1” los bits asociados en los dos registros IOCxP e IOCxN.

Los bits ubicados en los registros IOCxF son banderas de estado que
corresponden a los pines de interrupción IOC de cada Puerto. Si se detecta un flanco
activo en en el pin configurado, entonces la bandera para ese pin se pondrá a “1” y
se generará una interrupción si se habilitó el bit IOCIE.

Las banderas individuales, (bits de registro IOCxF), pueden borrarse


restableciéndolos a cero; si se detecta otro flanco activo durante esta operación de
limpieza, la bandera asociada se establecerá al final de la secuencia,
independientemente del valor realmente escrito. Por ello para garantizar que no se
pierda el flanco activo detectado al borrar las banderas, solo se deben realizar
operaciones AND que oculten los bits modificados conocidos.

La siguiente secuencia es un ejemplo de lo que se debe realizar:

MOVLW 0xff
XORWF IOCAF, W
ANDWF IOCAF, F

3.4 Interrupción externa INT

El pin RB0/INT puede utilizarse para generar una interrupción asíncrona


provocada por un flanco activo ascendente o descendente, el cual puede ser
configurado mediante el bit INTEDG perteneciente al registro OPTION_REG;
cuando vale “1” configura flanco activo ascendente para la interrupción y cuando
vale”0” flanco descendente. Esta interrupción es habilitada poniendo a “1” el bit

51
INTE del registro INTCON. La señalización del evento de interrupción se encuentra
el bit INTF del registro INTCON. Si el GIE y el INTE se habilitan, el procesador
redireccionará ejecución del programa al vector de interrupción cuando esta ocurra.

Los siguientes eventos ocurren cuando un evento de interrupción ocurre mientras el


bit GIE se encuentra habilitado:

• La instrucción precocinada actual se vacía


• Bit GIE se pone a “0”
• El valor actual del PC se graba en la pila como dirección de retorno.
• Los registros críticos se guardan automáticamente en los registros de sombra
(shadow)
• PC se carga con el vector de interrupción 0004h

NOTA: En vista que solo existe un único vector de interrupción (Dir 04), puede
ocurrir tener habilitadas varias interrupciones simultáneamente; en este caso, el nivel
de prioridad lo establece el programador, encuestando en primera instancia la
interrupción que desee tener máxima prioridad según sea su necesidad.

Aplicación 3.1 Manejo de Interrupciones

Enunciado: Elabore un programa que lea el estado los dipswich A ( Dipswich A


RC2: RC0) y ( Dipswich B RC6: RC4) conectados al Puerto C. El valor se ingresa en
binario (0-7) y de acuerdo a los pulsadores conectados en el puerto B muestre en
Display su resultado en 7 segmentos según las siguientes especificaciones:
 RB0 Reset (Usamos interrupción Ext/ Rb0)
 RB3 Opera A+B, utilice un diodo led en el pin RB7 para indicar las decenas
se usa interrupcion por cambio de nivel IOC
 RB4 Opera A-B, utilice un diodo led en el pin RB7 para indicar Números
Negativos. Usar Interrupción por cambio de nivel IOC

Nota: El valor en 7 segmentos solo cambiará al pulsar interruptores (RB0, RB3, RB4)
independiente del valor de su entrada.

52
Diagrama de flujo de configuración de puertos.

Diagrama de flujo de programa principal

53
Simulación:

(a)

(b)

(c)

54
(d)

(e)

(f)
Figura 3.3. (a), (b), (c), (d); (e) y (f) Resultado de la simulación en diferentes eventos

55
En la figura 3.3a se observa que se habilitaron todos los bits de A Y B del puerto
cuyo resultado es 14 mostrando el 4 en el display y encendiendo el led para indicar
decena. La suma ocurre solo al pulsar RB3 que cumple tal función.
La figura 3.3b se muestra que incluso al cambiar los bits de entrada no modifica el
resultado de su salida hasta tanto se presione el botón de función. En la figura 3.3c se
observa como ocurre un reset a presionar el botón (RB0) pautado para esta función

La figura 3.3d presenta la situación en que se restan dos números (A-B) donde A es
menor que B por lo que el resultado será negativo, de manera que al ingresar la
combinación A=000 y B=111 al pulsar el botón de resta (RB4) da un resultado de -7,
cabe de destacar que el led enciende lo que significa el numero negativo.

La figura 3.3e presenta la operación A= 111 (7) menos B= 101 (5) dando como
resultado 2 al pulsar nuevamente el botón de resta. Finalmente se observa en la figura
3.3f el resultado de la operación suma al ingresar A=5 y B=4 obteniendo 9 en el
display sin encender el Led.

56
CAPÍTULO IV

En el presente capítulo se desarrolla el uso de los Timers o temporizadores,


características, configuración y modos de operación, incorporando diversas
aplicaciones asociadas a ellos. En este apartado asumiremos una frecuencia de
oscilación de 4 MHz, de manera que cada ciclo de instrucción será de 1µSegundo

4. TEMPORIZADORES TIMERS

4.1 Características generales

El microcontrolador PIC16F1787 dispone de tres timers versátiles, que ofrecen


una variada y posibilidades de aplicaciones. Son periféricos con características
digitales, ellos son:

 Temporizador/Contador 0 (TMR0)
 Temporizador/Contador 1 (TMR1)
 Temporizador 2 (TMR2)

4.2 Temporizador/Contador (TMR0)

El TMR0 es un temporizador y contador con las siguientes características:

 TMR0 Temporizador/Contador de 8 bits


 Registro TMR0 Leíble y escribible
 Reloj interno y externo
 Selección de flanco activo en el reloj externo
 Pre_divisor de 8 bits programable
 Solicitud de interrupción opcional en el desbordamiento (de FFh a 00h)

57
El registro TMR0 (SFR) presente en la dirección 15H en la memoria RAM de datos
al ser de 8 bits permite un desbordamiento al pasar del valor FF a 00, lo que en
función de la frecuencia de oscilación configurada en el micro y el valor del
Pre_divisor seleccionado permite obtener diversas bases de tiempo, útiles para el
diseño de aplicaciones. El TMR0 solo generará interrupción si esta se configura a
través del registro INTCON, bit TMR0IE. La figura 4.1 muestra el diagrama de
bloques del TMR0.

Figura 4.1. Diagrama de bloques del Timer0

Para la configuración se utilizan los siguientes registros: OPTION_REG, TMR0 e


INTCON.

OPTION_REG

TMR0CS: Tipo de Reloj para el TMR0.


0: Pulsos Internos Fosc/4 (Temporizador).
1: Pulsos Introducidos a través de T0CLKI (Contador).
TMR0SE: Tipo de flanco en T0CLKI.
0: Incremento de TMR0 cada flanco Ascendente.
1: Incremento de TMR0 cada flanco descendente.

58
PSA: Asignación del Divisor de Frecuencia.
0: El TMR0 con Divisor de Frecuencia.
1: El TMR0 sin Divisor de Frecuencia.
PS2:PS0: Valor con que se programa el divisor de frecuencia cuando se asigna al
TMR0.

Tabla 4.1. PS2:PS0: Valor con que se programa el divisor de frecuencia.

PS2 PS1 PS0 División TMR0 División WDT


0 0 0 1:2 1:1
0 0 1 1:4 1:2
0 1 0 1:8 1:4
0 1 1 1:16 1:8
1 0 0 1:32 1:16
1 0 1 1:64 1:32
1 1 0 1:128 1:64
1 1 1 1:256 1:128

4.2.1 Modo Temporizador

Cuando se configura el TMR0 como temporizador se aprovecha la frecuencia


de oscilación para incrementar el registro TMR0 en cada ciclo de instrucción sino
esta seleccionado el Pre_divisor. Para ello selecciona el modo temporizador mediante
colocar en “0” en bit TMR0CS del registro OPTION_REG, luego según la
configuración deseada se puede seleccionar el Pre_divisor seteando en bit PSA del
mismo registro y seleccionando el valor del mismo según la tabla 4.1.

59
La figura 4.2 muestra el bloque TMR0 configurado como temporizador con
Pre_divisor igual a 4.

Figura 4.2. Timer0 modo temporizador

Las actualizaciones se leen en el registro TMR0 con solo usar la instrucción movf
TMR0,w. la siguiente ecuación describe el comportamiento del TMR0 como
temporizador.

𝐸𝑐𝑢𝑎𝑐𝑖ó𝑛 4.1. 𝑇𝑇𝑀𝑅0 = 4 ∗ 𝑇𝑜𝑠𝑐 ∗ (256 − 𝑇𝑀𝑅0) ∗ 𝑃𝑟𝑒_𝑑𝑖𝑣𝑖𝑠𝑜𝑟

Donde
𝑇𝑜𝑠𝑐 es la frecuencia de oscilación
TMR0: Registro acumulador de 8 bit
𝑃𝑟𝑒_𝑑𝑖𝑣𝑖𝑠𝑜𝑟: Divisor de frecuencia

Es importante destacar que al momento de fijar un valor de temporización


debe considerarse el tiempo máximo admisible, por ejemplo si Fosc es 4MHz, la
temporización máxima seria cuando el registro TMR0 vale “0” y el pre_divisor es
máximo, a saber “256”, de manera que 𝑇𝑇𝑀𝑅0 seria 65536 µSegundo; cualquier valor
por encima de este no sería posible con los parámenos utilizados en la ecuación. Para

60
cualquier otro valor menor o igual a este valor, fijamos el pre_divisor según la tabla
4.1 y despejamos TMR0 quedando la siguiente expresión:

𝑇𝑇𝑀𝑅0
𝑇𝑀𝑅0 = 256 −
4 ∗ 𝑇𝑜𝑠𝑐 ∗ 𝑃𝑟𝑒_𝑑𝑖𝑣𝑖𝑠𝑜𝑟

Por ejemplo si deseamos generar una temporización de 10mS usando el TMR0,


partiendo de Fosc4MHz, tenemos:

Fijamos Pre_divisor = 256 y obtenemos el valor TMR0


10000µS
𝑇𝑀𝑅0 = 256 − 1 = 216.937 ≅ 217
4 ∗ 4𝑀𝐻𝑧 ∗ 256

El fragmento del código fuente para esta configuración seria:

Banksel OPTION_REG
movlw 0x07
movwf OPTION_REG;TMR0 modo temporizador, pre_divisor asignado al TMR0 y a 256
bcf INTCON,TMR0IF ; Reponemos la bandera
movlb 0
movlw .217
movwf TMR0; Inicializamos el registro TMR0
bcf INTCON,TMR0IF ; Reponemos la bandera
movlb 0
ciclo btfss INTCON,TMR0IF; Verificamos que ocurra desbordamiento transcurrido 10mS
goto ciclo; esperamos que valga “1”

4.2.2 Modo Contador

El módulo TMR0 puede operar como contador de 8 bit, a través del pin externo
T0CKI (RA4), para ello colocamos a “1” el bit TMR0CS del registro OPTION_REG.
De manera que el registro TMR0 se incrementara según el pre_divisor que se
seleccione según ocurran un flanco activo en el pin externo, este se configura
mediante el bit TMR0SE. Cuando se encuentra en el modo Contador de 8 bits, el

61
flanco activo de incremento en el pin T0CKI debe estar sincronizado con el reloj
ciclo de instrucciones. La figura 4.3 muestra la configuración para este modo.

Figura 4.3. Timer0 modo contador

El modo de operación es similar al del modo temporizador, con la diferencia que el


incremento del módulo ocurre por eventos externos a través del pin T0CKI y no
mediante ciclos de instrucciones.

4.3 Temporizador/Contador 1 (TMR1)

El módulo Timer1 es un contador incremental de 16 bits. Se accede a través


del registro TMR1, el cual está formado por dos registros de 8 bits concatenados, a
saber TMR1H: TMR1L. Para actualizar el contador basta con escribir directamente
los registros TMR1H o TMR1L. Cuando se usa con una fuente de reloj interna, el
módulo es un temporizador y se incrementa en cada ciclo de instrucción, sin embargo
cuando se usa con una fuente de reloj externa, el módulo se puede utilizar como
temporizador o contador el cual se incrementa en cada flanco activo seleccionado de
la fuente externa.

62
El TMR1 es un temporizador y contador con las siguientes características:

 TMR1 Temporizador/Contador de 16 bits


 Registro TMR1 Leíble y escribible mediante TMR1L y TMR1H
 Reloj interno y externo
 Modo de disparo de puerta
 Utilizado como base de tiempo para los modos Captura y Comparación
 Pre_divisor programable de cuatro opciones
 Modo oscilador dedicado de 32 KHz
 Solicitud de interrupción opcional en el desbordamiento (de FFFFh a 0000h)

El hecho que sea de16 bits permite gestionar bases de tiempo muchos mayores, sobre
todo cuando se hace uso del pre_divisor.

La figura 4.4 muestra el diagrama esquemático del módulo TMR1.

Figura 4.4. Diagrama de bloques del TMR1

63
Para la configuración del TMR1 se utilizan los siguientes registros: T1CON,
T1GCON, TMR1L, TMR1H e INTCON solo para el tratamiento de la interrupción
(opcional).

T1CON

TMR1CS1:TMR1CS0: Control para seleccionar la señal de reloj del Timer1.


11: Reservado
10: Timer 1 como Contador
01: Timer 1 como Temporizador. Reloj Interno (Fosc)
00: Timer 1 como Temporizador. Reloj Interno (Fosc/4)

El Timer1 tiene cuatro opciones de preescalado que permiten 1, 2, 4 u 8 divisiones de


la entrada del reloj. Los bits T1CKPS del registro T1CON controlan el pre_divisor.

T1CKPS1:T1CKPS0: Valor con que se programa el pre-divisor de frecuencia.


11: Divisor/8
10: Divisor/4
01: Divisor/2
00: Divisor/1

T1OSCEN: Bit de control para habilitar el Oscilador del Timer 1.


0: Oscilador deshabilitado.
1: Oscilador Habilitado

T1SYNC: Bit de control para habilitar sincronismo de señal externa.


0: Sincroniza señal de reloj externa.
1: No Sincroniza señal de reloj externa.

64
TMR1ON: Bit de habilitación del Timer 1.
0: Timer 1 deshabilitado.
1: Timer 1 habilitado.

T1GCON

TMR1GE: Bit de Habilitación del GATE del Timer 1.


0: GATE del Timer 1 Deshabilitada.
1: GATE del Timer 1 Habilitada.
NOTA: Para que el GATE del Timer 1 sea activo en alto, T1GCON debe ser cargado
con el valor C0 hexadecimal

Cuando se selecciona la fuente de reloj interna, los registros TMR1H:


TMR1L se incrementarán en múltiplos de Fosc según lo determinado por el
pre_divisor del Timer1. Cuando se selecciona la fuente de reloj interna Fosc, el valor
de registro del Temporizador 1 se incrementará en cuatro conteos en cada ciclo de
instrucción. Debido a esta condición, se producirá un error de 2 LSB en la resolución
al leer el valor de Timer1. Para utilizar la resolución completa del Timer1, se debe
usar una señal de entrada asíncrona para bloquear la entrada del reloj del Timer1.

Para corregir este inconveniente se pueden utilizar las siguientes fuentes asíncronas:

 Evento asíncrono en el pin T1G a la puerta Timer1


 Entrada del comparador C1 o C2 a la compuerta Timer1

65
4.3.1 Modo temporizador

Similar al TMR0, el TMR1 puede operar cono temporizador, aprovechando la


frecuencia de oscilación. La ecuación 4.2 permite determinar el tiempo deseado.

𝐸𝑐𝑢𝑎𝑐𝑖ó𝑛 4.2. 𝑇𝑇𝑀𝑅1 = 4 ∗ 𝑇𝑜𝑠𝑐 ∗ (65536 − 𝑇𝑀𝑅1) ∗ 𝑃𝑟𝑒_𝑑𝑖𝑣𝑖𝑠𝑜𝑟


Donde
𝑇𝑜𝑠𝑐 es la frecuencia de oscilación
TMR1: Registros acumuladores TMR1L y TMR1H de 8 bit cada uno
𝑃𝑟𝑒_𝑑𝑖𝑣𝑖𝑠𝑜𝑟: Divisor de frecuencia
Despejando TMR1 tenemos:

𝑇𝑇𝑀𝑅1
𝑇𝑀𝑅1 = 65536 −
4 ∗ 𝑇𝑜𝑠𝑐 ∗ 𝑃𝑟𝑒_𝑑𝑖𝑣𝑖𝑠𝑜𝑟

Debemos recordar que el valor resultante de TMR1 deberá dividirse en dos


byte para luego ser cargados en los registros TMR1L y TMR1H, por ejemplo si
deseamos obtener una temporización de aproximadamente 22 mS, con un pre_divisor
igual a “1” el TMR1 resulta igual a 43450. Aquí la manera más sencilla seria
convertir el resultado al formato hexadecimal (A9BAh) y de allí obtenemos el byte
bajo BAh y el alto A9h respectivamente, cargados a los registros a través de la
instrucción movlw. El fragmento de código fuente seria:

Banksel T1CON
movlw 0x05 ; configuramos el TMR1 como temporizador Fosc/4
movwf T1CON
Banksel TMR1L
movlw 0xBA
movwf TMR1L
movlw 0xA9
movwf TMR1H ; Inicializamos el registro TMR1 con 43450
bcf PIR1,TMR1IF ; Reponemos la bandera ; Reponemos la bandera
ciclo btfss PIR1,TMR1IF ; Verificamos que ocurra desbordamiento transcurrido 22mS
goto ciclo ; esperamos que valga “1”
bcf PIR1,TMR1IF

66
A continuación la figura 4.5 muestra cómo quedaría la configuración para este
ejemplo:

Figura 4.5. TIMER1 modo temporizador Fosc/4

4.3.2 Modo temporizador con disparo de compuerta

El timer1 se puede configurar para contar libremente o para contar mediante la


habilitación externa GATE. Se puede habilitar o deshabilitar el bit TMR1GE,
conocido como timer1 Gate Enable. Cuando se habilita el modo timer1 Gate Enable,
el timer1 se incrementará en el flanco ascendente de la fuente de reloj del Timer1, sin
embargo cuando está deshabilitado no se producirá ningún incremento y timer1
mantendrá el recuento actual.

La figura 4.6 muestra el esquema de funcionamiento del TMR1 modo temporizador


con disparo de compuerta:

67
Figura 4.6. Operación del TIMER1 modo temporizador

4.3.3 Modo Contador

Cuando se selecciona la fuente de reloj externa (TMR1CS: 10), el Timer


puede funcionar como un temporizador o un contador. Cuando se habilita para contar
(T1OSCEN: 0), el timer 1 se incrementa en cada flanco ascendente a través de la
entrada de reloj externo (T1CKI), que puede estar sincronizado con el reloj del
sistema del microcontrolador o puede ejecutarse de forma asíncrona. Cuando se usa
como un temporizador con un oscilador de reloj (T1OSCEN:1), se puede utilizar un
cristal externo de 32.768 KHz en conjunto con el circuito dedicado del oscilador
interno, de esta manera podemos obtener bases de tiempo con precisión. Este circuito
está integrado entre los pines T1OSI (entrada) y T1OSO (salida del amplificador).
Este circuito interno debe utilizarse junto con un cristal externo de 32.768 kHz. El
circuito del oscilador se habilita configurando el bit T1OSCEN del registro T1CON.
El oscilador continuará funcionando durante el modo sleep.

68
El oscilador requiere un tiempo de puesta en marcha y estabilización antes de
su uso. Por lo tanto, se debe configurar T1OSCEN y se debe observar un retraso
adecuado antes de usar Timer1. Se puede implementar un retardo adecuado similar al
retardo de OST en el software borrando el bit TMR1IF y luego prefijando el TMR1H:
TMR1L con el valor FC00h. la bandera TMR1IF se activará cuando hayan
transcurrido 1024 ciclos de reloj, lo que indica que el oscilador está funcionando y es
razonablemente estable.
.
En el modo Contador, el pin debe registrar un flanco descendente antes del
primer flanco ascendente incremental después de una o más de las siguientes
condiciones:
1. Timer1 habilitado después de POR
2. Escribir en TMR1H o TMR1L
3. Timer1 está deshabilitado
4. Timer1 está deshabilitado (TMR1ON = 0) cuando T1CKI es alto, entonces
5. Timer1 está habilitado (TMR1ON = 1) cuando T1CKI está bajo.

4.4 TIMER 2

El Timer 2 (Fig. 4.7) funciona solo como temporizador y opera con el reloj
interno de ciclo de instrucción (FOSC / 4). El registro TMR2 se incrementa desde
00h en cada flanco activo del reloj. Dispone de un predivisor de 2 bits en la entrada
del reloj la cual permite, división por 1, 4 y división por 16. Estas opciones son
seleccionadas por los bits de control del predivisor T2CKPS <1: 0> perteneciente al
registro T2CON. También dispone de un postdivisor de 4 bit configurable mediante
los bits T2OUTPS <3: 0> del mismo registro

𝐸𝑐𝑢𝑎𝑐𝑖ó𝑛 4.3. 𝑇𝑇𝑀𝑅2 = (𝑃𝑅2 + 1) ∗ 4 𝑇𝑜𝑠𝑐 ∗ 𝑃𝑟𝑒_𝑑𝑖𝑣𝑖𝑠𝑜𝑟 ∗ 𝑃𝑜𝑠𝑡_𝑑𝑖𝑣𝑖𝑠𝑜𝑟

69
Dispone de las siguientes características:

 TMR2 es un Temporizador/Contador de 8 bits


 Leíble y escribible
 Predivisor de 2 bits programable
 Postdivisor de 4 bits programable
 Registro de periodo y timer de 8 bits (PR2 y TRMR2)
 Solicitud de interrupción opcional al incluir TMR2 y PR2

Figura 4.7. Diagrama de bloques del TIMER2

El valor de TMR2 se compara con el registro de períodos, PR2, en cada ciclo


de reloj, cuando los dos valores son iguales, el comparador genera una señal de
coincidencia como señal de salida. Esta señal también restablece el valor de TMR2 a
00h en el siguiente ciclo. Por otra parte es utilizado por el módulo CCP en el modo
PWM. Al igual que el Timer 1 posee un bit de habilitación (TMR2ON) el cual
permite controlar su operación

Los siguientes registros son utilizados por el TMR2: T2CON, TMR2, PR2, y para el
tratamiento de interrupciones: INTCON, PIR1 y PIE1 (opcional).

70
T2CON

TOUTPS3:TOUTPS0: Post divisor de frecuencia


0000: Divisor/1
0001: Divisor/2
0010: Divisor/3
0011: Divisor/4
Línea hasta
1110: Divisor/15
1111: Divisor/16

TMR2ON: Bit de habilitación del Timer 2


0: Timer 2 deshabilitado
1: Timer 2 Habilitado

T2CKPS1:T2CKPS0: Pre divisor de frecuencia.

00: Divisor/1
01: Divisor/4
10: Divisor/16
11: Divisor/64

Figura 4.8. Operación del TIMER 2 como temporizador

71
Aplicación 4.1 Uso de teclado matricial y display

Enunciado: Elabore un programa para gestionar el barrido de un teclado matricial


3x4 donde se muestren los últimos 4 números ingresados por el teclado y se
mostraran en 4 display siete segmento del tipo cátodo común (Corrimiento hacia la
izquierda). Debe poseer un botón externo que borra todos los datos (display). Debe
considerar el ruido generado por los pulsadores a través de rutinas antirebote. La
figura 4.9 muestra el hardware necesario para el diseño.

Figura 4.9 Diagrama esquemático elaborado en proteus

Principio de funcionamiento: Para gestionar un teclado matricial, por ejemplo 3x4,


se usa un puerto I/O donde las filas del teclado se conectan a uno de los nibles puerto
configurado como salida y las columnas se conectan al siguiente nible del puerto
configurado como entradas. Ahora realizamos un proceso de barrido, que consiste en
habilitar una fila (mientras las otras están deshabilitadas) colocando un cero “0” en
ese pin del puerto y “1” en las demás filas, ahora se escanea el estado de las

72
columnas, que en condiciones de tecla_no_presionada estarán en estado uno “1”
lógico, de esta manera al presionar cualquier tecla de esa fila la columna asociada
cambiara a “0” lógico indicando que esa tecla fue presionada. Por ejemplo
imaginemos que colocamos en el nible bajo del puerto A el valor “1101” lo que
indica que está habilitada la fila 2. Así esperamos algún cambio en las columnas lo
permitirá detectar los números 4, 5 ó 6 en las filas f1, f2 o f3 respectivamente. De
manera similar se utiliza el mismo método para las demás filas. Este proceso permite
detectar cualquier tecla presionada sobre el teclado.

En el código fuente la variable auxiliar NumTecla es usada para guardar el


número asignado a cada tecla. El programa realiza el barrido en el que guarda tecla
por tecla y cada vez que realiza el barrido va aumentando un registro contador, si en
el contador se llega a 13 se reinicia para empezar la cuenta en 0. Si alguna tecla es
presionada, el contador se detiene en esa tecla pulsada, por ejemplo al pulsar la tecla
5 sin soltarla, se va a la subrutina de checar columna, entonces el programa espera a
que se suelte la tecla (Subrutina de eliminar efecto rebote) Una vez soltada la tecla el
valor será guardado en el registro NumTecla, luego se va a la función
Convertir_Tecla para convertir el valor a su equivalente hexadecimal y luego
mostrarla en el display. El en anexo 4.1 se muestra el código fuente con los
comentarios de configuración y rutinas importantes. A continuación se presenta el
resultado de las simulaciones y posterior implementación práctica.

Para establecer los tiempos de refrescamiento adecuado que permitan a los cuatros
display permanecer encendido utilizaremos el TMR0 con una base de tiempo de
aproximadamente 4 mS. Usando la ecuación 4.1 tenemos:

𝑇𝑇𝑀𝑅0 = 4 ∙ 𝑇𝑂𝑆𝐶 ∙ (28 − 𝑇𝑀𝑅0 ) ∙ 𝑃𝑟𝑒_𝑑𝑖𝑣


𝑇𝑇𝑀𝑅0 4000𝜇𝑆
𝑇𝑀𝑅0 = 28 − = 256 − = 224,75 ≅ 22510
4 ∙ 𝑇𝑂𝑆𝐶 ∙ 𝑃𝑟𝑒𝑑𝑖𝑣 128 ∙ 1𝜇𝑆

73
Simulación

Figura 4.10 Simulación mostrando inicialización de circuito

Este circuito se configuró de tal manera que al energizar mostrara “----”, lo que
significa que no se han ingresado ningún valor y se espera que se ingrese.

Figura 4.11 Simulación mostrado los dígitos 1234

Se ingresa 5 después de haber ingresado anteriormente 1234 por lo que ingresa desde
la derecha hacia la izquierda.

74
A continuación el resultado de la implementación práctica del diseño.

Figura 4.12 Implementación mostrado inicialización

Figura 4.13 Implementación mostrado los dígitos 1234

75
Aplicación 4.2 Temporizador programable

Enunciado: Se desea realizar un temporizador programable, utilizando un teclado


matricial y cuatro display siete segmentos. La tecla “*” funciona como Reset y la
tecla “#” funciona de Inicio/Pausa. Cuando se ingresa una cifra por teclado esta se
almacena en los registros acumuladores que se actualizan cuando se ingresan nuevos
valores y estos a su vez se muestran en los displays.

Principio de funcionamiento: Para esta aplicación usaremos el timer0 con una base
de tiempo de aproximadamente 5 mS, para ello se configura como temporizador, con
un pre_divisor igual a 32, obteniéndose un valor del registro TMR0 igual a 100. Esta
base de tiempo es multipropósito, ya que se usa para el barrido de displays y
apoyándose en registros adicionales como contadores, sirve para aumentar la base de
tiempo hasta aproximadamente 1 segundo. El diodo led D3 representa la carga que se
activaría al iniciar la temporización y se apagaría al finalizar la misma. Por otra parte
el diodo D1 representa un buzzer que sonará de manera intermitente cuando se agote
el tiempo parametrizado en el temporizador.

Simulación
1

A
1 2 3
U1
13
OSC1/CLKIN RB0/INT
33
B
4 5 6
14 34
OSC2/CLKOUT RB1
35
RB2
2 36
3
RA0/AN0
RA1/AN1
RB3/PGM
RB4
37
C
7 8 9
4 38
RA2/AN2/VREF-/CVREF RB5
5 39
RA3/AN3/VREF+ RB6/PGC
6 40
7
RA4/T0CKI/C1OUT
RA5/AN4/SS/C2OUT
RB7/PGD D
0 #
15
RC0/T1OSO/T1CKI
8 16
RE0/AN5/RD RC1/T1OSI/CCP2
9 17
RE1/AN6/WR RC2/CCP1
10 18
RE2/AN7/CS RC3/SCK/SCL
23
RC4/SDI/SDA
1 24
MCLR/Vpp/THV RC5/SDO
25
RC6/TX/CK
26
RC7/RX/DT
19
RD0/PSP0
20
RD1/PSP1
21
RD2/PSP2
22
RD3/PSP3
27
RD4/PSP4
28
RD5/PSP5
29
RD6/PSP6
30
RD7/PSP7
PIC16F1787

D3 D1
LED-BIGY LED-GREEN

Figura 4.14 Vista inicial Standby

76
Aquí se muestra el resultado de la simulación realizada en proteus, donde se observa
la condición inicial “0000” a la espera de ingresar el tiempo deseado por teclado. La
figura 4.15A muestra el ingreso de 1 minuto con 50 segundos esperando que se
presione la tecla “#” para dar inicio a la temporización regresiva. Las imágenes
posteriores (B, C) muestran el progreso del temporizador hasta llegar al final de la
temporización (D), en cuyo caso aparece en mensaje “End” seguido de tres beep
representados por el led verde (D1). El código fuente se encuentra en el anexo 4.2.

3
1

A
1 2 3 A
1 2 3
U1 U1
13
OSC1/CLKIN RB0/INT
33
B
4 5 6 13
OSC1/CLKIN RB0/INT
33
B
4 5 6
14 34
14 34 OSC2/CLKOUT RB1
OSC2/CLKOUT RB1 35
35 RB2
RB2 2 36
2
3
RA0/AN0
RA1/AN1
RB3/PGM
RB4
36
37
C
7 8 9 3
RA0/AN0
RA1/AN1
RB3/PGM
RB4
37
C
7 8 9
4 38 4 38
RA2/AN2/VREF-/CVREF RB5 RA2/AN2/VREF-/CVREF RB5
5 39 5 39
RA3/AN3/VREF+ RB6/PGC RA3/AN3/VREF+ RB6/PGC
6 40
6
7
RA4/T0CKI/C1OUT
RA5/AN4/SS/C2OUT
RB7/PGD
40
D
0 # 7
RA4/T0CKI/C1OUT
RA5/AN4/SS/C2OUT
RB7/PGD D
0 #
15 15
RC0/T1OSO/T1CKI RC0/T1OSO/T1CKI
8 16 8 16
RE0/AN5/RD RC1/T1OSI/CCP2 RE0/AN5/RD RC1/T1OSI/CCP2
9 17 9 17
RE1/AN6/WR RC2/CCP1 RE1/AN6/WR RC2/CCP1
10 18 10 18
RE2/AN7/CS RC3/SCK/SCL RE2/AN7/CS RC3/SCK/SCL
23 23
RC4/SDI/SDA RC4/SDI/SDA
1 24 1 24
MCLR/Vpp/THV RC5/SDO MCLR/Vpp/THV RC5/SDO
25 25
RC6/TX/CK RC6/TX/CK
26 26
RC7/RX/DT RC7/RX/DT

19 19
RD0/PSP0 RD0/PSP0
20 20
RD1/PSP1 RD1/PSP1
21 21
RD2/PSP2 RD2/PSP2
22 22
RD3/PSP3 RD3/PSP3
27 27
RD4/PSP4 RD4/PSP4
28 28
RD5/PSP5 RD5/PSP5
29 29
RD6/PSP6 RD6/PSP6
30 30
RD7/PSP7 RD7/PSP7

PIC16F1787 PIC16F1787

D3 D1 D3 D1
LED-BIGY LED-GREEN LED-BIGY LED-GREEN

(A) (B)
1

A
1 2 3 A
1 2 3
U1
13
OSC1/CLKIN RB0/INT
33
B
4 5 6 13
U1
33
B
4 5 6
14 34 OSC1/CLKIN RB0/INT
OSC2/CLKOUT RB1 14 34
35 OSC2/CLKOUT RB1
RB2 35
2 36
3
RA0/AN0
RA1/AN1
RB3/PGM
RB4
37
C
7 8 9 2
3
RA0/AN0
RB2
RB3/PGM
36
37
C
7 8 9
4 38 RA1/AN1 RB4
RA2/AN2/VREF-/CVREF RB5 4 38
5 39 RA2/AN2/VREF-/CVREF RB5
RA3/AN3/VREF+ RB6/PGC 5 39
6 40
7
RA4/T0CKI/C1OUT
RA5/AN4/SS/C2OUT
RB7/PGD D
0 # 6
7
RA3/AN3/VREF+
RA4/T0CKI/C1OUT
RB6/PGC
RB7/PGD
40
D
0 #
15 RA5/AN4/SS/C2OUT
RC0/T1OSO/T1CKI 15
8 16 RC0/T1OSO/T1CKI
RE0/AN5/RD RC1/T1OSI/CCP2
9 17 8 16
RE1/AN6/WR RC2/CCP1 RE0/AN5/RD RC1/T1OSI/CCP2
10 18 9 17
RE2/AN7/CS RC3/SCK/SCL RE1/AN6/WR RC2/CCP1
23 10 18
RC4/SDI/SDA RE2/AN7/CS RC3/SCK/SCL
1 24 23
MCLR/Vpp/THV RC5/SDO RC4/SDI/SDA
25 1 24
RC6/TX/CK MCLR/Vpp/THV RC5/SDO
26 25
RC7/RX/DT RC6/TX/CK
26
RC7/RX/DT
19
RD0/PSP0
20 19
RD1/PSP1 RD0/PSP0
21 20
RD2/PSP2 RD1/PSP1
22 21
RD3/PSP3 RD2/PSP2
27 22
RD4/PSP4 RD3/PSP3
28 27
RD5/PSP5 RD4/PSP4
29 28
RD6/PSP6 RD5/PSP5
30 29
RD7/PSP7 RD6/PSP6
30
RD7/PSP7
PIC16F1787
PIC16F1787

D3 D1
LED-BIGY LED-GREEN D3 D1
LED-BIGY LED-GREEN

(C) (D)

Figura 4.15 (A) Valor parametrizado a la espera de INICIO (B) Resta 1 minuto con 47
segundo. D3 encendido (C) Restan 3 segundos (D) Fin de temporización led D1 activo

77
Aplicación 4.3 Manejo de LCD 16x2

Enunciado: El siguiente apartado introduce el uso de pantallas LCD para ser usadas
en las aplicaciones posteriores. Aunque la explicación de su funcionamiento no entra
en el análisis de este material, mostraremos los parámetros necesarios para su
utilización. El siguiente ejemplo muestra la conexión de una LCD 16x2, a saber 16
caracteres y dos línea con un microcontrolador. La idea es mostrar sin mayores
detalles información en ambas líneas, según la necesidad. Usaremos los pulsadores
conectados a los pines RB0 y RB1 para mostrar en la segunda línea un mensaje
diferente para cada botón. Este ejemplo en principio fue desarrollado para el
microcontrolador PIC16F877A, de la misma familia, y de la misma gama, de manera
que migrar el código fuente y el hardware al PIC16F1787 resulta sumamente sencillo.

Fragmento de código de inicialización:


Inicialización de la pantalla LCD
call UP_LCD; Rutina de inicialización de la LCD
call LCD_INI
movlw b'00001100'; comando 0C
call LCD_REG

;**************************************************************************
;LCD_DATO: Escritura de datos en DDRAM o CGRAM. Envía el dato presente en el W
;
LCD_DATO OFF_COMANDO ;Desactiva RS (modo comando)
movwf PORTD ;Valor ASCII a sacar por PORTD
call LCD_BUSY ;Espera a que se libere el LCD
ON_COMANDO ;Activa RS (modo dato).
goto LCD_E ;Genera pulso de E

;**************************************************************************
;LCD_REG: Escritura de comandos en el LCD. Envía el comando presente en el W

LCD_REG OFF_COMANDO ;Desactiva RS (modo comando)


movwf PORTD ;Código de comando.
call LCD_BUSY ;LCD libre?.
goto LCD_E ;SI.Genera pulso de E.

Este fragmento se encuentra detallado en el anexo 4.3, que sirve como librería para el
manejo de la LCD.

78
Para el manejo de la LCD se necesitan enviar comandos y datos. Los comandos son
parámetros para el control de la pantalla, nos permiten por ejemplo inicializarla,
borrarla, cambiarnos de línea, mover el cursor entre otros comandos. Los datos es la
información que se desea mostrar. La idea de este ejemplo es mostrar de manera
sencilla información en ambas líneas. El anexo 4.4 contiene el código fuente del
ejemplo, allí se describe al detalle el uso de las instrucciones.

R2(1)
R2(1)

U1 U1
13 33
OSC1/CLKIN RB0/INT 13 33
14 34 OSC1/CLKIN RB0/INT
OSC2/CLKOUT RB1 14 34
1 35 OSC2/CLKOUT RB1
MCLR/Vpp/THV RB2 1 35
36 MCLR/Vpp/THV RB2
RB3/PGM LCD1 36
2
RA0/AN0 RB4
37 2
RB3/PGM
37 LCD1
3 38 RA0/AN0 RB4
RA1/AN1 RB5 3 38
4 39 RA1/AN1 RB5
RA2/AN2/VREF- RB6/PGC 4 39
5 40 RA2/AN2/VREF- RB6/PGC
RA3/AN3/VREF+ RB7/PGD 5 40
6 RA3/AN3/VREF+ RB7/PGD
RA4/T0CKI 6
7 15 RA4/T0CKI
RA5/AN4/SS RC0/T1OSO/T1CKI 7 15
16 RA5/AN4/SS RC0/T1OSO/T1CKI
RC1/T1OSI/CCP2 16
8 17 RC1/T1OSI/CCP2
RE0/AN5/RD RC2/CCP1 8 17
9 18 RE0/AN5/RD RC2/CCP1
RE1/AN6/WR RC3/SCK/SCL 9 18
VDD
VSS

VEE

RE1/AN6/WR RC3/SCK/SCL

VDD
VSS

VEE
RW

10 23
RS

D0
D1
D2
D3
D4
D5
D6
D7

RW
10 23

RS
RE2/AN7/CS RC4/SDI/SDA

D0
D1
D2
D3
D4
D5
D6
D7
E

RE2/AN7/CS RC4/SDI/SDA

E
24 24
RC5/SDO RC5/SDO
25 25
RC6/TX/CK RC6/TX/CK
1
2
3

4
5
6

7
8
9
10
11
12
13
14

26

1
2
3

4
5
6

7
8
9
10
11
12
13
14
RC7/RX/DT 26
RC7/RX/DT
PIC16F877 19 PIC16F877 19
RD0/PSP0 RD0/PSP0
20 20
RD1/PSP1 RD1/PSP1
21 21
RD2/PSP2 RD2/PSP2
22 22
RD3/PSP3 RD3/PSP3
27 27
RD4/PSP4 RD4/PSP4
28 28
RD5/PSP5 RD5/PSP5
29 29
RD6/PSP6 RD6/PSP6
30 30
RD7/PSP7 RD7/PSP7

Figura 4.16 Simulación de mensajes en LCD 16x2

79
Aplicación 4.4 Manejo de LCD 16x4

Enunciado: El siguiente ejemplo muestra el uso de LCD de 4 líneas usando el


PIC16F1787. La idea es mostrar los comandos y forma de distribuir información a lo
largo de la pantalla. Ya sea información fija como mensajes en cadena de caracteres
así como Datos dinámicos presentes en registros. Usaremos el puerto D como salidas
de datos a la pantalla y los pines RE0 y RE1 para el control. El anexo 4.5 describe
detalladamente el código fuente asociado a este ejemplo.

LCD1
LM041L

U1
2 15
RA0 RC0
3 16
RA1 RC1
4 17
RA2 RC2
5 18
RA3 RC3
6 23
RA4 RC4
7 24
RA5 RC5
14 25
RA6 RC6
13 26
RA7 RC7

VDD
VSS

VEE

RW
RS

D0
D1
D2
D3
D4
D5
D6
D7
E
33 19
RB0 RD0
34 20
RB1 RD1

1
2
3

4
5
6

7
8
9
10
11
12
13
14
35 21
RB2 RD2
36 22
RB3 RD3
37 27
RB4 RD4
38 28
RB5 RD5
39 29
RB6/ICSPCLK RD6
40 30
RB7/ICSPDAT RD7
8
RE0
9
RE1
10
RE2
1
RE3/MCLR/Vpp
PIC16F1787

Figura 4.17 Simulación de mensajes en LCD 16x4

Principio de funcionamiento: Luego de inicializar la pantalla colocamos el cursor


en la primera posición y primera fila con el comando 0x80. Usamos la rutina
comando, luego cargamos la dirección donde inicia el mensaje que deberá mostrarse
en la primera línea y llamamos la rutica que barre la cadena de caracteres. Al
encontrar el valor 0x00 se entiende fin de la cadena y retorna, allí enviamos el
siguiente comando para realizar un cambio de línea, a saber 0xC0 (línea 2) de forma
similar se repite el mismo procedimiento para para mostrar el mensaje de la línea 2.
Con los comando 0x90 y 0xD0 nos pasamos a las líneas 3 y 4 respectivamente.

80
Aplicación 4.5 Reloj digital usando TIMER1 como contador

Enunciado: Se desea realizar el diseño de un reloj digital, el cual deberá mostrar la


hora, minutos y segundos en pantalla LCD. El formato es Hora no militar, debe
indicar AM/PM. Dispondrá de 2 pulsadores para el ajuste, uno para ajustar los
minutos (RB0) y otro para la hora (RB1)

Principio de funcionamiento: Haremos uso del Timer 1 como contador con un


cristal externo de 32.768KHz, de manera que podamos obtener una temporización de
1 segundo con precisión y que este nos sirva de base de tiempo para actualizar los
registros Segundos, Minutos y Hora. Utilizando la ecuación 4.2 tenemos:

𝑇𝑇𝑀𝑅1 1000000𝜇𝑆
𝑇𝑀𝑅1 = 216 − = 65536 − = 3276810
𝑇𝑂𝑆𝐶 ∙ 𝑃𝑟𝑒𝑑𝑖𝑣 1
1 ∙ ( ⁄32768 ∗ 10−6 )𝜇𝑆

El Tosc cuando el TMR1 opera en modo contador es el valor del cristal


externo, en este caso de 32.768KHz. Así con pre_divisor igual a “1” el valor del
TMR1 será 32768 en decimal ó 8000 en formato hexadecimal, lo que significa que al
registro TMR1H se le cargará 80H y al TMR1L 00h. Configuramos además la
interrupción del Timer1, dentro de la cual hacemos la actualización de los registros y
visualizamos la información en la pantalla. Durante el programa principal el
programa encuesta el estado delos pulsadores conectados a RB y RB1 para ajustar los
parámetros de horas o minutos, y por supuesto de presionarse alguno se actualiza el
registro correspondiente y se actualiza la información en pantalla. El anexo 4.6
describe los detalles del código fuente de esta aplicación.

81
Simulación:

U1
13 33
OSC1/CLKIN RB0/INT
14 34
OSC2/CLKOUT RB1
1 35
MCLR/Vpp/THV RB2
36
2
RB3/PGM
37 LCD1
(A)
RA0/AN0 RB4
3 38
RA1/AN1 RB5
4 39
RA2/AN2/VREF- RB6/PGC
5 40
RA3/AN3/VREF+ RB7/PGD
6
RA4/T0CKI
7 15
RA5/AN4/SS RC0/T1OSO/T1CKI
16
RC1/T1OSI/CCP2
8 17
RE0/AN5/RD RC2/CCP1
9 18
RE1/AN6/WR RC3/SCK/SCL

VDD
VSS

VEE

RW
10 23

RS

D0
D1
D2
D3
D4
D5
D6
D7
RE2/AN7/CS RC4/SDI/SDA

E
24
RC5/SDO
25
RC6/TX/CK
1
2
3

4
5
6

7
8
9
10
11
12
13
14
26
RC7/RX/DT
PIC16F877 19
RD0/PSP0
20
RD1/PSP1
21
RD2/PSP2
22
RD3/PSP3
27
RD4/PSP4
28
RD5/PSP5
29
RD6/PSP6
30
RD7/PSP7

U1
13 33
OSC1/CLKIN RB0/INT
14 34
OSC2/CLKOUT RB1
1 35
MCLR/Vpp/THV RB2
36
2
RB3/PGM
37 LCD1
(A)
RA0/AN0 RB4
3 38
RA1/AN1 RB5
4 39
RA2/AN2/VREF- RB6/PGC
5 40
RA3/AN3/VREF+ RB7/PGD
6
RA4/T0CKI
7 15
RA5/AN4/SS RC0/T1OSO/T1CKI
16
RC1/T1OSI/CCP2
8 17
RE0/AN5/RD RC2/CCP1
9 18
RE1/AN6/WR RC3/SCK/SCL
VDD
VSS

VEE

RW

10 23
RS

D0
D1
D2
D3
D4
D5
D6
D7

RE2/AN7/CS RC4/SDI/SDA
E

24
RC5/SDO
25
RC6/TX/CK
1
2
3

4
5
6

7
8
9
10
11
12
13
14

26
RC7/RX/DT
PIC16F877 19
RD0/PSP0
20
RD1/PSP1
21
RD2/PSP2
22
RD3/PSP3
27
RD4/PSP4
28
RD5/PSP5
29
RD6/PSP6
30
RD7/PSP7

Figura 4.18 Simulación del reloj en diferentes eventos

Las figuras 4.18 muestran diversas vistas del comportamiento de la


simulación, donde se aprecia el ajuste de la hora y minutos así como el formato de la
hora. Esta aplicación es fácilmente implementada en físico. Teniendo presente los
cuidados correspondientes. En la simulación no se observa el cristal externo de
32.768KHz, el cual debería estar entre los pines RC0 y RC1 (RC0/T1OSO salida y
RC1/T1OSI entrada); la razón es simplemente para efectos de simulación. Allí
colocamos una señal de reloj de 32.768KHz para emular el cristal externo.

82
CAPÍTULO V

En este capítulo explican los modos de operación del módulo CCP, a saber
Captura, Comparación y PWM, sus características, configuración y principales
aplicaciones. Asumiremos una frecuencia de oscilación de 4 MHz

5. MÓDULO CCP CAPTURA/COMPARACIÓN/PWM

5.1 Características generales

El módulo CCP por sus siglas en ingles Captura / Comparación / PWM es un


periférico que permite al usuario cronometrar y controlar diferentes eventos, y
permite generar señales por el método PWM (modulación de ancho de pulso).

En modo Captura, el periférico permite como su nombre lo indica capturar el


tiempo de duración de un evento. La comparación El modo permite al usuario activar
un evento externo cuando ha expirado una cantidad predeterminada de tiempo y el
modo PWM puede generar Señales de Ancho - Pulso- Modulado cuya frecuencia y
ciclo de trabajo (CU) pueden ser variables. Esta familia de dispositivo contiene dos
estándares. CCP a saber CCP1 y CCP2. Las funciones de captura y comparación son
idénticas para todos Módulos CCP. Para el manejo del módulo CCP se utilizan los
siguiente registros: CCPRxH, CCPRxL, CCPxCON, TMR1L, TMR1H y los
registros asociados a la interrupción

83
5.2 Modo Captura

La función del modo de captura descrita en esta sección es idéntica para todos
los módulos CCP. El modo de captura utiliza el temporizador TMR1 de 16 bits como
recurso. Cuando ocurre un evento en el pin CCPx, el par de registros CCPRxH:
CCPRxL captura y almacena el valor de 16 bits presente en la pareja de registros
TMR1H: TMR1L, respectivamente. Cuando se realiza una captura, la bandera del
registro PIRx que señaliza interrupción se pone en “1” (CCPxIF=1). La bandera de
interrupción debe ser borrada en el software. Si ocurre otra captura antes que el valor
presente CCPRx, sea leído, el valor capturado antiguo es sobrescrito por el nuevo
valor capturado.

Figura 5.1. Diagrama de bloques del CCP modo Captura

CCPxCON

Tabla 5.1 Selección de operación del modo captura


CCP1M3:CCP1M0 Función
0000 El modo Captura/Comparación/PWM esta deshabilitado
0100 Modo Captura, en cada flanco descendente
0101 Modo Captura, en cada flanco ascendente
0110 Modo Captura, en cada 4 flanco ascendente
0111 Modo Captura, en cada 16 flanco ascendente

84
El modo captura es especialmente útil, por ejemplo cuando se desea medir el periodo
de señales externas. Por ejemplo si se desea configurar el módulo CCP en modo
captura para en cada flanco descendente se haría la configuración según la figura 5.2.

Figura 5.2. Modo Captura en cada flanco descendente

Aplicación 5.1 Uso del modo captura para medir periodo de señal externa

Enunciado: La siguiente aplicación tiene como objetivo medir mediante módulo


CCP1 en modo captura el periodo de una señal externa que se ingresa a través del pin
RC2 (CCP1) y mostrarla en una pantalla LCD.

Principio de funcionamiento: Esta aplicación emplea el módulo CCP1 en modo


Captura el valor del TMR1 cada vez que lleguen dos flancos ascendentes por la línea
RC2/CCP1. Conocida la velocidad a la que evoluciona el TMR1, se puede
determinar el lapsus de tiempo transcurrido entre un flanco y el siguiente (el periodo).
Esta información se desplegará en una pantalla lcd como periodo y estará expresado
en μS. Para ello se selecciona el modo de operación a saber Captura en cada flanco
ascendente, esto se logra mediante la configuración del registro CCP1CON<
CCP1M3: CCP1M0 > = 0101. Los detalles de la configuración, cálculo del periodo a partir de
la captura del TMR1 y despliegue en la LCD se aprecian al detalle en el anexo 5.1.
Simulación

85
(a)

(b)

(c)

86
(d)

Figura 5.3 Captura de señal de (a) 500Hz, (b) 1 KHz, (c) 4 KHz, (d) 13KHz

5.3 Modo Comparación

En este modo de operación al igual que en el modo captura, se hace uso del timer 1
aprovechando sus registro de 16 bit (TMR1H:TMR1L) para su funcionamiento.

Figura 5.4. Diagrama de bloques del CCP modo Comparación

El principio de funcionamiento es el siguiente: El par de registro de 16 bit del


módulo a saber CCPRxH:CCPRxL constantemente se está comparando con el valor
del timer 1, cuando coinciden ocurre un evento. Esta configuración es muy útil
cuando se desea dar inicio al ADC de forma periódica. Para calcular el tiempo se usa
la ecuación 5.1 Estos son configurables a través del registro CCPxCON <3: 0> y son
descritos a continuación:

87
CCPxCON

CCPxM <3: 0> Bits de selección de modo del CCPx


1011: Modo Comparación: Disparo de Auto-conversión, ( CCPxIF=1), se inicia la
conversión ADC (Solo CCP1 y CCP2) si el módulo ADC está activado y resetea
Timer1.
1010: Modo Comparación: Solo genera interrupción al igualarse los registros
1001: Modo Comparación: Salida en bajo al igualarse los registros (CCPxIF=1)
1000: Modo Comparación: Salida en alto al igualarse los registros (CCPxIF=1)
0010: Modo Comparación: Conmuta la salida al igualarse los registros.
La figura 5.5 muestra la configuración del módulo CCP en modo comparación
con disparo de eventos especiales. En este modo, cuando ocurre la coincidencia entre
los registros CCPRx y el TMR1; la bandera CCPxIF se pone en alto, se da inicio a la
conversión analógica a digital y se resetea el registro TMR1.

Ecuacion 5.1 Temporizacion = 4 ∗ 𝑇𝑜𝑠𝑐 ∗ (𝐶𝐶𝑃𝑅𝑥 + 1) ∗ 𝑃𝑟𝑒_𝑑𝑖𝑣𝑖𝑠𝑜𝑟(𝑑𝑒𝑙 𝑇𝑀𝑅1)

Figura 5.5. Modo Comparación disparos de eventos especiales inicio ADC

88
Aplicación 5.2 Uso del modo comparación para generar señales periodicas

Enunciado: Se desea diseñar una aplicación que permita sacar por el pin RB0 una
onda cuadrada periodica con frecuencia igual a 2 KHz usando el modulo CCP en
modo Comparacion con disparo de eventos especiales.

Principio de funcionamiento: Para esta aplicación usamos la ecuuacion 5.1 y asi


establecemos el periodo usando para ello la constante "periodo”; luego se configura
el CCP1en modo comparación con disparos de eventos especiales a traves del registro
de control CCP1CON: CCPxM <3:0>: 0010, ya que puede disparar diferentes
eventos al coincidir el valor del TMR1 con el valor prefijado en los registros CCPRXL
y CCPRXH . El módulo CCP1 concretamente, puede provocar un reset del TMR1
poniéndolo a “0” de esta forma, los registros CCPR1L y CCPR1H, actúan como
registros de periodo.

De esta manera podemos utlizar este modo de operación de diversas maneras,


en especial cuando se quiere ejecutar una accion a intervalos de tiempos regulares. En
el capitulo 6 se muestra una aplicación donde se usa el modo comparacion con
disparos de eventos especiales para dar inicio a laconversion analogico a digital. El
anexo 5.2 muestra el codigo correspondiente a esta aplicación.

89
Simulación

(a) (b)

(c) (d)

Figura 5.6 Modo Comparación (a) a la espera de la comparación, (b) Interrupción


por comparación, (c) genera señal de 2KHz (d) genera señal de 1KHz

La figura 5.6a muestra cómo evoluciona el TMR1, mientras esto ocurre el programa
se queda en un bucle infinito. La figura 5.6b muestra el momento en que ocurre la
comparación entre el TMR1 y los registros CCPRx, instante en que entra a la rutina
de interrupción para conmutar el pin RB0. Las figuras 5.6c y 5.6d nos presentan las
señales generadas de 2KHz y 1KHz respectivamente. Tanto en Mplab como en
Proteus se puede analizar el comportamiento de la aplicación sin problemas.

90
5.4 Modo PWM

La Modulación por Ancho de Pulsos o PWM por sus siglas en inglés, es una
técnica que consiste básicamente en generar señales cuyo ciclo útil, al que
llamaremos CU puede ser variable al igual que el periodo de la misma. Para ello se
utiliza el TMR2 como recurso periférico. Este modo de tiene muchas aplicaciones,
especialmente donde se requiera variar el voltaje promedio de la señal sin alterar la
frecuencia de la señal, por ejemplo en el control de velocidad de motores DC, en el
control de temperatura mediante el uso de resistencias como elemento calefactor,
modular señales infrarrojas, entre muchas otras. La figura 5.7 muestra el diagrama de
bloque del modo PWM. La salida de la señal PWM es por el pin CCPx

Figura 5.7 Diagrama de bloque Modo PWM

Cuando se compara el valor del registro PR2 y TMR2 y se detecta la igualdad se hace
un Set el flip-flop colocando su salida en “1”, a la vez que se resetea el registro
TMR2 y se carga al registro CCPRxH el valor contenido en el CCPRxL.

Por otra parte al ocurrir el Set del biestable se inicia en proceso de comparación pero
ahora entre comparan los 10 bits ([CCPRxH:CCP1CON(5:4)]) y TMR2 concatenado

91
con los dos bits de menor peso del reloj interno) y cuando son iguales ocurre un reser
del biestable, lo que pone a “0” su salida y el registro TMR2 no se resetea. De allí
nuevamente se repite el ciclo, siendo el PR2 quien determina el periodo de la señal y
el registro CCPRx determina el CU.

Las ecuaciones que permiten configurar el Periodo y el CU son:

𝐸𝑐𝑢𝑎𝑐𝑖ó𝑛 5.3 𝑇𝑝𝑤𝑚 = 4 ∗ 𝑇𝑜𝑠𝑐 ∗ (𝑃𝑅2 + 1) ∗ 𝑃𝑟𝑒_𝑑𝑖𝑣𝑖𝑠𝑜𝑟(𝑑𝑒𝑙 𝑇𝑀𝑅2)


𝐸𝑐𝑢𝑎𝑐𝑖ó𝑛 5.4 𝐶𝑈𝑃𝑊𝑀 = [𝐶𝐶𝑃𝑅1𝐿: 𝐶𝐶𝑃1𝐶𝑂𝑁 < 5,4 >] ∗ 𝑇𝑜𝑠𝑐 ∗ 𝑃𝑟𝑒_𝑑𝑖𝑣𝑖𝑠𝑜𝑟(𝑑𝑒𝑙 𝑇𝑀𝑅2)

Los registros de configuración para la salida del módulo PWM se describen a


continuación:

APFCON1

CCP1SEL: Selección del pin de entrada/salida del módulo CCP1.


0: CCP1 es RC2
1: CCP1 es RB0
CCP2SEL: Selección del pin de entrada/salida del módulo CCP2.
0: CCP2 es RC1
1: CCP2 es RB3

5.4.1 Mínima resolución del CU para el módulo PWM

La mínima resolución (en tiempo) para el Ciclo Útil del módulo PWM depende del
Pre-Divisor del Timer 2

92
PWMCU = [CCPR1L:CCP1CON<5,4>]●Tosc●[PreDiv TMR2]
TPWM = [2b]●Tosc●[PD_T2]

TPW M
2b   
Tosc  PD _ T 2  
log 2 b  log 
TPW M

 Tosc  PD _ T 2 
 TPW M 
log  
 osc
T  PD _ T 2 
b
log( 2)

La figura 5.8 describe de forma gráfica la evolución del modo PWM, donde se
observa la comparacion entre los registros PR2 y TMR2 paradefinir el periodo de la
señal y posteriormente la comparación entre el TMR2 y CCPRxH para definir el ciclo
útil, y como este ciclo se repite de forma periodica.

Figura 5.8 Funcionamiento del modo PWM

93
Aplicación 5.3 Manejo de motor mediante PWM

Enunciado: Se trata de controlar la velocidad de un motor DC mediante el módulo


CCP en modo PWM, para variar el ciclo útil se utilizara dipswich conectado al puerto
D. solo trabajaremos con los 8 bit más significativos, a saber el registro CCPR1L.

Principio de funcionamiento: En primera instancia se configura el módulo CCP1 en


modo PWM, para ello se configura el registro CCP1CON con el valor “11xx”,)
asumiremos un periodo de PWM (Tpwm) de 256 μS. Para ello usamos la ecuación
5.3 con pre_divisor igual a “1”

1
𝑇𝑝𝑤𝑚 = 256μS = 4 ∗ ( )∗ (𝑃𝑅2 + 1) ∗ 1
4𝑀𝐻𝑧

Así PR2 = 255

Tomaremos la salida PWM por el pin RC2, para ello colocamos a “0” el bit
CCP1SEL del registro APFCON1. Calcularemos tres valores de ciclo útil, a saber
20%, 50% y 95%. Significa que para 20% tendremos 51.2 μS de CU, para 50% será
128 μS y para 95% será 243.2 μS. Haciendo uso de la ecuación. 5.4 tenemos:

Para 20% 𝐶𝑈𝑃𝑊𝑀 = 51.2µS = [𝐶𝐶𝑃𝑅1𝐿: 𝐶𝐶𝑃1𝐶𝑂𝑁 < 5,4 >] ∗ 0.25µS ∗ 1
[𝐶𝐶𝑃𝑅1𝐿: 𝐶𝐶𝑃1𝐶𝑂𝑁 < 5,4 >] = 204.8 ≅ 205

Para 50% 𝐶𝑈𝑃𝑊𝑀 = 128µS = [𝐶𝐶𝑃𝑅1𝐿: 𝐶𝐶𝑃1𝐶𝑂𝑁 < 5,4 >] ∗ 0.25µS ∗ 1
[𝐶𝐶𝑃𝑅1𝐿: 𝐶𝐶𝑃1𝐶𝑂𝑁 < 5,4 >] = 512

Para 95% 𝐶𝑈𝑃𝑊𝑀 = 243.2µS = [𝐶𝐶𝑃𝑅1𝐿: 𝐶𝐶𝑃1𝐶𝑂𝑁 < 5,4 >] ∗ 0.25µS ∗ 1
[𝐶𝐶𝑃𝑅1𝐿: 𝐶𝐶𝑃1𝐶𝑂𝑁 < 5,4 >] = 972.8 ≅ 973

94
Simulación

A continuación se muestra el diagrama esquemático del hardware necesario para la


simulación de esta aplicación

Figura 5.9 Diagrama esquemático modo PWM

(a) (b)

(c) (d)
Figura 5.10 (a) 0% CU, (b) 20% CU, (c) 50% CU, (d) 95% CU

95
En las figuras 5.10 a, b, c y d se observa claramente el buen desempeño del módulo
PWM, tanto en periodo, como en los 3 CU calculados, los cuales se corresponde muy
bien con los obtenidos de forma numérica. En la gráfica del osciloscopio de la
simulación se aprecia que el ciclo útil igual al esperado.

96
CAPÍTULO VI

En el presente capítulo se desarrolla el uso del módulo ADC, características,


configuración y modos de operación, incorporando diversas aplicaciones asociadas a
ellos. En este apartado asumiremos una frecuencia de oscilación de 4 MHz, de
manera que cada ciclo de instrucción será de 1µSegundo

6. CONVERTIDOR ANALÓGICO DIGITAL ADC

6.1 Características generales

El convertidor analógico a digital (ADC) permite la conversión de una señal


analógica a un valor digital en una representación binaria de 10 ó 12 bits. Este
dispositivo utiliza canales analógicas, que son multiplexado al Sample and Hold
(S/H). El resultado binario se obtiene a través de aproximaciones sucesivas. El
resultado de la conversión se deposita en los registros ADRESH y ADRESL. El
módulo ADC tiene múltiples aplicaciones, por ejemplo cuando se requiere controlar
un proceso donde sea necesario medir la variable a través de un sensor. La figura 6.1
muestra el diagrama de bloques de un proceso típico de medición de nivel.

Figura 6.1. Diagrama de bloques del control de nivel

97
Acontinueación la figura 6.2 muestra los detalles que pudiera tener el controlador.

Figura 6.2. Controlador digitalbasado en microcontrolador

La figura 6.2 presenta el diagrama de bloques del controlador, el cual consta


de un conversor analógico/digital como elemento de entrada, luego un
microprocesador, el cual se encarga de tratar la información de entrada, procesarla y
tomar decisiones para luego conectarse al conversor digital/analógico. En general un
ADC recibe un voltaje en la entrada y luego de un proceso de S/H lo convierte en un
número digital. El voltaje de entrada está limitado por Vref+ y Vref-. El número de
salida del ADC está definido por los bits del conversor (Resolución). Para mayor
Resolución menor error de cuantización. El PIC16F1787 puede trabajar a 10 o 12 bit
de resolución, de manera que permite transferencia de 1024 estados para 10 bit y
4096 para 12 bit.

Figura 6.3. ADC de 4 bit de resolucion

98
La ecuación de transferencia del ADC se muestra a continuación

D V  VREF
Ecuación 6.1  in
(2  1) VREF  VREF
n

Donde:
D es el valor digital resultante de la conversión
n es en número de bit del conversor
Vin es el voltaje de entrada al ADC

Para 𝑉𝑟𝑒𝑓 + = 5𝑉𝑑𝑐, 𝑉𝑟𝑒𝑓 − = 0 𝑦 𝑛 = 10


De la ecuación 6.1 tenemos:
𝐷 = 204.6 ∗ 𝑉𝑖𝑛
Para 10 bit 𝐷 = 819 ∗ 𝑉𝑖𝑛

La figura 6.4 muestra el esquema simplificado de un ADC de 4 bit.

Figura 6.4. Esquema simplificado de un ADC de 4 bit

Donde D es 3*Vin por lo que para un valor de entrada de 2.33Vdc tenemos un


numero binario de 0111.

99
Para el microcontrolador PIC16F1787 tememos el siguiente diagrama de bloques:

Figura 6.5. Diagrama de bloque del ADC

Cuenta con las siguientes características:

 Canal de entrada diferencial Vref+ y Vref-


 Hasta 15 canales
 ADC de 10 ó 12 bits de Aproximaciones Sucesivas
 Puede configurarse el Vref interno o externo
 Permite presentar el resultado en complemento a 2 o magnitud y signo

100
Los siguientes registros ubicados en los bancos “0” y “3” son necesarios para operar
el conversor ADC:

 ACON0, ADCON1, ADCON2


 ADRESH, ADRESL
 ANSELA, ANSELB, ANSELD, ANSELE

Figura 6.6 Registros asociados al ADC

ADCON0

ADRMD: Modo de Formato para el resultado del ADC


0: Formato del ADC de 12 bits
1: Formato del ADC de 10 bits
GO/DONE: Bit de estatus del conversor ADC
0: Fin de conversión o no hay conversión en progreso
1: Conversión en progreso. Va a ‘0’ cuando finaliza Conversión
ADON: Modo de Formato para el resultado del ADC
0: ADC Deshabilitado
1: ADC Habilitado

101
Tabla 6.1 Selección del canal entrada positiva diferencial del ADC

CHS <4: 0> Canal CHS <4: 0>


00000 AN0 01100 AN12
00001 AN1 01101 AN13
00010 AN2 01110 Reservado (No hay canal conectado)
00011 AN3 ****
00100 AN4 ****
00101 AN5 ****
00110 AN6 ****
00111 AN7 10101 AN21
01000 AN8 *****
01001 AN9 11101 Indicador de Temperatura
01010 AN10 11110 Salida DAC
01011 AN11 11111 Voltaje de Referencia (FRV)

ADCON1

ADFM: Formato para el resultado del ADC


0: Formato del ADC con Magnitud y Signo
1: Formato del ADC en complemento a 2

Tabla 6.2 Selección del Periodo para el reloj del conversor AD

CDCS<2:0> Selección de reloj CDCS<2:0> Selección de reloj


000 Fosc/2 100 Fosc/4
001 Fosc/8 101 Fosc/16
010 Fosc/32 110 Fosc/64
011 FRC 111 FRC

102
ADNREF: Configuración de VREF-
0: VREF- es Vss
1: VREF- es conectado al pin VREF-
ADPREF<2:0>: Configuración de VREF+
00: VREF+ es conectado a VDD
01: VREF+ es conectado al pin VREF+
10: Reservado
11: VREF+ es conectado internamente a FVR

ADCON2

Tabla 6.3 Selección para la Auto conversión del ADC

TRIGSEL<3:0> Función
0000 Deshabilitado
:
0001 Se da Inicio de Conversión por CCP1
0010 Se da Inicio de Conversión por CCP2
0011 Reservado. Deshabilitado
0100 Se da Inicio de Conversión por PSMC1
0101 Se da Inicio de Conversión por PSMC1
0110 Se da Inicio de Conversión por PSMC1
0111 Se da Inicio de Conversión por PSMC2
1000 : Se da Inicio de Conversión por PSMC2
1001 Se da Inicio de Conversión por PSMC2
1010 Se da Inicio de Conversión por PSMC3
1011 Se da Inicio de Conversión por PSMC3
1100 Se da Inicio de Conversión por PSMC3
1101 Reservado. Deshabilitado
1110 Reservado. Deshabilitado
1111 Reservado. Deshabilitado

103
Tabla 6.4 Selección del Periodo para el reloj del conversor AD

CHSN<3:0> Canal CHSN<3:0> Canal


0000 AN0 1000 AN8
0001 AN1 1001 AN9
0010 AN2 1010 AN10
0011 AN3 1011 AN11
0100 AN4 1100 AN12
0101 AN5 1101 AN13
0110 AN6 1110 AN21
0111 AN7 1111 VREF- Seleccionado por ADNREF

6.2 Formato de resultado del ADC

ADRMD: Modo de Formato para el resultado del ADC


0: Formato del ADC de 12 bits
1: Formato del ADC de 10 bits
ADFM: Formato para el resultado del ADC
0: Formato del ADC con Magnitud y Signo
1: Formato del ADC en complemento a 2

Figura 6.7 ADC 10 bit formato magnitud y signo y complemento a 2

104
Figura 6.8 ADC 12 bit formato magnitud y signo y complemento a 2

Figura 6.9 Resultados en formato con signo y en complemento a 2 del ADC

6.3 Tiempo de adquisición y de conversión

Cada muestra de un valor analógico toma un tiempo definido, de manera que


antes de tomar una nueva muestra es necesario esperar que la anterior este lista y el
dato digital disponible para ser leído y utilizado. Este tiempo se conoce como tiempo
de adquisición. TACQ, y está dado por la ecuación 6.1

Para que el ADC cumpla con la precisión especificada, la carga el condensador de


retención (CHOLD) debe estar completamente al nivel de voltaje del canal de entrada.

105
El modelo análogo de entrada se muestra en la Figura 6.10.

Figura 6.10 Modelo de entrada del ADC del PIC16f1787

Donde:
CPIN: Capacitor de Entrada
VT: Voltaje umbral del diodo
I Fuga: Corriente de fuga por las conexiones
RIC: Resistencia de interconexión
SS: Switch del S/H
CHOLD: Capacitor del S/H

La fuente impedancia (Rs) y el interruptor de muestreo interno (Rss) afectan


directamente el tiempo requerido para cargar el condensador C HOLD. La impedancia
del interruptor de muestreo (Rss) varía con la tensión del dispositivo (VDD). La
impedancia máxima recomendada para fuentes analógicas es de 10 k.

Como la fuente de la impedancia se reduce, el tiempo de adquisición puede disminuir.


Para calcular el tiempo mínimo de adquisición, se puede usar la ecuación 6.1. Esta
ecuación asume que se utiliza el error 1/2 LSb (4,096 pasos para el ADC). El error
1/2 LSB es el error máximo permitido para que el ADC cumpla con sus resolución
especificada.

106
6.4 Cálculo del tiempo de adquisición (TACQ)

Para calcular el TACQ tenemos la ecuación 6.2

Ecuación 6.2 TACQ = TAMP + TC + TCOFF

Donde:

TAMP: Tiempo Ajuste (2 Seg)


TC: Tiempo de carga o descarga del CHOLD
Ecuación 6.3 𝑇𝐶 = −(𝐶𝐻𝑂𝐿𝐷 ) ∗ (𝑅𝐼𝐶 + 𝑅𝑆𝑆 + 𝑅𝑆 ) ∗ 𝐿𝑛 (1⁄2047)
TCOFF: Coeficiente de Temperatura
0.05𝜇𝑆
𝐸𝑐𝑢𝑎𝑐𝑖ó𝑛 6.4 𝑇𝐶𝑂𝐹𝐹 = (𝑇𝑒𝑚𝑝 − 25°𝐶 ) ∗ ( ) 𝑠𝑖 𝑇𝑒𝑚𝑝 > 25°𝐶
°𝐶
Así con los siguientes datos podemos obtener TACQ con Rs 10 KΩ y Temp=30ºC
CHOLD = 120 pF
RSS = 7 KΩ, para VDD = 5V
RIC = 1 KΩ
Así sustituimos estos datos en las ecuaciones 6.3 y 6.4 y luego en 6.2 tenemos
TACQ= 18,72 S

A continuación se enumeran los pasos que en línea general se necesitan para la


configuración del módulo ADC:

1. Configuración de puertos I/O:


 Programar el puerto como entrada con el respectivo registro TRISx
 Configurar pin como entrada analógica a través del registro ANSELx

2. Configurar los distintos parámetros del módulo ADC:


 Reloj conversión ADC
 Voltaje de referencia
 Canal de entrada ADC
 Encendido del módulo ADC

107
3. Configurar la interrupción ADC (opcional):
 Borrar indicador de interrupción ADC
 Habilitar la interrupción ADC
 Habilitar la interrupción periférica
 Habilitar la interrupción global

4. Esperar el tiempo de adquisición requerido (2).

5. Poner a “1” el bit GO/DONE. (Si la conversión es manual por software)

6. Espere a que la conversión ADC se termine a través de los siguientes:


 Encuestando el bit GO / DONE
 Esperando la interrupción ADC a través de ADIF (Siempre que esté
habilitado)
7. Leer el resultado ADC.

8. Borrar la bandera de interrupción ADIF (necesario si la interrupción está


habilitada).

Ejemplo con el Conversor A/D:

PIC 16F877
VDD

AN0 RC2

TMR2=PR2 TMR2=PR2

TMR2=AN0

Figura 6.11 Ejemplo de ADC/PWM Figura 6.12 Esquema de configuración

El TPWM=4096 seg
Se debe dar un Inicio de Conversión cada 1 mS. Para ello se utiliza el CCP modo
comparación con disparos de eventos especiales para dar inicio periódicamente al
ADC.

108
Diagrama de flujo

Figura 6.13 Diagrama de flujo para ADC/PWM

Aplicación 6.1 Uso del ADC para controlar velocidad de motor DC por PWM

Enunciado: La presente aplicación prende controlar la velocidad de un motor DC


mediante PWM, para ello se utilizara un potenciómetro externo conectado al canal
AN0 y los módulos CCP1 modo comparación y CCP3 modo PWM.

Principio de funcionamiento: Este Diseño configura el ADC por interrupción y


genera el inicio de conversión cada 50 milisegundos aproximadamente para actualizar
la velocidad de un motor cuyas velocidad a través del valor analógico presente en
AN0, el ADC se configura con Vdd y Vss como voltajes de referencias, reloj
Fosc/8 y entradas en AN0, resolución 10 bits. Fosc igual a 4 MHz, Magnitud con
signo. Utilizaremos un periodo de 1 KHz para el PWM. Usaremos el módulo CCP1

109
en modo captura con disparos de eventos especiales para dar inicio al ADC
periódicamente cada 50m y el módulo CCP3em modo PWM con un periodo de 1mS
(1KHz). El hardware necesario para el diseño se muestra en la figura 6.14.

Figura 6.14 Diagrama esquemático ADC/PWM

Calculando los valores de las contantes del modo de disparo de eventos especiales
TIC=(CCPRx +1)*(4*Tosc)*Pre.Divisor (Si se programa el Timer 1 a Fosc/4)
Con Tic= 50 milisegundos, Pre_divisor=1, Tosc=0,25 microsegundo
Así CCPRx=C34FH=49999D
Resultando CCP1RH=C3H y CCP1RL=4FH
Calculando el valor de PR2 para el modo PWM del módulo CCP1
TT2= (PR2+1)*4/Fosc*pre_divisor (del TMR2)
Si Fosc = 4 MHz , TT2 = 1 milisegundo , pre_divisor = 4 y Post_divisor =1
Entonces PR2 = 249 =F9H

110
Simulación: Para la simulación utilizaremos un voltímetro para observar el voltaje
analógico en la entrada del canal AN0 y un osciloscopio para ver la formad de onda
de salida PWM, el periodo y como varia el ciclo útil en la proporción en que varía el
voltaje de entrada.

Figura 6.15 (a) 0% Cu de PWM. (b) 25% Cu de PWM

Figura 6.16 (a) 50% Cu de PWM. (b) 75% Cu de PWM

111
Figura 6.17 (a) 97% Cu de PWM (b) 98% Cu de PWM

La figura 6.15a muestra la salida de PWM en 0% loque significa que la entrada del ADC esta
en 0Vdc, la 6.15b muestra un Cu de 25% lo que es 250S en alto, a la entrada se observa
un voltaje de 1.25Vdc que corresponde al 25%. La figura 6.16a y 6.16b muestran Cu
de 50% y 75% respectivamente con 500S y 750S en cada caso. A la entrada del
canal AN0 se observa con el multímetro los voltajes para el 50% a saber 2.5Vdc y
3.75Vdc para 75%. Finalmente para la figura 6.17a y un valor analógico de 97%
(4.85Vdc) se observa en el osciloscopio un Cu cercano al 100% (970S); para la
figura 6.17b el PWM está saturado.

El resultado de la aplicación permite verificar el correcto funcionamiento del modulo


ADC, con resultados satisfactorios en cada caso. El anexo 6.1 contiene el código
fuente de esta aplicación, juntocon los comentarios necesarios.

112
Aplicación 6.2 Uso del ADC para medir temperatura usando el sensor LM35

Enunciado: La presente aplicación prende medir la temperatura presente en el sensor


de temperatura LM35 en un rango desde 0°C hasta 100°C.

Principio de funcionamiento: El LM35 es un sensor de temperatura lineal, el cual


arroja 10mV/°C lo que lo hace ideal para ser utilizado en múltiples aplicaciones.
Considerando que nuestro rango de medición va desde 0°C hasta 100°C, el sensor
estará entre 0Vdc hasta 1Vdc; de manera que para hacer uso de la totalidad de la
resolución configuraremos el voltaje de referencia Vref+ externo e igual a “1” por el
pin RA3. Así usando la ecuación 6.1 y con resolución de 10 bit tenemos:

𝐷 = 1023 ∗ 𝑉𝑖𝑛
Para lograr obtener la temperatura en °C tenemos:

𝐾 = 100⁄1023 = 0.0977

Donde K serála constante que multiplicaremos por el valor digital que resulta del
ADC, por ejemplo si el LM35 mide 50°C tendra como salida 500mV, este valor
representa 511D, el cual multiplicado por K=0.0977 nos da 49.9247°C. En vista de
que es asm es complicado multiplicar cifras con punto flotante usaremos un artificio
sencillo; se trara de usar una rutina que multiplique dos numeros de 16 bit cada uno.
K seria 977 en vez de 0.0977 asi en el ejemplo anterior el valor 511D * 977 es
499247 este valor queda expredado en binario y luego mediante otra rutina se
convierte a BCD, pero solo nos quedaremos con los 3 digitos mas significativos,
ejemplo del 499247 nos quedamoscon 499 y al mostrarlo en la pantalla LCD seria 49
seguido mostramos el punto decimal y 9. A saber 49.9 °C.

113
Simulación:

Figura 6.18a Temperatura de 0 °C, 29.0 °C y 49.9 °C

114
Figura 6.18b Temperatura de 87.9 °C y 99.9 °C

En las figuras 6.17a y 6.17b se observa la respuesta del convertidor ADC ante las
variaciones de voltaje en el canal AN0, de manera que cumple con el objetivo de la
aplicación, por ejemplo para una entrada de 0 Vdc seobserva una temperatura de 00.0
°C, para 0.5 Vdc tenemos una temperatura calculada de 49.9 °C, para 1Vdc
observamosuna temperatura de 99.9 °C. lo que muestra un error despreciable en la
medida. El anexo 6.2 muestra el código fuente de esta aplicación.

115
CAPÍTULO VII

Este apartado contiene la información relacionada con el módulo de


Transmisión/Recepción/ Síncrona/Asíncrona/mejorado EUSART, aquí se desarrolla
la teoría necesaria para poder configurar y desarrollar aplicaciones que hagan uso del
mismo de una manera sencilla y didáctica. En este trabajo solo abordaremos el modo
asíncrono. Para mayores detalles del modo síncrono remítase al datasheet de
microchip.

7. MODULO DE COMUNICACIÓN EEUSART

7.1 Características generales

La transmisión puede ser síncrona o asíncrona, serie o paralelo. El módulo


EUSART (Enhanced Universal Synchronous Asynchronous Receiver Transmitter)
es un puerto de comunicación periférica serial, el cual puede operar en modo
Asíncrono: Full duplex (Tx y Rx simultaneamente) es útil para las comunicaciones
con sistemas periféricos, como terminales CRT y computadoras personales o en
modo Síncrono: Half duplex (Tx ó Rx) el cuan está destinado a las comunicaciones
con dispositivos periféricos, como circuitos integrados A/D o D/A, memoria
EEPROM serie u otros microcontroladores. Estos dispositivos generalmente no
tienen relojes internos para la generación de velocidad en baudios y requieren la señal
de reloj externa proporcionada por un dispositivo síncrono maestro.

El módulo EUSART contiene todos los generadores de reloj, los registros de


desplazamiento y los buffers de datos necesarios para realizar una transferencia de
datos de entrada o salida en serie independientemente de la ejecución del programa
del dispositivo. El EUSART, también conocido como interfaz de comunicaciones
serie (SCI).

116
Figura 7.1. Comunicación asíncrona y síncrona

Figura 7.2. Comunicación asíncrona

7.2 Características del EUSART del PIC 16F1787

Las características más relevantes del módulo EUSART se listan a continuación:


 Transmisión y recepción asíncrona full-duplex
 Buffer de entrada de dos caracteres
 Buffer de salida de un carácter
 Longitud de caracteres programable de 8 o 9 bits
 Detección de dirección en el modo de 9 bits
 Detección de error de sobre-escritura en el buffer de entrada
 Detección de error de formato en el carácter recibido
 Modo Maestro síncrono Half-duplex
 Modo Esclavo síncrono Half-duplex
 Polaridad de reloj programable en modo síncrono
 Operación en modo SLEEP

El módulo EUSART implementa las siguientes características adicionales, lo que


hace que sea ideal para su uso en sistemas de bus Local Interconnect Network (LIN):

117
 Detección automática y calibración de la velocidad de transmisión
 Activación mediante rotura de recepción (Line-Break)
 13 bits de transmisión en (Line-Break)

7.3 Velocidad en la comunicación serial asíncrona

Se pueden conseguir con las siguientes velocidades (en bits/seg):

300, 600, 1200, 2400,4800, 9600, 14400, 19200, 28800, 33600,……


La unidad para representar la velocidad es bits/seg; donde un baudios es un bits/seg
Por ejemplo transmitir (Tx) o recibir (Rx) a una velocidad de 4800 bits/seg implica:

4800 𝑏𝑖𝑡𝑠⁄𝑆𝑒𝑔 ⟹ 1 𝑏𝑖𝑡 = 1⁄4800 𝑆𝑒𝑔 ⟹ 1 𝑏𝑖𝑡𝑠 = 208.3µ𝑆𝑒𝑔

Figura 7.3. Velocidad de transmision

7.4 Estándar de comunicación RS232

Para cumplir con el estándar RS-232 se deben tener en cuenta:

 Las normas mecánicas.


 Las normas eléctricas.
 Las normas lógicas.

118
7.4.1 Normas mecánicas

Tiene que ver con el tipo de conector: los utilizados son el DB-25 y DB-9

Figura 7.4. Distribución de pines del conector DB9

7.4.2 Normas Eléctricas

Tiene que ver con los niveles de tensión con que se transmiten o reciben los datos

Figura 7.5. Niveles y margenes detensión

A continuación se muetran los drivers utilizados en el estándar RS-232

Figura 7.6. Driver MC1489

119
Figura 7.7. Driver MAX232

7.5 Modo asíncrono del EUSART

El módulo EUSART transmite y recibe datos utilizando el formato estándar


de no retorno a cero (NRZ) lo cual se refiere al hecho de que los bits de datos
transmitidos consecutivamente del mismo valor permanecen en el nivel de salida de
ese bit sin volver a un nivel neutral entre cada transmisión de bits. Este formato NRZ
es implementado con dos niveles: Un nivel lógico VOH que representa un bit de
datos "1" y un nivel lógico VOL que representa un bit de datos "0". NRZ.

Cada transmisión de caracteres consta de un bit de inicio seguido de ocho o


nueve bits de datos y siempre termina con uno o más bits de parada. El bit de inicio
siempre es un espacio y los bits de parada son siempre marcas. El formato de datos
más común es de 8 bits. Cada bit transmitido persiste durante un período de 1/(rata de
baudio). Se utiliza un generador de baudio de 8 bits/16 bits dedicado en el chip para
derivar las frecuencias de baudio estándar del oscilador del sistema. En la Tabla 7.1
se observan ejemplos de configuraciones de velocidad de transmisión.

120
El EUSART transmite y recibe primero la LSb. El transmisor y el receptor de
EUSART son funcionalmente independientes, pero comparten el mismo formato de
datos y la velocidad en baudios. La paridad no es compatible con el hardware, pero
puede implementarse en el software y almacenarse como el noveno bit de datos.

7.5.1 Modo Transmisión Asíncrona.

El diagrama de bloques del transmisor EUSART se muestra en la Figura 7.8.


El corazón del transmisor es el Registro de Cambio de Transmisión en serie (TSR), al
que no se puede acceder directamente mediante el software. El TSR obtiene sus datos
del búfer de transmisión, que es el registro TXREG. La configuración del bit TXEN
del registro TXSTA habilita la circuito transmisor del EUSART. Al borrar el bit de
sincronización del registro TXSTA, se configura el EUSART para una operación
asíncrona. Al poner a “1” el bit SPEN del registro RCSTA se habilita el EUSART y
automáticamente configura el pin de E/S de TX/CK como salida. Si el TX/CK el pin
se comparte con un periférico analógico, la E/S la función analógica debe ser
desactivada poniendo a “0” el bit ANSEL correspondiente.

RC6/RB6/TX

FOSC
Divisor entre n

n
BRG16
MULTIPLI
+1 CADOR
X4 X16 X64

SYNC 1 X 0 0 0

SPBRGH SPBRGL BRGH X 1 1 0 0

BRG16 X 1 0 1 0

Figura 7.8. Diagrama de bloques del modulo EUSART

121
Para la conexión física se utilizan los pines RC6, RC7, RB6 y RB7

Tabla 7.1 Sumario de registrosasociados al modo de tranmisión asíncrono


Registro Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
APFCON1 C2OUTSEL CC1PSEL SDOSEL SCKSEL SDISEL TXSEL RXSEL CCP2SEL
BAUDCON ABDOVF RCIDL — SCKP BRG16 — WUE ABDEN
INTCON GIE PEIE TMR0IE INTE IOCIE TMR0IF INTF IOCIF
PIE1 TMR1GIE ADIE RCIE TXIE SSP1IE CCP1IE TMR2IE TMR1IE
PIR1 TMR1GIF ADIF RCIF TXIF SSP1IF CCP1IF TMR2IF TMR1IF
RCSTA SPEN RX9 SREN CREN ADDEN FERR OERR RX9D
SPBRGL BRG<7:0>
SPBRGH BRG<15:8>
TRISC TRISC7 TRISC6 TRISC5 TRISC4 TRISC3 TRISC2 TRISC1 TRISC0
TXREG EUSART Registro transmisor de dato
TXSTA CSRC TX9 TXEN SYNC SENDB BRGH TRMT TX9D

TXSTA

CSRC: Solo modo Síncrono.


0: Modo Esclavo. Reloj Externo
1: Modo Maestro. Reloj Interno

TX9: Habilitación para la transmisión del 9º Bit.


0: Seleccionado 8 bits para la Transmisión.
1: Seleccionado 9 bits para la Transmisión

TXEN: Bit de Habilitación para la Transmisión.


0: Transmisión Deshabilitada.
1: Transmisión Habilitada

SYNC: Bit para seleccionar el modo del USART.


0: Modo Asíncrono.
1: Modo Síncrono.

SENDDB: Envío un carácter de Parada


0: Se completó el envío del carácter de Parada.
1: En la próxima Tx se envía el carácter de Parada

122
BRGH: Solo modo Asíncrono
0: Baudios en Baja Velocidad.
1: Baudios en Alta Velocidad
TRMT: Bit de estado del Transmit Shift Register (TSR)
0: TSR está lleno.
1: TSR está vacío.
TX9D: 9º Bit de Dato en la Transmisión (ejmp. Bit de Paridad)

Escribir en TXREG DATO

BRG (Clock)

RC6/TX/CK (pin) Bit START Bit 0 Bit 1 Bit 7/8 Bit STOP

Dato Tx

TXIF El Dato comienza a Tx

TRMT

Figura 7.9. Diagrama de tiempo de transmisión asíncrona

Pasos a seguir para implementar la transmisión:

1. Seleccionar el pin de salida TX a través del registro APFCON1


2. Poner SYNC=0 y SPEN=1, USART en modo asíncrono
3. Si se desea activar interrupciones activar TXIE=1.
4. Si el dato es de 9 bits TX9=1 y cargar TX9D
5. Cargar el valor apropiado en SPBRGH y SPBRGL, y elegir BRGH para controlar
la frecuencia de trabajo.
6. Activar la transmisión TXEN=1,
7. Cargar en TXREG el dato a transmitir.

123
A continuacion se presenta un diagrama de flujo para la transmisión y un fragmendo
de código fuente:

Fragmento de codigo de transmisión:


TxD
BANKSEL PIR1
NO_TX btfss PIR1,TXIF
goto NO_TX
movwf TXREG
return

Figura 7.10 Diagrama de flujo de Tx asincrona

7.5.2 Modo Recepción Asíncrona.

El modo asíncrono se utiliza normalmente en los sistemas RS-232. El


diagrama de bloques del receptor se muestra en la Figura 7.11. Los datos se reciben a
través del pin RX/DT y controlan el bloque de recuperación de datos. El bloque de
recuperación de datos es en realidad un desplazador de alta velocidad que funciona a
16 veces la velocidad en baudios, mientras que el Registro de Cambio de Recepción
en serie (RSR) funciona a la velocidad de bits.

Cuando se reciben los 8 o 9 bit en el registro, estos se transfieren


inmediatamente a una memoria de forma (FIFO). El búfer FIFO permite la
recepción de dos caracteres completos y el inicio de un tercer carácter antes de que el
software inicie la administración del receptor EUSART. Los registros FIFO y RSR
no son accesibles directamente por el software, el acceso a los datos recibidos es a
través del registro RCREG.

124
7.5.3 Uso de interrupción por recepción

Generalmente se recomienda el uso de interrupciones para determinar


cuándo se haya recibido un dato por EUSART, para ello se procede con el siguiente
procedimiento:

Se establece el bit de bandera de interrupción RCIF del registro PIR1 siempre que el
receptor EUSART esté habilitado y haya un carácter no leído en la recepción FIFO.
El bit de indicador de interrupción RCIF es de solo lectura, no se puede setear ni
borrar por software.

 RCIE, bit de habilitación de interrupción del registro PIE1


 PEIE, bit de habilitación de interrupción periférica del registro INTCON
 GIE, bit de habilitación global de interrupción del registro INTCON

El bit indicador de interrupción RCIF se pone a “1” cuando haya un carácter no leído
en la FIFO, independientemente del estado de los bits de habilitación de interrupción

Figura 7.11 Diagrama de de bloques del modulo receptor asincrona

125
RCSTA

SPEN: Bit de Habilitación del Puerto Serial.


0: Puerto Serial Deshabilitado.
1: Puerto Serial Habilitado. (RC7 y RC6 como pines del Puerto Serial)

RX9: Habilitación para la Recepción del 9º Bit.


0: Seleccionado 8 bits para la Recepción.
1: Seleccionado 9 bits para la Recepción

SREN: Activación de Recepción simple (Solo Síncrono).


0: Desactiva la Recepción simple.
1: Activa la Recepción simple

CREN: Bit de Habilitación para la Recepción continúa.


Modo Asíncrono:
0: Deshabilitada la Recepción.
1: Habilitada la Recepción
Modo Síncrono:
0: Deshabilitada la Recepción.
1: Habilitada Recepción continua hasta que se borre CREN.

ADDEN: Bit de habilitación para detección de Dirección (modo Asíncrono con 9


bit).
0: Detección de dirección Deshabilitado. Todos los bytes son recibidos y el 9º
bit puede ser usado como paridad.
1: Detección de dirección Habilitado. Habilita la interrupción y carga el dato
recibido cuando el 9º bit recibido es 1

FERR: Error de Trama.


0: No ha’y error de Trama.
1: Ha habido error de Trama

OERR: Bit de Sobrepasamiento. Se recibe un nuevo dato sin leer el anterior.


0: No hay error de sobrepasamiento.
1: Hay error de sobrepasamiento. Se borra CREN

RX9D: Bit recibido en la comunicación con 9 bits.

126
7.6 Generador de Baud Rate (BRG)

El generador consiste en un contador/divisor de frecuencia de 8/16 bits,


controlado por el registro SPBRG. El generador de velocidad en baudios (BRG) es un
temporizador de 8 bits o 16 bits dedicado al soporte tanto del modo asíncrono como
síncrono.

De forma predeterminada, el BRG funciona en modo de 8 bits. La


configuración del bit BRG16 del registro BAUDCON selecciona el modo de 16 bits.
El par de registros SPBRGH, SPBRGL determina el período del temporizador de
velocidad en baudios en modo libre. En el modo asíncrono, el multiplicador del
período de rata de baudios está determinado por el bit BRGH del registro TXSTA y
el bit BRG16 del registro BAUDCON. En modo Sincrónico, el bit BRGH se ignora

Tabla 7.2 Formulas de rata de baudios

Figura 7.12 Diagrama de tiempo del generador de rata de Baudio

127
Para la configuración del generador de baudio tenemos el regstro BAUDCON, cuya
descripción se hace a continuación:

BAUDCON

ABDOVF: Bit de Overflow de detección de auto detector de Baudios (Auto-Baud).


0: No hay overflow de Auto-Baud.
1: Hay un overflow de Auto-Baud

RCIDL: Bandera que señaliza: No se está recibiendo datos.


0: Comienza a Rx un Dato.
1: No se está recibiendo ningún Dato

SCKP: Bit de Inversión de Polaridad en la Tx .


0: Polaridad no invertida en el pin Tx.
1: Polaridad invertida en el pin Tx

BRG16: Bit de Generación de la Rata de Baudio (BRG), de 16 bits.


0: BRG de 8 bts.
1: BRG de 16 bits

WUE: Bit que habilita Despertar (Wake-UP), del modo Sleep.


0: Rx normal.
1: Rx espera por flanco negativo. No se Rx Carácter, WUE=0 y RCIF=1

ABDEN: Bit que habilita la Auto detección de la rata de baudios (Auto-Baud).


0: Auto-Baud esta deshabilitado
1: Auto-Baud está habilitado

APFCON1

TXSEL: Selección del pin de salida de TX.


0: Tx es RC6
1: Txes RB6

128
RXSEL: Selección del pin de entrada de RX.
0: Rx es RC7
1: Rx es RB7

Pasos a seguir para programar la recepción

1. Seleccionar el pin de entrada RX a través del registro APFCON1


2. Configurar RC7/RX o RB7/RX como entrada.
3. Cargar X en SPBRGH y SPBRGL, y elegir BRGH para controlar la frecuencia de
trabajo.
4. Poner SYNC=0 y SPEN=1, USART en modo asíncrono
5. SI se desea activar interrupciones activar RCIE=1.
6. Si el dato es de 9 bits RX9=1.
7. Habilitar la recepción con CREN=1.
8. Al completarse la recepción RCIF=1 y produce interrupción si se ha habilitado.
9. Se lee el registro RCSTA y se averigua si se ha producido algún error.
10. Leer el dato de RCREG.

Aplicación 7.1. Transmisión-Recepción EUSART asíncrono

Enunciado: Realice un programa que permita mediante 8 interruptores conectados a


un PIC16F1787 y transmitirlo vía Puerto serial asíncrono a otro PIC16F1787
controlar por PWM un motor DC y visualizar esta información en ocho leds
conectados a este último. Los valores serán transmitidos cada 1 Segundo utilizando el
modo de disparo de eventos especiales a una velocidad de 2400 baudios.

Principio de funcionamiento: Calculando los valores de las contantes del modo de


disparo de eventos especiales. Asumimos la frecuencia de oscilación en 1 Mhz. Los
led mostraran el valor transmitido, los cuales serán utilizados para actualizar el ciclo
útil en cada interrupción por recepción.

129
TIC=(CCPRx +1)*(4*Tosc)*Pre.Divisor (Si se programa el Timer 1 a Fosc/4)
Con Tic=1 segundo
Pre.Divisor=8
Tosc=1 microsegundo
Entonces CCPRx=7A11H=31249D
Resultando CCP1RH=7AH y CCP1RL=11H
Para la velocidad de TX con BRGH=1
Si BR=2400 , Fosc=1Mhz
Entonces SPBRG=25

Haremos uso de la aplicación 5.3 para la configuración del módulo CCP1 en modo
PWM. Solo utilizaremos los 8 bit más significativos para el control del PWM
(CCPR1L). La figura 7.13 muestra el hardware necesario para la simulación.

R5(1)

R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16


1k 1k 1k 1k 1k 1k 1k 1k 100 100 100 100 100 100 100 100
(+)

D1
LED-GREEN

U1 DSW1 U2 Q1
OFF ON
2N3904
2 15 16 1 2 15
RA0 RC0 RA0 RC0
3
RA1 RC1
16 15 2 3
RA1 RC1
16 R17
4 17 14 3 4 17 3k
RA2 RC2 RA2 RC2
5 18 13 4 5 18
RA3 RC3 RA3 RC3
6 23 12 5 6 23
RA4 RC4 RA4 RC4
7 24 11 6 7 24
RA5 RC5 RA5 RC5
14 25 10 7 14 25
RA6 RC6 RA6 RC6
13 26 9 8 13 26
RA7 RC7 RA7 RC7
33 19 DIPSW_8 33 19
RB0 RD0 RB0 RD0
34 20 34 20
RB1 RD1 RB1 RD1 A
35 21 35 21
RB2 RD2 RB2 RD2
36 22 36 22
RB3 RD3 RB3 RD3 B
37 27 37 27
RB4 RD4 RB4 RD4
38 28 38 28
RB5 RD5 RB5 RD5 C
39 29 39 29
RB6/ICSPCLK RD6 RB6/ICSPCLK RD6
40 30 40 30
RB7/ICSPDAT RD7 RB7/ICSPDAT RD7 D
VDD
8 8
RE0 RE0
9 9
RE1 RE1
10 10
RE2 RE2
1 1
RE3/MCLR/Vpp RE3/MCLR/Vpp
PIC16F1787 PIC16F1787

Figura 7.13 Diagrama esquemático Tx-Rx asincrono

130
Simulación:

Figura 7.14 Transmisión y recepción del valor 0000001

Figura 7.15 Transmisión y recepción del valor 1000001

131
Figura 7.16 Transmisión y recepción del valor 1111001

Figura 7.17 Transmisión y recepción del valor 11111111

Para simular esta aplicación se debe gargar el archivo .HEX para cada
microcontrolador, a saber el archivo para el micro transmisor y el de receptor, luego
al iniciar la simulación se ejecuta el código en cada uno obteniendo los resutados que
se describen a continuación: las figuras desde 7.14 hasta 7.17muestran como se
transmite por el módulo USART desde el modulo transmisor el dato presente en los
dipswich y como éste es recibido correctamente el micro receptor. Como a la vez se

132
visualiza y varía el ciclo útil, por ejemplo en la figura 7.15 se envía el valor
100000012 ó 10110 de manera que el ciclo útil seria aproximadamente el 50% y al
observar el osciloscopio inferior vemos como se cumple ésta premisa. Para ver
detalles del código fuente para el transmisor ver anexo 7.1 y el anexo 7.2 para el
receptor.

133
CONCLUSIONES

Este material de consulta se presentó de manera gradual para el manejo de


microcontroladores PIC, partiendo desde los conceptos básicos como manejo de
memorias, configuración puertos de entradas y salidas, hasta el manejo de los
módulos CCP, ADC y EUSART, cada uno basados en el desarrollo de aplicaciones
en MPlab y simuladas en el software Proteus, avanzando desde lo general hasta lo
más específico. Se presentan a continuación las conclusiones más destacadas luego de
la elaboración de este material didáctico:

 Se desarrolló la teoría necesaria para cada tema tratado de manera sencilla y


apoyada con imágenes explicitas que facilitan el rápido aprendizaje de cada
módulo.

 Se mostró a través de ejemplos el uso de software de simulación MPlab y Proteus


para su posterior uso en las aplicaciones.

 Se describió de manera específica la configuración de cada módulo apoyados de


las ecuaciones donde fuera necesario su uso.

 Se desarrollaron las aplicaciones para cada módulo, codificadas en MPlab


simuladas en Proteus.

 Se integraron los diversos módulos periféricos mediante aplicaciones


combinadas y simularon para verificar su correcto funcionamiento.

 Finalmente en el anexo se deja plasmado todo el código fuente asociado a cada


aplicación, de manera que éstas puedan simularse e implementarse sin mayores
inconvenientes.

134
Por tanto queda a disposición de estudiantes, docentes, aficionados y
profesionales una completa herramienta de consulta relacionada con el diseño, y
simulación de aplicaciones para microcontroladores PIC de 8 bit, a la vez que la
asignatura microprocesadores I, que se imparte en la carrera de ingeniería electrónica
de la UNEXPO vice-rectorado puerto Ordaz, contar con tal herramienta.

135
REFERENCIAS

[1] Angulo, José. (2000). Microcontroladores PIC. Diseño Práctico de Aplicaciones.


Editorial McGraw-Hill, Madrid

[2] Microchip Technology Inc. (2012). Data Sheet PIC16(L)84/6/7. DS41637B

[3] Microchip Technology Inc. (2003). Data Sheet PIC16F87XA. DS39582B

[4] Mikel Etxebarria (2001). Microsystems Engineering. Bilbao

[5] Pateti, Antonio. (2016). Clases de la asignatura Microprocesadores I PIC16F1787


UNEXPO, PUERTO ORDAZ.

[6] Surga, Rafael (2017). Clases de la asignatura Microprocesadores I PIC16F1787


UNEXPO, PUERTO ORDAZ.”

136
ANEXOS

137

También podría gustarte