Você está na página 1de 128

iBOARD III

Sistema de Desarrollo para


Microcontroladores PIC con interfaz USB

Marzo 15, 2009


© ROSO Electric Supply
Teléfono (0241) 8426384 • Cel (0414) 4266490
www.roso-control.com • soporte@roso-control.com
iBOARD III
Sistema de Desarrollo para
Microcontroladores PIC con interfaz USB

Autores:

José M. Rodríguez S.
Ángel L. Villegas

Editor:

Ángel L. Villegas
iBOARD III
Sistema de Desarrollo para
Microcontroladores PIC con interfaz USB

© El Editor

Hecho el depósito de Ley

Depósito Legal
ISBN

1ra. Edición Marzo 2009

Tiraje: 50 Ejemplares (electrónico). Este libro está destinado a su publicación


gratuita en Internet y puede ser descargado en la dirección electrónica:
http://www.roso-control.com

Para solicitar ejemplares (sólo en formato electrónico) comuníquese con:

José M. Rodríguez S.
ROSO Electric Supply, C.A. Calle 127 C/C Av. 90-A Edificio Cotoperí 10-6
La Trigaleña, Código Postal 2001, Valencia – Venezuela.
Teléfonos: +58 241 414 4266490
Email: jmrs@roso-control.com

Prohibida la reproducción total o parcial de esta obra, por cualquier medio o


método sin la autorización escrita de los editores. El uso del contenido de los
códigos de programación presentados en la obra sólo está permitido para fines
educativos y no comerciales.

El autor no es responsable de ningún daño ocasionado a personas o cosas que


resulten de una mala aplicación de los programas contenidos en la obra. La
responsabilidad de tal utilización quedará entendida y aceptada por el lector o
usuario de éstos códigos.

Impreso en Venezuela
INDICE
PAG. PAG.
CAPITULO 01
1.0. Descripción del sistema 1 5.2. Lenguajes de programación más utilizados con microcontroladores 16
1.1. Requerimientos mínimos del computador 1 5.3. Microcontroladores “BootLoaders” 17
1.2. Contenido del CD-ROM 1 5.4. Características Principales del PIC 16F876 17
1.3. Características del sistema de desarrollo iBOARD III 1 5.5. Anatomía de un microcontrolador PIC16F876 18
1.4. Características del microcontrolador PIC16F876 1 5.6. Arquitectura del PIC16F876 19
1.5. Capacidades del Hardware 1 5.7. Organización de la memoria de programación del PIC16F876 19
1.6. Capacidades del Software. El Compilador Basic® PROTON® 2 5.8. Organización de la memoria de datos del PIC16F876 20
1.7. Características del Coprocesador ATMEL™ 2 5.9. El registro de Estatus 21
1.8. Descripción modular del sistema iBOARD III 3 5.10. El registro de Opciones 22
1.9. Diagrama electrónico del sistema iBOARD III 4 5.11. El registro de Interrupciones 23
5.12. Interrupciones en el microcontrolador PIC16F886/887 24
CAPITULO 02 5.13. Entrada – Salida Digital 25
2.0. Instalación de “Drivers” 6 5.14. Puertos de Entrada/Salida (E/S) 26
2.1. Optimizando la velocidad de transferencia de información entre 6 5.15. Comandos en alto nivel para el manejo de puertos de E/S 29
la iBOARD III y el computador ( PC ). 5.16. Comandos en alto nivel para el manejo de Interrupciones 31

CAPITULO 03 CAPITULO 06
3.0. Descripción del sistema 8 6.0. Conversión Analógica – Digital 33
3.1. Interfaz de programación y alimentación USB 8 6.1. Registros asociados al conversor A/D 33
3.2. El Microcontrolador 8 6.2. El Registro ADCON0 (detalle de sus bits) 34
3.3. La regleta de conexiones 9 6.3. El Registro ADCON1 (detalle de sus bits) 34
3.4. Periféricos de entrada y salida 9 6.4. Reloj para la conversión A/D 35
3.5. El Coprocesador ATMEL™ 9 6.5. Resumen de Registros utilizados por la conversión A/D 36
6.6. Otras Consideraciones importantes al realizar la conversión A/D 36
CAPITULO 04 6.7. Comandos en alto nivel para la conversión A/D 36
4.0. Primeros Pasos 10 6.8. Pasos a realizar para una conversión A/D con interrupciones 38
4.1. Paso No. 01. Instalación del compilador Basic® PROTON® IDE 10
4.2. Paso No. 02. Ejecución del entorno PROTON® IDE 10 CAPITULO 07
4.3. Paso No. 03. Configuración del cargador “Loader” 10 7.0. El USART / EUSART de un microcontrolador 39
4.4. Paso No. 04. Selección del puerto de comunicaciones serial 10 7.1. Transmisión Asincrónica 39
4.5. Paso No. 05. Carga del archivo iBOARD_III_DEMO.hex 11 7.2. Recepción Asincrónica 40
4.6. Paso No. 06. Grabar programa en el microcontrolador 12 7.3. Interconexión de microcontroladores PIC a través de EUSART 42
4.7. Referencias sobre el primer programa 13 7.4. Generador de Baud 42
4.8. Cargador “BootLOADER” 13 7.5. Resumen de pasos a seguir para realizar una transmisión serial 43
asincrónica a través de los registros del módulo EUSART.
CAPITULO 05 7.6. Resumen de pasos a seguir para realizar una transmisión serial 43
5.0. El Microcontrolador PIC® 16 asincrónica a través de los registros del módulo EUSART.
5.1. Clasificación de los microcontroladores según el bus de datos 16 7.7. Comandos en alto nivel para el manejo del USART / EUSART 43
7.8. Configuración de los registros del USART / EUSART en alto nivel 44
INDICE, continuación.

PAG. PAG.
CAPITULO 08
8.0. Temporizadores “TIMERS” 47 10.4. Conexión entre el PIC16F876 y los dispositivos esclavos 69
8.1. Interrupción por TMR0 48 10.5. Los iButton® 1-Wire® 70
8.2. Registros asociados al TMR0 48 10.6. Ejemplo de aplicación. Lectura del serial de un iButton® 70
8.3. Como trabaja la temporización del TMR0 48 10.7. Cálculo del CRC-8, identificación de errores en la RED 1-Wire® 71
8.4. Pasos a seguir para la utilización del TMR0 48 10.8. Ejemplo del cálculo del CRC8 72
8.5. Ejemplo de utilización del TMR0 48 10.9. Termómetro Digital modelo DS18B20 73
8.6. El timer TMR1 50 10.10. Ejemplo de lectura de temperatura con un DS18B20 74
8.7. El timer TMR1 trabajando como Temporizador 51 10.11. Algoritmo de Search ROM 76
8.8. El timer TMR1 trabajando como Contador 51
8.9. El timer 1 del PIC16F886 / 887 51 CAPITULO 11
8.10. Como trabaja la temporización del TMR1 51 11.0. El coprocesador ATMEL™ ATTiny13s 78
8.11. Pasos a seguir para la utilización del TMR1 52 11.1. El coprocesador utilizado como Salidas Digitales 79
8.12. Ejemplo de utilización del TMR1 52 11.2. El coprocesador utilizado como Entradas Digitales 81
8.13. El timer TMR2 55 11.3. El coprocesador utilizado como Salidas PWM 82
8.14. Como trabaja la temporización TMR2 55 11.4. El coprocesador utilizado como Contador Digital 83
8.15. Pasos a seguir para la utilización del TMR2 55 11.5. El coprocesador utilizado como Conversor A/D 84
8.16. Ejemplo de utilización del TMR2 55
8.17. Ejemplo del TMR0, TMR1 y TMR2 en forma simultánea 57 CAPITULO 12
12.0. MODULO CCP/PWM. Captura, Comparación y PWM 85
CAPITULO 09 12.1. Modo de Captura 85
9.0. Comunicación Serial sincrónica I2C 58 12.2. Modo de Comparación 86
9.1. Características del BUS I2C 58 12.3. Modo PWM 86
9.2. Detalle de la comunicación I2C 59 12.4. Registros asociados a la Captura, Comparación y TMR1 88
9.3. Direccionamiento y formato de transferencia de información 59 12.5. Registros asociados al módulo PWM y TMR2 88
9.4. Inicialización en modo maestro 59 12.6. Ejemplos de aplicación del módulo CCP1 en modo Captura 89
9.5. Transmisión en modo maestro 60 12.7. Comando en Alto nivel para HPWM por hardware 90
9.6. Recepción en modo maestro 60 12.8. Comando en Alto nivel para PWM por software 90
9.7. Dispositivos I2C en el sistema de desarrollo iBOARD III 61 12.9. Ejemplo de HPWM y configuración a través de registros 91
9.8. Comandos en alto nivel para el manejo del protocolo I2C 62 12.10. Ejemplo de HPWM y comandos en alto nivel 91
9.9. Memoria Eeprom 24LC16B 62
9.10. Ejemplo de utilización de una memoria Eeprom 24LC16B 63 Referencias Bibliográficas 92
9.11. Reloj en tiempo Real DS1307 64
9.12. Ejemplo práctico con reloj de tiempo real DS1307 64 Anexo A. Pantalla LCD 93
Anexo B. Software cargador iLOADER, Uart/Scope/OPC®. 101
CAPITULO 10
10.0. Protocolo de comunicaciones 1-Wire® 67
10.1. Descripción del protocolo de comunicaciones 1-Wire® 67
10.2. Implementación del maestro 1-Wire® con el PIC16F876 68
10.3. Topologías de conexión entre dispositivos en una RED 1-Wire® 69
INTRODUCCIÓN
El sistema de desarrollo para microcontroladores modelo iBOARD III, es una el compilador Basic® PROTON™, esto se hizo con la finalidad de estandarizar el
plataforma educativa de avanzada tecnología, con la cual, usted podrá configurar, método de enseñanza de los microcontroladores PIC®. A medida que se
programar, verificar e implementar diseños electrónicos digitales utilizando como desarrollan los capítulos, los ejemplos aumentarán el nivel de complejidad tanto de
base a los microcontroladores PIC® de las familias serie F modelos 16Fxxx y conexiones en hardware como de descriptores en software.
18Fxxx. Es un sistema completo que posee además de un microcontrolador, una
gran cantidad de dispositivos pasivos y activos generalmente de montaje superficial, El capítulo 1,2 y 3, son capítulos informativos. El primero de ellos describe al
los cuales, se complementan para conformar elementos de interfaz hombre – sistema de desarrollo, sus partes y capacidad del hardware incluido. El segundo
máquina, cálculo, procesamiento, visualización, medición y almacenamientos de capítulo explica en forma detallada como instalar los “Drivers” de la tarjeta iBOARD
información. III para trabajar con los sistemas operativos Windows™ tanto Xp® como Vista®,
mientras que en el capítulo tres, el usuario encontrará una explicación más
El software que acompaña al sistema iBOARD III, fue totalmente diseñado detallada de cada módulo funcional del sistema de desarrollo iBOARD III.
para explotar al máximo las prestaciones del sistema y cumplir con las exigencias
actuales en el diseño de sistemas digitales. Además del programa cargador tipo El capítulo 4, fue escrito con la finalidad de utilizar el sistema de desarrollo
“bootloader” denominado iLOADER, el usuario contará con una interfaz completa directamente con el compilador Basic® PROTON®, los primeros pasos que el
UART/SCOPE que le permitirán visualizar la información proveniente del usuario deberá seguir para la instalación del software y el desarrollo del primer
microcontrolador en forma de texto y en forma gráfica. Adicionalmente, se incluye programa de aplicación.
una herramienta de mayores prestaciones y tecnología denominada servidor de
datos OPC™, la cual, le permitirá exportar en tiempo real variables internas del En el capitulo 5, se desarrolla una breve introducción a la organización y
microcontrolador a cualquier aplicación compatible Microsoft™ con capacidad de arquitectura de los microcontroladores PIC®, haciendo especial énfasis en los
comunicación OPC™, como por ejemplo: Excel®, PowerPoint®, Visual Basic®, elementos de entrada y salida. Se incluyen ejemplos para el manejo de los puertos
Delphi® Borland, Visual Studio, etc. de entrada – salida del microcontrolador. El capitulo 6, versa sobre la conversión
A/D. El capítulo 7 sobre la comunicación serial asincrónica con el USART / EUSART
El sistema de desarrollo iBOARD III, se encuentra en continuo proceso de del microcontrolador. El capítulo 8, hace una explicación sobre los periféricos tipo
actualización por parte del fabricante. Tanto el software como el hardware incluyen “Timers” internos que posee el microcontrolador, su utilidad y ejercicios de
las últimas innovaciones electrónicas para proporcionar a usted una herramienta aplicación. En el capítulo 9 se aborda la comunicación serial sincrónica en especial el
poderosa, sólida y bien construida, pensada para resistir un trato duro y aún así protocolo de comunicaciones I2C. Se desarrollan ejemplos para el manejo del reloj
brindar un acabado profesional. de tiempo real DS1307 incluido en el sistema y la memoria EEprom serial modelo
24LC16B.
El sistema de desarrollo no necesita ser alimentado con una fuente de tensión
externa, por el contrario; toma el voltaje de alimentación directamente del puerto El capítulo 10, es una síntesis del protocolo de comunicaciones 1-Wire® de
USB del computador. Usted podrá entonces, alimentar a sus circuitos electrónicos Dallas Semiconductor, un protocolo de comunicaciones de avanzada tecnología muy
directamente de la salida de voltaje del programador hasta 400 ma de carga por utilizado en la actualidad. Por último en el capítulo 11, se detalla el funcionamiento
puerto USB sin inconvenientes. del microcontrolador ATMEL™ incluido en el sistema de desarrollo, ventajas y
aplicaciones del coprocesador.
El iBOARD III, puede ser utilizado con cualquier lenguaje de programación para
PIC®, ya sea, Basic®, C® y/o cualquier otro compilador que produzca la Mayor información teórico práctica sobre el uso y aplicación de los
compilación del programa en formato Intel *.Hex. Sin embargo, el sistema es microcontroladores PIC® está disponible para su consulta a través de la página web
acompañado del excelente compilador en Basic® modelo PROTON® y casi la www.roso-control.com.
totalidad de los ejemplos desarrollados en el manual, fueron realizados con
CAPÍTULO 1
DESCRIPCIÓN DEL SISTEMA

El propósito de éste manual es:


1.3. Características del sistema de desarrollo iBOARD III
• Presentar las características, potencialidades y ventajas del iBOARD III.
• Interfaz de programación USB, lista para conectar directamente al PC.
• Guiarlo durante el proceso de instalación del software incluido en CD-ROM.
• No requiere de transformador y/o fuente externa de alimentación.
• Suministrarle un conjunto de ejemplos e instrucciones de utilización que
• Se conecta de forma sencilla a cualquier protoboard estándar.
harán de su experiencia con el iBOARD III todo un éxito.
• Alimenta al protoboard directamente desde la tarjeta impresa hasta 400 ma.
• Incluye un LED de color verde para indicar la alimentación del sistema.
Antes de continuar, tomaremos un tiempo para revisar el contenido del material • Incluye un LED de color rojo para indicar la actividad del puerto USB.
que acompaña al sistema de desarrollo: • Pulsador de “RESET” para reiniciar al microcontrolador.
• Todos los terminales de E/S del PIC están disponibles para el Protoboard.
• Tarjeta de desarrollo iBOARD III.D • Pantalla LCD de 2x16 pre-conectada y lista para trabajar.
• Microcontrolador PIC16F876 con resonador 20 MHz.D • Cuatro (04) entradas digitales con pulsadores N.A. conectadas a los pines
• Pantalla LCD estándar de 2x16 caracteres. D RA0 … RA3 del microcontrolador PIC.
• Cable de programación USB.D • Cuatro (04) salidas digitales con LEDs pre-conectados a los terminales RC2
• CD con programa de instalación y documentación adicional. D ..RC5 del microcontrolador PIC a través de un interruptor tipo mini DIP.
• Código de ejemplo para el microcontrolador PIC16F876.D • Microcontrolador PIC16F876 con resonador de 20 Mhz incluido.
• Compilador en lenguaje Basic® PROTON® versión DEMO.D • Memoria EEPROM I2C modelo 24LC16B de 2K x 8 Bits..
• Manual de uso y referencia del microcontrolador PIC16F876.D • Reloj de tiempo real (RTC) I2C modelo DS1307 con salida de onda cuadrada
y entrada para batería de respaldo. Coprocesador ATMEL™ de 8 bits.
1.1. Requerimientos mínimos del computador
1.4. Características del microcontrolador PIC16F876
• Procesador Pentium 266 Mhz o superior con Windows XP® ó Vista®.
• Unidad de CDROM. El microcontrolador incluido en el sistema de desarrollo iBOARD III, está
• Puerto de comunicaciones USB. basado en el muy utilizado microcontrolador PIC16F876, probado como uno de
• Conexión a Internet (opcional para actualizar la versión de los programas los PIC más robustos, completo y destacados de su gama.
incluidos en el CD-ROM y descargar nuevos ejemplos disponibles en la RED).
1.5. Capacidades del Hardware
1.2. Contenido del CD-ROM
• 384 bytes de memoria RAM.
• Programa de instalación del iBOARD III. D • 8 K x14 Words de memoria de programa Flash re-programable.
• “Drivers” para interfaz de puerto USB. D • 256 Bytes de memoria Eeprom.
• Especificaciones del PIC16F876 (Microchip™) en inglés. D • Convertidor Analógico/Digital de 4 canales y 10 bits de resolución.
• Especificaciones técnicas del DS1307, 24LC256 y pantalla LCD. D • Un (01) USART (comunicación serial).
• Códigos de ejemplo y diagramas esquemáticos. D • Dos (02) módulos CCP (Capture/Compare/PWM).
• CD con programas de aplicación. D • Tres (03) Timers o temporizadores (TMR0, TMR1 y TMR2).
• Hasta ocho (08) posibles fuentes de interrupción.

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


1
1.6. Capacidades del Software. El Compilador Basic® PROTON® 1.7. Características del Coprocesador ATMEL™

• Programación en alto nivel, estructurada y modular en lenguaje Basic®. El microcontrolador ATMEL™ viene totalmente preprogramado para realizar
• Facilidad para la definición y manejo de memoria RAM, EEprom y Flash, las siguientes configuraciones y tareas como coprocesador:
definición de variables y modificadores de formato.
• Funciones matemáticas, trigonométricas y lógicas incluidas. • Cuatro (4) puertos digitales programables como entradas y/o salidas.
• Funciones incluidas para facilitar el manejo de “string”. • Cuatro (4) puertos digitales prog. como contadores de freq. hasta 1 MHz.
• Manejo directo de pantallas LCD alfanuméricas y gráficas. • Dos (2) puertos como salidas programables PWM de 37.5 KHz.
• Generación de múltiples tonos y sonidos de alarma. • Dos puertos (2) como entradas analógicas 10 bits.
• Medición de pulsos, frecuencia y conteo de eventos. • Tres puertos (3) como comparadores analógicos.
• Manejo de pulsadores e interruptores de forma fácil y eliminando rebotes. • Referencia interna de 1.1 Volts para la conversión A/D y comparación.
• Manejo total de interrupciones para todos los periféricos incluidos. • 32 Bytes de memoria RAM disponibles al usuario para lectura / escritura.
• Aritmética en punto flotante para las variables así definidas.
• Manejo de motores servo y de paso mediante comandos especializados.
• Manejo de tablas y estructuras condicionales de repetición y decisión. En el capítulo No. 11 se detalla la operación completa del microcontrolador
• Acceso a los registros internos del microcontrolador para lectura y/o ATMEL™ como coprocesador. El fabricante está desarrollando el software
escritura. necesario para utilizar al coprocesador como elemento central en la conexión de
• Comunicación serial RS232 por hardware a través de los pines RC7/RC6 del sistemas de desarrollo a través de una red de comunicaciones, inicialmente, no
microcontrolador. USART directamente conectada al puerto USB del PC. Por todos los sistemas de desarrollo incorporarán el microcontrolador ATMEL™, el
software, puede generarse la PWM por cualquier pin del microcontrolador. fabricante se reserva el derecho de incluirlos en la medida de que el software
para su utilización ya esté disponible. Si usted recibió un sistema de desarrollo
• Manejo de los protocolos de comunicación serial: sin el microcontrolador ATMEL™, podrá adquirirlo como una opción a través del
fabricante.
9 1-Wire ® de Dallas Semiconductors.
9 I2C de Phillips Semiconductors. Igualmente, el programa iLOADER®, se podrá descargar en forma gratuita y
9 3-Wire de Dallas-Maxim. sin restricciones desde la página www.roso-control.com. Este programa es un
9 SPI de Motorola. extra y no es imprescindible para la puesta en funcionamiento del sistema de
desarrollo iBOARD III.
• Amigable IDE de programación.

Y muchas otras características que hacen de este uno de microcontroladores


más poderosos y a la vez sencillos de usar para casi cualquier aplicación que
usted pueda imaginar.

NOTA: El sistema de desarrollo iBOARD III, puede utilizarse con cualquier


microcontrolador compatible de Microchip™ serie PIC16Fxxx y PIC18Fxxx, y
cualquier lenguaje de programación. Sin embargo, el sistema utiliza por defecto
con el PIC16F876 y el compilador Basic® PROTON® IDE Lite, los cuales vienen
incluidos junto al sistema.

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


2
1.8. Descripción modular del sistema iBOARD III

MICROCONTROLADOR PANTALLA LCD


PIC16f876 2X16 CARACTERES CONVERTIDOR USB A
SERIAL FT232

XTAL DE 13.768 KHz


PARA RELOJ DE HUECOS PARA EL
TIEMPO REAL MONTAJE EN
TABLERO

RELOJ DE TIEMPO
REAL DS1307 LED BICOLOR VERDE /
ROJO

RESONADOR 20 MHz
CONECTOR MINI USB

CONECTOR EXTRAÍBLE
PARA LA LCD MEMORIA EEPROM
2K X 8 BITS

SWITCH MINI DIP


4X N.O. PARA MICROCONTROLADOR
CONEXIÓN DE LEDS ATMEL 8 BITS
AL
MICROCONTROLADOR LED’S Y PULSADORES

BORNERA DE
CONEXIÓN AL PULSADOR DE RESET
PROTOBOARD

Figura 1.1. Fotografía del sistema de desarrollo iBOARD III.

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


3
1.9. Diagrama electrónico del sistema iBOARD III

Figura 1.2. Esquema electrónico del sistema de desarrollo iBOARD III.

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


4
Figura 1.3. Esquema electrónico del sistema de desarrollo iBOARD III, continuación.

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


5
CAPITULO 2
INSTALACIÓN DE “DRIVERS”

Al igual que todos los accesorios USB actuales, la iBOARD III, requiere de la
instalación de los “Drivers” suplidos por el fabricante para su correcto funcionamiento. Los
“Drives” requeridos, se suministran en un CD entregado junto al equipo bajo el archivo
denominado: CDM 2.04.06.exe, el cual, es un archivo del tipo ejecutable.

Antes de conectar la iBOARD III al computador, usted deberá hacer doble clic
con su ratón en el archivo de instalación de los “Drivers”; ,
momentáneamente se ejecutará en forma automática la instalación de los “Drivers”, esto
se puede observar en la figura 2.1 anexa.

Figura 2.1. Ventana de instalación de los “Drivers” para la iBOARD III.


Figura 2.2. Diferentes mensajes observados durante la instalación del sistema de desarrollo
Una vez instalados los “Drives”, conecte la iBOARD III al puerto USB del iBOARD III.
computador, de inmediato deberá observar una secuencia de ventanas que
aparecen indicando al final; que la instalación del nuevo hardware ó tarjeta 1.- Abra el menú propiedades del sistema “Hardware” a través del panel de control de
iBOARD III ha sido completada en forma satisfactoria. Note que la figura 2.2(c) Windows®. Seleccione “Administrador de dispositivos”, esto se puede observar en la
muestra incluso el puerto serial COM(8) seleccionado como puerto virtual. En este figura 2.3.
caso el PC instaló la iBOARD III seleccionando para su funcionamiento el puerto
(COM8). 2. Haga doble clic sobre el icono donde aparece el USB Serial Port (COMx). Donde la x
es el puerto serial asignado en su computador, esto se puede observar en la figura 2.4.
2.1. Optimizando la velocidad de transferencia de información entre la
iBOARD III y el computador ( PC ). 3. Haga doble clic sobre “Configuración del Puerto” y “Opciones Avanzadas”, esto
se puede observar en la figura 2.5.
El fabricante, diseño los “Drives” para la iBOARD III, de forma que fuesen
compatibles con la totalidad de los PC existentes en el mercado. Es de hacer notar la gran 4. Modifique la propiedad “Temporizador de Latencia” a un valor igual a 3, como se
variedad de CPU’s y tarjetas de memoria con diferentes velocidades de procesadores y muestra en la figura 2.6.
tecnologías. Por ello, la propiedad “latencia” ó retardo en la comunicación entre la CPU y
la iBOARD III es ajustable por el usuario, esto con la finalidad de lograr una optima De esta forma usted ya optimizó la transferencia de información entre el PC y el sistema
sincronización entre ambos equipos. La propiedad latencia la podemos ajustar de la de desarrollo iBOARD III.
siguiente forma:

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


6
Figura 2.5. Menú Configuración de puerto del sistema operativo Windows™.

Figura 2.3. Menú Propiedades del sistema/Hardware/Administrador de


dispositivos del sistema operativo Windows™.

Figura 2.4. Menú Administrador de dispositivos del sistema operativo Windows™. Figura 2.6. Menú configuración avanzada del COM del sistema operativo Windows™.

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


7
CAPITULO 3
DESCRIPCIÓN DEL SISTEMA

Para describir funcionalmente al sistema iBOARD III vamos a dividirlo en cinco Los componentes que integran la interfaz de programación son:
bloques operativos bien definidos:
• Un circuito integrado convertidor USB / RS-232 TTL modelo FT232.
• Interfaz de programación y alimentación USB • Un conector USB tipo mini 5P que permite utilizar cualquier cable USB mini
• El microcontrolador PIC estándar (como los usados en cámaras, MP3 y muchos otros dispositivos
• La regleta de conexiones USB) para programar al microcontrolador.
• Los periféricos de entrada y salida • Un diodo LED de color verde que indica el voltaje de alimentación.
• Coprocesador ATMEL™ • Un diodo LED de color rojo que indica la actividad del puerto USB.

3.1. Interfaz de programación y alimentación USB 3.2. El Microcontrolador

Se encarga de ajustar los niveles de tensión del puerto USB a los niveles El microcontrolador incluido en el sistema de desarrollo iBOARD III es el
aceptados por el microcontrolador (0 - 5 Vdc) y de tomar la alimentación de +5V PIC16F876, el cual, se presenta en un encapsulado de 28 pines tipo DIP 0.3”. Se le
necesaria para el funcionamiento del sistema de desarrollo. Los elementos que ubica en la parte superior izquierda del sistema y está acompañado de un pulsador
conforman a este bloque se muestran resaltados en color rojo en la Figura 3.1. de “RESET” y un resonador de 20 Mhz como se muestra en la Figura 3.2.

Figura 3.1. Interfaz de programación y alimentación del iBOARD III. Figura 3.2. Ubicación del microcontrolador, resonador y pulsador de RESET del iBOARD III .

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


8
3.3. La regleta de conexiones

Abarca toda la parte inferior del sistema y sirve de soporte al mismo. En ella se • Dip-Switch mini de cuatro (4) posiciones, los cuales, están conectados en
encuentran claramente identificados todos los pines del microcontrolador además serie con cada uno de los LED’s descritos en el punto anterior. La función
de los terminales de alimentación +5V y GND. +5V es una salida de 5 Vdc aunque de este interruptor es la de conectar y/o desconectar física y
puede utilizarse como una entrada de 5 Vdc si no se desea alimentar al iBOARD III eléctricamente los LED’s de los pines del microcontrolador. Referencia (2)
desde el puerto USB del PC. Nota Importante. Para poder alimentar con una en la Figura 3.3.
fuente externa regulada de +5Vdc por el pin +5V, deberá primero desconectar el
• Un banco de 4 pulsadores pre-conectados en los terminales RA0,RA1,RA2
cable de conexión USB al sistema iBOARD III, a fin de, evitar daños que pudiese
y RA3 del microcontrolador, puerto A, bits <3:0>, los cuales se utilizan
ocasionar sobre el puerto USB del PC. Referencia Figura 3.3.
como entradas digitales. Los pulsadores son ampliamente utilizados en los
dispositivos electrónicos, en funciones de ajuste y selección de
configuraciones. Referencia (3) en la Figura 3.3.
• Un conector para pantalla LCD. Las pantallas LCD son los periféricos de
salida más llamativos, permiten desplegar texto, números, mensajes y con
un poco de creatividad hasta gráficos. La pantalla LCD del iBOARD III se
encuentra cableada en los pines RB1 al RB7, puerto B, bits <7:1> del
microcontrolador. Referencia (4) en la Figura 3.3.
• Un reloj de tiempo real (RTC) modelo DS1307, con todos sus terminales de
comunicaciones y operación disponibles. Este RTC almacena y actualiza la
hora y fecha de una manera muy exacta, permitiéndole funcionar como
reloj/calendario. Además posee 56 bytes de memoria NVRAM totalmente
libres, un pin que genera una señal cuadrada de frecuencia programable
ideal para generar bases de tiempo exactas y construir temporizadores. Se
lpuede conectar una batería de respaldo para mantener la hora y fecha
actualizándose durante años sin estar el sistema iBOARD III. Referencia
(5) en la figura 3.3.
• Una memoria EEPROM de 2K x 8bits que puede ser re-escrita más de un
millón de veces y puede almacenar datos durante más de 50 años aún sin
Figura 3.3. Ubicación de la regleta de conexiones del iBOARD III .
estar alimentada. Este tipo de memorias son muy empleadas para
almacenar configuraciones y llevar un registro histórico de fallas o de
valores de una variable medida con el microcontrolador. La comunicación
3.4. Periféricos de entrada y salida con la memoria Eeprom 24LC16B y el RTC DS1307 se hace por medio de
un protocolo serial llamado I2C que sólo requiere de dos líneas para su
El iBOARD III, cuenta con un grupo de periféricos muy utilizados en aplicaciones funcionamiento. Referencia (6) en la Figura 3.3.
industriales, estos son:
3.5. El Coprocesador ATMEL™
• Un banco de 4 LEDs pre-conectados a los terminales RC2,RC3,RC4 y RC5
del microcontrolador, puerto C, bits <5:2>. Estos no pueden ser removidos Es un microcontrolador de 8 bit’s fabricado por la casa ATMEL™ muy eficiente y
del sistema y reflejan en todo momento el estado de los pines veloz, el cual, ha sido incluido para funcionar como coprocesador del
mencionados. Los LEDs son indicadores visuales muy llamativos utilizados microcontrolador PIC 16F876, “expansor” de puertos E/S, PWM, convertidor A/D y
en casi todos los equipos electrónicos. Referencia (1) en la Figura 3.3. funciones futuras de comunicación en RED. Referencia (7) en la Figura 3.3.

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


9
CAPITULO 4
PRIMEROS PASOS

Vamos a comenzar a desarrollar actividades en nuestro sistema, para ello es


necesario que ubique claramente cada uno de los componentes.

• Sistema de desarrollo iBOARD III, incluido.


• Cable de programación mini USB 5P, incluido.
• Placa de experimentación “Protoboard” (no incluido), ver figura 4.1.

Figura 4.1. Paca de experimentación “Protoboard”.

El microcontrolador PIC16F876 incluido en el sistema de desarrollo iBOARD III,


viene pre-cargado con el código “boot loader” para Basic® PROTON®. Esto no
Figura 4.2. Pantalla de instalación del compilador PROTON®.
significa que éste sistema de desarrollo se pueda utilizar única y
exclusivamente con el Basic® PROTON®, usted puede instalar en la base de 28
pines cualquier microcontrolador de la serie 16Fxxx y 18Fxxx compatible de
4.2. Paso No. 02:
microchip™ y editar su programa con el compilador de su preferencia, sea C,
Ejecute el entorno PROTON® IDE, haciendo “click” en el icono creado en el
Pascal, MikroBasic®, PBasic®, MBASIC®, etc, Por supuesto, el sistema viene por
escritorio por el programa de instalación ó a través del menú Inicio\todos los
defecto con el compilador versión Basic® PROTON® IDE Lite. En ésta sección
programas\.. como aparece en la figura 4.3.
explicaremos en forma detallada como cargar un programa de ejemplo (incluido en
el CD del iBOARD III) en el microcontrolador PIC16F876, en el directorio Ejemplos.
4.3. Paso No. 03:
Ahora realice la configuración del cargador de programas (Loader). Para ello
4.1. Paso No. 01:
seleccione la opción Loader… del menú View, como aparece en la figura 4.4.
Instalación del compilador Basic® PROTON® IDE Lite. En el CD incluido junto al
sistema de desarrollo, se encuentra el instalador del compilador Basic® PROTON®
4.4. Paso No. 04:
en la Carpeta ..\30 Compilador. Abra ésta carpeta y se encontrará dos sub-carpetas
Seleccione ahora el puerto de comunicaciones serial donde se instaló previamente
denominada 10 Manual y 20 Compilador. Abra la carpeta 20 Compilador y ejecute el
el sistema de desarrollo iBOARD III. Como referencia puede ver la figura 2.3.
instalador como aparece en la figura 4.2, siga las instrucciones indicadas en
pantalla.

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


10
Figura 4.5. Selección del puerto serial de conexión al iBOARD III.

4.5. Paso No. 05:


Abra el archivo CAP_04_Ejemplo_01.hex a través de el Menú File/Open , que se
Figura 4.3. Pantalla inicial del IDE PROTON®. encuentra en el directorio 32 Ejemplos\CAP_04\01\ en el CD entregado a usted.

Figura 4.6. Pantalla de selección del archivo de ejemplo.


Figura 4.4. Menú de configuración del cargador (Loader).

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


11
4.6. Paso No. 6:

Presione el icono de grabar programa en el microcontrolador, como se muestra


en el círculo ubicado en la figura 4.7.

Figura 4.7. Pantalla del menú de programación del IDE PROTON®. Figura 4.9. Fotografía de la ejecución del programa CAP_04_Ejemplo_01.hex
Cargado en el PIC16F876 del sistema de desarrollo iBOARD III.

4.7. Referencias sobre el programa DEMO

Entendemos que esta es la primera vez que usted está cargando un programa al
sistema de desarrollo iBOARD III, y quizás es su primera experiencia con los
microcontroladores, sin embargo, no se preocupe si no entiende el código o parte
de el, en los capítulos posteriores se explicará en detalle la teoría del
funcionamiento de los microcontroladores PIC®. Este sólo es un ejemplo para
mostrar la operatividad del sistema hardware – software sobre todo a aquellas
personas que tienen ya algo de experiencia en el mundo de los microcontroladores
y están ansiosos de programar aplicaciones.

Ahora abra el programa CAP_04_Ejemplo_01.bas, utilizando el comando


FILE\Open del menú principal del IDE Basic® PROTON® y podrá visualizar el
programa codificado en un lenguaje de alto nivel como el Basic® PROTON®, esto
se muestra en la figura 4.10.

Figura 4.8. Pantalla final presentada por el IDE del PROTON®.

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


12
4.8. Cargador “Boot LOADER”
' CAP_04_Ejemplo_01.bas
' Ejemplo básico de utilización del sistema iBOARD III con LCD Los microcontroladores PIC16F87x(A) y PIC18Fxxx(x) pueden escribir su propia
' ------------------------------------------------------------------- memoria de programa (Flash) sin necesidad de utilizar un programador externo,
Device = 16F876 ' Define el microcontrolador utilizado para ello, deberán ser cargados inicialmente con un pequeño código de programa
ALL_DIGITAL = True ' Config. todos los puertos como dig.
XTAL = 20 ' Define la velocidad del resonador denominado “boot loader”, el cual, permite que tanto el código del programa objeto
de usuario como el valor de los registros en EEprom transmitidos al
' Pines de conexión a la pantalla LCD microcontrolador desde un puerto de comunicación serial y/o USB, sean
Declare LCD_DTPIN PORTB.4 ' Pin de Datos LCD conec. al PORTB.4 efectivamente almacenados en dicho microcontrolador.
Declare LCD_ENPIN PORTB.3 ' Pin de Enable LCD conec. al PORTB.3
Declare LCD_RSPIN PORTB.1 ' Pin de RS LCD conec. al PORTB.1
TRISB.2 = 0 ' Declara a PORTB.2 como Salida Dig. El programa cargador “MicroCode Loader” es un ejemplo de esto; permite
PORTB.2 = 0 ' Coloca en PORTB.2 un cero (0) Lógico programar al microcontrolador conectado en un puerto de comunicaciones con el
programa realizado por el usuario. En la figura 4.11 se observa la ventana principal
Dim Contador As Byte ' Declaración de var. de uso general
Dim ValorF As Float ' Declaracion de var. de uso general
del programa MicroCode Loader.
ValorF = 0 ' Inicializa la variable en cero
TRISA = $FF ' Declara el Puerto A como entrada dig.
TRISC = $00 ' Declara el Puerto C como salida dig.

Main:
Print $FE, 1 ' Comando para limpiar pantalla LCD
Print At 1,1, "Sist. Desarrollo" ' Lleva el cursos a posic. 1,1
Print At 2,4, "iBOARD III" ' Lleva el cursor a posic. 2,4
DelayMS 2000 ' Pausa de 2000 ms

For Contador = 0 To 255 ' Ciclo iterativo "For"


ValorF = ValorF + 0.1 ' éste segmento de código
Print At 2,3, "Valor = ", DEC1 ValorF ' mostrará en la pantalla
PORTC.2 = PORTA.0 ' Si presionan los pulsa_
PORTC.3 = PORTA.1 ' dores, encenderán los
PORTC.4 = PORTA.2 ' Led's correspondientes
PORTC.5 = PORTA.3 ' a la posición corresp.
DelayMS 100 ' Retardo de 100 ms
Next '
GoTo Main
End

Figura 4.10. Listado de la codificación del programa CAP_04_Ejemplo_01.bas

En el Paso No. 5, usted cargó al microcontrolador el código compilado del Figura 4.11. Fotografía de la pantalla principal del programa MicroCode Loader.
programa CAP_04_Ejemplo_01.hex, éste archivo está compuesto de “Tokens” Bytes
binarios codificados en formato Intel *.hex Este formato es un estándar usado por
los microcontroladores PIC®. En contrapartida, el programa CAP_04_Ejemplo_01 Antes de utilizar el programa MicroCode Loador, es necesario que el microcontrolador
.bas con la extensión (.bas) está escrito en lenguaje de alto nivel Basic®. Para que a utilizar ya haya sido pre-programado con el código “boot loader”, esto se deberá
éste programa pueda ser ejecutado por el PIC® primero hay que compilarlo, lo realizar con un programador para PIC®, ya sea fuera de circuito y/o tipo ICSP. Nosotros
cual, genera el archivo compilado con el mismo nombre pero con la extensión .hex. recomendamos utilizar el programador de nuestra casa comercial modelo iPROG18. Por
El código escrito en Basic® lo denominaremos código fuente y el codificado (.hex) defecto, el microcontrolador PIC16F876 incluido en el iBOARD III, ya ha sido pre-
lo denominaremos de ahora en adelante código objeto. programado con el código “boot loader”.

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


13
En el CD incluido con el sistema de desarrollo, carpeta 12 Bootloader, se Para microcontroladores PIC18Fxxx
encuentra el archivo correspondiente al código “boot loader” (16F876_20.hex), el ORG 0
mismo, deberá ser cargado en el microcontrolador PIC16F876 a través de un GOTO StartOfProgram
programador estándar. Si este programa no se carga en el microcontrolador, el ORG 8
programa MicroCode Loader no se podrá comunicar con el microcontrolador. StartOfProgram
; El programa de usuario comienza aquí
El funcionamiento del “boot loader” se puede explicar de la siguiente forma. Al
energizar al microcontrolador, o al hacer un “reset” del microcontrolador, el
programa pre-programado en el microcontrolador “boot loader” realiza un chequeo 4.9. BARRA DE HERRAMIENTAS DEL MicroCode Loader:
de comunicación a través del USART del micro, si existe un programa cargador
como el MicroCode Loador y en ejecución, se le da el control del microcontrolador al
programa MicroCode Loader, si no se encuentra ninguna actividad en el puerto de
comunicaciones, el microcontrolador ejecutará el programa que tiene contenido en
su memoria flash.

El código (firmware) “boot loader” reside o se almacena en las últimas 256


palabras de la memoria de programación (Flash) del microcontroladores de la serie
PIC16F y/o en las últimas 336 palabras de la memoria de programación (Flash) de
los microcontroladores de la serie PIC18F. Todos los registros de la memoria
EEprom y del microcontrolador están disponibles al usuario.

El software MicroCode Loader se comunica con el microcontrolador a través del


USART del microcontrolador. Los PIC16F87x tienen ubicado el USART de recepción (Rx)
en el pin PORTC.7 y el de transmisión el pin PORTC.6. En la figura 1.2. se observa la
conexión de USART del microcontrolador con el convertidor FT232 USB a SERIAL TTL, del
diagrama electrónico de conexiones previamente mostrado en esa figura.

Se debe tener especial cuidado cuando usted programa directamente en assembler,


debido a que el código “boot loader” reside en la parte superior de la memoria
Flash, es necesario, al energizar el microcontrolador, indicarle que la primera
instrucción a ejecutar sea la indicada por el código contenido en el “boot loader” ,
es necesario un salto (Jump) a ésta dirección. Para hacer esto, se utilizan las cuatro
primeras palabras de programación o localidades de la flash del microcontrolador
denominadas vector de interrupción. En un programa escrito en “assembler” se Figura 4.12. Fotografía del menú principal del programa MicroCode Loader.
deberá escribir:

Open Hex File


Para microcontroladores PIC16Fxxx
Se utiliza para cargar en memoria del programa MicroCode Loader un archivo
ORG 0
del tipo *.hex
GOTO StartOfProgram
ORG 4

StartOfProgram
; El programa de usuario comienza aquí

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


14
Program
El botón “program” se utiliza para cargar el archivo *.hex en el Run User Code
microcontrolador. Cuando se programa el microcontrolador, se realiza una El botón de “Run User Code” al ser presionado, hace que el programa “boot loader”
verificación normalmente del programa contenido en el microcontrolador, la termine su funcionamiento y se ejecute el programa almacenado en la memoria
verificación asegura que tanto los datos contenidos en la memoria de programa flash del microcontrolador.
como en la Eeprom se cargaron correctamente. Se puede eliminar la opción de
verificación desmarcando esta opción en el menú del programa. La opción se puede
desmarcar en forma individual referida a las áreas de programación en forma Loader Information
independiente, ya sea la memoria de programa “Verify Code When Programming” ó
en la Eeprom “Verify Data When Programming”. Otras opciones están también Muestra la información acerca de la versión del “firmware” ó “bootloader”
disponibles a través del menú principal, tales son: utilizado, al mismo tiempo, muestra el tipo de microcontrolador utilizado. En este
caso mostrará PIC16F876.
• “Verify After Programming”, verificar después de programar.
• “Load File Before Programming”, cargar el archivo antes de
programar. Loader Serial Port
• “Run User Code After Programming”, ejecutar el código o programa Mediante esta caja de texto, se selecciona el puerto de comunicaciones a utilizar
del usuario después de programar al microcontrolador. por el programa MicroCode Loader y es donde físicamente estará conectado el
• “Program Code”, programar sólo el área código de programas. microcontrolador PIC®. Es importante seleccionar correctamente el puerto serial a
• “Program Data”, programar sólo la memoria Eeprom. utilizar, si esto no se realiza el programa MicroCode loader presentará en mensaje
de error.

Read El puerto de conexión serial a utilizar debe coincidir con el que previamente se
Al presionar el botón de leer, el programa MicroCode Loader leerá tanto la seleccionó para la conexión del sistema iBOARD III. Como referencia puede ve la figuras
memoria de programación como los registros de la Eeprom del microcontrolador 2.4 de este manual.
utilizado.

Verify

Mediante esta opción se puede comparar el código interno del microcontrolador


(área de programa y Eeprom) con el mostrado en la pantalla del programa
MicroCode Loader. Si la verificación es correcta ambos códigos deberán coincidir.
Nota: se puede también realizar la verificación del área de programas y de la
memoria Eeprom por separado utilizando las opciones “Verify Code y Verify Data”.

Erase
Al presionar el botón de borrar (Erase) se borrará toda la información contenida
en el microcontrolador PIC, tanto en el área del código de Programa como en la
Memoria Eeprom.

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


15
CAPÍTULO 5
EL MICROCONTROLADOR PIC

Es un chip (Circuito integrado) que contiene un computador 5.1. Clasificación de los microcontroladores según el bus de datos (bits)
completo junto a diversos recursos auxiliares con prestaciones y
capacidades limitadas, de muy bajo costo y tamaño reducido. Microcontroladores de 4 bits:
Son los más sencillos en todos los aspectos técnicos y prestaciones asociadas, de muy
• Es un sistema digital cerrado bajo costo. Se fabrican en grandes volúmenes y sus aplicaciones típicas: pequeños
• RAM de poca capacidad interna (bytes ó Kb) automatismos y juguetería
• Memoria de programa pequeña (algunos Kb)
• No se requiere de decodificadores de E/S o de memoria Microcontroladores de 8 bits:
• Velocidad de operación de algunos MIPS
• Orientados a operaciones de E/S Son los más utilizados en la actualidad, gran diversidad y versatilidad. Los PIC® son
• Costo de desarrollo e implementación reducido los microcontroladores de 8 bits más usados por el mercado mundial, con más de 2000
• Muy fáciles y sencillos de utilizar millones de unidades vendidas/año. Se aplican generalmente en todos los automatismos
• Circuitos simples y tendencia a la modularidad modernos y sistemas simples de control, electrodomésticos, máquinas y herramientas y
• Por lo general dan cabida a un sólo programa y el soporte en las áreas de la instrumentación digital entre otras.
de tareas múltiples (de existir), es limitado
• Dos o tres modos de direccionamiento Microcontroladores de 16 bits:
• Casi todos son RISC Prestaciones superiores a los microcontroladores de 8 bits. Se aplican típicamente en
• Tiempo de aprendizaje/desarrollo reducido el procesamiento digital de señales. La casa microchip™ fábrica las series PIC24xx y los
• Para el Año 2002 se habían vendido 49.000 Millones de piezas. dsPIC33xxx.
• En el año 2008 la empresa Microchip™ fue líder mundial en Ventas
Microcontroladores de 32 bits:
Mas complejos y costosos. Algunas características similares a un microprocesador. Se
dedican a proyectos muy avanzados. Aplicaciones típicas: inteligencia artificial,
aplicaciones militares y almacenamiento masivo de datos.

5.2. Lenguajes de programación más utilizados con los microcontroladores

• Ensamblador, “asembler”
• Lenguaje C, C++
• Basic®, MBASIC®, PBASIC®
• PASCAL
• JAVA

Figura 5.1. Familia de microcontroladores fabricados por Microchip™. Figura 5.2. Compiladores más utilizados en la actualidad.
Fuente: Tomado del “site” del fabricante www.microchips.com Fuente: Tomado de la páginas web de los fabricantes.

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


16
5.3. Microcontroladores “Boot Loaders”
5.4. Características Principales del PIC 16F876
Como se explicó en la sección 4.8. de este manual, los microcontroladores
PIC16F87x(A) y PIC18Fxxx(x) pueden escribir su propia memoria de programa • Procesador RISC de sólo 35 instrucciones
(Flash) sin necesidad de utilizar un programador externo, esto es sin duda una • Toda las instrucciones tienen la misma duración (1 ciclo)
“ventaja”, sin embargo, a estos microcontroladores inicialmente hay que cargarles salvo los saltos que demoran dos ciclos 1 ciclo = 4 pulsos reloj
un pequeño código de programa denominado “boot loader”, el cual, permite que • Velocidad de operación máxima 20 MHz
tanto el código del programa de usuario como el valor de los registros en EEprom • Hasta 8K x 14 words de FLASH Program Memory
transmitidos al microcontrolador desde un puerto de comunicación serial y/o USB, • Hasta 368 x 8 bytes de Data Memory (RAM)
sean efectivamente almacenados en dicho microcontrolador. Existen en el mercado • Hasta 256 x 8 bytes de EEPROM para datos
actual diferentes fabricantes de Microcontroladores “Boot Loader” como: Parallax™, • 14 fuentes de interrupción seleccionables en forma independiente
Basic® Micro ATOM®, BASICX®, PicAXE®. • Stack de ocho niveles
• Tres modos de direccionamiento: Directo, indirecto y relativo
Básicamente un microcontrolador “boot loador” constituye un contrato de servicio • Power-on Reset (POR)
entre el fabricante y el usuario. El usuario compra al fabricante el microcontrolador con el • Power-up Timer (PWRT)
firmware “boot loador” precargado y el fabricante le permite utilizar a cambio, toda la • Oscillator Start-up Timer (OST)
plataforma de hardware y software desarrollada para este microcontrolador. Entre los • Watchdog Timer (WDT) con oscilador interno RC
programas generalmente disponibles por el fabricante se encuentran: editores de texto, • Protección de código programable medio código o completo
compiladores, rutinas gráficas y de comunicación serial entre otras. • Modo SLEEP para ahorro de energía
• Fuente de reloj seleccionada por software
El iBOARD III, también utiliza un microcontrolador tipo “boot loador”. El PIC16F876 • Programación en circuito “In-Circuit Serial Programming (ICSP)”
que viene incluido en el sistema iBOARD III, fue inicialmente preprogramado con un • In-Circuit Debugging utilizando dos pines de conexión
firmware, el cual, le permite a usted, cargar sus programas infinitas veces sin necesidad • Acceso a la memoria de programa desde el procesador en tiempo
de que tenga que comprar un costoso programador. Por otra parte, todos los programas de ejecución para una lectura y/o escritura de datos
actuales y futuros que realice el fabricante estarán disponibles sin costo adicional para ser • Voltaje de operación desde 2.0V to 5.5V
utilizados sin limitaciones por el iBOARD III. Actualmente el fabricante está desarrollando • Capacidad de drenar/sumir corriente de 25 mA (FAN OUT/FAN IN)
una completa plataforma de programación denominada iLOADER, la cual, le permitirá • Consumo de energía: < 2 mA @ 5V, 4 MHz
además de programar, leer, escribir y verificar sus programas en el microcontrolador, 20 uA @ 3V, 32 kHz
utilizar un interfaz gráfico denominado UART/SCOPE y un servidor de datos OPC™ < 1 uA en modo de reposo (sleep)
herramienta de avanzada prestaciones que le permitirá realizar intercambio de
información entre el microcontrolador PIC® y cualquier programa con capacidad de
comunicación OPC™, tales como: Excel®, VB6®, Visual Studio.NET™, Delphi® y Java™.

Una ventaja de la iBOARD III, es que el fabricante entrega, sin costo adicional, el
código “boot loador” para el PIC16F876 utilizado. Así, si usted llegara a cambiar el
PIC16F876 que viene incluido en la unidad por otro virgen, no necesitará pagar por éste
firmware, sin embargo, necesitará un programador para PIC® a fin de que pueda
programar inicialmente el firmware “boot loador” al nuevo PIC®. Para realizar ésta
actividad, el fabricante recomienda utilizar los programadores de la casa matriz tanto por
puerto serial iP3 ó iP3B como por puerto USB como el iPROG18. Figura 5.3. Fotografía del PIC16F876 28 pines Dip 0.3”.
Fuente: Tomado de www.microchip.com

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


17
5.5. Anatomía de un microcontrolador PIC®

En la figura 5.4., se muestra el diagrama funcional interno de un microcontrolador Dentro de los periféricos de un microcontrolador se encuentran:
PIC®. Básicamente el corazón del microcontrolador lo constituye la unidad central de
procesamiento CPU y el bloque de memorias tanto RAM como memoria de programa • Timers T0, T1 y T2
donde se almacena el código del programa a ejecutar. En el bloque de memoria, se • Convertidor analógico a digital (ADC)
encuentra un sub-bloque denominado SFR, el cual, representa a los registros internos • Módulo de captura y comparación (CCP)
del microcontrolador. Todo, absolutamente todo lo que queremos que el • Módulo de PWM
microcontrolador haga, se realiza a través de la modificación de los registros internos • Módulo de comunicación serial SPI, I2C y UART
SFR. El bloque de alimentación por su parte, se encarga de suplir la energía utilizada por
el sistema, mientras que el bloque de osciladores, se encarga de suplir la señal de reloj
sincrónica al CPU para la ejecución secuencial de las instrucciones contenidas en el
bloque de memoria de programa.

Figura 5.4. Anatomía de un microcontrolador PIC16F886/887.


Fuente: Tomado de www.mikroe.com

La entrada – salida entre el microcontrolador y el mundo exterior se realiza a través


de los puertos (E/S) en el caso particular del microcontrolador mostrado en la figura 5.4.,
existen cinco puertos denominados PORTA, B, C, D y E. Los puertos de entrada salida
representan los pines de conexión del microcontrolador con el mundo exterior.
Internamente el microcontrolador posee periféricos con funciones específicas, estos
periféricos son autónomos, lo que significa, que no necesitan utilizar ciclos de reloj del
CPU para su funcionamiento, sin embargo, el CPU es el encargado de inicializarlos y de
acceder a su lógica y valores internos mediante la lectura y/o escritura de sus registros, Figura 5.5. Arquitectura de un microcontrolador PIC®.
los cuales, como se indicó anteriormente, se encuentran representados en el bloque de Fuente: Manual técnico del PC16F876.
memoria SFR.

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


18
5.6. Arquitectura del PIC16F876

A fin de poder entender en forma rápida el funcionamiento del PIC®, se hará


referencia a la arquitectura del mismo mostrada en la Figura 5.5. El PIC16F876 posee
una arquitectura tipo HARVARD, lo cual, supone una independencia entre el bus de
código y el bus de datos. Ahora bién, un bus es un canal de comunicaciones que puede
tener muchas líneas, en nuestro caso hablamos de una línea por bits. Se podría hacer
una analogía eléctrica entre un bus y un cable, ya que ambos se utilizan como medios de
interconexión. En el PIC16F876 el bus de código tiene una longitud de 14 bits máximo,
sin embargo, el contador de programa que direcciona a la memoria de programación es
de tan sólo 13 bits, razón por la cual, no existirán PIC® de la serie 16F que puedan tener
una memoria de programa superior a 213 = 8192 Bytes.

El bus de datos por su parte, es siempre de 8 bits (al menos en los PIC 16Fxx) y es el
bus representado en color rojo en la Figura 5.5. Todos los periféricos se conectan al CPU
sólo a través del bus de datos.

5.7. Organización de la memoria de programación del PIC16F876

La Memoria FLASH es donde se almacena el programa de aplicación del


microcontrolador y tiene las siguientes características:

Memoria
Flash

• Posee una capacidad de 8K palabras de 14 bits cada una.


• Está dividida en páginas (bloques) de 2K cada uno.
• Se direcciona a través del “Program Counter” PC.
• Tiene asociado un “Stack” o pila que funciona en forma automática, no hay
instrucciones disponibles para guardar o sacar información del Stack, el cual,
tiene ocho niveles de profundidad.
• La primera dirección de la memoria FLASH (0000h), la ocupa el vector de
RESET.
• La siguiente dirección disponible la (0004h) la ocupa el vector de
interrupciones.
• El espacio entre la dirección 0005h y 1FFFh está disponible para los códigos del
programa. Figura 5.6. Organización de la memoria de Programa de un
microcontrolador PIC16F876.
Fuente: Manual técnico del PC16F876®.

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


19
5.8. Organización de la memoria de datos del PIC16F876

La Memoria de datos utiliza registros implementados en la RAM. En la RAM se alojan


todos los registros destinados al funcionamiento del procesador, manejo de los
periféricos, E/S y registros de propósito general, los cuales, pueden ser utilizados por el
programador como memoria de uso general.

Memoria
RAM

La Memoria RAM costa de cuatro bancos con 128 bytes cada uno. Para seleccionar el
banco que se desee acceder de la RAM, se emplean los Bits No. 6 y 5 del Registro de
Estatus, los cuales se denominan <RP1><RP0>. La selección del banco se realiza
según el código siguiente:

Cada bloque de memoria RAM posee una longitud fija de 128 registros de 8 bits cada
uno. Todos los registros especiales y periféricos tienen una localidad específica e
invariable dentro de la memoria RAM. En cada ciclo de ejecución estos registros se
actualizan de esta forma el usuario puede consultar en cada momento cual es el valor de
los mismos. Importante, como se ha mencionado anteriormente: TODO lo que se
realiza en el microcontrolador, todo sin excepción queda reflejado en estos registros. Al
mismo tiempo, cualquier cosa que el usuario desee hacer sobre el microcontrolador
tendrá que hacerlo leyendo o escribiendo en estos registros.

Figura 5.7. Representación de los cuatro bloques de la memoria RAM, cada bloque
contiene los registros SFR y existe un espacio de propósito general disponible
al usuario de 384 Bytes. Fuente: Manual técnico del PC16F876.

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


20
5.9. El registro de Estatus

Fuente: Fuente: Tomado de www.mikroe.com

Contiene los bits de status de la ALU (Unidad Aritmética y Lógica), del RESET y los
bits de selección <RP1><RP0> de los bancos de memoria. Es el registro más utilizado
de todos y sus bits están destinados a controlar las funciones esenciales del
microcontrolador, por ello, se encuentra ubicado en las cuartas posiciones de cada banco
de memoria. (03h, 83h, 103h y 183h).

• ALU: Referido a operaciones aritméticas y lógicas.

• Z: Señalización de cero (0)


• DC: Acarrero y débito del 4to. Bit
• C: Acarreo y débito del 8vo. bit
• RESET: Referido al tipo de re-inicialización
• BANCOS MEMORIA: Los últimos tres bits del registro de Status de mayor peso, se
utilizan para seleccionar el banco de memoria al cual se quiere acceder. Los bits 6 y
5 del registro de status pueden tener la codificación mostrada en la siguiente tabla.

Figura 5.8. Descripción de los bits independientes del registro de estatus.


Fuente: Manual técnico del PC16F876.

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


21
5.10. El registro de Opciones

Es uno de los registros más utilizados, como su nombre lo indica, éste registro permite seleccionar una serie de opciones disponibles para la configuración del hardware en el
microcontrolador PIC®. Es un registro de 8 bits y cada bit controla una función en el microcontrolador. Por ejemplo:

Bit 7, RBPU: Habilita o no las resistencias de pull_up internas del puerto B del microcontrolador.
Bit 6, INTEDG: Selecciona el flanco para la ocurrencia de una interrupción.
Bit 5, T0CS: Selecciona la fuente de reloj para el TMR0 (interna y/o externa).
Bit 4, T0SE: Selecciona el flanco para el incremento del TMR0.
Bit 3, PSA: Selecciona si el pre-escalador será aplicado al TMR0 o al WDT.
Bit2 al Bit0: Selecciona la magnitud del pre-escalador.

Figura 5.9. Registros de opciones de un PIC16F876.


Fuente: Tomado de www.mikroe.com

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


22
5.11. El registro de Interrupciones

INTCON: Es un registro de lectura y escritura, el cual, contiene varios bits de habilitación y bandera para el TMR0, cambios de estado en el puerto B e interrupciones
externas por el pin RB0/EXT. Se encuentra duplicado en los cuatro bancos de memoria, ocupando las direcciones: 0Bh, 8Bh, 10Bh y 18Bh.
Fuente: Fuente: Tomado de www.mikroe.com
INTERRUPCIÓN: Ante una interrupción, se guardará el valor del program counter
PC en el Stack o pila y se cargará el “PC” con el valor 0004h, que es el vector de
interrupción. La mayoría de los periféricos incluidos en el microcontrolador son
capaces de interrumpir al CPU, cuando ello ocurre, se desencadenan los siguientes
eventos:

1. El microcontrolador termina de ejecutar la instrucción en curso (actual).


2. Se para la secuencia de ejecución regular del programa.
3. El contenido del “Program Counter” se almacena en el stack.
4. Se carga en el “Program Counter” la dirección de la rutina de interrupción.
5. Se ejecuta la rutina de interrupción y se disminuye en un nivel el contenido del stack
6. Se carga de nuevo en el “Program Counter” el valor de retorno guardado
anteriormente en el stack.
7. Se continúa con la ejecución normal del programa antes de la interrupción.

Figura 5.10. Eventos desencadenados ante la ocurrencia de una interrupción.


Fuente: Tomado de www.mikroe.com Figura 5.11. Función de los bits independientes del registro de interrupciones.
Fuente: Manual técnico del PC16F876.

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


23
5.12. Interrupciones en el microcontrolador PIC16F887

Figura 5.12. Diferentes fuentes de interrupciones para el PIC16F886/887.


Fuente: Fuente: Tomado de www.mikroe.com

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


24
5.13. Entrada – Salida Digital

Introducción. Para intercambiar información con el mundo exterior, un


microcontrolador necesita de un conjunto de periféricos que sean capaces de traducir un Señal analógica
evento en una señal eléctrica de niveles lógicos entendibles, es decir, binarias. Este tema
muestra algunos de los componentes más simples del sistema de desarrollo, enseñándole Es aquella señal que puede tomar infinitos valores posibles
entre dos límites, por lo cual, se denominan continuas.
a trabajar con entradas y salidas digitales por medio de los periféricos más utilizados en
aplicaciones basadas en microcontroladores.

De acuerdo a la naturaleza de una señal, esta puede ser analógica o discreta. El Señal digital
microcontrolador PIC16F876 es capaz de interpretar ambas, sin embargo, el estudio de
las señales analógicas se verá más adelante. Los microcontroladores PIC16F876 disponen Es aquella señal que puede tomar un número finito de
de tres (03) puertos de entrada/salida (A,B y C) todas las líneas de estos puertos realizan valores entre dos límites. Si utilizamos lógica booleana será
diversas funciones según estén programadas, sin embargo, todas ellos tienen la Cero (0) y el Uno (1).
capacidad de trabajar como entradas/salidas binarias.

Figura 5.13. Representación gráfica de una señal analógica y digitales.

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


25
Puerto B, bit 7 -> como salida digital
5.14. Puertos de Entrada/Salida (E/S): Los microcontroladores PIC16F876 disponen Puerto B, bit 6 -> como salida digital
de tres (03) puertos de entrada/salida (A,B y C) todas las líneas de estos puertos realizan Puerto B, bit 5 -> como salida digital
diversas funciones según su programación, sin embargo, todos ellos tienen la capacidad Puerto B, bit 4 -> como salida digital
de trabajar como entradas/salidas digitales y/o binarias. En la figura 5.14, se observan los Puerto B, bit 3 -> como entrada digital
tres puertos mencionados. Puerto B, bit 2 -> como entrada digital
Puerto B, bit 1 -> como entrada digital
Puerto B, bit 0 -> como entrada digital

La nomenclatura utilizada por Microchip™ es: TRISB <7:4> = 0; TRISB <3:0> = 1,


mientras que la nomenclatura utilizada por el compilador Basic® Proton® es: PORTB =
%00001111 para configurar todos los bits del puerto: TRISB.7 = 0; TRISB.6 = 0;
TRISB.5 = 0; TRISB.4 = 0; TRISB.3 = 1; TRISB.2 = 1; TRISB.1 = 1; TRISB.0 = 1, para
configurar los bits individuales del registro TRIS.

Figura 5.14. Puertos de entrada – salida digital de un PIC16F876.


Fuente: Fuente: Tomado de www.mikroe.com
Figura 5.15. Registros asociados a la entrada – salida digital en un PIC16F876.
Ahora bien, ¿Como podemos tener acceso a estos puertos A,B y C?. La respuesta
ya la hemos dado anteriormente. Todo lo que queremos hacer con el El registro PORT, es el encargado de establecer el valor lógico y eléctrico de salida de
microcontrolador, se tiene que realizar a través de la modificación de los cada pin en el puerto del microcontrolador. Cuando el registro PORTB = 0; todos los
valores de los registros. En el caso específico de la entrada – salida digital, existen un pines del puerto B tomarán el valor lógico cero, lo que significa que la tensión de salida
par de registros asociados a cada puerto, ellos son como se muestran en la Figura 5.15. en cada pin estará cercana a los cero voltios. Si por el contrario PORTB = $FF, todos los
El registro TRIS y el registro PORT. El registro TRIS es el encargado de configurar al pines del puerto B tomarán el valor lógico 1, lo que significa que la tensión de salida en
puerto como entrada ó salida digital, por ejemplo: TRISA = 0; TRISB = 0; TRISC = 0 -> cada pin estará cercana a la tensión de alimentación del microcontrolador. Los bits que
configurará a los puertos A,B y C como salidas digitales, mientras que TRISA = $FF, conforman al registro PORT son independientes entre si, lo cual, permite que tengan
TRISB = $FF y TRISC = $ FF -> configurará a los puertos A, B y C como entradas valores lógicos diferentes en cualquier momento.
digitales.
Si el puerto se configura como una entrada digital, por ejemplo TRISB = $FF,
También podemos configurar en forma aleatoria los bits individuales de cada puerto; entonces el registro PORTB contendrá el valor lógico de entrada en cada pin del puerto B
Esto se logra asignando al registro TRIS valores diferentes para cada bits. Por ejemplo: asociado en cada momento.
TRISB = %00001111 configurará al puerto B como:
Sistema de desarrollo para microcontroladores PIC®, iBOARD III.
26
CAP_05_Ejemplo_01.bas (Entrada – Salida Digital). Segundo Paso:
Ubicar en que puerto está conectado el pulsador “S0”. Para ello hacemos referencia a
Utilizando el sistema de desarrollo iBOARD III, desarrolle un programa que permita la figura 5.18, en la cual, se observa que los pulsadores del sistema de desarrollo “S3”,
encender el LED “L0” al presionar el pulsador “S0” . “S2”, “S1” y “S0” están conectados al puerto A del microcontrolador PORTA<3:0>. Se
puede deducir de la figura 5.18. que el pulsador “S0” efectivamente está conectado a
PORTA<0>. Adicionalmente se observa que cuando el pulsador esta en estado inactivo
(abierto) el nivel de tensión aplicado a PORTA<0> es cercano a los cero voltios, mientras
que cuando el pulsador se presiona (estado activo) el nivel de tensión aplicado a
PORTA<0> estará cercano al voltaje de alimentación del microcontrolador 5 Vdc.

Figura 5.16. Sistema de desarrollo iBOARd III.

Primer Paso:
Ubicar en que puerto está conectado el LED L0. Para ello hacemos referencia a la figura
1.3., donde se muestra el diagrama de conexiones electrónicas entre los LED’s y los Figura 5.18. Conexión de pulsadores del sistema de desarrollo iBOARD III.
puertos del microcontrolador. La figura 5.17. es una síntesis de la conexiones entre los
LED’s y el puerto C. Efectivamente el LED “L0” está conectado al puerto C bit2. Este tipo de conexión de los pulsadores se denomina Activa Alta, lo que significa que
Podemos entonces decir que el LED “L0” esta ubicado en PORTB<2>, en serie con una cuando se activa el pulsador, el nivel de tensión obtenido en el punto de conexión al
resistencia limitadora de corriente de 220 OHM y un mini switch normalmente abierto microcontrolador, es un voltaje con un nivel lógico alto.
(SW1-4), el cual, previamente tendremos que cerrar para conectar el cátodo del led a
tierra y de esta forma cerrar el circuito eléctricamente. Tercer Paso:
Crear un algoritmo. Por ejemplo:

Si el pulsador S0 “está presionado” entonces el led L0 deberá estar “encendido”


Si el pulsador S0 “no está presionado” entonces el led L0 deberá estar “apagado”

Estas variables lingüísticas se pueden asociar a valores del puerto, por ejemplo:

“está presionado” es equivalente a: PORTA<0> = 1 y


“no está presionado” es equivalente a: PORTA<0> = 0, al mismo tiempo
Figura 5.17.
Conexión de LED’s al iBOARD III.
“encendido” es equivalente a: PORTC<2> = 1 y
“apagado” es equivalente a: PORTC<2> = 0

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


27
Cuarto Paso: CAP_05_Ejemplo_02.bas (Entrada – Salida Digital).
Codificación. Utilizaremos el Basic® PROTON® para escribir nuestro programa:
Utilizando el sistema de desarrollo iBOARD III, desarrolle un programa que permita
' CAP_05_Ejemplo_01.bas encender los LED “L0” a “L3” cuando se presionan los pulsadores correspondientes “S0” a
' Ejemplo básico de utilización del sistema iBOARD III “S3”. Este es una extensión del programa anterior. Veamos su codificación:
' Encender el led L0 al presionar el pulsador S0
' ------------------------------------------------------------------- ' CAP_05_Ejemplo_02.bas
Device = 16F876 ' Define el microcontrolador utilizado ' Ejemplo básico de utilización del sistema iBOARD III
ALL_DIGITAL = True ' Define todos los puertos como digitales ' Encender el led L0 a L3 al presionar el pulsador S0 al S3
XTAL = 20 ' Define la velocidad del resonador ' -------------------------------------------------------------------
Device = 16F876 ' Define el microcontrolador utilizado
TRISA.0 = 1 ' Configura a PORTA.0 como Entrada Digital ALL_DIGITAL = True ' Define todos los puertos como digitales
TRISC.2 = 0 ' Configura a PORTC.2 como Salida Digital XTAL = 20 ' Define la velocidad del resonador

Main: TRISA.0 = 1 ' Configura a PORTA.0 como Entrada Digital


PORTC.2 = PORTA.0 ' Asigna al puerto PORTC.2 de Salida el TRISA.1 = 1 ' Configura a PORTA.1 como Entrada Digital
' valor de entrada al puerto PORTA.0 TRISA.2 = 1 ' Configura a PORTA.2 como Entrada Digital
DelayMS 100 ' Retardo de 100 ms TRISA.3 = 1 ' Configura a PORTA.3 como Entrada Digital
GoTo Main
End TRISC.2 = 0 ' Configura a PORTC.2 como Salida Digital
TRISC.3 = 0 ' Configura a PORTC.3 como Salida Digital
TRISC.4 = 0 ' Configura a PORTC.4 como Salida Digital
Quinto Paso:
TRISC.5 = 0 ' Configura a PORTC.5 como Salida Digital
Pruebas Operativas.
Main:
PORTC.2 = PORTA.0 ' Asigna a PORTC.2 el valor de PORTA.0
PORTC.3 = PORTA.1 ' Asigna a PORTC.3 el valor de PORTA.1
PORTC.4 = PORTA.2 ' Asigna a PORTC.4 el valor de PORTA.2
PORTC.5 = PORTA.3 ' Asigna a PORTC.5 el valor de PORTA.3

DelayMS 100 ' Retardo de 100 ms


GoTo Main
End

End

Figura 5.19. Fotografía de la iBOARD III ante la ejecución


del programa CAP_05_Ejemplo_01.bas Figura 5.20. Fotografía de la iBOARD III ante la ejecución del programa
CAP_05_Ejemplo_02.bas

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


28
5.15. Comandos en alto nivel para el manejo de puertos de E/S
PULSIN: Mide el ancho de un pulso presente en un pin y su valor en tiempo lo almacena
HIGH: Configura el puerto y/o el pin especificado como salida y lo coloca a uno lógico. en una variable: Sintaxis:
Es equivalente a hacer un TRIS del puerto y luego un PORT.
Sintaxis: HIGH pin, donde pin es cualquier bit de los puertos A,B ó C. Variable = PULSIN Pin, Estado

LOW: Configura el puerto y/o pin especificado como salida y lo coloca a cero lógico. Pin: Es una variable ó constante que indica cual pin de E/S será utilizado, el mismo será
Es equivalente a hacer un TRIS del puerto y luego un PORT. convertido en entrada. Estado: (0,1) (Low/High) es el flanco requerido para empezar la
Sintaxis: LOW pin, donde pin es cualquier bit de los puertos A,B ó C. cuenta. Variable: Variable que almacena el resultado de la operación.

TOGGLE: Configura el pin especificado como salida y lo cambia de estado lógico. Nota: Para un resonador de 20 MHz, el conteo de PULSIN se realizará en intervalos de
Sintaxis: TOGGLE pin, donde pin es cualquier bit de los puertos A,B ó C. 2us. El rango de PULSIN será entre 1 y 65535.
No se acepta Toggle de un puerto completo, sólo de un Pin.

INPUT: Configura el puerto y/o pin especificado como entrada. PULSEOUT: Genera un pulso de una duración especificada en un terminal de E/S.
Es equivalente a hacer un TRIS del puerto. Sintaxis:
Sintaxis: INPUT pin, donde pin es cualquier bit de los puertos A,B ó C. PULSOUT Pin, Período, Estado Inicial

OUTPUT: Configura el puerto y/o pin especificado como salida. Pin: Es una variable ó constante que indica cual pin de E/S será utilizado, el mismo será
Es equivalente a hacer un TRIS del puerto. convertido en salida. Período: Es una variable, constante o expresión de (4 – 65535) us
Sintaxis: OUTPUT pin, donde pin es cualquier bits de los puertos A,B ó C. que especifica la cantidad de tiempo en micro-segundos que durará el pulso.

COUNTER: Cuenta el número de ciclos (0-1-0) que ocurren en un pin de entrada/salida


durante un período de tiempo especificado. Se utiliza para determinar frecuencias de
señales, trenes de pulsos generalmente de onda cuadrada. Sintaxis:

Variable = COUNTER Pin, Período

Pin: Variable, constante o expresión que indica cual pin de E/S será utilizado, el mismo
será convertido en entrada. Período: Variable, constante o expresión de (0-65535)ms
que especifica el tiempo durante el cual, se hará el conteo. Variable: Variable que
almacena el resultado de la cuenta.

Figura 5.21.
Representación gráfica del
comando COUNT.
Figura 5.22.
Representación gráfica del comando PULSOUT.

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


29
FREQOUT: Genera uno o dos tonos sinusoidales de un periodo de tiempo específico,
usando un algoritmo de modulación de ancho de pulso. En caso de ser dos tonos, estos SOUND2: Genera uno ó dos tonos por los pines seleccionados, es más completa que la
se mezclaran a través del pin especificado, para de esta forma, generar un único tono. instrucción sound. Sintaxis:
Sintaxis:
SOUND2 Pin1, Pin2, [Nota1\ Nota\ Duración]
FREQOUT Pin, Período, Freq1 {,Freq2}
Pin1,2: Variable, constante o expresión que especifica los pines de E/S. Estos serán
Pin: Variable, constante o expresión que especifica el pin de E/S usado. Este será configurados como salida. Nota1,2: Una variable o constante que especifica su valor en
configurado como salida. Período: Variable, constante o expresión de 0 a 65535. Hz en el rango de (0..16000) Hz. Duración: Variable, constante o expresión de 16 bits
Especifica el periodo de tiempo que dura el tono generado. Freq1: Variable, constante o que especifica la duración de la nota en intervalos de 1ms.
expresión de 0 a 32767. Especifica la frecuencia en Hz del primer tono generado. Freq2:
Variable, constante o expresión de 0 a 32767. Especifica la frecuencia en Hz del segundo RCIN: Se utiliza generalmente para medir períodos de tiempos muy cortos como la carga
tono generado. / descarga de un circuito RC a través de un pin de E/S. Sintaxis:

Variable = RCIN Pin, Estado


Los tonos son generados en forma matemática a través de la modulación del ancho
de pulso sinusoidal que veremos más adelante, sin embargo, con la utilización de un Pin: Es una variable ó constante que indica cual pin de E/S será utilizado. Estado: Es
pequeño filtro pasa bajo usted podrá general ondas sinusoidales por cualquier pin de E/S. una variable ó constante de 1 bit (0 ó 1) que especifica el estado en el cual terminará el
Esta conexión se puede visualizar a través de la figura 5.23. período de tiempo, nivel lógico cero ó nivel lógico uno. Variable: Es una variable que
almacena el tiempo en micro segundos, en el cual, ocurrió el cambio de estado de nivel
del pin especificado. Resolución para 20 MHz igual a 2us.

Cuando RCIN se ejecuta, se comienza a incrementar un contador. El contador se


parará tan pronto el estado del pin cambie de valor con respecto al valor especificado
(0,1). RCIN retornará un valor que será almacenado por la variable .

Figura 5.23. Esquema de conexiones de un filtro pasa bajos utilizado por el comando FREQOUT
para la generación de ondas sinusoidales.
Figura 5.24.
Esquema de conexiones utilizado con el comando RCIN.
SOUND: Genera uno tono o ruido blanco por el pin seleccionado. Sintaxis:

SOUND Pin, [Nota, Duración] RCIN, puede ser utilizado para medir el valor de resistencias y/o condensadores. Un uso
muy común es leer el valor de un potenciómetro resistivo. Cuando se desee utilizar este
Pin: Variable, constante o expresión que especifica el pin de E/S usado. Este será comando, se deberán realizar las siguientes acciones: (1) Colocar el pin de E/S como
configurado como salida. Nota: Un valor de 8 Bits (0..127) el (0) equivale a silencio, el salida y con un nivel lógico alto. (2) Esperar suficiente tiempo para que el condensador se
(1) Equivale a 78 Hz y el (127) Equivale a 10KHz y entre (128..255) se obtendrá ruido cargue, aprox. 4 constantes de tiempo = (4xRxC) seg. (3) Ejecutar el comando RCIN. El
blanco. Duración: Variable, constante o expresión de 8 bits que especifica la duración cual, configurará al pin seleccionado como una entrada y medirá el voltaje del
de la nota en intervalos de 10ms. condensador sobre el pin, el cual, se estará descargando a través de la resistencia. El
tiempo en que demora el pin de pasar de un estado lógico (1) al estado lógico (0) se
almacenará en la variable resultado, así conociendo este tiempo podemos decir:
RCIN (units) = 600 x R (Kohm) x C (uF)

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


30
5.16. Comandos en alto nivel para el manejo de Interrupciones
CAP_05_Ejemplo_ 03.bas (Interrupción externa por RB0/EXT).
ENABLE, DISABLE: Habilita o deshabilita una ó todas las interrupciones.
Utilizando el sistema de desarrollo iBOARD III, desarrolle un programa que permita
Sintaxis:
utilizar interrupciones en el microcontrolador. El programa principal hará que un LED
• Enable
conectado en PORTC<5> encienda en forma intermitente, mientras que la rutina de
• Disable
interrupción hará que un LED conectado en PORTC<2> encienda y apague cada vez que
presione un pulsador externo, el cual, será colocado en el pin PORTB.0 que es
Estos comandos actuarán sobre la habilitación y/o des-habilitación global del registro
precisamente el pin de activación de interrupción externa. No se había hasta ahora hecho
INTCON bit <GIE>.
un programa que mostrara como trabajan las interrupciones, sin embargo, ya que
conocemos las herramientas básicas del manejo de entrada salida digital, es hora de
ON INTERRUPT Label: Salta la ejecución del programa a la rutina de interrupción
desarrollar nuestro primer programa con interrupciones.
especificada por la etiqueta Label.
Para el montaje electrónico se necesitará de un pulsador normalmente abierto
RESUME: Finalización de la rutina de interrupción, devuelve el programa al punto de
adicional a los que vienen incluidos en el sistema de desarrollo iBOARD III. Este pulsador
ejecución previa antes de que ocurriera la interrupción.
deberá conectarse entre el pin PORTB<0> y tierra (GND), tal como es mostrado en la
Figura 5.26.
Antes de hacer un ejercicio práctico, vamos a definir algunos conceptos utilizados con
las interrupciones:

Fuente de interrupción: Recurso, elemento o dispositivo que está en capacidad de


producir una interrupción.

Interrupción: Es el evento ocasionado y que debe ser atendido.

Rutina de interrupción (ISR): Es el segmento de código que se ejecuta al ocurrir la


interrupción y que debe observar el manejo de la misma. Por ejemplo, guardar algunas
variables, efectuar una acción de corrección, emitir algún tipo de indicación o alarma,
etcétera.

Habilitación de la interrupción: Para que la interrupción pueda ocurrir, hay que


asegurarse que la habilitación de la interrupción deseada este activa.

Interrupciones recurrentes: Son aquellas que pueden ocurrir dentro de su propia


ISR. El microcontrolador PIC no permite este tipo de interrupciones, de ocurrir, conducen
a que se quede “colgado” teniendo que producirse un “Reset” para salir de esta
condición.

Interrupciones anidadas: Dos fuentes de interrupción pueden, de forma simultanea o


no, producir una interrupción.
Pulsador NA. conectado
entre PORTB<0> y GND

Figura 5.25.
Mecanismo de activación ante la ocurrencia de
Figura 5.26. Fotografía de las conexiones necesarias para la colocación del pulsador
una interrupción. Fuente: Tomado de
NA, el cual, será utilizado como generador de una interrupción externa.
www.mikroe.com

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


31
REGISTRO DE INTERRUPCIONES: INTCON
' CAP_05_Ejemplo_03.bas
' Ejemplo básico de utilización de interrupciones
' El LED conectado en PORTC<5> parpadeará en forma intermitente,
' mientras que el LED conectadoen PORTC<2> cambiará de estado
' cuando se presiona el pulsador que está colocado en PORTB<0>.
' -------------------------------------------------------------------
Device = 16F876 ' Define el Micro a Utilizar
ALL_DIGITAL = True ' Configura Puertos como digitales Fuente: Fuente: Tomado de www.mikroe.com
XTAL = 20 ' Define velocidad resonador
REGISTRO DE OPCIONES
' DEFINICIÓN DE CONSTANTES Y SIMBOLOS Bit 7, OPTION<7>
' -------------------------------------------------------------------
Symbol INTE = INTCON.4 ' Bit Habilit. Interrupciones por RB0
Symbol INTF = INTCON.1 ' Bit Flag Interrupciones por RB0
Symbol PULL = OPTION_REG.7 ' Bit Habilit. Resist. Pull_Up Pto. B
Symbol L3 = PORTC.5 ' Asigna el LED L3 al PORTC.5
Symbol L0 = PORTC.2 ' Asigna el LED L0 al PORTC.2

' DEFINICIÓN DEL MANEJADOR DE INTERRUPCIONES


' -------------------------------------------------------------------
On Interrupt GoTo SUB_INT ' Cuando ocurre una interrupción va a la
' subrrutina "SUB_INT"
PULL = 0 ' Habilita las resist. de Pull_UP Pto. B
INTE = 1 ' Habilita la Interrupción por RB0

' PROGRAMA PRINCIPAL.


' -------------------------------------------------------------------
Main:
Toggle L3 ' Hace parpadear el L3 cada 100 ms
DelayMS 100
GoTo Main

Disable ' Esta instrucción debe siempre ir al


' final del programa principal y antes
' de la sub_rutina de interrupción.

' RUTINA DE INTERRUPCIÓN


' -------------------------------------------------------------------
SUB_INT:
Toggle L0 ' Cambia el estado del LED L0
INTF = 0 ' Limpia el Flag de Interrup, por RB0
Resume ' Retorna de la interrupción

Figura 5.27. Fotografía de la iBOARD III ante la ejecución del programa


CAP_05_Ejemplo_03. bas (Interrupciones).

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


32
CAP_05_Ejemplo_ 04 (Comando SOUND).

' CAP_05_Ejemplo_04.bas
' Ejemplo básico de utilización del comando SOUND.......
' ........... Star Trek The Next Generation ..........
' Es necesario colocar un buzzer piezoeléctrico - entre
' el pin PORTB<3> y tierra a través de una resistencia
' de 220 ohm en serie con el buzzer ....................
' 220
' PORTB.3 -----/\/\/\-----(Buz)---+
' |
' GND ------------------------+

Device = 16F876 ' Define el Micro a Utilizar


ALL_DIGITAL = True ' Configura Puertos como digitales
XTAL = 20 ' Define velocidad resonador

Dim LOOP As Byte ' Declaración de variable LOOP


Dim Freq1 As Word ' Declaración de variable Frecuencia 1
Dim Freq2 As Word ' declaración de variable Frecuencia 2

Symbol C = 2092 ' frecuencia nota musical C


Symbol D = 2348 ' frecuencia nota musical D
Symbol E = 2636 ' frecuencia nota musical E
Symbol G = 3136 ' frecuencia nota musical G
Symbol R = 0 ' Pausa - Silencio
Symbol PIN = PORTB.3 ' Pin de conexión al Buzzer

THEME:
Sound PIN, [50,60,70,20,85,120,83,40,70,20,50,20,70,20,90,120,90,_
20,98,160]
DelayMS 500
For LOOP = 128 To 255 ' Ruido blanco ascendente
Sound PIN, [LOOP,2]
Next
Sound PIN, [43,80,63,20,77,20,71,80,51,20,_ Figura 5.28. Fotografía de la iBOARD III ante la ejecución del programa
90,20,85,140,77,20,80,20,85,20,_ CAP_05_Ejemplo_04.bas Comando Sound. Se escuchará a través del buzzer
90,20,80,20,85,60,90,60,92,60,87,_ Un extracto de la canción: Star Trek The Next Generation.
60,96,70,0,10,96,10,0,10,96,10,0,_
10,96,30,0,10,92,30,0,10,87,30,0,_
10,96,40,0,20,63,10,0,10,63,10,0,_
10,63,10,0,10,63,20]
LOOP = 0
Repeat
Freq1 = LookUpL LOOP , [E,D,C,D,E,E,E,R,D,D,D,R,E,G,G,R,E,D,C,D,_
E,E,E,E,D,D,E,D,C]
If Freq1 = 0 Then Freq2 = 0 : Else Freq2 = Freq1 - 8
FreqOut PIN , 225 , Freq1 , Freq2
Inc LOOP
Until LOOP > 28
DelayMS 5000
GoTo THEME

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


33
CAPÍTULO 6
CONVERSIÓN ANALÓGICA A DIGITAL

Introducción. Los microcontroladores PIC16F876 poseen un conversor A/D de 10 bits


de resolución y 5 canales de entrada (puerto A). La conversión A/D se realiza por el
método de aproximaciones sucesivas. La resolución que tiene cada bit procedente de la
conversión tiene un valor que es función de la tensión de referencia Vref, de acuerdo con
la siguiente fórmula:

Resolución = (Vref+ - Vref-) /1.024 = Vref /1.024


Si la Vref+ = 5 VDC y la Vref- es tierra, la resolución es de 4,8 mV/bit, por lo tanto, a
la entrada analógica de 0V le corresponde un valor digital de 00 0000 0000 y para la de
5V un valor digital igual a 11 1111 1111. La tensión de referencia determina los límites
máximo y mínimo de la tensión analógica que se puede convertir. El voltaje diferencial
mínimo es de 2 V.
Figura 6.1. Esquema electrónico equivalente de la entrada de un canal
del convertidor A/D del PIC16F876.
En la figura 6.1. se muestra el esquema electrónico equivalente a la entrada de un
canal del convertidor A/D del PIC16F876. Se observa que a través del canal de entrada
seleccionado, se aplica la señal analógica a un condensador de captura y mantenimiento
(sample and hold) y luego se introduce al conversor, el cual, proporciona un resultado
digital de 10 bits. Sin embargo el proceso conlleva a que la señal de entrada sufra una
serie de modificaciones producto de la impedancia de entrada propia del convertidor. Por
ejemplo: a la entrada del pin de conversión A/D la capacitancia equivalente es de 5Pf, al
mismo tiempo, dos diodos de “clamping” generalmente de alta velocidad limitan la
tensión máxima de entrada a 5.5 VDC introduciendo pequeñas deformaciones no lineales
en la señal de entrada. La impedancia de entrada de un canal del convertidor aprox. de
10 KOhm y al mismo tiempo, el canal tiene una corriente de fuga de aprox. 0.5 ua. La
señal de entrada es muestreada por la unidad de muestreo y retención a una velocidad
que varía dependiendo de ajustes proporcionados por el usuario. Fuente: Fuente: Tomado de www.mikroe.com

La tensión de referencia puede implementarse con la tensión interna de alimentación Son dos los registros más importantes involucrados en la conversión A/D. el ADCON0
VDD, o bien, con una externa que se introduce a través de los pines RA3/AN3/Vref+ y /o y el ADCON1. Como se explicó en capítulos anteriores, si se desea realizar una
RA2/AN2/Vref- conversión analógica digital por un puerto del microcontrolador (generalmente el puerto
A en los PIC) ¿Cómo hacerlo?. La respuesta siempre será la misma. A través de la
6.1. Registros asociados al conversor A/D configuración de los registros internos del microcontrolador, en este caso, el ADCON0 y el
ADCON1.
• ADRESH : Registro alto del resultado de la conversión A/D.
• ADRESL : Registro bajo del resultado del la conversión A/D. Básicamente la idea de la conversión analógica – digital es la digitalizar una señal de
• ADCON0 : Controla la operación del conversor A/D. entrada al pin del microcontrolador, la señal puede ser AC, DC ó AC+DC pero de tensión
• ADCON1 : Configura los Pines de E/S del conversor A/D. sólo positiva, ya que, el convertidor A/D no tiene la capacidad de convertir señales de
valor negativa. Esta señal es muestreada y convertida a un valor digital equivalente.

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


33
Existen limitaciones teóricas y prácticas en cuanto a la máxima frecuencia de 6.3. El Registro ADCON1 (detalle de sus bits)
conversión de la señal, atenuación, rápida variación en el tiempo y ruido. No serán
temas que se aborden en este manual, sin embargo, el autor ha publicado en Internet
tópicos relacionados a la instrumentación virtual donde si se explica en forma detallada
tópicos avanzados de la conversión A/D. Puede consultar esta información en: www.roso-
control.com, en el tab relacionado a las clases impartidas sobre instrumentación virtual.

6.2. El Registro ADCON0 (detalle de sus bits)

Figura 6.2. Descripción de los bits que conforman el registro ADCON0


del convertidor A/D del PIC16F876. Figura 6.3. Descripción de los bits que conforman el registro ADCON1
Fuente: Manual técnico del PC16F876. del convertidor A/D del PIC16F876.
Fuente: Manual técnico del PC16F876.

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


34
En la figura 6.4., se muestra la representación gráfica de las acciones que se realizan
en base a la configuración de los registros utilizados para la conversión A/D. La figura Luego arranca el proceso de conversión por aproximaciones sucesivas, se consume
representa la lógica de funcionamiento de un PIC16F887 en vez de un PIC16F876, sin un próximo TAD que no producirá resultados en la conversión y luego los 10 TAD
embargo, estos microcontroladores comparten más de un 95% de características necesarios para la digitalización de la señal. Una vez transcurridos los 12 TAD, el
comunes. resultado de la conversión A/D estará presente en los registros ADRESH y ADRESL.

Figura 6.5. Diferentes valores de conversión A/D en base a la Freq, del resonador.

Figura 6.4. Diagrama funcional para el módulo de conversión A/D de un PIC16F887.


Fuente: Fuente: Tomado de www.mikroe.com

6.4. Reloj para la conversión A/D

El tiempo de conversión A/D se define en unidades de TAD. El conversor A/D requiere


un mínimo de (12 ٠TAD) para una conversión de 10 bits, lo que equivale a 1.6 us. El reloj
para la conversión A/D se puede seleccionar a través del registro ADCON0 <7:6>.

La conversión A/D se realiza por el método de aproximaciones sucesivas, son en total


12 TAD, los tiempos de conversión necesarios para la obtención del resultado final. Como
de aprecia en la Figura 6.6. La conversión analógica – digital comienza con la activación
del bit de “GO” del registro ADCON0, allí se espera un primer TAD hasta que se
Figura 6.6. Proceso de conversión A/D en base a aproximaciones sucesivas.
desconecte el capacitor de “Hold” de la entrada analógica.
Fuente: Manual técnico del PC16F876.

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


35
6.5. Resumen de Registros asociados a la conversión A/D

3. Se pueden realizar conversiones A/D a pesar de que el PIC este en modo


“SLEEP”, siempre y cuando, la selección del reloj para la conversión sea (RC).
4. Si sobre el microcontrolador se realiza una operación de ¨RESET¨, el conversor
A/D se apagará y la conversión será abortada, en ese momento todos los pines
del puerto A serán configurados como entradas analógicas.

6.7. Comandos en alto nivel para la conversión A/D

ADIN: Inicia la conversión analógica/digital por hardware y almacena el resultado de la


conversión en una variable. La resolución de la conversión es de 10 bits. Sintaxis:

variable = ADIN canal

Canal: variable o constante (0..3) que estable el pin analógico para uso como entrada al
Figura 6.6. Registros asociados a la conversión A/D y al puerto de entrada – salida A.
conversor. Existen cuatro pines de entrada analógica, son: AN0, AN1, AN2 y AN3.
Fuente: Manual técnico del PC16F876.
Otros ajustes necesarios por el convertidor A/D, se realizan a través de las declaraciones:
INTCON: Registro asociado a las interrupciones. GIE bit de habilitación de las
interrupciones globales. PEIE bit de habilitación de las interrupciones de los periféricos. DECLARE ADIN_TAD 2_FOSC, 8_FOSC, 32_FOSC …

PIR1: Registro asociado a las interrupciones. ADIF bandera de ocurrencia de una 2_FOSC: rápido (oscilador/2)
interrupción por conversión A/D. 8_FOSC: medio (oscilador/8)
32_FOSC: lento (oscilador/32)
PIE1: Registro asociado a las interrupciones. ADIE bit de habilitación de la interrupción
64_FOSC: basado en el oscilador interno,
por conversión A/D.
valor por defecto = 64_FOSC.
ADRESH, ADRESL: Registros donde se almacena el valor de la conversión A/D.
DECLARE ADIN_RES 8, 10, 12. Bits de resolución,
ADCON0, ADCN1: Registros de configuración general asociados a la conversión A/D. valor por defecto = 10
TRISA: Registro de configuración del puerto A como entrada ó salida digital. DECLARE ADIN_STIME (0 .. 65535) ms. Tiempo para la
carga y descarga del capacitor de HOLD. Valor
PORTA: Como Salida, Registro que configura el valor lógico de los pines del puerto A.
por defecto = 50
Como Entrada, Registro que almacena el valor de entrada al puerto A.
Nota: El voltaje máximo sobre cualquier pin del PIC® no deberá exceder
nunca los 5 Vdc.
6.6. Otras Consideraciones importantes al realizar una conversión A/D
El comando ADIN, convierte un voltaje (0 a 5 Vdc) aplicado a un pin, en un valor
1. La máxima impedancia de entrada recomendada de la fuente analógica, a fin digital entre (0 y 1023) aplicado a una variable. La entrada puede ser en todo momento
de no afectar la exactitud de la conversión, no deberá ser mayor de 10 KΩ. escalada si se utiliza un voltaje de referencia externo Vref sobre el pin AN3. Si el voltaje
2. Después de cada conversión de deberá esperar un mínimo de tiempo de referencia aplicado al pin es de 2.5 VDC, se obtendrá el doble de resolución para el
equivalente a 2 ٠TAD, durante este tiempo el condensador interno de “Hold” no mismo conteo de (0 a 1023). El rango permitido de voltajes de referencia deberá estar
estará conectado a la fuente analógica de entrada. entre (1 y 5) Vdc, el cual, siempre deberá ser aplicado sobre el pin AN3.

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


36
CAP_06_Ejemplo_01 (Conversión A/D utilizando comandos de alto nivel).

Utilizando el sistema de desarrollo iBOARD III, realice la conversión A/D utilizando el


canal 0 del convertidor (PORTA<0>) y el resultado muéstrelo en el IDE Serial
Comunicator del Compilador Basic® PROTON®. Este último es una utilidad del
compilador que permite visualizar datos enviados desde el microcontrolador. Más
adelante se describirá en detalles esta utilidad. Por ahora, nos concentraremos en la
conversión A/D. Para poder visualizar el valor de la conversión A/D, después de cargado
el programa en el microcontrolador PIC®, ver Figura 6.7., deberá seleccionar del menú
del compilador: View/Plugin tal como se muestra en la Figura 6.9.

' CAP_06_Ejemplo_01.bas
' Ejemplo básico de utilización del convertidor A/D
' ------------------------------------------------------------------
Device = 16F876 ' Define el microcontrolador utilizado
XTAL = 20 ' Define la velocidad del resonador

TRISA = $FF ' Configura PORTA como Entradas


ADCON1 = $80 ' Configura PORTA<0> como ent. Analógica
Dim Valor As Word ' Variable de uso general
Declare ADIN_RES 10 ' Configura la resolución en 10 bits Figura 6.9. Menú de selección del IDE Serial Comuicator.
Declare ADIN_TAD 8_FOSC ' Configura la velocidad de conversión
Declare ADIN_STIME 50 ' Configura el tiempo de carga capacitor
' de hold del convertidor A/D
Main:
Valor = ADIn 0 ' Realiza la conversión A/D por el canal
' AN0, PORTA<0> y el resultado lo alma_
' cena en la variable valor.
' Envía la variable valor a través del puerto serial para que
' pueda ser visualizada por el IDE Serial comunicator...

HRSOut "Valor conv. A/D = ", Dec Valor, 13


DelayMS 1000
GoTo Main

Figura 6.7. Codificación del ejemplo básico de utilización del convertidor A/D.

Luego seleccione la velocidad de conexión del


puerto de comunicaciones a 2400 BAUD, esto se
muestra en la Figura 6.8. y presione sobre el
icono conectar. Deberá aparecer el resultado de
la conversión A/D como se muestra en la Figura
6.10.

<- Figura 6.8. Selección de la velocidad de


conexión entre el PIC y el
IDE Serial Comunicator. Figura 6.10. Visualización de la ejecución del programa CAP_06_Ejemplo_01.bas
a través del IDE Serial Comunicator.

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


37
6.8. Pasos a realizar para una conversión A/D con interrupciones CAP_06_Ejemplo_02 (Conversión A/D utilizando Interrupciones).
'CAP_06_Ejemplo_02.bas
1) Configurar el módulo Conversor A/D ' Ejemplo básico de utilización del conv. A/D con interrupciones
• Configurar los pines que actuarán como entradas analógicas, las que trabajan ' -------------------------------------------------------------------
Device = 16F876 ' Define el microcontrolador utilizado
como E/S digitales y las usadas para la tensión de referencia a través del XTAL = 20 ' Define la velocidad del resonador
registro ADCON1
• Seleccionar el reloj de la conversión a través del registro ADCON0 ADCON1 = %10000000 ' Configura PORTA como analógico
• Seleccionar el canal de entrada A/D a través del registro ADCON0 ADCON0 = %11000001 ' justificar el resultado a la derecha y
• Activar el módulo A/D a través del registro ADCON0 ' F_OSC/32, AN0, ADC -> Activo.
Symbol GIE = INTCON.7 ' Bit habilit. interrupciones globales
Symbol ADIE = PIE1.6 ' Bit habilit. interrupciones por ADC
2) Activar, si se desea la interrupción, escribiendo sobre los registros PIE1 y PIR1 Symbol ADIF = PIR1.6 ' Bit flag interrupciones por ADC
Symbol PEIE = INTCON.6 ' Bit habilit. interrupciones perifer.
• Borrar la bandera de interrupción por conversión A/D ADIF.
Symbol GO = ADCON0.2 ' Bit GO_/DONE del ADC
• Habilitar la interrupción por conversión A/D, poner a 1 el bit ADlE. Dim Valor As Word ' Variable de uso general
• Habilitar la interrupción global y la interrupción por periféricos, poner a 1 los bits On Interrupt GoTo ADC_INT ' Cuando ocurre una interrupción va a la
habilitadores GIE y PEIE. ' subrrutina "ADC_INT"
' PROGRAMA PRINCIPAL.
' -------------------------------------------------------------------
3) Tiempo de espera para que transcurra el tiempo de adquisición
Main:
ADIF = 0 ' Limpia el Flag de int. del ADC
4) Inicio de la conversión GIE = 1 ' Habilita interrupciones globales
• Poner a 1 el bit GO/DONE# a través del registro ADCON0. PEIE = 1 ' Habilita las int. de periféricos
ADIE = 1 ' Habilita la interrupción por ADC
GO = 1 ' Arranca la conversión A/D del ADC
5) Tiempo de espera para completar la conversión A/D y que puede detectarse:
• Por la exploración del bit GO/DONE#, que al completarse la conversión pasa a ' Envía la variable valor a través del puerto serial para que
valer 0. ' pueda ser visualizada por el IDE Serial comunicator...
• Esperando a que se produzca la interrupción si se ha programado, al finalizar la HRSOut "Valor conv. A/D = ", Dec Valor, 13
conversión. DelayMS 1000
• Aunque no se permita interrupción, el señalizador ADIF se pondrá a 1 al GoTo Main
finalizar la conversión. End

Disable ' Esta instrucción debe siempre ir al


6) Leer el resultado en los 10 bits válidos de los registros ADRESH:L y borrar el flag ó ' final del programa principal y antes
bandera de interrupción ADIF. ' de la sub_rutina de interrupción.

7) Para una nueva conversión regresar al paso 1) y 2). ' SUB_RUTINA DE INTERRUPCIÓN
' -----------------------------------------------------------------
• El tiempo de conversión por bit está definido por TAD. Se exige esperar un ADC_INT:
mínimo de 2 ٠ TAD para reiniciar una nueva conversión. ADIE = 0 ' Deshabilita la interrupción por ADC
Valor.LowByte = ADRESL ' Carga el valor de la conversión en la
Valor.HighByte = ADRESH ' Variable valor, byte alto y bajo.

ADIF = 0 ' Limpia el Flag de interrupción por ADC


DelayUS 50 ' Tiempo requerido para carga capacitor
Figura 6.11. Visualización de la ejecución del programa CAP_06_Ejemplo_02.bas ADIE = 1 ' Habilita la interrupción por ADC
a través del IDE Serial Comunicator. Nota. Debe producir GO = 1 ' Arranca de nuevo la conversión ADC
los mismos resultados que produjo el programa CAP_06_Ejemplo_01.bas Resume

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


38
CAPÍTULO 7 7.1. Transmisión Asincrónica

EL USART DE UN MICROCONTROLADOR PIC Al igual que en otros periféricos del microcontrolador, el USART tiene dos
registros de configuración, uno para la transmisión y otro para la recepción de
USART: Universal Synchronous Asynchronous Receiver Transmitter (EUSART). Es información. La figura 7.2., muestra los bits individuales que conforman el registro
un periférico de comunicación serial de entrada / salida también conocido como de transmisión TXSTA del EUSART de un PIC16F886.
interfaz SCI. Realiza la generación de señales de reloj, registros de desplazamiento
y ”buffer” de datos necesarios para la transferencia serial de datos entre el PIC® y
el computador. Es un periférico que trabaja en forma autónoma. En la Figura 7.1.,
se observa una representación gráfica de una señal en el USART, la cual, es
codificada con codificación NRZ. Se puede observar que una comunicación serial
comienza con 1 bit de arranque (Start), 8 ó 9 bits de datos (8 para los PIC® con
módulo USART y 9 para los PIC® con módulo EUSART), y un bit de parada (Stop).
El EUSART integrado en el PIC16F886 posee las siguientes características: Figura 7.2. Registro de transmisión del USART de un PIC16F886.
Fuente: Tomado de la página web: www.mikroe.com
• Comunicación asíncrona en modo Full Duplex
CSRC - Clock Source Select bit – Sólo en modo sincrónico. Determina el origen
• Comunicación síncrona Half Duplex en modo maestro y esclavo
del reloj.
• Largo de los caracteres programables de 8 – 9 bits.
1 – Modo Maestro. Reloj generado internamente por el “Baud Rate Generator”.
• Detección de errores en la comunicación
0 - Modo Esclavo. Reloj proveniente de una fuente externa.
MODO Asincrónico: Los datos se transmiten y reciben utilizando la codificación de TX9 - 9-bit Transmit Enable bit
no retorno por cero (NRZ), no se utiliza una señal de reloj y básicamente los datos 1 - 9-bit Largo en bits de la transmisión
son transferidos de la siguiente forma: 0 - 8-bit Largo en bits de la transmisión
TXEN - Transmit Enable bit
• En estado de reposo la línea de datos permanece en estado alto (1) 1 – Transmisión habilitada
• Cada transmisión de datos comienza con un bit de arranque (START), el 0 - Transmisión no habilitada
cual, siempre es cero (0)
• Los datos son transmitidos desde el bit menos significativo (LSB) al más SYNC - EUSART Mode Select bit
significativo (MSB) 1 - EUSART Operación en forma sincrónica
• Cada transmisión de datos culmina con un bit de parada (STOP), el cual, 0 - EUSART Operación en forma asincrónica
siempre es uno (1) SENDB - Send Break Character bit Sólo en modo asincrónico
1 – Habilitar el caracter de “Break “
0 - Transmisión de carácter “Break” se completo
BRGH - High Baud Rate Select bit determina la velocidad de la transmisión en
modo asincrónico
1 - EUSART Operación a alta velocidad
0 - EUSART Operación a baja velocidad
TRMT - Transmit Shift Register Status bit
1 – El registro TSR está vacío
0 – El registro TSR está lleno.

Figura 7.1. Representación gráfica de una señal en el USART de un PIC®. TX9D - Ninth bit of Transmit Data puede ser usado como dirección o bit de
paridad.

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


39
7.2. Recepción Asincrónica

Para la recepción de información, el microcontrolador también dispone de un


registro de configuración denominado RCSTA, el cual, puede observar a través de
la Figura 7.4.

Figura 7.2. Registro de Recepción del USART de un PIC16F886.


Fuente: Tomado de la página web: www.mikroe.com

SPEN - Serial Port Enable bit


1 – Puerto Serial Habilitado. Los pines RX/DT y TX/CK son configurados como
entrada / salida
0 – Puerto Serial no Habilitado
RX9 - 9-bit Receive Enable bit
1 – Se habilita la recepción de 9-bits
0 - Se habilita la recepción de 8 bits
SREN - Single ReceiveEnable bit Es utilizado en modo sincrónico y operación
como Maestro
1 – Recepción simple habilitada
0 - Recepción simple no habilitada
CREN - Continuous Receive Enable bit de pendiendo de la configuración
Figura 7.3. Diagrama de bloque del registro de transmisión del EUSART de un PIC16F886. Asynchronous mode:
Fuente: Tomado de la página web: www.mikroe.com 1 – Recepción habilitada
0 – Recepción no habilitada
Haciendo referencia a la figura 7.3., podemos entender el funcionamiento de los Synchronous mode:
diferentes bloques que conforman el módulo de transmisión del EUSART. El pin de 1 – Se habilita la recepción continua hasta que el bit “CREN “ sea cero(0).
transmisión generalmente ubicado en el PORTC<6> es el encargado de enviar la 0 - No habilita la recepción en forma continua
información al mundo exterior, por ejemplo, un puerto serial de un computador ó ADDEN - Address Detect Enable bit es solo utilizado en el modo de detectar
PC. Los bytes de información que el CPU coloque en el buffer de salida serán dirección
transmitidos a una velocidad programable por el bloque generador de baudios 1 – Habilita la detección de dirección de los 9 bit de datos recibidos
“BAUD Rate generador” a través del pin PORTC<6> denominado también Tx pin. 0 – No habilita la detección de dirección. El noveno bit se utiliza como bit de paridad
Existen diferentes bits de control, cada uno de ellos con una función específica FERR - Framing Error bit
como la habilitación o no del EUSART TXEN, bit de bandera de interrupción TXIF y 1 – En la recepción de detecta el error “Framing Error”
habilitación de interrupciones TXIE, tamaño del dato a transmitir 8 ó 9 bits, bit de 0 - No se detecta el error “Framing Error”
status TRMT y bits de configuración del generador de Baudios. OERR - Overrun Error bit.
1 – En la recepción se detecta el error “Overrun Error”
Cada uno de estos bits juega un papel importante en la configuración final del 0 - No se detecta el error “Overrun Error”
módulo USART / EUSART, pueden configurarse en forma manual y/o a través del RX9D - Ninth bit of Received Data puede ser usado como bit de dirección o de
uso de instrucciones especializadas encontradas en los lenguajes de alto nivel. paridad

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


40
“Framing error” Ocurre cuando el receptor no detecta el bit de parada en un
intervalo predeterminado de tiempo. Este error se indica mediante el bit FERR del
registro RCSTA. Este error no genera por si mismo una interrupción, una vez que
el bit FEER se ha colocado en uno (1), para poder limpiarlo es necesario colocar en
uno (1) al bit SPEN del registro RCSTA, lo cual, simultáneamente causa una re-
inicialización del USART.

“Overrun Error” . El buffer del PIC es del tipo FIFO y puede almacenar sólo dos
(2) Bytes ó caracteres. Un error de “Overrun” ocurre cuando éste buffer recibe más
de dos caracteres, simplemente no hay espacio para almacenar más de dos
caracteres. El error se manifiesta colocando a uno (1) el bit OERR del registro
RCSTA. Cuando ocurre este error, los datos contenidos en el buffer se pueden
normalmente leer, pero no se recibirán más datos hasta que el bit OERR sea
colocado a cero (0). Para limpiar el error es necesario colocar a cero (0) el bit
CREN del registro RCSTA ó colocar en uno (1) al bit SPEN del Registro RCSTA.

Recepción de 9 bits: La recepción del noveno bit en el lado del receptor se realiza
si el Bit RX9 del registro RCSTA es uno (1), hay que tener cuidado en como leer
este bit. Primero se deberá leer el bit RX9D y luego los ocho (8) bits del registro
RCREG, de otra forma el bit será automáticamente puesto en cero (0) antes de su
lectura. Esto se puede observar a través de la Figura 7.5.

Figura 7.4. Diagrama de bloque del registro de recepción del USART de un PIC16F886.
Fuente: Tomado de la página web: www.mikroe.com

Haciendo referencia a la figura 7.4., podemos entender el funcionamiento de los


diferentes bloques que conforman el módulo de recepción del EUSART. El pin de
recepción generalmente ubicado en el PORTC<7> es el encargado de recibir la
información del mundo exterior, por ejemplo, desde el puerto serial de un
computador ó PC. Los bytes de información que el PC envíe al microcontrolador, bit
a bit son sincronizados por el bloque generador de baudios y enviados al registro de
entrada RSR, el cual, se encarga de descomponer la información recibida y separar
los bits de control del Byte de datos. Una vez completada ésta tarea, el Byte de
datos que pudiese contener 8 ó 9 bits, dependiendo si es un USART ó un EUSART,
pasa al registro de recepción RCREG, produciendo al mismo tiempo una
interrupción. Existen diferentes bits de control, cada uno de ellos con una función
específica como la habilitación o no del puerto serial SPEN, bit de habilitación del
noveno bits RX9, bit de habilitación del módulo de recepción SREN, bit de bandera
de interrupción TXIF y habilitación de interrupciones TXIE, bit habilitación de
recepción continua CREN y los bits para el manejo de errores como el error de Figura 7.5. Diagrama de bloque del registro de recepción, recepción del noveno bit .
error “Framing” FERR y error de “Overrun” OERR. Fuente: Tomado de la página web: www.mikroe.com

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


41
7.3. Interconexión de microcontroladores PIC® a través de EUSART Figura 7.7b, se observan las relacioneS matemáticas para el calculo de la velocidad
de comunicación en Baudios.
Cuando el bit ADDEN del registro RCSTA es uno (1), se habilita la recepción
del noveno bit, éste modo permite la comunicación serial entre microcontroladores,
el principio es simple. El Maestro envía 9 bit de datos con la dirección de un
microcontrolador esclavo al cual quiere comunicarse, como todos los
microcontroladores comparten la línea de transmisión y recepción, todos reciben el
mismo dato.

Una vez recibido el dato, cada microcontrolador esclavo verifica la dirección


propia con la enviada, si no es la misma, el software del microcontrolador deberá
deshabilitar la detección de dirección, colocando el bit ADDEN en cero (0), el
maestro ahora enviará los datos de 8 bits a éste microcontrolador. Una vez recibido
el último Byte el microcontrolador deberá de nuevo activar la recepción del noveno
bit ó bit de detección de dirección, esto se realiza colocando en uno (1) el bit
ADDEN del registro RCSTA. La figura 7.6., muestra un esquema de interconexión
entre microcontroladores a través del módulo EUSART.

Figura 7.6. Esquema de interconexión de microcontroladores utilizando el módulo EUSART.


Fuente: Tomado de la página web: www.mikroe.com

7.4. Generador de Baud

Para la generación de los Baud, se utilizan dos registros de ocho bits (SPBRGH
,SPBRG), el valor escrito en esos registros determinará la velocidad de
transmisión/recepción utilizada en bits x seg = Baud. Adicionalmente, los bits
BRGH del registro TXSTA y el bit BRGH16 del registro BAUDCTL, afectan la
frecuencia de reloj utilizada para el cálculo de los Baud. La figura 7.7a. muestra en
forma gráfica como se relacionan los diferentes registros para configurar la Figura 7.7. a) Registros relacionados con el módulo generador de Baud del EUSART,
velocidad de transmisión / recepción en el módulo EUSART, mientras que el la b) Formulación matemática para el cálculo de los Baud.
Fuente: Tomado de la página web: www.mikroe.com

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


42
7.5. Resumen de pasos a seguir para realizar una transmisión serial 7.7. Comandos en alto nivel para el manejo del USART/EUSART
asincrónica a través de los registros del módulo EUSART.
Como hemos podido observar a lo largo de este capítulo, a medida que los
• La velocidad deseada (Baud) debe ser justada a través de bits y registros: Bit periféricos del microcontrolador realizan tareas más complicadas y complejas
BRGH del registro TXSTA, el bit BRG16 del registro BAUDCTL y los registros aumenta también la complejidad para la configuración de sus registros. Trabajar en
SPBRGH y SPBRG. lenguaje ensamblador con los registros del EUSART es una tarea titánica. Gracias al
• El bit SYNC del registro TXSTA deberá ser colocado en cero (0) y el bit SPEN desarrollo de los compiladores de lenguajes en alto nivel como el Basic®
del registro RCSTA deberá ser colocado en uno (1) a fin de habilitar el puerto PROTON®, CCS® y MikroBasic®, podemos realizar programas que involucren la
serial. utilización del USART/EUSART de los microcontroladores en cuestión de segundos.
• Para una transmisión de 9 bits, el bit TX9 del registro TXSTA deberá ser Sin embargo, la teoría explicada con anterioridad, es total y completamente
colocado en uno (1) necesaria para entender la arquitectura y la organización del módulo de
• La transmisión de datos es habilitada colocando en uno (1) el bit TXEN del comunicación serial.
registro TXSTA. El bit TXIF del registro PIR1 es automáticamente puesto en
uno (1). Si se desea que el bit TXEN cause una interrupción, los bits GIE, Transmisión Asincrónica: HRSout
PEIE y TXIE del registro INTCON deberán ser habilitados. Transmite uno o más valores utilizando el USART/EUSART del microcontrolador.
• En una transmisión de 9 bits, el valor del noveno bits, deberá ser escrito en el Sintaxis:
bit TX9D del registro TXSTA. HRSout item, item …
• La Transmisión comienza cuando se escriben los 8 bits de datos sobre el
registro de recepción TXREG. Item: Constante, variable, expresión, cadena de caracteres con o sin
modificadores de formato que se transmitirán a través del USART/EUSART del
microcontrolador.
7.6. Resumen de pasos a seguir para realizar una recepción serial
asincrónica a través de los registros del módulo EUSART.

• La velocidad deseada (Baud) debe ser justada a través del bits y registros:
Bit BRGH del registro TXSTA, el bit BRG16 del registro BAUDCTL y los
registros SPBRGH y SPBRG.
• El bit SYNC del registro TXSTA deberá ser colocado en cero (0) y el bit SPEN
del registro RCSTA deberá ser colocado en uno (1) a fin de habilitar el puerto
serial.
• Para una recepción de 9 bits, el bit RX9 del registro RCSTA deberá ser
colocado en uno (1)
• La recepción de datos es habilitada colocando en uno (1) el bit CREN del
registro RCSTA. Si se desea que la recepción del dato cause una
interrupción, los bits GIE, PEIE y RCIE del registro INTCON deberán ser
habilitados.
• El registro RCSTA deberá leerse para obtener información acerca de la
ocurrencia de errores “Framing” y “Overrun”.
• Ante una recepción de 9 bits, el valor del noveno bits será almacenado en el
bit RX9D del registro RCREG.
• Ante una recepción de 8 bits, el valor recibido será almacenado en el registro
RCREG, el cual, deberá leerse para obtener dicho dato.
Figura 7.8. Modificadores de Formato utilizados por el comando HRSout.
Fuente: Manual del Usuario compilador Basic® PROTON®.

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


43
Comando para la Recepción Asincrónica: HRSin
Recibe uno o más valores utilizando el USART/EUSART del microcontrolador. DECLARE HSERIAL_RCSTA Valor (0..255)
Sintaxis: Escribe en el registro RCSTA el valor de configuración entre (0 .. 255)
Variable = HRSin , {TimeOut, TimeOut Label }
DECLARE HSERIAL_TXSTA Valor (0..255)
HRSin {TimeOut, TimeOut Label }, {Parity Error Label }, Modificadores, Variable {, Escribe en el registro TXSTA el valor de configuración entre (0 .. 255)
Variable…}
DECLARE HSERIAL_PARITY ODD ó EVEN
• TimeOut: Opcional, valor en ms que el comando HRSin esperará por la Habilita o deshabilita la detección de errores de paridad en el puerto serial
recepción de un dato antes de saltar a TimeOut Label.
DECLARE HSERIAL_CLEAR ON ó OFF
• Parity Error Label: Opcional, salta a la etiqueta cuando el dato recibido tiene
Limpia el bit de “Overrun Error” antes de comenzar a leer el puerto. Este error
un error de paridad.
también se puede limpiar colocando el bit CREN del registro RCSTA en cero (0) y
• Modificadores: Uno o más modificadores de formato para la variable recibida. luego en uno (1).
• Variable: Bit, Byte, Word o Dword que almacenará el valor recibido en la
comunicación serial.
CAP_07_Ejemplo_01.bas Utilización básica del USART/EUSART

Utilizando el sistema de desarrollo iBOARD III, haga un programa que utilice el


USART del microcontrolador para enviar y recibir información al computador. La
codificación realizada es mostrada en la figura 7.10.

' CAP_07_Ejemplo_01.bas
' Ejemplo básico de utilización del USART/EUSART
' -----------------------------------------------------------------
Device = 16F876 ' Define el microcontrolador utilizado
XTAL = 20 ' Define la velocidad del resonador

Declare HSERIAL_BAUD 9600 ' Configura vel. Baud = 9600


Dim Edad As Byte
Figura 7.9. Modificadores de Formato utilizados por el comando HRSin.
Fuente: Manual del Usuario compilador Basic® PROTON®. Main:
HRSOut "Sistema de Desarrollo para PIC iBOARD III", 13
HRSOut "Ejemplo de utilización del USART ........", 13
7.8. Configuración de los registros del USART/EUSART en alto nivel HRSOut "-----------------------------------------", 13

Repeat
Para facilitar la configuración de los registros asociados a la comunicación serial HRSOut "Introduzca su edad?",13
mediante el módulo USART / EUSART, el compilador Basic® PROTON® dispone de HRSin DEC2 Edad
la directiva “DECLARE”, Existen cinco (05) directivas asociadas al USART/EUSART Until Edad >= 10 And Edad <= 50
cuando se utiliza como transmisión - recepción asincrónica:
HRSOut "Muy bien ...", 13
HRSOut "Usted escribió: ", DEC2 Edad, " Años",13
DECLARE HSERIAL_BAUD Valor DelayMS 10000
Ajusta la velocidad del módulo generador de Baud del microcontrolador. GoTo Main
Por defecto su valor es de 2400 Baudios.
Figura 7.10. Listado de la codificación del programa CAP_07_Ejemplo_01.bas

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


44
El programa mostrado en la figura 7.10., es una aplicación básica de la Si no aparece el texto mostrado en pantalla, deberá hacer un reset a través del
utilización del USART/EUSART del microcontrolador. Envía y recibe datos al PC y de pulsador de reset que se encuentra en el iBOARD III. Deberá observar el texto tal
esta forma se establece una comunicación con el usuario. como se presenta en la figura 7.13. El microcontrolador PIC® a través del
USART/EUSART le enviará al PC la información que inicialmente mostrará dos
El primer paso es ejecutar el programa CAP_07_Ejemplo_01.bas desde el líneas, más una tercera línea de separación “----“ y luego en la cuarta línea le
microcontrolador, esto se realiza a través de la compilación y carga del programa preguntará: Introduzca su Edad?, deberá escribir en el cuadro superior de la
mostrado en la figura 7.10. Una vez cargado el programa en el microcontrolador, pantalla su edad, ésta deberá estar comprendida entre diez 10 años y cincuenta 50
deberá seleccionar del menú del compilador: View/Plugin tal como se muestra en la años, de lo contrario le volverá a preguntar su edad. Una vez escrita su edad en el
Figura 7.12. recuadro, el PC le enviará al microcontrolador un número entero de dos cifras, el
cual, el microcontrolador almacenará en la variable Edad. Por último el
microcontrolador enviará al PC de nuevo el comentario: Muy bien…, Usted escribió,
DEC2 Edad (el valor decimal de dos cifras de la variable Edad) y “Años”
Luego seleccione la velocidad de conexión del puerto
e comunicaciones a 9600 BAUD, esto se muestra en la
Figura 7.11. y presione sobre el icono conectar. Deberá
aparecer el resultado de la conversión A/D como se
muestra en la Figura 7.13.

<- Figura 7.11. Selección de la velocidad de conexión


entre el PIC® y el IDE Serial Comunicator.

Figura 7.12. Menú de selección del IDE Serial Comunicator. Figura 7.13. Visualización de la ejecución del programa CAP_07_Ejemplo_01.bas
A través del IDE Serial Comunicator.

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


45
CAP_07_Ejemplo_02.bas Utilización del USART y Visual Basic®

Una necesidad creciente en la industria es la comunicación de


microcontroladores y programas de aplicación para la supervisión y control de En la pantalla de configuración del programa UART_1 en VB6, deberá configurar
procesos. En el siguiente ejemplo, utilizaremos el microcontrolador PIC® para el puerto de conexión serial donde está conectada el sistema de desarrollo iBOARD
enviar información a un programa realizado en VB6 y por supuesto se hará III, si este sistema se conecta al puerto USB, la pregunta es ¿Cuál puerto de
utilizando el periférico USART. El listado completo del programa en VB6 código comunicación serial?. La respuesta es simple. Los “Drivers” del sistema de
fuente y ejecutable, se encuentra en el mismo directorio del ejemplo desarrollo iBOARD III, crean un puerto serial virtual y se lo asignan a un COM
CAP_07_Ejemplo_02.bas en el CD del iBOARD III entregado a usted, bajo el disponible en el computador, tal y como se explicó en el capítulo 2, Instalación de
nombre de: Drivers. Una vez seleccionado el puerto de comunicación serial, presione el botón
“Conectar” y deberá visualizar en su programa lo mostrado en la Figura 7.16. La
' CAP_07_Ejemplo_02.bas comunicación serial se está realizando entre el USART del microcontrolador PIC® y
' Ejemplo básico de utilización del USART/EUSART con VB6 el computador.
' -----------------------------------------------------------------
Device = 16F876 ' Define el microcontrolador utilizado
XTAL = 20 ' Define la velocidad del resonador

Declare HSERIAL_BAUD 9600


Dim Index As Byte

Main:
For Index = 0 To 255 ' Se envía a través del USART una rampa
HRSOut DEC3 Index, 13 ' de valor cero a 255. Los datos se en_
DelayMS 10 ' vian con una pausa de 10 ms.
Next
GoTo Main
End

Figura 7.14. Listado de la codificación del programa CAP_07_Ejemplo_02.bas

Figura 7.15. Pantalla de configuración del programa en VB6 UART_1.


Figura 7.16. Visualización de la ejecución del programa CAP_07_Ejemplo_02.bas
junto al programa en VB6 UART_1.

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


46
CAPÍTULO 8
TEMPORIZADORES “TIMERS”
La Figura 8.2., presenta el diagrama funcional de bloques del timer TMR0,
Introducción. Los microcontroladores PIC16F876 disponen de un potente
vemos que hay un pin de E/S asociado a este timer que es el PORTA<4>, a través
conjunto de temporizadores para manejar eficientemente todas las operaciones que
de este pin se puede introducir una señal externa al microcontrolador, el mismo
involucran tiempo y conteo de eventos. Dichos temporizadores son tres y se
puede realizar el conteo de flancos de subida (alfa) ó bajada (beta) dependiendo de
denominan técnicamente: TMR0, TMR1 y TMR2.
la programación asignada al bit T0SE. El bit T0CS es el encargado de configurar al
TMR0, es un temporizador de 8 bits que, puede utilizarse como cronómetro de TMR0 como temporizador ó como contador de eventos externos. Algunos de los
tiempo (modo Timer) con señal de reloj tanto interna como externa. También bits de configuración se comparten para la configuración del TMR0 ó del WDT que
puede ser utilizado como contador de eventos externos aplicados al pin RA4/T0CKI. es otro temporizador interno del microcontrolador PIC®. Por ejemplo: existe un
El TMR0, tiene las siguientes características: registro pre-escalador de 8 bits, el cual, se puede asociar al TMR0 ó al WDT esto se
configura a través del bit PSA del registro de Opciones. El registro de 8 bits TMR0
• 8 bit’s puede ser utilizado como “timer” y como “counter” almacena la cuenta de tiempo (modo timer) o de eventos (modo counter) a los que
• Se puede leer y escribir ha tenido lugar la señal luego de pasar por el pre-escalador, si el conteo es mayor a
• Tiene un pre-escalador de 8 bits por software 255, éste registro se desbordará y comenzará de nuevo su conteo en cero, pero se
• La señal de reloj puede ser interna o externa producirá una activación de la bandera de interrupción por TMR0 bit No. 2 del
• Interrupción por desbordamiento programable registro de interrupciones INTCON<2> T0IF. Si el bit de habilitación por TMR0
• Selección del flanco habilitación de la señal externa INTCON<5> T0IE y el bit de interrupciones globales INTCON<7> GIE están
• Pre-escalador compartido con el periférico WDT activados, entonces el TMR0 podrá interrumpir al CPU del microcontrolador,
pudiéndose ejecutar la rutina de interrupción por TMR0 previamente compilada.
COMO “TIMER”

• OPTION_REG<5> T0CS = 0
• El registro TMR0 se incrementa en cada ciclo de instrucción
• La sincronización en la escritura toma dos ciclos de reloj

COMO “COUNTER”

• OPTION_REG<5> T0CS = 1
• El registro TMR0 se incrementa en cada flanco de subida o bajada sobre el
pin RA4/T0CKI OPTION_REG<4> T0SE

Figura 8.1. Registro de Opciones del PIC16F876.


Fuente: Tomado de la página web: www.mikroe.com

El registro asociado al TMR0 es el registro de Opciones, como se mencionó en el


capítulo 5, punto 5.10, el registro de opciones permite realizar la configuración del
TMR0 a través de la configuración de sus diferentes bits. En la Figura 8.1. se Figura 8.2. Diagrama funcional de bloques del timer TMR0.
Fuente: Tomado de la página web: www.mikroe.com
observan los diferentes bits que componen al registro de Opciones.

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


47
8.1. Interrupción por TMR0

Una interrupción por TMR0 ocurrirá cuando el registro de 8 bits asociado a éste
timer llegue al desbordamiento “overflow” FF -> 00, cuando ocurre el overflow el Tint|MAX(p) = Pre-escalador * 4/20MHz*(255-Valor I)
bit del registro INTCON<2> denominado T0IF pasará a valer 1. Si el bit
INTCON<5> T0IE es uno (permiso de interrupción), entonces la interrupción Tint|MAX(256) = 256 * 4/20Mhz * (255-0) = 13.056 ms
ocurrirá y se ejecutará la rutina de servicio de interrupción por TMR0. Tint|MAX(128) = 128 * 4/20Mhz * (255-0) = 6.528 ms
-> El pre-escalador tendrá que ser de 256 para 10 ms
La interrupción por TMR0 no puede despertar al microcontrolador si éste se
encuentra en estado dormido “sleep”, ya que, el TMR0 es deshabilitado cuando se INCREM = Pre-escalador * 4/FOSC = 51.2 us
entra en modo de reposo o dormido.
Valor I = 255 – Tint/INCREM = 255 – 10 ms/51.2 us
8.2. Registros asociados al TMR0 Valor I = 255 – Tint/INCREM = 255 – 195
Valor I = 60 … Valor Inicial a cargar en el Reg. TMR0

8.4. Pasos a seguir para la utilización del TMR0

• Ajustar el registro OPTION_REG<5> Bit TOCS = 0


Significa que el TMR0 se utilizará como temporizador con la fuente de reloj
interna del PIC16F876.

• Ajustar el registro OPTION_REG<3> Bit PSA = 0


Significa que el pre-escalador será asignado al TMR0 y no al WDT.

• Ajustar el registro OPTION_REG<2:0> Bit’s PS2, PS1 y PS0.


Figura 8.3. Registros asociados al funcionamiento del TMR0. Para un pre-escalador de 256, el valor de PS2= 1, PS1 = 1, PS0 = 1.
Fuente: Manual técnico del PIC16F876.
• Introducir en el TMR0, el valor inicial del conteo.
TMR0 = 60
8.3. Como trabaja la temporización del TMR0
• Habilitar la interrupción por TMR0, a través del registro INTCON<5> bit
TOIE
Frecuencia de oscilación (resonador/cristal)
FOSC = 20 MHz para el PIC16F876 del sistema de desarrollo iBOARD III • Habilitar la interrupción por Periféricos, a través del registro INTCON<6> bit
PEIE
Incremento del Registro TMR0
INCREM = Pre-escalador * 4/FOSC • Habilitar la interrupción global , a través del registro INTCON<7> bit GIE

Tiempo de interrupción
Tint = INCREM * (255- Valor I) 8.5. Ejemplo de utilización del TMR0

Ejemplo: Utilice al TMR0 para generar una interrupción cada 10 ms, utilizando el El siguiente ejemplo, muestra como hacer la configuración del TMR0 para que
PIC 16F876 del sistema de desarrollo iBOARD III. interrumpa al programa principal cada 10 ms. El resultado del programa se podrá
observar a través del PROTON® IDE Serial Comunicator, el cual, deberá
Tint = 10 ms configurarse para recibir información serial a 38400 Baud.
FOSC = 20 MHz

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


48
' CAP_08_Ejemplo_01.bas
' Ejemplo básico de utilización del TMR0. En este programa se incre_
' mentará el valor de la variable Conteo cada 1000 ms y la variable Disable ' Esta instrucción debe siempre ir al
' Conteo_T0 cada 10ms, utilizando el TMR0 para que interrumpa al pro_ ' final del programa principal y antes
' grama principal cada 10 ms. ' de la sub_rutina de interrupción.
' -------------------------------------------------------------------
Device = 16F876 ' RUTINA DE INTERRUPCIÓN
XTAL = 20 ' -----------------------------------------------------------------
TMR0_INT:
' DEFINICIÓN DE SIMBOLOS, VARIABLES Y CONSTANTES T0IE = 0 ' Deshabilita la interrupción por TMR0
' ----------------------------------------------------------------- Conteo_T0 = Conteo_T0 + 1 ' Incrementa la variable Conteo_T0
Declare HSERIAL_BAUD 38400 ' Velocidad conexión serial en baud TMR0 = 60 ' Carga inicialmente al registro TMR0
T0IF = 0 ' Limpia el flag de int. del TMR0
Symbol GIE = INTCON.7 ' Bit habilit. interrupciones globales T0IE = 1 ' Habilita la interrupción por TMR0
Symbol PEIE = INTCON.6 ' Bit habilit. interrupciones perifer. Resume
Symbol T0IE = INTCON.5 ' Bit habilit. interrupciones por TMR0
Symbol T0IF = INTCON.2 ' Bit flag interrupciones por TMR0
Symbol T0CS = OPTION_REG.5 ' Bit selección fuente de Reloj TMR0
Symbol PSA = OPTION_REG.3 ' Bit de selección para el prescalador
Symbol PS2 = OPTION_REG.2 ' Bit de selección para el prescalador
Symbol PS1 = OPTION_REG.1 ' Bit de selección para el prescalador
Symbol PS0 = OPTION_REG.0 ' Bit de selección para el prescalador

Dim Conteo As Word ' Variable de uso general


Dim Conteo_T0 As Word ' Variable de uso general
Dim Index As Word ' Variable de uso general

On Interrupt GoTo TMR0_INT ' Cuando ocurre una interrupción va a


' la subrrutina "TMR0_INT"
' PROGRAMA PRINCIPAL.
' ----------------------------------------------------------------
Main:
T0IF = 0 ' Limpia el flag de Int. del TMR0
T0CS = 0 ' Define al TMR0 se utiliza como timer
PSA = 0 ' Asigna el pre-escalador al TMR0
PS2 = 1 ' Asigna al pre-escalador 256
PS1 = 1 "
PS0 = 1 "
TMR0 = 60 ' Carga inicialmente al registro TMR0
GIE = 1 ' Habilita interrupciones globales
PEIE = 1 ' Habilita las int. de periféricos
T0IE = 1 ' Habilita la interrupción por TMR0
Conteo = 0 ' Limpia la variable Conteo
Conteo_T0 = 0 ' Limpia la variable Conteo_T0

Loop:
Conteo = Conteo + 1 ' Programa principal, incrementa la
For Index = 0 To 1000 ' variable conteo cada 1 seg.
DelayMS 1
Next
Figura 8.4. Imagen de la ejecución del programa CAP_08_Ejemplo_01.bas
HSerOut ["Conteo = ", Dec Conteo, " ", "Conteo_T0 = ",_
Dec Conteo_T0, 13] Se observa que para cada conteo de 1 seg en la variable Conteo del programa
GoTo Loop principal, la variable Conteo_T0 se incrementa 100 veces,
End como era de esperarse.

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


49
8.6. El timer TMR1

TMR1, es el único temporizador/contador ascendente con un tamaño de 16 bits, lo


que requiere el uso de dos registros concatenados de 8 bits: TMR1H:TMR1L, que
son los encargados de guardar el valor del conteo en tiempo real en el intervalo
0000h a FFFFh. Utiliza tanto reloj interno como externo y puede provocar una
interrupción por desbordamiento de su registro de conteo.

Su funcionamiento está gobernado por el valor de programación de los bits del


registro T1CON<5:0>. Cuando los pulsos de reloj son externos, es preciso que el bit
T1OSCEN, T1CON<3> = 1, a fin de que, los pines RC0/T1OSO/T1CKI Y
RC1/T1OSI/CCP2 actúen como entradas del oscilador externo. Si T1OSCEN vale
cero, el reloj vendrá a través del pin RC0/T1OSO/T1CKI. En ambos casos, el TMR1
funcionará como contador de eventos externos anulando la programación de los
bits “1” y “0” del registro TRISC<1:0>.

Funcionamiento como “TIMER”:


El registro TMR1H:TMR1L se incrementa en cada ciclo de instrucción.

Funcionamiento como “COUNTER”:


El registro TMR1H:TMR1L se incrementa en cada transición alfa del reloj externo.

8.7. Registros asociados al TMR1

Figura 8.5. Registros asociados al funcionamiento del TMR1.


Fuente: Manual técnico del PIC16F876.

Existen varios registros asociados al TRM1, el más importante es el registro de Figura 8.6. Descripción de los bits individuales del registro T1CON.
configuración denominado T1CON. La figura 8.6. contiene la descripción de los Manual técnico del PIC16F876.
bits individuales del registro TMR1.

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


50
8.7. El timer TMR1 trabajando como Temporizador
8.9. El timer 1 del PIC16F886 / 887

El nuevo PIC16F886/887 comparte casi la totalidad de los registros encontrados


en los PIC16F876/877, sin embargo, incluye dos bits de configuración adicionales
denominados T1GINV y TMR1GE, estos bits permiten la configuración del TMR1 a
través del circuito comparador presente en este tipo de microcontrolador. Esto se
puede observar a través de la Figura 8.9.

Figura 8.7. Timer 1 trabajando en modo temporizador.


Fuente: Tomado de la página web: www.mikroe.com

8.8. El timer TMR1 trabajando como Contador

Figura 8.9. Registro T1CON en los PIC16F886/887.


Fuente: Tomado de la página web: www.mikroe.com

8.10. Como trabaja la temporización del TMR1

Frecuencia de oscilación (resonador/cristal):


FOSC = 20 MHz para el PIC16F876 del sistema de desarrollo iBOARD III

Incremento del Registro TMR1


INCREM = Pre-escalador * 4/FOSC

Figura 8.8. Timer 1 trabajando en modo contador. Tiempo de interrupción


Fuente: Tomado de la página web: www.mikroe.com Tint = INCREM * (65535- Valor I)

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


51
Ejemplo: Utilice al TMR1 para generar una interrupción cada 10 ms, utilizando el
PIC16F876 del sistema de desarrollo iBOARD III. • Habilitar la interrupción por Periféricos, a través del registro INTCON<6> bit
PEIE
Tint = 10 ms
FOSC = 20 MHz • Habilitar la interrupción global , a través del registro INTCON<7> bit GIE

Tint|MAX(p) = Pre-escalador * 4/20MHz*(65535-Valor I)


8.12. Ejemplo de utilización del TMR1
Tint|MAX(1:8) = 8 * 4/20Mhz * (65535-0) = 104.856 ms
Tint|MAX(1:4) = 4 * 4/20Mhz * (65535-0) = 52.428 ms El siguiente ejemplo, muestra como hacer la configuración del TMR1 para que
Tint|MAX(1:2) = 2 * 4/20Mhz * (65535-0) = 26.214 ms interrumpa al programa principal cada 10 ms. El resultado del programa se podrá
Tint|MAX(1:1) = 1 * 4/20Mhz * (65535-0) = 13.107 ms observar a través del PROTON® IDE Serial Comunicator, el cual, deberá
configurarse para recibir información serial a 38400 Baud.
-> El pre-escalador podrá ser cualquiera de los anteriores pero se utilizará 1:1
para disminuir el error que introduce el pre-escalador. ' CAP_08_Ejemplo_02.bas
' Ejemplo básico de utilización del TMR1. En este programa se incre_
INCREM = Pre-escalador * 4/FOSC = 0.2 us ' mentará el valor de la variable Conteo cada 1000 ms y la variable
' Conteo_T1 cada 10ms, utilizando el TMR1 para que interrumpa al pro_
Valor I = 65535 – Tint/INCREM = 65535 – 10 ms/0.2 us ' grama principal cada 10 ms.
' -------------------------------------------------------------------
Valor I = 65535 – Tint/INCREM = 65535 - 50000 Device = 16F876
Valor I = 15535 XTAL = 20

' DEFINICIÓN DE SIMBOLOS, VARIABLES Y CONSTANTES


8.11. Pasos a seguir para la utilización del TMR1 ' ------------------------------------------------------------------
Declare HSERIAL_BAUD 38400 ' Velocidad conexión serial en baud

• Ajustar el registro T1CON<5:4> Bit’s T1CKPS2 = 0 Symbol GIE = INTCON.7 ' Bit habilit. int. globales
T1CKPS1 = 0, lo que significa pre-escalador = 1:1 Symbol PEIE = INTCON.6 ' Bit habilit. int. perifer.
Symbol T1IE = PIE1.0 ' Bit habilit. int. por TMR1
• Ajustar el registro T1CON<3> Bit T1OSCEN = 1 Symbol T1IF = PIR1.0 ' Bit flag interrupciones por TMR1
para habilitar el TMR1. Symbol T1CKPS1 = OPTION_REG.5 ' Bit selección pre-escalador
Symbol T1CKPS0 = OPTION_REG.4 ' Bit selección pre-escalador
• Ajustar el registro T1CON<2> Bit T1SYNC = 0 Symbol T1OSCEN = T1CON.3 ' Bit habilit. Conteo TMR1
sincronización del TMR1 Symbol T1SYNC = T1CON.2 ' Bit habilit. sincronización
Symbol TMR1CS = T1CON.1 ' Bit selección del reloj
• Ajustar el registro T1CON<1> Bit TMR1CS = 0 Symbol TMR1ON = T1CON.0 ' Bit habilit. On/Off del TMR1
selección del reloj para el TMR1 (int. ó Ext.) Dim Conteo As Word ' Variable de uso general
Dim Conteo_T1 As Word ' Variable de uso general
• Ajustar el registro T1CON<0> Bit TMR1ON = 1 Dim Index As Word ' Variable de uso general
Bit de ON/OFF del TMR1 Dim TMR1A As Word ' Valor Inicial del Timer1

• Introducir en el TMR1H y TMR1L, el valor inicial del On Interrupt GoTo TMR1_INT ' Cuando ocurre una interrupción va a
conteo, TMR1(H,L) = 15535 ' la subrrutina "TMR1_INT"

• Habilitar la interrupción por TMR1, a través del


registro PIE1<0> bit TMR1IE

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


52
' PROGRAMA PRINCIPAL.
' -----------------------------------------------------------------
Main:
T1IF = 0 ' Limpia el flag de int. del TMR1
T1CKPS1 = 0 ' Asigna al pre-escalador valor 1:1
T1CKPS0 = 0 "
T1OSCEN = 1 ' Habilit. del TMR1
T1SYNC = 0 ' Sincronización TMR1
TMR1ON = 1 ' Bit de ON/OFF del TMR1
TMR1A = 15535 ' Valor inicial del TMR1
TMR1H = TMR1A.HighByte ' Valor inicial del TMR1 Byte Alto
TMR1L = TMR1A.LowByte ' Valor inicial del TMR1 Byte Bajo
GIE = 1 ' Habilita interrupciones globales
PEIE = 1 ' Habilita las int. de periféricos
T1IE = 1 ' Habilita la interrupción por TMR1
Conteo = 0 ' Limpia la variable Conteo
Conteo_T1 = 0 ' Limpia la variable Conteo_T1

Loop:
Conteo = Conteo + 1 ' Programa principal, incrementa la
For Index = 0 To 1000 ' variable conteo cada 1 seg.
DelayMS 1
Next
HSerOut ["Conteo = ", Dec Conteo, " ", "Conteo_T1 = ",_
Dec Conteo_T1, 13]
GoTo Loop
End

Disable ' Esta instrucción debe siempre ir al


' final del programa principal y antes
' de la sub_rutina de interrupción.

' RUTINA DE INTERRUPCIÓN


' -----------------------------------------------------------------
TMR1_INT:
T1IE = 0 ' Deshabilita la interrupción por TMR1
Conteo_T1 = Conteo_T1 + 1 ' Incrementa la variable Conteo_T1
TMR1A = 15535
TMR1H = TMR1A.HighByte ' Valor inicial del TMR1 Byte Alto
TMR1L = TMR1A.LowByte ' Valor inicial del TMR1 Byte Bajo
T1IF = 0 ' Limpia el flag de Int. del TMR1 Figura 8.10. Imagen de la ejecución del programa CAP_08_Ejemplo_02.bas
T1IE = 1 ' Habilita la interrupción por TMR1 Se observa que pos cada conteo de 1 seg en la variable Conteo del programa
Resume Principal, la variable Conteo_T1 se incrementa 100 veces,
como era de esperarse.

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


53
8.13. El timer TMR2 Fuente: Manual técnico del PIC16F876.

TMR2, es un temporizador ascendente de 8 bits, que se puede leer y escribir.


También puede realizar funciones especiales para el puerto serie sincrónico (SSP) y
con los módulos de captura y comparación, que veremos más adelante. Entre sus
características más importantes se encuentran:

• Es un temporizador de 8 bits
• Su valor se puede leer/escribir por medio del registro TMR2
• La fuente de reloj es sólo interna
• Pre-escalador de relación 1:1, 1:4 ,1:16
• Post-escalador de 4 bits 1:1 a 1:16
• No opera en modo Sleep
• Puede usarse como base de tiempo del modulo de comunicación serial
sincrónica o de los CCP
• La escritura del TMR2, TCON2 o cualquier reset hacen que el pre y post-
escalador se borren y tomen el valor 00h.

La señal de reloj es sólo interna FOSC/4 y pasa por un pre-escalador con rangos
1:1, 1:4 y 1:16. La Salida del TRM2 para por un post divisor de frecuencias con
rangos desde 1:1 a 1:16 con 16 valores posibles en el intervalo. Esto se puede
observar a través de la Figura 8.12., mientras que en la figura 8.11. se describe el
significado de cada bit en particular del registro T2CON.

Figura 8.12. Diagrama funcional de bloques del timer TMR2.


Fuente: Tomado de la página web: www.mikroe.com

Figura 8.13. Registros asociados al funcionamiento del TMR2.


Figura 8.11. Significado de cada bit en particular del registro T2CON. Fuente: Manual técnico del PIC16F876.

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


54
8.14. Como trabaja la temporización TMR2
• Habilitar la interrupción por TMR2, a través del registro PIE1<1> bit
Frecuencia de oscilación (resonador/cristal) TMR2IE
FOSC = 20 MHz para el PIC16F876
• Habilitar la interrupción por Periféricos, a través del registro INTCON<6> bit
Incremento del Registro TMR2 PEIE
INCREM = Pre-escalador * 4/FOSC
• Habilitar la interrupción global , a través del registro INTCON<7> bit GIE
Tiempo de interrupción
Tint = INCREM * ( PR2) * Post-escalador
8.16. Ejemplo de utilización del TMR2
Ejemplo: Utilice al TMR2 para generar una interrupción cada 10 ms, utilizando el
PIC16F876 del sistema de desarrollo iBOARD III. El siguiente ejemplo, muestra como hacer la configuración del TMR2 para que
interrumpa al programa principal cada 10 ms. El resultado del programa se podrá
Tint = 10 ms observar a través del PROTON® IDE Serial Comunicator, el cual, deberá
FOSC = 20 MHz configurarse para recibir información serial a 38400 Baud.

Tint|MAX(p) = Pre * 4/20MHz*(PR2) * Post ' CAP_08_Ejemplo_03.bas


' Ejemplo básico de utilización del TMR2. En este programa se incre_
' mentará el valor de la variable Conteo cada 1000 ms y la variable
Tint|MAX(1:16,1:16) = 16*4/20Mhz*(255)*16 = 13.056 ms ' Conteo_T2 cada 10ms, utilizando el TMR2 para que interrumpa al pro_
Tint|MAX(1:16,1:13) = 16*4/20Mhz*(255)*13 = 10.608 ms ' grama principal cada 10 ms.
Tint|MAX(1:16,1:12) = 16*4/20Mhz*(255)*12 = 9.792 ms ' -------------------------------------------------------------------
-> El pre-escalador será 1:16 y el post escalador será Device = 16F876
1:13, y el valor exacto del PR2 será: XTAL = 20

' DEFINICIÓN DE SIMBOLOS, VARIABLES Y CONSTANTES


INCREM = Pre-escalador * 4/FOSC = 0.2 us ' ------------------------------------------------------------------
INCREM = 16 * 4/FOSC = 3.2 us Declare HSERIAL_BAUD 38400 ' Velocidad conexión serial en baud

PR2 = Tint/(INCREM * post) = 10ms/(3.2us * 13) Symbol GIE = INTCON.7 ' Bit habilit. interrupciones globales
Symbol PEIE = INTCON.6 ' Bit habilit. interrupciones perifer.
PR2 = 240 Symbol T2IE = PIE1.1 ' Bit habilit. interrupciones por TMR2
Symbol T2IF = PIR1.1 ' Bit flag interrupciones por TMR2
Symbol TOUTPS3 = T2CON.6 ' Selección del Post-Escalador
8.15. Pasos a seguir para la utilización del TMR2 Symbol TOUTPS2 = T2CON.5 ' "
Symbol TOUTPS1 = T2CON.4 ' "
Symbol TOUTPS0 = T2CON.3 ' "
• Ajustar el registro T2CON<6:3> Bit’s TOUTPS3 = 1 Symbol TMR2ON = T2CON.2 ' Bit habilit. On/Off del TMR2
TOUTPS2 = 1, TOUTPS1 = 0 y TOUTPS0 = 0, lo Symbol T2CKPS1 = T2CON.1 ' Selección del Pre-escalador
que significa post-escalador = 1:13 Symbol T2CKPS0 = T2CON.0 ' "

• Ajustar el registro T2CON<2> Bit TMR2ON = 1 Dim Conteo As Word ' Variable de uso general
para habilitar el TMR2. Dim Conteo_T2 As Word ' Variable de uso general
Dim Index As Word ' Variable de uso general
• Ajustar el registro T2CON<1:0> Bit’s T2CKPS1 = 1
T2CKPS0 = 1, lo que significa pre-escalador = 1:16 On Interrupt GoTo TMR2_INT ' Cuando ocurre una interrupción va a
' la subrrutina "TMR2_INT"
• Introducir en el TMR2, el valor inicial de 240

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


55
' PROGRAMA PRINCIPAL.
' -----------------------------------------------------------------
Main:
T2IF = 0 ' Limpia el flag de int. del TMR2
TOUTPS3 = 1 ' Selección del Post-Escalador 1:13
TOUTPS2 = 1 ' "
TOUTPS1 = 0 ' "
TOUTPS0 = 0 ' "
TMR2ON = 1 ' Habilit. del TMR2
T2CKPS1 = 1 ' Asigna al pre-escalador valor 1:16
T2CKPS0 = 1 "
TMR2 = 240 ' Valor Inicial del TMR2
GIE = 1 ' Habilita interrupciones globales
PEIE = 1 ' Habilita las int. de periféricos
T2IE = 1 ' Habilita la Interrupción por TMR2
Conteo = 0 ' Limpia la variable Conteo
Conteo_T2 = 0 ' Limpia la variable Conteo_T2

Loop:
Conteo = Conteo + 1 ' Programa principal, incrementa la
For Index = 0 To 1000 ' variable conteo cada 1 seg.
DelayMS 1
Next
HSerOut ["Conteo = ", Dec Conteo, " ", "Conteo_T2 = ",_
Dec Conteo_T2, 13]
GoTo Loop
End

Disable ' Esta instrucción debe siempre ir al


' final del programa principal y antes
' de la sub_rutina de interrupción.

' RUTINA DE INTERRUPCIÓN


' ------------------------------------------------------------------
TMR2_INT:
T2IE = 0 ' Deshabilita la interrupción por TMR2
Conteo_T2 = Conteo_T2 + 1 ' Incrementa la variable Conteo_T2
TMR2 = 240 ' Valor inicial del TMR2
T2IF = 0 ' Limpia el flag de Int. del TMR2
T2IE = 1 ' Habilita la interrupción por TMR2
Resume

Figura 8.14. Imagen de la ejecución del programa CAP_08_Ejemplo_03.bas


Se observa que pos cada conteo de 1 seg en la variable Conteo del programa
Principal, la variable Conteo_T2 se incrementa 100 veces,
como era de esperarse.

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


56
8.17. Ejemplo de utilización del TMR0, TMR1 y TMR2 en forma simultánea

El siguiente ejemplo, muestra como hacer la configuración de los timers TMR0, Dim Conteo As Word ' Variable de uso general
TMR1 y TMR2 para que interrumpan al programa principal cada 10 ms. El resultado Dim Conteo_T0 As Word ' Variable de uso general
del programa se podrá observar a través del PROTON® IDE Serial Comunicator, el Dim Conteo_T1 As Word ' Variable de uso general
cual, deberá configurarse para recibir información serial a 38400 Baud. Dim Conteo_T2 As Word ' Variable de uso general
Dim Index As Word ' Variable de uso general
' CAP_08_Ejemplo_04.bas Dim TMR1A As Word ' Valor inicial del Timer1
' Utilización del TMR0,TMR1 y TMR2 en forma simultánea.
' En este programa se incrementará el valor de la variable Conteo On Interrupt GoTo TMR012_INT ' Cuando ocurre una interrupción va a
' cada 1000 ms y las variables Conteo_T0, Conteo_T1 y Conteo_T2 cada ' la subrrutina "TMR012_INT"
' 10ms, utilizando los tres timers para que se interrumpa al progra_ ' PROGRAMA PRINCIPAL.
' ma principal cada 10 ms. ' -----------------------------------------------------------------
Main:
Device = 16F876 T0IF = 0 ' Limpia el flag de int. del TMR0
XTAL = 20 T0CS = 0 ' Define al TMR0 se utiliza como timer
PSA = 0 ' Asigna el pre-escalador al TMR0
' DEFINICIÓN DE SIMBOLOS, VARIABLES Y CONSTANTES PS2 = 1 ' Asigna al pre-escalador 256
' ----------------------------------------------------------------- PS1 = 1 "
Declare HSERIAL_BAUD 38400 ' Velocidad conexión serial en baud PS0 = 1 "
TMR0 = 60 ' Carga inicialmente al registro TMR0
Symbol GIE = INTCON.7 ' Bit habilit. interrupciones globales GIE = 1 ' Habilita interrupciones globales
Symbol PEIE = INTCON.6 ' Bit habilit. interrupciones perifer. PEIE = 1 ' Habilita las int. de periféricos
Symbol T0IE = INTCON.5 ' Bit habilit. interrupciones por TMR0 T0IE = 1 ' Habilita la interrupción por TMR0
Symbol T0IF = INTCON.2 ' Bit flag interrupciones por TMR0 Conteo = 0 ' Limpia la variable Conteo
Symbol T0CS = OPTION_REG.5 ' Bit selección fuente de Reloj TMR0 Conteo_T0 = 0 ' Limpia la variable Conteo_T0
Symbol PSA = OPTION_REG.3 ' Bit de selección para el prescalador
Symbol PS2 = OPTION_REG.2 ' Bit de selección para el prescalador T1IF = 0 ' Limpia el flag de int. del TMR1
Symbol PS1 = OPTION_REG.1 ' Bit de selección para el prescalador T1CKPS1 = 0 ' Asigna al pre-escalador valor 1:1
Symbol PS0 = OPTION_REG.0 ' Bit de selección para el prescalador T1CKPS0 = 0 "
T1OSCEN = 1 ' Habilit. del TMR1
Symbol T1IE = PIE1.0 ' Bit habilit. int. por TMR1 T1SYNC = 0 ' Sincronización TMR1
Symbol T1IF = PIR1.0 ' Bit flag interrupciones por TMR1 TMR1ON = 1 ' Bit de ON/OFF del TMR1
Symbol T1CKPS1 = OPTION_REG.5 ' Bit selección pre-escalador TMR1A = 50000 ' Valor inicial del TMR1
Symbol T1CKPS0 = OPTION_REG.4 ' Bit selección pre-escalador TMR1H = TMR1A.HighByte ' Valor inicial del TMR1 Byte Alto
Symbol T1OSCEN = T1CON.3 ' Bit habilit. Conteo TMR1 TMR1L = TMR1A.LowByte ' Valor inicial del TMR1 Byte Bajo
Symbol T1SYNC = T1CON.2 ' Bit habilit. sincronización GIE = 1 ' Habilita interrupciones globales
Symbol TMR1CS = T1CON.1 ' Bit selección del reloj PEIE = 1 ' Habilita las int. de periféricos
Symbol TMR1ON = T1CON.0 ' Bit habilit. On/Off del TMR1 T1IE = 1 ' Habilita la interrupción por TMR1
Conteo = 0 ' Limpia la variable Conteo
Symbol T2IE = PIE1.1 ' Bit habilit. int. por TMR2 Conteo_T1 = 0 ' Limpia la variable Conteo_T1
Symbol T2IF = PIR1.1 ' Bit flag interrupciones por TMR2
Symbol TOUTPS3 = T2CON.6 ' Selección del Post-Escalador T2IF = 0 ' Limpia el flag de int. del TMR2
Symbol TOUTPS2 = T2CON.5 ' " TOUTPS3 = 1 ' Selección del Post-Escalador 1:13
Symbol TOUTPS1 = T2CON.4 ' " TOUTPS2 = 1 ' "
Symbol TOUTPS0 = T2CON.3 ' " TOUTPS1 = 0 ' "
Symbol TMR2ON = T2CON.2 ' Bit habilit. On/Off del TMR2 TOUTPS0 = 0 ' "
Symbol T2CKPS1 = T2CON.1 ' Selección del Pre-escalador TMR2ON = 1 ' Habilit. del TMR2
Symbol T2CKPS0 = T2CON.0 ' " T2CKPS1 = 1 ' Asigna al pre-escalador valor 1:16
T2CKPS0 = 1 "
TMR2 = 240 ' Valor inicial del TMR2

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


57
GIE = 1 ' Habilita interrupciones globales
PEIE = 1 ' Habilita las int. de periféricos
T2IE = 1 ' Habilita la interrupción por TMR2
Conteo = 0 ' Limpia la variable Conteo
Conteo_T2 = 0 ' Limpia la variable Conteo_T2

Loop:
Conteo = Conteo + 1 ' Programa principal, incrementa la
For Index = 0 To 1000 ' variable conteo cada 1 seg.
DelayMS 1
Next
HSerOut ["Conteo = ", Dec Conteo, " ", "Conteo_T0 = ",_
Dec Conteo_T0," ", "Conteo_T1 = ", _
Dec Conteo_T1," ", "Conteo_T2 = ", _
Dec Conteo_T2, 13]
GoTo Loop
End

Disable ' Esta instrucción debe siempre ir al


' final del programa principal y antes
' de la sub_rutina de interrupción.

' RUTINA DE INTERRUPCIÓN


' ------------------------------------------------------------------
TMR012_INT:
If T0IF = 1 Then
T0IE = 0 ' Deshabilita la int. por TMR0
Conteo_T0 = Conteo_T0 + 1 ' Incrementa la variable Conteo_T0
TMR0 = 60 ' Carga inicialmente al reg. TMR0
T0IF = 0 ' Limpia el flag de int. del TMR0
T0IE = 1 ' Habilita la interrupción por TMR0
EndIf

If T1IF = 1 Then
T1IE = 0 ' Deshabilita la int. por TMR1
Conteo_T1 = Conteo_T1 + 1 ' Incrementa la variable Conteo_T1
TMR1A = 15535
TMR1H = TMR1A.HighByte ' Valor inicial del TMR1 Byte Alto
TMR1L = TMR1A.LowByte ' Valor inicial del TMR1 Byte Bajo Figura 8.15. Imagen de la ejecución del programa CAP_08_Ejemplo_04.bas
T1IF = 0 ' Limpia el flag de int. del TMR1 Se observa que pos cada conteo de 1 seg en la variable Conteo del programa
T1IE = 1 ' Habilita la interrupción por TMR1 Principal, las variables: Conteo_T0, Conteo_T1 y Conteo_T2 se incrementan
EndIf 100 veces, como era de esperarse.

If T2IF = 1 Then
T2IE = 0 ' Deshabilita la int. por TMR2
Conteo_T2 = Conteo_T2 + 1 ' Incrementa la variable Conteo_T2
TMR2 = 240 ' Valor inicial del TMR2
T2IF = 0 ' Limpia el flag de int. del TMR2
T2IE = 1 ' Habilita la interrupción por TMR2
EndIf
Resume

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


58
CAPÍTULO 9
COMUNICACIÓN SERIAL SINCRÓNICA I2C 9.1. Características del BUS I2C

Introducción. I2C es un bus de comunicación serial, sobre el cual, se implementa • Utiliza dos líneas para la comunicación, una para datos llamada (SDA) y otra
un protocolo de comunicaciones desarrollado por Phillips Semiconductors™ a para el reloj (SCL).
principios de los años 80’s. Este bus se creó con la finalidad de reducir la • Cada dispositivo conectado al bus es identificado por una única dirección
complejidad del cableado interno encontrado en las tarjetas electrónicas de equipos (dentro del bus), la cual, queda establecida a través de una combinación de
digitales de radio y TV. Actualmente, su uso se ha extendido a innumerables Hardware/Software.
aplicaciones en el área digital, hecho que lo convierte, en uno de los más populares • Bus I2C es multi-master y aún cuando ésta característica es poco utilizada,
estándares de comunicación serial sincrónica. Una de las principales razones para se define un mecanismo para la detección de las colisiones y arbitraje que
que el estudio del bus I2C sea un punto obligatorio en la capacitación de un busca prevenir la pérdida de información si dos o más maestros inicializan
estudiante en el desarrollo de aplicaciones con microcontroladores, es la gran comunicaciones en forma simultánea.
variedad de productos y fabricantes que producen circuitos integrados con ésta • Las transferencias de información se realizan en paquetes de 8 bits, en forma
tecnología, entre los que se pueden citar: Phillips, National, Xicor, Siemens y Dallas- bi-direccional y pueden ser efectuadas a tres velocidades: Normal (Standard )
Maxim Semiconductors™. El térmico I2C es una simplificación comercial y práctica, a unos 100 kbit/s (definición original), a 400 kbit/s (implementado a partir
su nombre real es Inter-Integrated Circuit bus, es decir, bus de interconexión de de la versión 1.1 del año 1992) en el modo rápido (Fast) a 3.4 Mbit/s en el
circuitos integrados. modo de alta velocidad (High- speed) disponible desde la versión 2.0 del año
1998).
La Figura 9.1., muestra la conexión entre un dispositivo maestro y varios
esclavos utilizando el bus I2C. En general los dispositivos esclavos pueden ser entre La generación de los pulsos de reloj es siempre responsabilidad del maestro que
otros: manejadores de puertos E/S, convertidores A/D, medidores de temperatura, controla el bus. El maestro comienza y termina todas las transferencias de datos y
memorias Eeprom, relojes en tiempo real, sincronizadores, convertidores de para ello hace uso de dos condiciones especiales denominadas INICIO y PARADA
protocolos, etc. (START y STOP) que pueden ser únicamente generadas por él.

Una transición de 1 a 0 (un flanco de bajada) en la línea SDA mientras la línea


SCL se mantiene en alto determina la condición de INICIO; una vez que ocurre
esta condición, el bus se considera ocupado (BUSY). Una transición de 0 a 1 (un
flanco de subida) en la línea SDA mientras la línea SCL se mantiene en alto,
determina la condición de PARADA, transcurrido un tiempo luego de ocurrir esta
condición, el bus se considera libre (FREE).

Figura 9.2. Condiciones de arranque y parada en un Bus I2C.


Figura 9.1. Conexión entre dispositivos bajo el bus I2C.
Fuente: Tomado de la web: www.Philip.com
Fuente: Tomado de la web: www.Mikroe.com

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


59
9.2. Detalle de la comunicación I2C
9.3. Direccionamiento y formato de transferencia de información

En un bus I2C, los dispositivos se identifican por medio de una dirección única
que forma parte de un byte de control enviado por el dispositivo maestro al iniciar
la comunicación. La definición inicial del I2C preveía la existencia de 7 bits para
direccionar al esclavo, de esta forma, se pueden conectar hasta 128 dispositivos en
el bus.

Figura 9.3. Detalle de la comunicación entre dispositivos I2C.


Fuente: Tomado de la web: www.Mikroe.com

Una vez inicializada la comunicación I2C condición de “Start”, comienza el Figura 9.4. Formato de la transferencia de bytes en un Bus I2C.
proceso de transmisión/recepción de la información “Bytes” entre el dispositivo Fuente: Tomado de la web: www.Philip.com
maestro y el dispositivo esclavo como se puede apreciar en la Figura 9.3.
A partir de la versión 1.0 del año 1992, existe un formato de direccionamiento
Todos los bytes de información colocados sobre la línea SDA deben tener 8 bits. de 10 bits y se ha incrementado significativamente el número de dispositivos que
El número máximo de bytes que pueden ser enviados en una transmisión no está pueden conectarse simultáneamente al bus. El compilador Basic® no da soporte
restringido, siendo el esclavo quien fija esta cantidad de acuerdo a sus para dispositivos con direcciones de 10 bits por lo cual, no se hará un estudio
características. exhaustivo del direccionamiento del bus en estos casos.

El envío de los bits se efectúa siempre desde el bit más significativo MSB hacia
el menos significativo LSB. Aún cuando el maestro es quien siempre controla el 9.4. Inicialización en modo maestro
estado de la línea del reloj; un esclavo de baja velocidad o que deba detener la
transferencia de datos mientras efectúa otra función, puede forzar la línea SCL a La forma común de comunicación I2C, es utilizar al PIC® como único maestro y
nivel bajo. Esto hace que el maestro entre en un estado de espera, durante el cual, los periféricos como esclavos, bajo está configuración, la habilitación de las
no transmite información esperando a que el esclavo esté listo para continuar la comunicaciones se logra a través de la configuración de los siguientes registros:
transferencia en el punto donde había sido detenida.

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


60
• Ajustar la velocidad de Transmisión/Recepción a través del registro SSPADD. SSPCON2 se colocará en cero (0), y se podrán enviar los próximos bytes que
representan los datos de igual forma.
• Eliminar el control del “slew rate” colocando a uno el bit SMP del registro
SSPSTAT. • La transmisión de los datos termina cuando se coloca el bit SEN = 0 del
registro SSPCON2, de esta forma ocurrirá una condición de parada “STOP”
• Seleccionar el modo de comunicación tipo “Maestro” a través del registro habilitándose al pin SDA de nuevo a recibir una nueva trama de comunicación:
SSPCON. “Arranque … Dirección … Reconocimiento …Datos … Reconocimiento …
• Habilitar el módulo de comunicaciones bit SSPEN del registro SSPCON {Datos … Reconocimiento} …. Parada”

• Esperar que el Flag bit SSPIF del registro PIR1 esté en uno indicando que todo
está listo para iniciar la comunicación.

Figura 9.5. Inicialización en modo maestro I2C para un PIC16F876.


Fuente: Tomado de la web: www.Mikroe.com

9.5. Transmisión en modo maestro


Figura 9.6. Transmisión en modo maestro I2C para un PIC16F876.
2
• Una vez inicializado el módulo I C (bit SSPIF = 1 del registro PIR1) se Fuente: Tomado de la web: www.Mikroe.com
comienza la transmisión de los datos una vez que son cargados en el registro
SSPBUF.
9.6. Recepción en modo maestro
• El primer dato a cargar en el registro SSPBUF deberá ser la dirección del
dispositivo esclavo, al cual, se pretende comunicar. • La preparación para la recepción de datos es similar a la transmisión con la
• El microcontrolador tendrá que esperar la señal de reconocimiento (ACK) por excepción de que el último bit del primer byte enviado (dirección) contiene un
parte del dispositivo esclavo, cuando esto ocurre el bit ASKSTAT del registro uno (1). Esto le indica al maestro que recibirá datos desde el dispositivo
esclavo.

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


61
• El dispositivo esclavo comienza a enviar los bytes de datos uno a la vez, estos completo reloj – cronómetro en tiempo real, el cual, utilizaremos en general, como
bytes son almacenados en el registro SSPSR. fuente de información referida a la hora y fecha en nuestras aplicaciones. El
segundo dispositivo es la memoria Eeprom modelo 24LC16B de capacidad 2KByte x
• Una vez leído éste registro por parte del maestro, automáticamente el maestro 8bits.
genera el bit de reconocimiento (ACK) al esclavo, lo cual, indica que el maestro DS1307 24LC16B
está listo para recibir otro byte con información.

• La recepción de los datos termina cuando se coloca el bit SEN = 0 del registro
SSPCON2, de esta forma ocurrirá una condición de parada “STOP”
habilitándose al pin SDA de nuevo a recibir una nueva trama de comunicación:
“Arranque … Dirección … Reconocimiento …Datos … Reconocimiento …
{Datos … Reconocimiento} …. Parada”

Pines de conexión al BUS I2C

Figura 9.7. Recepción en modo maestro I2C para un PIC16F876.


Fuente: Tomado de la web: www.Mikroe.com

9.7. Dispositivos I2C en el sistema de desarrollo iBOARD III

La figura 9.8., muestra una fotografía del sistema de desarrollo iBOARD III, en
la cual, los circuitos integrados con tecnología I2C se han encerrado en un recuadro
de color rojo. El primero dispositivo incluido es un reloj de tiempo real fabricado por Figura 9.8. Dispositivos con capacidad de comunicación I2C incluidos
la empresa Dallas Semiconductor™ modelo DS1307. Este dispositivo es un en el sistema de desarrollo iBOARD III.

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


62
9.8. Comandos en alto nivel para el manejo del protocolo I2C 9.9. Memoria Eeprom 24LC16B

BUSIN
Comando para recibir datos desde un dispositivo con protocolo I2C.
Sintaxis:
BUSIN Control, {Dirección}, [DatosEntrada {, DatosEntrada…}]

BUSOUT
Comando para transmitir datos desde un dispositivo con protocolo I2C.
Sintaxis:
BUSOUT Control, {Dirección}, [DatosSalida]
El sistema de desarrollo iBOARD III, incluye una memoria Eeprom modelo 24LC16B
Control. :Es una variable o constante (byte) que contiene los bits de identificación - de 16 Kbits, dispuestos en arreglos de 2K x 8 bits para ser utilizada con un bus de
2
dirección del dispositivo I C. comunicación I2C a un voltaje de operación entre
2.5 y 5.5 Vdc. En la figura anexa, se muestra la
Dirección : Es una variable o constante adicional (tipo byte o word) que especifica la
distribución de los pines de conexión. Los Pines 1, 2,
dirección de comienzo de lectura del dispositivo I2C, si no se especifica se tomará
y 3 se utilizan para determinar parte de la palabra
por defecto la dirección cero.
de identificación del dispositivo (dirección por
DatosEntrada : Es una lista de variables con modificadores de formato que se hardware). Los pines 4 y 8 se utilizan para la
reciben como datos de entrada. alimentación de tensión, los pines 5 y 6 son
utilizados para la conexión al bus I2C, mientras que
DatosSalida : Es una lista de variables con modificadores de formato que se el pin 7 es la habilitación de la protección a la escritura de la memoria Eeprom.
transmiten como datos de salida. La identificación del dispositivo queda definida tanto por el fabricante como por
los bits de dirección por hardware. Para realizar una lectura y/o escritura en los
La declaración de pines para la comunicación I2C, se realiza a través de las
registros de la memoria 24LC16B se debe enviar un byte de control y otro de
directivas:
dirección como se muestra indicado en la Figura 9.9.
Selección del Pin SDA
DECLARE SDA_PIN PORT . PIN
Puerto.pin por defecto PORTA.0

Selección del Pin SCL


DECLARE SCL_PIN PORT . PIN
Puerto.pin por defecto PORTA.1

Selección de la velocidad del Bus I2C


DECLARE SLOW_BUS ON - OFF or 1 - 0

Selección de la resistencia de Pullup pin SCL


DECLARE BUS_SCL ON - OFF, 1 - 0 or TRUE - FALSE
Elimina la necesidad de colocar una resistencia de Pullup en la línea SCL
Por defecto la resistencia es requerida.

Selección de la velocidad del BUS I2C cuando se utiliza el hardware


DECLARE HBUS_BITRATE Constant 100, 400, 1000 etc. Figura 9.9. Byte de control y dirección requeridos para iniciar la comunicación
con la memoria Eeprom del sistema de desarrollo iBOARD III.
La velocidad por defecto es 100 KHz

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


63
9.10. Ejemplo de utilización de una memoria Eeprom 24LC16B

Utilizando el sistema de
desarrollo iBOARD III, haga un
programa que permita escribir y
leer las primeras 256 localidades
de la memoria Eeprom. Deberá
conectar el Bus I2C al
microcontrolador de la siguiente
forma: PORTB<0> con SDA y
PORTB<1> con SCL. También
se deberá mostrar el resultado a
través de IDE Serial comunicator
a una velocidad de conexión de
2400 Baud.

' CAP_09_Ejemplo_01.bas
' Leer y escribir el contenido de una memoria Eeprom modelo 24LC16B.
' Escribe las primeras 256 localizaciones de la memoria eeprom y
' muestra su contenido por el terminal .... Figura 9.10. Fotografía de las conexiones entre el PIC16F876
' ----------------------------------------------------------------- y el Bus I2C del sistema de desarrollo iBOARD III.

Device = 16F876
XTAL 20

Declare SDA_PIN PORTB.0 ' Asignación SDA pin


Declare SCL_PIN PORTB.1 ' Asignación SCL pin

Dim Index As Byte ' Variable uso general


Dim DatoLeido As Byte ' Variable uso general

Main:
For Index = 0 To 255
BusOut $A0,Index,[Index] ' $A0 = dirección memoria eeprom
DelayMS 5 ' Retardo escritura por fabricante
Next

For Index = 0 To 255


BusIn $A1,Index,[DatoLeido]
HRSOut "Eeprom[",Dec Index,"]",_
" Valor Leído = ", Dec DatoLeido, 13
DelayMS 500
Next
GoTo Main

Figura 9.11. Resultado de la ejecución del programa CAP_09_Ejemplo_01.bas

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


64
9.11. Reloj en tiempo Real DS1307

Un dispositivo muy utilizado con los


microcontroladores es el reloj de tiempo real,
el cual, es capaz de mantener en forma
autónoma un conteo completo de Hora-Fecha
incluso con compensación de año bisiesto. El
reloj de tiempo real modelo DS1307, es
fabricado por Dallas Semiconductor™ y tiene
la capacidad de comunicación a través del protocolo I2C. La figura anexa, muestra Figura 9.13. Registros internos del reloj en tiempo real DS1307.
la distribución de los pines de conexión. Los Pines 3,4 y 8 se utilizan para su
alimentación de tensión, los pines 1 y 2 son utilizados para la conexión de un
cristal de referencia de 13.768KHz y los pines 5 y 6 son utilizados para la
comunicación I2C. La identificación del dispositivo viene definida por el
fabricante. Para realizar una escritura en los registros del DS1307 se debe enviar
un byte de control con el valor $D0, para realizar una lectura se debe enviar el
valor $D1. La figura 9.12., muestra la secuencia de bytes de control y dirección
para realizar una escritura y una lectura en los registros internos del DS1307.

El Terminal BAT del RTC se deberá conectar a una


batería de 3VDC ó a Tierra (si decide no usar la batería).
Figura 9.14. Esquema de conexiones del DS1307 del sistema
de desarrollo iBOARD III.
Figura 9.12. Secuencia de Bytes para acceder los registros internos del DS1307.
9.12. Ejemplo práctico con reloj de tiempo real DS1307
Los registros internos del reloj en tiempo real DS1307, se encuentran
codificados en formato BCD (Binario Codificado en Decimal). En total el DS1307 Utilizando el sistema de desarrollo iBOARD III, haga un programa que permita
posee ocho registros con direcciones 00h a la 07h, de las cuales, las primeras configurar los registros internos del reloj de tiempo real DS1307 con fecha y hora
siete se utilizan para almacenar la información acerca del reloj - calendario; la de referencia. Por ejemplo podrá utilizar un año bisiesto y ajustar el calendario a 28
última 07h se utiliza como registro de control. La figura 9.13., muestra la de febrero y la hora a las 23:50. De esta forma, podrá observar como el reloj de
distribución de los registros internos del DS1307, mientras que en la Figura 9.14 se tiempo real se incrementa en forma correcta. Puede repetir la configuración con un
puede observar el diagrama de conexiones del DS1307 en el sistema de desarrollo año no bisiesto para que observe la diferencia.
iBOARD III.

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


65
' CAP_09_Ejemplo_02.bas
' Configurar, leer y escribir en los registros internos del RTC
' Reloj de Tiempo Real, modelo DS1307 .........................
' ------------------------------------------------------------- MOSTRAR_RTC:
Device = 16F876 HRSOut "Hora = ", DEC2 RTC[Hora], ":", DEC2 RTC[Minu],_
XTAL 20 ":", DEC2 RTC[Seg],13

Declare SDA_PIN PORTB.0 ' Asignación pin SDA HRSOut "Fecha = ", DEC2 RTC[Dia], "/", DEC2 RTC[Mes],_
Declare SCL_PIN PORTB.1 ' Asignación pin SCL "/", DEC2 RTC[Ano],13,13
Return
Symbol Seg = 0 ' Registro de Seg.
Symbol Minu = 1 ' Registro de Min. BCD2BIN:
Symbol Hora = 2 ' Registro de Horas For Index = 0 To 6
Symbol Dia = 4 ' Registro de Día RTC[Index] = (RTC[Index]/16)*10 + RTC[Index] & $0F
Symbol Mes = 5 ' Registro de Mes Next
Symbol Ano = 6 ' Registro de Año Return

Dim RTC[7] As Byte ' Vector almacenamiento


Dim Index As Byte ' Variable uso general

Main:
GoSub RTC_INI ' Inicilizar el RTC
GoSub FECHA_INI ' Cargar Fecha inicial
DelayMS 500 ' Retardo 500ms

Loop:
GoSub LEER_RTC ' Leer registros RTC
GoSub MOSTRAR_RTC ' Mostrat registros RTC
DelayMS 1000
GoTo Loop

End

RTC_INI:
BusIn $D1,0,[RTC[Seg]] ' Lee byte 0, RTC
BusOut $D0,0,[RTC[Seg] & $7F] ' Pone 0 en bit CH
Return ' Para Activar RTC

FECHA_INI:
RTC[Seg] = $50 ' Ajusta los Seg. iniciales
RTC[Minu] = $59 ' Ajusta los Min. iniciales
RTC[Hora] = $23 ' Ajusta la Hora inicial
RTC[Dia] = $28 ' Ajusta el Día inicial
RTC[Mes] = $02 ' Ajusta el Mes inicial
RTC[Ano] = $08 ' Ajusta el Año inicial
BusOut $D0,0,[Str RTC\7] ' Escribe registros RTC
Return

LEER_RTC:
For Index = 0 To 6
BusIn $D1,Index,[RTC[Index]] ' Lee registros Figura 9.15. Resultado de la ejecución del programa CAP_09_Ejemplo_02.bas
Next ' del RTC 0..6 Utilizando el IDE Serial Comunicator.
GoSub BCD2BIN
Return

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


66
CAPÍTULO 10
PROTOCOLO DE COMUNICACIÓN 1-WIRE®

Introducción. Dallas Semiconductor™ ha desarrollado una poderosa tecnología


llamada 1-Wire®, la cual, utiliza un sólo conductor más su retorno o tierra para
efectuar las comunicaciones y la transmisión de energía entre un dispositivo
maestro y múltiples esclavos. Una RED de dispositivos 1-Wire® está conformada
por un maestro y uno o más esclavos que poseen un único pin de datos de tipo
“open drain” , al que se conecta una resistencia de “Pull Up” anclada a +5VDC
(nominal). Una de las características de la tecnología 1-Wire®, es que cada
dispositivo esclavo tiene una única e irrepetible identificación grabada en su
memoria ROM al momento de su fabricación.
Figura 10.1. Esquema de conexión entre un maestro PIC16F876 y varios esclavos
El BUS 1-Wire®, permite realizar una comunicación serial asincrónica entre un en una RED de comunicaciones 1-Wire®.
dispositivo maestro y uno o varios dispositivos esclavos, utilizando un único pin de
E/S del microcontrolador. Podemos señalar algunas características de éste bus: 10.1. Descripción del protocolo de comunicaciones 1-Wire®

• Utiliza niveles de alimentación CMOS/TTL con un rango de operación que Podemos describir al protocolo 1-Wire® como una secuencia de transacciones
abarca desde 2.8V hasta 6V. de información, la cual, se desarrolla según los siguientes pasos: (1) La
• Tanto el maestro como los esclavos transmiten información de forma bi- Inicialización, (2) Comandos y funciones de ROM, (3) Comandos y funciones de
direccional, pero, sólo en una dirección a la vez, de ésta manera la control y memoria, (4) Transferencia de bytes ó datos.
comunicación es realizada en forma “half duplex”.
• Toda la información es leída o escrita comenzando por el bit menos significativo INICIALIZACIÓN
(LSB). Todas las comunicaciones en el bus 1-Wire® comienzan con una secuencia de
• No se requiere del uso de una señal de reloj, ya que, cada dispositivo 1-Wire® un pulso de Reset y Presencia. El pulso de reset provee una forma limpia de iniciar
posee un oscilador interno que se sincroniza con el del maestro cada vez que las comunicaciones, ya que, con él se sincronizan todos los dispositivos esclavos
en la línea de datos aparezca un flanco de bajada (Beta). presentes en el bus. Un Reset es un pulso que genera el maestro al colocar la línea
• La alimentación de los esclavos se puede hacer utilizando el voltaje propio del de datos en estado lógico bajo por unos 480 µs. Esto se puede observar a través de
BUS. Para ello, cada circuito esclavo posee un rectificador de media onda y un la Figura 10.2.
capacitor, durante los períodos en los cuales no se efectúa ninguna
comunicación, la línea de datos se encuentra en estado alto debido a la
resistencia de “Pull Up”; en esa condición, el diodo entra en conducción y
carga al capacitor. Cuando el voltaje de la RED cae por debajo de la tensión del
capacitor, el diodo se polariza en inverso evitando que el capacitor se
descargue. La carga almacenada en el capacitor alimentará al circuito esclavo.
• Las redes de dispositivos 1-Wire® pueden tener fácilmente una longitud desde
200 m y contener unos 100 dispositivos.
• Todas las tensiones mayores que 2,2 Voltios son consideradas un (1) lógico
mientras que como un (0) lógico se interpreta cualquier voltaje menor o igual a
0,8 V.
• La transferencia de información es a 16.3 Kbps en modo “Standard” y hasta a
142 Kbps en modo “overdrive”. Figura 10.2. Inicialización de la red 1-Wire®. Pulso de reset y presencia.

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


67
COMANDOS Y FUNCIONES DE ROM
Una vez que el PIC16F876 recibe el pulso de presencia de los dispositivos
esclavos, se puede enviar un comando de ROM. Los comandos de ROM son
comunes a todos los dispositivos 1-Wire® y se relacionan con la búsqueda, lectura
y utilización de la dirección de 64 bits que identifica a esclavos. La Figura 10.3.,
muestra los comandos de ROM utilizados con los dispositivos 1-Wire®.

Figura 10.4. Secuencia de lectura y escritura de bits en el Bus 1-Wire®.

Figura 10.3. Comandos de ROM utilizados por los dispositivos 1-Wire®. 10.2. Implementación del maestro 1-Wire® con el PIC16F876

COMANDOS Y FUNCIONES DE CONTROL Y MEMORIA Para el manejo del protocolo 1-Wire®, el Basic® PROTON® incluye dos
comandos que permiten realizar la lectura y la escritura de información en el bus.
Son funciones propias del dispositivo 1-Wire®. Incluyen comandos para La implementación hecha por éstas funciones, tiene las siguientes características:
leer/escribir en localidades de memoria, leer memorias de “scratchpad”, controlar el La velocidad de transmisión de datos es aproximadamente de 20 Kbps en modo
inicio de la conversión de un ADC, iniciar la medición de una temperatura o normal, El PIC16F876 sólo puede trabajar como dispositivo maestro y se permite el
manipular el estado de un bit de salida, entre otros. Cada dispositivo define su uso de todos los modificadores de formato.
propio conjunto de comandos.
Para efectuar una lectura del Bus 1-Wire®, se utiliza el comando:
TRANSFERENCIA DE DATOS
ORead Pin, Modo, [DatoEntrada]
La lectura y escritura de datos en el bus 1-Wire® se hace por medio de “Slots”,
la generación de estos es responsabilidad del maestro, en este caso, el PIC16F876. Para efectuar una escritura en el Bus 1-Wire®, se utiliza el comando:
Cuando el maestro lee información del bus, debe forzar la línea de datos a estado
OWrite Pin, Modo, [DatoSalida]
bajo durante al menos 1 µs y esperar unos 15 µs para entonces leer el estado de la
misma. El estado lógico de la línea en ese momento, estará determinado por el
• Pin : Variable, constante o expresión que especifica cual pin de E/S será usado
dispositivo esclavo. La figura 10.4., muestra el proceso de lectura de un “Slot”
para la comunicación 1-Wire®.
típico que produce un microcontrolador PIC16F876 actuando como maestro 1-
Wire®.
• Modo: Variable, constante o expresión que indica el tipo de transferencia de
información. Este parámetro controla la ubicación de los pulsos de reset,
Al momento de efectuar la escritura de un bit en el bus ocurre algo similar, el
selecciona el modo de transferencia en bytes ó bits y define la velocidad de
maestro produce un pulso de entre 1 µs y 15 µs de duración, para luego colocar en
comunicación a utilizar, modo normal o modo de alta velocidad.
el bus al bit que se desea transmitir. Este bit deberá permanecer en el bus al menos
60 µs.

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


68
• DatoEntrada: Variable de entrada o arreglo de variables. A través del
modificador de formato se indica donde y como será almacenada la
información entrante.

• DatoSalida: Variable de salida o arreglo de variables. A través del modificador


de formato se indica como será enviada la información.

Figura 10.6. Diferentes topologías de interconexión entre dispositivos en una RED 1-Wire®.

Por último, la topología tipo estrella, la cual, en la práctica es la más utilizada,


permite la conexión de ramas a través de un punto común denominado nodo de
conexión, sin embargo, Esta topología limita la cantidad de dispositivos esclavos en
comparación con las anteriores, ya que, incrementa la capacitancia equivalente en
el punto central de conexión al estar las ramas conectadas en paralelo.
Figura 10.5. Diferentes modos de transferencia de información en la RED 1-Wire®.

10.4. Conexión entre el PIC16F876 y los dispositivos esclavos


10.3. Topologías de conexión entre dispositivos en una RED 1-Wire®
En la práctica, se puede utilizar cualquier pin de entrada – salida del
microcontrolador para efectuar la conexión a dispositivos esclavos 1-Wire®, incluso
La figura 10.6., muestra las diferentes topologías de interconexión entre
cada pin del microcontrolador puede implementar cualquiera de las topologías
dispositivos en una RED 1-Wire®. La topología exclusiva también denominada 1:1,
anteriormente mencionadas con un sólo dispositivo esclavo ó con muchos de ellos
es la más simple de todas, se permite en este tipo de topología la conexión sólo de
conectados en forma simultánea. La única consideración que hay que tener es la
un dispositivo maestro con un dispositivo esclavo. Es muy utilizada para la medición
colocación de una resistencia de “Pull Up” generalmente de valor 2 KOhm. Esto se
de parámetros en dispositivos esclavos tipo “stand alone” como por ejemplo: los
puede observar el la figura 10.7., en la cual, se han conectado dos dispositivos
dispositivos iButton® de Dallas Semiconductor™.
esclavos 1-Wire® a través del pin PORTB<1>. En la práctica, es mucho más fácil
manejar un sólo dispositivo esclavo por cada pin del microcontrolador, esto elimina
La topología lineal y ramificada extienden el alcance de la RED 1-Wire® hasta
la necesidad de conocer a priori el serial del dispositivo. Como hay uno sólo
una distancia de aprox. 200 metros. En ellas, los dispositivos esclavos pueden
dispositivo en la línea ó pin de conexión, el microcontrolador puede acceder a la
interconectarse en forma secuencial y/o a través de ramificaciones.
memoria del dispositivo esclavo a través de la función de ROM ($CC) Skip ROM.

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


69
En la actualidad se ha estandarizado el iButton® con memoria Eeprom en las
aplicaciones de control de acceso a áreas restringidas, control de acceso a
instalaciones comerciales e incluso control de acceso para edificios. Probablemente
usted sin saberlo, tiene un iButton® para acceder a su vivienda, ascensores del
edificio y/o puertas de entrada principal. Por esta razón se hará un primer ejemplo
de aplicación utilizando este tipo de dispositivo esclavo 1-Wire®.

10.6. Ejemplo de aplicación. Lectura del serial de un iButton® 1-Wire®

El siguiente programa codificado en Basic® PROTON® lee el serial de un


dispositivo esclavo 1-Wire® y lo muestra a través del IDE Serial Comunicator, el
cual, deberá estar configurado para una velocidad de conexión serial de 2400 Baud.
El pin de conexión a utilizar por el microcontrolador será: PORTB<1>.
Figura 10.7. Conexión de dispositivos esclavos 1-Wire® a un puerto de E/S del
microcontrolador PIC16F876. Se recomienda no utilizar el pin RB0, debido a que
este punto comparte una conexión 1-Wire® con un DS2409 que veremos ' CAP_10_Ejemplo_01.bas
en el capítulo 11. ' Leer el serial de un dispositivo 1-Wire
' ---------------------------------------------------------
Device = 16F876
10.5. Los iButton® 1-Wire® XTAL 20

Un iButton es un circuito integrado encerrado en un envoltorio de acero Symbol DQ = PORTB.1 ' Pin de conexión 1-Wire®
inoxidable de 16 mm de diámetro más parecido a una batería que a un micro chip. Dim Index As Byte ' Variable de uso general
La interfaz de comunicaciones utilizada en los iButtons® es el protocolo 1-Wire® de Dim SERIAL[8] As Byte ' Arreglo almacena serial
Dallas Semiconductor™, es por ello, que sólo necesitan dos terminales de conexión, Main:
uno para datos y otro para la referencia o tierra. GoSub Leer_Serial ' Rutina para leer el serial
GoSub Mostrar ' Rutina para mostrar serial
La energía requerida para el DelayMS 1000
funcionamiento del microcircuito GoTo Main
End
es tomada del propio conductor
de datos en forma parásita. Leer_Serial:
Existen iButtons® que contienen OWrite DQ,1,[$33] ' Read ROM, leer Serial
únicamente un número de For Index = 0 To 7
identificación, memorias (EPROM, ORead DQ,0,[SERIAL[Index]]
Next
EEPROM, NVRAM), relojes de Return
tiempo real, sensores y
registradores (loggers) de Mostrar:
temperatura, encriptadores de HRSOut "SERIAL DEL DISP.1-Wire® ENCONTRADO..",13
información, convertidores HRSOut "------------------------------------",13
For Index = 7 To 0 Step -1
analógico/digital, etc. En la figura HRSOut HEX2 SERIAL[Index]
anexa, se observan dos tipos Next
diferentes de iButton®. HRSOut 13,13
Return

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


70
El algoritmo utilizado para el cálculo de CRC de Dallas Semiconductor™ (DOW
CRC), cuyo resultado se incluye en la identificación de los dispositivos 1-Wire®.
Este CRC es de 8 bits y se calcula introduciendo los primeros 56 bits,
correspondientes al serial del dispositivo y el código de la familia a la que pertenece
el dispositivo. Los errores detectables por el CRC8 implementado por Dallas
Semiconductors™ son:

• Cualquier número impar de errores sobre los 64 bits transmitidos.


• Todos los errores de dos bits que se presenten en la ID de 64 bits.
• Cualquier grupo de errores de hasta 8 bits incorrectos.
• La gran mayoría de los errores de más de 8 bits incorrectos.

Figura 10.8. Resultado de la ejecución del programa CAP_10_Ejemplo_01.bas


Lectura del serial de un dispositivo 1-Wire®.

10.7. Cálculo del CRC-8, identificación de errores en la RED 1-Wire®

Cuando se transmite información en forma serial, es necesario verificar la


posible existencia de errores que pudieran ocurrir durante la comunicación. Existen Figura 10.9. Algoritmo para el cálculo del CRC8 utilizado por Dallas Semiconductor™.
varios métodos para efectuar este chequeo. Uno de los más simples consiste en
añadir un bit extra a cada byte transmitido de modo que el número de unos (1) El cálculo del CRC8 puede hacerse de varias formas. La primera de ellas es
contenidos en el paquete de 9 bits siempre sea par o impar. Este procedimiento se evidentemente por hardware, siguiendo el esquema de la figura 10.9. Cuando se
le conoce como verificación de paridad y permite encontrar errores que ocurren en implementa por software, una forma simple de hacerlo, es por medio de una tabla
un bit, pero no es confiable cuando cambia más de un bit dentro del byte. de 256 bytes, la cual, es llamada repetidas veces a medida que se introducen los
bytes hasta obtener el valor definitivo del CRC. Este método es muy sencillo, pero
Uno de los mecanismos de detección de errores más eficientes es el Chequeo de presenta el inconveniente de requerir el uso de 256 bytes de la memoria del
Redundancia Cíclica (del inglés Cyclic Redundancy Check) conocido por sus iniciales microcontrolador.
CRC. El CRC de un conjunto de datos, es un número de cierta cantidad de bits que
contiene el resultado de la aplicación de una expresión matemática al mencionado La figura 10.10., muestra un iButton® típico de Dallas Semiconductor™. La
conjunto de datos. Así, si el CRC es de 4 bits se denominará CRC4, si es de 8 bits se figura presenta una fotografía frontal del dispositivo, en la cual, se pueden observar
llamará CRC8, si es de 16 bits será CRC16, etc. claramente el serial de 64 bits del dispositivo compuesto de: 48 bits (6 bytes) del
serial único, 8 bits (1 bytes) de CRC y 8 bits (1 bytes) de la familia del dispositivo.

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


71
Cada iButton® viene estampado de fábrica con ésta numeración y por supuesto
cada iButton® tendrá un serial de identificación único.
Main:
CRC = 0
HRSOut "INTRODUZCA EL SERIAL Y LA FAMILIA...",13
For Indice = 0 To 6
HRSOut "ROM CODE (",Dec Indice,") = ",13
HRSin HEX2 ROMCODE[Indice]
Next

HRSOut "ROM CODE = "


For Indice = 0 To 6
HRSOut HEX2 ROMCODE[Indice], " "
Next

For ByteAct = 6 To 0 Step - 1


CRCt = ROMCODE[ByteAct]
GoSub CRCCalc
Figura 10.10. Fotografía frontal de un iButton® de Dallas Semiconductor™. Next

HRSOut 13,"CRC8 = ", HEX CRC, 13


DelayMS 5000
10.8. Ejemplo del cálculo del CRC8 GoTo Main

El siguiente programa codificado en Basic® PROTON® permite calcular el CRC8 CRCCalc:


For Indice = 0 To 7
del iButton® que se muestra en la Figura 10.10. Realmente el ejemplo ilustra la IBit = CRC.0 ^ CRCt.0
forma correcta de codificar el algoritmo de CRC8 mostrado en a Figura 10.9. El CRC = CRC >> 1
programa le solicitará a través del IDE Serial Comunicator que introduzca el serial CRC.2 = CRC.2 ^ IBit
del dispositivo 1-Wire®. Usted deberá introducir el serial del dispositivo, la familia y CRC.3 = CRC.3 ^ IBit
el programa le devolverá el valor del CRC8 para este dispositivo en particular. CRC.7 = IBit
CRCt = CRCt >> 1
Next
Codifique el programa según la codificación mostrada a continuación y ejecute el Return
IDE Serial Comunicator. Deberá presionar el “Reset” del microcontrolador para
iniciar la comunicación.

' CAP_10_Ejemplo_02.bas
' Cálculo del CRC8 de un iButton 1-Wire
' ---------------------------------------------------------
Device = 16F876
XTAL 20

Dim Indice As Byte ' Variable de uso general


Dim ROMCODE[8] As Byte ' Arreglo almacena serial
Dim IBit As Byte '
Dim CRC As Byte ' Contiene CRC8 Calculado
Figura 10.11. Resultado de la ejecución
Dim CRCt As Byte
Dim ByteAct As Byte del programa CAP_10_Ejemplo_02.bas
Clear Cálculo de CRC8 de un iButton® 1-Wire®.

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


72
10.9. Termómetro Digital modelo DS18B20

Para realizar la conexión entre el PIC16F876 y el DS18B20, puede utilizar como


referencia el diagrama mostrado en la Figura 10.13. La resistencia de Pull Up puede
colocarse entre 2 KOhm y 4.7 KOhm.

El termómetro digital DS18B20 es un


dispositivo de alta tecnología fabricado por Dallas
Maxim™ para la medición de la temperatura. En
la gráfica anexa, se observan los diferentes tipos
de encapsulados del dispositivo, siendo el más
común de ellos el encapsulado tipo TO-92.
Figura 10.13. Diagrama de conexiones entre un maestro PIC16F876 y un DS18B20 esclavo.
Fuente: Hoja de especificaciones del DS18B20.
El DS18B20, tiene una resolución programable
de 9,10,11 y 12 bits, lo cual, permite obtener
La memoria “scratchpad” del DS18B20, contiene 9 registros de 8 bits cada uno.
temperaturas con una exactitud de hasta 1/8 de
Los primeros dos registros Byte 0 y 1, se utilizan para almacenar el valor de
grado centígrado.
temperatura leída por el sensor. Los registros 2 y 3, se utilizan para almacenar el
valor de disparo por alarmas de baja y alta temperatura, ajustes que el usuario
En la Figura 10.12., se muestra un diagrama de bloques funcionales internos al
podrá escribir. El byte 4, es el byte de configuración del dispositivo, los siguientes
DS18B20, de izquierda a derecha podemos mencionar que a la entrada del
bytes 5,6 y 7 están reservados para uso del fabricante y por último el byte 8, es el
dispositivo se encuentran los circuitos de alimentación tanto por fuente externa
valor de aplicar el algoritmo CRC8 de los bytes 0 al 7.
como por conexión parásita. El serial del dispositivo de 64 bits únicos, la lógica de
control de la memoria, la memoria de trabajo intermedia “scrathpad”, el bloque
sensor de temperatura, los bloque de ajuste de alarmas, el registro de configuración
de la memoria y un módulo para la generación del CRC8.

Figura 10.14: Registros


internos del sensor de
temperatura DS18B20.
Fuente: Hoja de
especificaciones del DS18B20.
Figura 10.12. Diagrama de bloques funcionales del DS18B20.
Fuente: Hoja de especificaciones del DS18B20.

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


73
El registro de configuración, es el encargado de seleccionar la resolución en bits Los comando de memoria disponibles en el DS18B20, se presentan en la Figura
que se utilizará para la determinación de la temperatura. La figura 10.15., muestra 10.17., existen comandos para la conversión de la temperatura, lectura y escritura
una tabla de selección de las diferentes resoluciones, mientras más es el número de de la memoria de trabajo, copiar los registros de alarmas de la memoria de trabajo
bits utilizados, mejor es la precisión, sin embargo el tiempo de conversión de la a la memoria Eeprom y lectura del status de energía relacionada a la alimentación
temperatura se incrementa significativamente. del dispositivo.

Figura 10.15: Registro de configuración del DS18B20.


Fuente: Hoja de especificaciones del DS18B20.

El DS18B20 es un dispositivo 1-Wire® que trabaja como se explicó


anteriormente bajo el protocolo de comunicaciones 1-Wire®. Son entonces
necesaria las funciones de ROM y memoria para acceder a sus registros internos.
Luego, por ejemplo, de un “reset y presencia” se puede direccionar directamente al
Figura 10.17: Comandos de memoria utilizados por el DS18B20.
termómetro digital a través del comando de ROM ($CC) Skip ROM. De esta forma, Fuente: Hoja de especificaciones del DS18B20.
el DS18B20 quedará habilitado para la recepción de los comandos de memoria
relacionados con la configuración, lectura y escritura de sus registros. 10.10. Ejemplo de lectura de temperatura con un DS18B20

El siguiente programa codificado en Basic® PROTON® permite leer la


temperatura de un termómetro digital DS18B20 y presentarla a través del IDE Serial
Comunicator.

' CAP_10_Ejemplo_03.bas
' Lectura de la temperatura de un termómetro DS18B20.
' -------------------------------------------------------
Device = 16F876
XTAL 20

Symbol DQ = PORTB.1 ' Pin de conexión 1-Wire®


Dim Index As Byte ' Variable de uso general
Dim ROMCODE[8] As Byte ' Arreglo almacena el serial
Dim TEMPERATURA As Word ' Variable alm. temperatura
Dim FL_TEMP As Float ' Variable alm. temperatura
Figura 10.16: Formato binario de la temperatura en un DS18B20.

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


74
Main:
GoSub Conversion ' Rutina convertir Temperatura
GoSub Mostrar ' Rutina mostrar los valores
DelayMS 1000 En la Figura 10.18. se observa la fotografía del montaje electrónico realizado para
GoTo Main el ejemplo CAP_10_Ejemplo_03. Note que el esquema de alimentación adoptado es
End
del tipo parásito, ya que, el terminal 1 (GND) y el terminal 3 (Vcc) del DS18B20
Conversion: están conectador ambos a tierra (GND). Por otra parte la resistencia de Pull Up
OWrite DQ,1,[$CC,$44] ' Comando Convertir Temp utilizada fue de 2.2 KOhm.
High DQ ' DQ en alto por 750 ms
PAUSE 750
OWrite DQ,1,[$CC,$BE] ' Comando leer SCRATCHPAD.
ORead DQ,0,[TEMPERATURA.LowByte,TEMPERATURA.HighByte]
Return

Mostrar:
FL_TEMP = TEMPERATURA /16
HRSOut "Temp oC = ", DEC2 FL_TEMP,13
Return

Figura 10.19. Fotografía del montaje realizado para el programa CAP_10_Ejemplo_03.bas


Medición de la temperatura a través de un DS18B20.

Figura 10.18. Resultado de la ejecución del programa CAP_10_Ejemplo_03.bas


Medición de la temperatura a través de un DS18B20.

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


75
10.11. Algoritmo de Search ROM

Cuando existe un sólo dispositivo conectado al bus 1-Wire® puede omitirse el A continuación, el maestro escribirá un bit en el bus y cada esclavo comparará
direccionamiento mediante el uso del comando SKIP ROM. También puede utilizarse este bit con el que él previamente había transmitido. En caso de que los bits sean
el comando READ ROM para leer la identificación del esclavo y direccionarlo. Pero, diferentes, el esclavo entrará en estado de espera, del cual, sólo saldrá al
¿Qué hacer cuando existe más de un dispositivo en la RED 1-Wire® al producirse un nuevo reset. Si ambos bits coinciden, el esclavo trasmitirá el siguiente
mismo tiempo?. Quizás, podríamos leer manualmente los seriales de identificación bit de su ID seguido de su complemento. El proceso se repetirá hasta que se
de todos los esclavos a conectar en el bus. Para ello, se tendría que colocar cada completen los 64 bits de identificación en cada dispositivo esclavo.
dispositivo sólo en el bus y aplicar los conceptos aprendidos con los ejemplos de
aplicación vistos. Con el comando READ ROM, leeríamos su identificación (serial) Pero, ¿Qué bit transmitió el maestro?. En el caso de las dos combinaciones
para luego almacenarla en una memoria EEprom externa o en la memoria EEprom centrales de la tabla mostrada en la figura 10.20 (01 y 10) el maestro tomará el bit
del PIC16F876. Posteriormente, se deberá repetir el procedimiento con todos los recibido (ID Bit), lo almacenará en una variable temporal donde al final del proceso
demás dispositivos hasta llegar al último. Una vez identificado cada dispositivo y su se obtendrán los 64 bits de la ID de uno de los dispositivos
serial, El maestro PIC16F876 podrá enviar a la RED 1-Wire® el comando Match
ROM ($55) seguido del serial de identificación del dispositivo en particular con el Cuando se produce una primera discrepancia (se reciben dos ceros
cual desee comunicarse, de esta forma, el dispositivo esclavo elegido quedará consecutivos), el maestro colocará un 0 en el bus y almacenará el bit, en el cual, se
activo y los demás dispositivos 1-Wire® en la RED quedarán fuera de línea hasta produjo la colisión. Esto hará que los dispositivos cuya ID fuese 1 en la posición
que se produzca en la RED una condición de RESET. donde se presentó la colisión, dejen de participar en la búsqueda. El bit que se
envía al bus se almacena en la variable temporal de la ID. Ahora bien, el proceso
Previendo esta situación, todos los dispositivos que emplean la tecnología 1- de búsqueda continúa y al momento de presentarse otra colisión se compara el bit
Wire®, soportan un comando de ROM llamado Search ROM, el cual, permite al en el que ésta ocurre con la posición del cero del párrafo anterior; si coinciden,
maestro identificar los seriales independientes de cada dispositivo conectado a la entonces se enviará un 1 por el bus (ID bit se toma igual a 1). Si la posición de la
RED en forma automática. colisión actual es mayor que la anterior deberá escogerse un cero, mientras que, si
es menor debe repetirse el camino tomado en la búsqueda pasada para ese mismo
Buscando dispositivos en el Bus 1-Wire® bit.

La búsqueda de dispositivos en una red 1-Wire® deberá comenzar un “RESET” La figura 10.21., muestra el diagrama de bloques del algoritmo Search ROM. Si
realizado por el maestro, quien luego deberá enviar un comando Search ROM. En desea mayor información sobre este algoritmo podrá consultar la nota de aplicación
ese momento, cada dispositivo esclavo enviará al bus el primer bit de su del fabricante Dallas Semiconductor™ AN187, “1-Wire Search Algorithm”, Mar
identificación, seguido del complemento del mismo. El maestro, deberá leer estos 28, 2002. Esta nota de aplicación también se encuentra en el CD entregado a usted
dos bits. Las combinaciones posibles de estos dos bits, se muestran en la tabla de la en el directorio \10 Manuales\AN187.pdf
figura 10.20.

Ejemplo de Aplicación

Utilizando el sistema de desarrollo iBOARD III, realice un programa que


implemente el algoritmo Search ROM (mostrado en la Figura 10.21) sobre la red
1-Wire®, utilizando como maestro el PIC16F876. El resultado deberá mostrarlo en
la pantalla del PC a través del IDE Serial Comunicator. Este programa se dejará
como actividad propuesta a futuro. El resultado y la codificación del mismo, estarán
disponibles a través de la página http://www.roso-control.com

Figura 10.20: Combinaciones posibles al efectuar el un “ Search ROM”.


Fuente: 1-Wire® Search Algorithm, Application Note 187, pág, 2002.

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


76
Figura 10.21. Diagrama de flujo del algoritmo de “ Search ROM”.

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


77
CAPÍTULO 11
EL COPROCESADOR ATMEL™ ATTiny13s

Introducción. El sistema de desarrollo iBOARD III incluye un poderoso


microcontrolador fabricado por ATMEL™ el ATTiny13s, el cual, viene totalmente
preprogramado para realizar funciones de coprocesamiento. El firmware ó programa
cargado en el microcontrolador ATTiny13s es propiedad de la empresa Parallax,
inc, un importante fabricante de microcontroladores, aplicaciones y accesorios para
microcontroladores a nivel mundial. Inicialmente el microcontrolador ATMEL™
ATTiny13s que de ahora en adelante llamaremos coprocesador, viene incluido en
una tarjeta de desarrollo denominada MOBOStamp-pe Motherboard (#28300) de la
empresa Parallax, el fabricante de ésta tarjeta también pone a la disposición el
código fuente del firmware para que el usuario pueda implementar sus propias
funciones ó modificaciones de las existentes. En el sistema iBOARD III se utiliza el
firmware como viene de fábrica sin modificaciones a objeto de dejar intacta la
programación del fabricante. Cualquier referencia adicional sobre este
coprocesador, podrá consultarla a través de la página del fabricante
www.parallax.com

Haciendo referencia al manual del usuario del MoBoStamp-pe (2006.09.13) y el


manual AVR Firmware: GPIO, versión 3, www.parallax.com, el fabricante define: El
coprocesador está en capacidad de ejecutar 9 MIPS (millones de instrucciones por
segundo) cuando es alimentado por la señal de reloj interna a una frecuencia de 9.6
MHz. Dentro de las funciones preprogramadas para el coprocesador se encuentran:

• Entradas digitales para cada uno de los cuatro pines de E/S disponibles
• Salidas digitales para cada uno de los cuatro pines de E/S disponibles
• Contador de frecuencia hasta 1 MHz para cada uno de los cuatro pines de
entrada - salida disponibles
• Generación de señales PWM de hasta 37.5 KHz por dos pines de entrada –
salida disponibles. El tipo de PWM y la frecuencia pueden ser configuradas Figura 11.1. Diagrama esquemático de conexiones del coprocesador
a tiempo de ejecución en el sistema de desarrollo iBOARD III.
• Conversión Analógica a Digital ADC de 10 bits de resolución por dos pines
de entrada – salida disponibles Acceder al coprocesador, se puede hacer a través del microcontrolador
• Comparador analógico de tensión por tres pines de entrada – salida PIC16F876 PORTB<0> y el multiplexor 1-Wire® DS2409 (U6). También se puede
disponibles acceder utilizando el terminal en bornera o punto de conexión en regleta OWI y el
• Memoria RAM de 32 registros de 8 bits, la cual, puede ser escrita y leída multiplexor 1-Wire® DS2409 (U7). Este último integrado, probablemente sea una
opción que no esté incluida en el sistema de desarrollo iBOARD III, hasta que el
En la Figura 11.1. se muestra el diagrama de conexiones electrónicas asociadas fabricante termine el software de comunicación que permitirá implementar, a través
al coprocesador, en la misma se observa la existencia de otros componentes 1- del computador, una RED de sistemas de desarrollo iBOARD III. A la fecha de
Wire® tales como multiplexores, los cuales, explicaremos en detalle más adelante, escritura de este manual, el fabricante ha adelantado en un 60% el software de
por ahora, nos concentraremos en el coprocesador. comunicación en RED denominado OPC™ View.exe.

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


78
Para tener acceso al coprocesador, es necesario pre-configurar el integrado
OWrite OWP,0,[$DD]
DS2409 multiplexor 1-Wire® (U6) a fin de que este multiplexor haga la conexión
ORead OWP,0,[I,J,K]
física y eléctrica del pin PORTB<0> a través del pin 3 del DS2409 (MAN) al pin de HRSOut "Device: ",I,J," Versión: ", Dec K,13
entrada – salida pin 7 (IO) del coprocesador. Como el protocolo de comunicación
utilizado es el 1-Wire®, se anexa un listado codificado en Basic® PROTON® que DelayMS 1000
deberá colocar en su programa a fin de poder tener acceso al coprocesador. GoTo Main

OWrite OWP,1,[$CC, $CC, $FF] ' Skip ROM, Seleccionar Aux


ORead OWP,0,[RESP, FED] ' Respuesta, feedback

Estos comandos son necesarios (obligatorios) para tener acceso al


coprocesador. Más adelante se hará una explicación detallada de los mismos. Por
ahora sólo nos concentraremos en colocar éste código en el programa principal. A
continuación se presenta un programa que permite visualizar el tipo de dispositivo y
la versión del firmware del coprocesador ATMEL™ incluido en la iBOARD III.

CAP_11_Ejemplo_01.bas
' Programa para identificar el coprocesador ATMEL del sistema
' de desarrollo iBOARD III.
' --------------------------------------------------------------
Device 16F876
XTAL 20

Dim I As Byte ' Var. uso general para identificación


Dim J As Byte ' Var. uso general para identificación
Dim K As Byte ' Var. uso general para identificación
Dim RESP As Byte ' Var. uso general (Obligatoria)
Dim FED As Byte ' Var. uso general (Obligatoria)

Symbol OWP = PORTB.0 ' Puerto.pin conexión a la iBOARD III

DelayMS 10 ' Retardo inicial requerido por el


' coprocesador ATMEL.

' PROGRAMA PRINCIPAL ------------------------------------------


Figura 11.2. Resultado de la ejecución del programa CAP_11_Ejemplo_01.bas.
Main:
' Instrucciones requeridas para configurar el multiplexor
' 1-Wire del sistema iBAOR III. Integrado (U6)

OWrite OWP,1,[$CC, $CC, $FF] ' Skip ROM, Seleccionar Aux (U6) 11.1. El coprocesador utilizado como Salidas Digitales
ORead OWP,0,[RESP, FED] ' Respuesta, feedback

' De Aquí en adelante ya se trabajará directamente con el El proceso para configurar y activar los pines de salida del coprocesador es
' coprocesador ATMEL. Primero se envía el comando $DD para sencillo. Se realiza la configuración a través del envío de un byte que contiene la
' indicarle que queremos conocer su identificación. El co_ información de los pines que se activarán como salidas digitales y además el valor
' procesador devolverá tres (3) bytes de información: que tomarán estos pines de salida cero (0) lógico ó uno (1) lógico.
' I,J se refieren al tipo de dispositivo, K se ref. versión

79
El formato es el siguiente:

0 0 A1 A0 0 1 0 N

Si A1 A0 = 00; entonces se activa como salida al pin CP0


Si A1 A0 = 01; entonces se activa como salida al pin CP1
Si A1 A0 = 10; entonces se activa como salida al pin CP2
Si A1 A0 = 11; entonces se activa como salida al pin CP3

Si N = 0; El valor de salida de la salida(s) activada(s) será = 0 lógico


Si N = 1; El valor de salida de la salida(s) activada(s) será = 1 lógico

' CAP_11_Ejemplo_02.bas
' Programa para configurar al coprocesador como salida digital y en_
' cender - apagar un led conectado al pin CP0 del coprocesador. Pa_
' ra ello habrá que conectar un diodo led entre el pin CP0 de la
' iBOARD III en serie con una resistencia de 220 ohm a tierra.
' ------------------------------------------------------------------
Device 16F876
XTAL 20
Dim RESP As Byte ' Var. uso general (Obligatoria)
Dim FED As Byte ' Var. uso general (Obligatoria)
Symbol OWP = PORTB.0 ' Puerto.pin conexión a la iBOARD III
DelayMS 10 ' Retardo inicial requerido por el
' coprocesador ATMEL.
Main:
' Instrucciones requeridas para configurar el multiplexor 1-Wire
' del sistema iBOARD III. Integrado (U6). (Obligatorio) ........

OWrite OWP,1,[$CC, $CC, $FF] ' Skip ROM, Seleccionar Aux (U6)
ORead OWP,0,[RESP, FED] ' Respuesta, feedback
Figura 11.3. Resultado de la ejecución del programa CAP_11_Ejemplo_02.bas.
' De Aquí en adelante ya se trabajará directamente con el coproce_
' sador ATMEL. Primero se envía el comando $04 para colocar un
' cero lógico (0 Vdc) en el pin CP0, esto apagará el LED conectado Nota: Los 4 pines disponibles del coprocesador (CP0, CP1, CP2 y CP3) se pueden
' en este pin. Después de una pausa de 250 ms. Se enviará el coman configurar como salidas y tomar valores arbitrarios 0 ó 1. Si se desea que todas las
' do $05 para colocar un lógico (5Vdc) en el pin CP0,esto encederá salidas sean de valor cero lógico (0Vdc), se le debe enviar al coprocesador los bytes
' el LED conectado en este pin. Luego de otro retardo de 250 ms,el
' programa volverá a ejecutarse en forma cíclica.
de configuración:

Loop: 0 0 A1 A0 0 1 0 N
OWrite OWP,0,[$04]
DelayMS 250 $04; para activar y poner a cero la salida al pin CP0
OWrite OWP,0,[$05] $14; para activar y poner a cero la salida al pin CP1
DelayMS 250 $24; para activar y poner a cero la salida al pin CP2
GoTo Loop $34; para activar y poner a cero la salida al pin CP3
End

80
Por el contrario, si se desea que todas las salidas tengan el valor uno lógico ' De Aquí en adelante ya se trabajará directamente con el coproce_
(5Vdc), se le debe enviar al coprocesador los bytes de configuración: ' sador ATMEL. Primero se envía el comando $10 para configurar
' al pin CP1 como entrada analógica. Luego se lee el valor de ésta
' entrada y se almacena en la variable EstadoPin. Luego se pre_
0 0 A1 A0 0 1 0 N ' gunta por el valor de la variable EstadoPin si es:
' . cero (0) se activa al pin CP0 como salida y se coloca a 0Vdc
$05; para activar y poner a cero la salida al pin CP0 ' . uno (1) se activa al Pin CP0 como salida y se coloca a 5Vdc
' Luego de un retardo de 50 ms, el programa volverá a ejecutarse
$15; para activar y poner a cero la salida al pin CP1 ' en forma cíclica.
$25; para activar y poner a cero la salida al pin CP2
$35; para activar y poner a cero la salida al pin CP3 Loop:
OWrite OWP,0,[$10] ' Se configura CP1 como entrada
ORead OWP,4,[EstadoPin] ' Se lee el valor del pin CP1 y su
' valor se almacena en EstadoPin.
11.2. El coprocesador utilizado como Entradas Digitales
If EstadoPin = 0 Then
El proceso para configurar y activar los pines de entrada del coprocesador, se OWrite OWP,0,[$04] ' Si EstadoPin = 0 se apaga el LED
realiza con el envío de un byte que contiene la información de los pines que se Else
activarán como entradas digitales. OWrite OWP,0,[$05] ' Si EstadoPin = 1 se enciende LED
EndIf
DelayMS 50 ' Retardo 50 ms
El formato es el siguiente: GoTo Loop
End
0 0 A1 A0 0 0 0 0

Si A1 A0 = 00; entonces se activa como entrada al pin CP0


Si A1 A0 = 01; entonces se activa como entrada al pin CP1
Si A1 A0 = 10; entonces se activa como entrada al pin CP2
Si A1 A0 = 11; entonces se activa como entrada al pin CP3

' CAP_11_Ejemplo_03.bas
' Programa para configurar los pines del coprocesador. Pin CP0 como
' salida digital y el pin CP1 como entrada digital. El programa de_
' berá funcionar de la siguiente forma. El pin CP0 deberá tomar el
' valor del pin de entrada CP1. Así, si conectamos un pulsador en el
' pin CP1 en configuración activa - alto, cada vez que este sea pre_
' sionado deberá encender el LED conectado al pin CP0.
' ------------------------------------------------------------------
Device 16F876
XTAL 20
Dim RESP As Byte ' Var. uso general (Obligatoria)
Dim FED As Byte ' Var. uso general (Obligatoria)
Dim EstadoPin As Bit ' Var. uso general estado del pin
Symbol OWP = PORTB.0 ' Puerto.pin conexión a la iBOARD III

DelayMS 10 ' Retardo inicial requerido por el


' coprocesador ATMEL.
Main:
' Instrucciones requeridas para configurar el multiplexor 1-Wire
' del sistema iBOARD III. Integrado (U6). (Obligatorio) ........

OWrite OWP,1,[$CC, $CC, $FF] ' Skip ROM, Seleccionar Aux (U6)
ORead OWP,0,[RESP, FED] ' Respuesta, feedback Figura 11.4. Resultado de la ejecución del programa CAP_11_Ejemplo_03.bas.

81
En ocasiones es necesario colocar a un pin de entrada simplemente en tres
estados (Alta impedancia). Esto lo podrá hacer enviando el mismo byte de A3..A0 Frecuencia (Hz) Codificación
configuración como si el pin fuera una entrada, pero con la diferencia de usar el 0000 37500,oo OWrite OWP,0,[$F0]
modo de comunicación 1-Wire® (2). Por ejemplo, si se desea configurar el pin CP1
como tres estados, se deberá enviar la siguiente instrucción: 0001 18823,53 OWrite OWP,0,[$F1]
0010 4687,50 OWrite OWP,0,[$F2]
OWrite OWP,2,[$10] ' Se configura CP1 como tres estados
0011 2352,94 OWrite OWP,0,[$F3]
0100 585,94 OWrite OWP,0,[$F4]
11.3. El coprocesador utilizado como Salidas PWM 0101 294,12 OWrite OWP,0,[$F5]
0110 146,48 OWrite OWP,0,[$F6]
Los pines del coprocesador CP2 y CP3 se pueden configurar como salidas de
una señal PWM (Modulación del ancho del pulso) con un ciclo útil programable (0- 0111 73,52 OWrite OWP,0,[$F7]
100)% en 255 pasos independientes. Si a la salida del pin que está generando una 1000 36,62 OWrite OWP,0,[$F8]
señal PWM se coloca un filtro pasa bajos, se podrá implementar un convertidor 1001 18,38 OWrite OWP,0,[$F9]
digital – analógico; por supuesto de poca precisión. La salida PWM puede ser
utilizada para manejar, con un apropiado circuito “driver”, cargas inductivas y
Figura 11.5. Diferentes frecuencias de salida para la señal PWM.
elementos de electrónica de potencia. La frecuencia máxima a la cual se puede
generar la PWM es de 37.5 KHz. El comando requerido para la generación de la Nota: El fabricante diseñó el coprocesador para que la selección de las frecuencias
PWM utiliza dos bytes. El primer byte configura cual(es) pin(es) de salida(s) serán arriba indicadas bajo números impares (1,3,5,7,9) produzcan una señal PWM con
salidas PWM y el segundo byte es un número entre $00 y $FF que especifica el ciclo pulsos corregidos en fase, es decir, cuando el valor del ciclo útil cambia, el cambio
útil de la señal PWM a generar. Ambos pines CP2 y CP3 se pueden configurar en es hecho en forma simétrica sobre el centro del pulso. Esto es muy utilizado en
forma arbitraria y con valores diferentes de ciclo útil. aplicaciones para controlar la velocidad de los motores DC, donde un corrimiento de
fase del pulso no es deseado.
0 0 A1 A0 0 1 1 Inv
' CAP_11_Ejemplo_04.bas
' Programa para configurar los pines del coprocesador Pin CP2 como
Segundo Byte: de $00 a $FF ' salida digital PWM con un ciclo útil que variará entre (0-100)% en
' 10 pasos generados en un intervalo de 10 seg. La frecuencia de la
Si A1 A0 = 10; entonces se activa como salida PWM al pin CP2 ' PWM generada será de aprox. 4.687 KHz. El pin de salida CP2 se de_
Si A1 A0 = 11; entonces se activa como salida PWM al pin CP3 ' berá conectar a un diodo LED en serie con una resistencia de 220
' Ohm de esta forma el LED cambiará cada segundo su brillo en forma
' ascendente. Esto será repetido en forma cíclica.
Si Inv = 0; Los pulsos PWM serán ascendentes (Alfa) ' ------------------------------------------------------------------
Si Inv = 1; Los pulsos PWM serán descendentes (Beta) Device 16F876
XTAL 20
La frecuencia a la cual se generará(n) la(s) señal(es) PWM es la misma para los Dim RESP As Byte ' Var. uso general (Obligatoria)
dos pines CP2 y CP3 y se puede configurar a través del envío de un comando con el Dim FED As Byte ' Var. uso general (Obligatoria)
Dim I As Byte ' Var. uso general como contador
siguiente formato: Symbol OWP = PORTB.0 ' Puerto.pin conexión a la iBOARD III

1 1 1 1 A3 A2 A1 A0 DelayMS 10 ' Retardo inicial requerido por el


' coprocesador ATMEL.
donde A3 A2 A1 A0: representa un número binario de 4 bits, que puede tomar el Main:
' Instrucciones requeridas para configurar el multiplexor 1-Wire
valor desde cero (0) a nueve (9). La figura 11.5., muestra una tabla que relaciona ' del sistema iBOARD III. Integrado (U6). (Obligatorio) ........
las diez posibles combinaciones binarias con las frecuencia PWM de salida que se
pueden obtener para los pines de salida PWM CP2 y CP3. OWrite OWP,1,[$CC, $CC, $FF] ' Skip ROM, Seleccionar Aux (U6)
ORead OWP,0,[RESP, FED] ' Respuesta, feedback

82
' De Aquí en adelante ya se trabajará directamente con el ATMEL Main:
' ------------------------------------------------------------- ' Instrucciones requeridas para configurar el multiplexor 1-Wire
OWrite OWP,0,[$F2] ' Configura Freq. Salida PWM = 4687.5 KHz ' del sistema iBOARD III. Integrado (U6). (Obligatorio) ........

Loop: OWrite OWP,1,[$CC, $CC, $FF] ' Skip ROM, Seleccionar Aux (U6)
For I = 0 To 255 Step 25 ORead OWP,0,[RESP, FED] ' Respuesta, feedback
OWrite OWP,0,[$26, I] ' Configura Salida PWM = CP2,
' ciclo útil = I ' De Aquí en adelante ya se trabajará directamente con el ATMEL
DelayMS 1000 ' -------------------------------------------------------------
Next OWrite OWP,0,[$F2] ' Configura Freq. Salida PWM = 4687.5 KHz
GoTo Loop
End Loop:
OWrite OWP,0,[$26, 127] ' Configura Salida PWM = CP0, CU=50%
Conteo = 0 ' Configura Entrada CP1 "counter" y
11.4. El coprocesador utilizado como Contador Digital OWrite OWP,0,[$13] ' comienza a medir los pulsos de CP2
DelayMS 1000 ' Retardo de 1000 ms = 1 seg

El proceso para configurar y activar los pines del coprocesador como entradas ORead OWP,1,[Conteo.HighByte, Conteo.LowByte]
de conteo “counter” se realiza a través del envío de un byte que contiene la HRSOut "Frec. Leída en CP1 = ", Dec Conteo*2, 13
información de los pines que se activarán como entradas de conteo de pulsos. El
formato del byte de control es el siguiente: DelayMS 500
GoTo Loop
End
0 0 A1 A0 0 0 1 1

Si A1 A0 = 00; entonces se activa como entrada “counter” al pin CP0


Si A1 A0 = 01; entonces se activa como entrada “counter” al pin CP1
Si A1 A0 = 10; entonces se activa como entrada “counter” al pin CP2
Si A1 A0 = 11; entonces se activa como entrada “counter” al pin CP3

El conteo de la señal de entrada devuelve un resultado de un número de 16 bits,


por ello el conteo mínimo será cero (0) y el máximo de 65535.

' CAP_11_Ejemplo_05.bas
' Programa para configurar los pines del coprocesador: Pin CP2 como
' salida digital PWM con un ciclo útil del 50% a una frecuencia de
' 4.687 KHz El pin de entrada CP1 se configurará como "counter" y se
' deberá conectar al pin CP2 a fin de medir la frecuencia de salida
' de la señal PWM generada en ese pin. El conteo de los pulsos se
' hará en un intervalo de 1 seg. a fin de determinar la frecuencia
' de entrada que deberá ser igual al No. de pulsos/2 contados en 1 s
' El resultado se presentará a través del IDE Serial Comunicator ...
' ------------------------------------------------------------------
Device 16F876
XTAL 20
Dim RESP As Byte ' Var. uso general (Obligatoria)
Dim FED As Byte ' Var. uso general (Obligatoria)
Dim Conteo As Word ' Var. uso general como contador
Symbol OWP = PORTB.0 ' Puerto.pin conexión a la iBOARD III

DelayMS 10 ' Retardo inicial requerido por el


' coprocesador ATMEL. Figura 11.6. Resultado de la ejecución del programa CAP_11_Ejemplo_05.bas.

83
CAPÍTULO 12
MODULO CCP/PWM. Captura, Comparación y PWM

Introducción. El PIC16F876 posee dos módulos CCP (CCP1 y CCP2) Captura, bit 3-0: CCPxM3:CCPxM0: Bits de selección
Comparación y PWM, los cuales, realiza tres funciones diferentes según su nombre
0000 =
Reset del módulo CCPx. Captura/Comparación/PWM = OFF
lo indica. El módulo CCP1 tiene asignado el pin PORTC<2> y el CCP2 tiene asignado
0100 =
Modo Captura, cada transición beta 1-> 0
el pin PORTC<1>. Ambos módulos pueden ser configurados a través de sus
0101 =
Modo Captura, cada transición alfa 0-> 1
registros asociados CCP1CON y CCP2CON.
0110 =
Modo Captura, a la cuarta transición alfa 0 -> 1
0111 =
Modo Captura, a la 16va. transición alfa 0-> 1
12.1. Modo de Captura
1000 =
Modo Comparación, coloca a uno (1) lógico el pin de salida
Modo Captura: Esta función se utiliza para la determinación de la duración de un PORTC<2:1>, cuando se activa la bandera de int. CCPxIF
pulso aplicado a los pines PORTC<2:1>. La Captura de una señal comienza cuando 1001 = Modo Comparación, coloca a cero (0) lógico el pin de salida
cambia el valor de entrada del pin PORTC<2> ó PORTC<1>, lo cual, desencadena PORTC<2:1>, cuando se active la bandera de int. CCPxIF
una serie de eventos como la copia el contenido del Timer1 (TMR1H, TMR1L) en los 1010 = Modo Comparación, genera interrupción CCPxIF, el valor lógico
registros (CCPR1H, CCPR1L) y la activación de la bandera de interrupción. Los del pin de salida PORTC<2:1> no cambia.
posibles cambios en los pines PORTC<2:1> que pueden desencadenar una captura 1011 = Modo Comparación, genera interrupción CCPxIF, el valor lógico
son: del pin de salida PORTC<2:1> no cambia. Si está utilizando el
• Una (01) transición de nivel Alto a nivel Bajo en el pin PORTC<2:1> CCP1, el valor del registro TMR1 es colocado a cero (0). Si está
• Una (01) transición de nivel Bajo a nivel Alto en el pin PORTC<2:1> utilizando el CCP2, el valor del TMR1 es colocado a cero (0) y se
• Cuatro (04) transiciones de nivel Bajo a nivel Alto en el pin PORTC<2:1> produce la habilitación del módulo de conversión A/D.
• Dieciséis (16) transiciones de nivel Bajo a nivel Alto en el pin PORTC<2:1> 11xx = Modo PWM.

Los registros de configuración tanto para el CCP1 y CCP2 son los encargados de En la Figura 12.2., se observa el diagrama de bloques funcionales del módulo
la selección y/o configuración de las diferentes funciones y bits asociadas a los CCP1. Cuando el evento preprogramado a través de los bits CCP1M3 al CCP1M0
módulos CCP. En la figura 12.1. se observan los bits que conforman cada uno de los dispara, la captura del valor del TMR1 se copia al registro CCPR1 y al mismo tiempo
registros de configuración CCP1CON y CCP2CON. la bandera de interrupción bit CCPR1IF se activa.

Figura 12.1. Registro de configuración del módulo CCP ( CCP1CON y CCP2CON).

Para el PIC16F876, el significado de cada bit es el siguiente:

bit 7-6: No implementados: Se leerán como ceros “0”


bit 5-4: CCPxX:CCPxY: Bits menos significativos asociados al módulo PWM
En modo Captura : No se utilizan
En modo Comparación: No se utilizan
En modo PWM: Estos bits son los bits menos significativos del ciclo útil
PWM. Los ocho bits más significativos se encuentran en el registro CCPRxL. Figura 12.2. Representación en bloques del módulo CCP1.
Fuente: Tomado de www.mikroe.com

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


85
12.2. Modo de Comparación 12.3. Modo PWM

Modo Comparación: Esta función se utiliza en general, para disparar un evento Modo PWM: Se utiliza para generar señales con el algoritmo de la modulación del
externo a través del pin PORTC<2:1> del microcontrolador, evento es dependiente ancho del pulso, lo que significa, que las señales pueden variar en forma
de la comparación de dos registros internos del microcontrolador, asociados al independiente la frecuencia y el ciclo útil. Para entender que significado tiene la
módulo CCP. La Comparación literalmente significa: El valor del registro del Timer1 frecuencia y el ciclo útil, podemos observar la figura 12.4. Si un cero (0) lógico por
es continuamente comparado con un valor prefijado en el registro CCPR1 ó CCPR2, analogía representa la conexión abierta de un interruptor que alimenta a una
cuando los registros alcancen el mismo valor, uno de los cuatro posibles eventos bombilla y un uno (1) lógico representa la conexión cerrada de un interruptor,
ocurrirán: entonces, la potencia en la bombilla será directamente proporcional a la duración
del pulso. Esta relación se denomina ciclo útil.
Para el módulo CCP1

• El Pin PORTC<2> es colocado a uno (1) lógico


• El Pin PORTC<2> es colocado a cero (0) lógico
• El Pin PORTC<2> no sufre ningún cambio de estado lógico
• El Pin PORTC<2> no sufre ningún cambio de estado lógico y el Timer1 es
colocado en cero (reset). El TMR1 deberá estar sincronizado con el
oscilador interno del PIC.

Para el módulo CCP2

• El Pin PORTC<1> es colocado a uno (1) lógico


• El Pin PORTC<1> es colocado a cero (0) lógico
• El Pin PORTC<1> no sufre ningún cambio de estado lógico
• El Pin PORTC<1> no sufre ningún cambio de estado lógico. El Timer1 es Figura 12.4. Diferente ciclos útiles de una señal PWM.
colocado en cero (reset) y se habilita el módulo de conversión A/D para Fuente: Tomado de www.mikroe.com
realizar una conversión como se puede observar en la Figura 12.3. Nota: El
TMR1 deberá estar sincronizado con el oscilador interno del PIC.
Período de una Señal: El período de una señal (T), se define a través del registro
PR2 perteneciente al TMR2. El período de una señal puede ser calculado a través de
la siguiente formula:

PWM Período (T) = (PR2 +1) * 4Tosc * TMR2 Prescale Value


Frecuencia F = 1/T

Figura 12.5. Período y ciclo útil de una señal.


Figura 12.3. Representación en bloques del módulo CCP2.
Fuente: Tomado de www.mikroe.com
Fuente: Tomado de www.mikroe.com

86
Figura 12.6. Período y ciclo útil de una señal relacionada a los registros del Timer2.
Fuente: Manual técnico del PIC16F876.

Cuando el valor contenido en el registro TMR2 es igual al valor contenido en el


registro PR2, ocurren los siguientes eventos:

• El valor del registro TMR2 es colocado en cero (0)


• El pin relacionado al CCP1 es colocado a uno (1) lógico
• El valor del ciclo útil del PWM es pasado desde el registro CCPR1L al
CCPR1H
Figura 12.8. Representación en bloques del módulo PWM.
Ciclo útil de una Señal: El ciclo útil de una señal generada utilizando el modo Fuente: Tomado de www.mikroe.com
PWM, tiene una resolución de 10 bits. Los ocho bits más significativos se
encuentran en el registro CCPR1L y los dos bits menos significativos se encuentran Resolución: Una señal PWM no es
en el registro de configuración CCP1CON bits (CCPxX:CCPxY ). El ciclo útil se puede más que una secuencia de pulsos que
calcular a través de la siguiente formula: varían su ciclo útil. Para una
frecuencia específica (No. de pulsos x
Ciclo útil = (CCPR1L:CCP1CON<5:4>) * Tosc * TMR2 Prescale Value seg), existen un número discreto de
combinaciones. Este número es
Los registros CCPR1L y CCP1CON<5:4> pueden ser escritos en cualquier llamado resolución, la cual, depende de del valor contenido en el registro PR2 y de
momento, sin embargo, el valor del ciclo útil no pasará al registro CCPR1H hasta
la frecuencia generada. La mayor resolución es obtenida cuando el registro PR2
que el valor del registro PR2 y el valor del registro TMR2 sean iguales. La tabla de
tiene el valor $FF. En la figura 12.9 , se observan diferentes resoluciones obtenidas
la Figura 12.7, muestra como generar señales PWM de diferentes frecuencias a
de una señal PWM cuando se utiliza un oscilador de 20 MHz.
través del microcontrolador PIC. Estos valores están relacionados al uso de un
oscilador de 20 MHz.

Figura 12.7. Frecuencia de una señal obtenida a partir el valor de los registros Figura 12.9. Resolución obtenida a partir de la frecuencia y el valor del registro PR2.
TMR2 y PR2. Fuente: Tomado de www.mikroe.com Fuente: Tomado de www.mikroe.com

87
12.4. Registros asociados a la Captura, Comparación y TMR1 12.5. Registros asociados al módulo PWM y TMR2

Figura 12.11. Registros asociados al módulo PWM y al TMR2.


Fuente: Manual técnico del PIC16F876.

Figura 12.10. Registros asociados al módulo de Captura, Comparación y al TMR1. Banderas de interrupción: CCP2IF, TMR2IF
Fuente: Manual técnico del PIC16F876. Habilitación de interrupciones: CCP2IE, TMR2IE
Configuración del módulo PWMx: CCPxCON<5:0>, CCPxCON<5:0>
Banderas de interrupción: CCP1IF, CCP2IF, TMR1IF Configuración Timer2: T2CON<6:0>
Habilitación de interrupciones: CCP1IE, CCP2IE, TMR1IE
Configuración del módulo CCPx: CCPxM<3:0>
Configuración Timer1: T1CON<5:0> El compilador Basic® PROTON® no posee comandos en alto nivel para el
manejo de los módulos de Captura y Comparación. Si se desea utilizar estos
módulos, el usuario tendrá que configurar los registros asociados al módulo CCP en
forma manual y/o habilitar las interrupciones. El siguiente ejemplo, muestra como
trabajar con el módulo CCP para realizar la captura de una señal introducida a
través el módulo CCP1 y de esta forma determinar el período y la frecuencia de la
misma. El resultado se presentará en la pantalla LCD.

88
12.6. Ejemplos de aplicación del módulo CCP1 en modo Captura
' CAP_12_Ejemplo_01.bas
' Ejemplo básico de utilización del módulo de Captura / Comparación
' CCP1 para la medición del período y la frecuencia de una señal CAPTURE = 0 ' Se limpia la bandera de Captura
' introducida por el pin PORTC<2>. El resultado deberá ser mostrado While CAPTURE = 0 : Wend ' Espera para el prox. Captura
' en la pantalla LCD. Nota: para la generación de la señal se Clear TIMER1 ' Se inicializa el Timer 1
' utilizará el microcontrolador coprocesador ATMEL, generando una CAPTURE = 0 ' Se inicializa bandera Captura
' una señal PWM de 50% Ciclo útil a 4687,50 KHz. OVERFLOW = 0 ' Se inicializa bandera overflow T1
' ----------------------------------------------------------------- GoTo Main
Device = 16F876 End
XTAL 20
Coprocesador:
' Declaraciones para el manejo y utilización de la LCD ' Instrucciones requeridas para configurar el multiplexor 1-Wire
'----------------------------------------------------------------- ' del sistema iBOARD III. Integrado (U6). (Obligatorio) ........
Declare LCD_DTPIN PORTB.4 ' Pin de Datos LCD conec. al PORTB.4
Declare LCD_ENPIN PORTB.3 ' Pin de Enable LCD conec. al PORTB.3 OWrite PORTB.0,1,[$CC, $CC, $FF] ' Skip ROM, Seleccionar Aux (U6)
Declare LCD_RSPIN PORTB.1 ' Pin de RS LCD conec. al PORTB.1 ORead PORTB.0,0,[RESP, FED] ' Respuesta, feedback
Low PORTB.2 ' Pin de RW LCD conec. al PORTB.2
' De Aquí en adelante ya se trabajará directamente con el ATMEL
' Variables requeridas por el coprocesador ATMEL ' ---------------------------------------------------------------
' ---------------------------------------------------------------- OWrite PORTB.0,0,[$F2] ' Conf.Freq. Salida PWM = 4687.5 KHz
Dim RESP As Byte ' Var. uso general (Obligatoria) OWrite PORTB.0,0,[$26, 127] ' Configura Salida PWM = CP2, CU=50%
Dim FED As Byte ' Var. uso general (Obligatoria) Return

' Variables, constantes y símbolos utilizados por el programa


' ----------------------------------------------------------------
Dim PERIOD As Word ' Var. para almacenar el período
Symbol CCPR1 = CCPR1L.Word ' Crea una var. alias reg. CCPRL1
Symbol TIMER1 = TMR1L.Word ' Crea una var. alias reg. TMR1L
Symbol CAPTURE = PIR1.2 ' Bandera de interrup. por CCP1
Symbol OVERFLOW = PIR1.0 ' Bandera de interrup. por TMR1

' Programa principal


' ----------------------------------------------------------------
DelayMS 1000 ' Retardo requerido por la LCD
ALL_DIGITAL = True ' Configura todos los puertos dig.
GoSub Coprocesador ' Configura coprocesador para generar
' señal PWM por CP2, 50% CU 4687.5 Hz

CCP1CON = %00000100 ' Hab. Captura por CCP1, por flanco


T1CON = %00000001 ' beta (1 ->0) TMR1 prescale = 1

Main:
While CAPTURE = 0 : Wend ' Espera la bandera de Captura
PERIOD = CCPR1 ' Almacena valor capturado en PERIOD

If OVERFLOW = 0 Then ' Si TMR1 = overflow no muestra LCD


Print At 1,1, "Peri.: " , Dec PERIOD , " us "
Print At 2,1, "Freq.: " , DEC2 5000.0 / PERIOD, " KHz "
DelayMS 250
EndIf
Figura 12.12. Fotografía de la corrida del programa CAP_12_Ejemplo_01.bas
Módulo de Captura y comparación.

89
12.7. Comando en Alto nivel para HPWM por hardware 12.8. Comando en Alto nivel para PWM por software

El compilador Basic® PROTON® posee un comando denominado HPWM, el El compilador Basic® PROTON® también puede generar señales PSEUDOS
cual, fue creado para manejar en alto nivel módulos CCPx del PIC16F876 y generar PWM, significa señales PWM generadas por algoritmos en software, ejecutadas por
señales utilizando algoritmo de la modulación del ancho del pulso PWM. Esto sin el CPU del microcontrolador y no ejecutadas en forma independiente por el
necesidad de que usted tenga que configurar los registros asociados en el hardware periférico módulo CCPx. La ventaja de la PWM por software, es que se
microcontrolador. Esto no significa que no podamos generar una señal PWM a puede ejecutar sobre cualquier pin del microcontrolador. La desventaja es que
través de la configuración de los registros, de echo, se hará un ejercicio práctico consume ciclos de reloj del CPU y por ello no es una tarea que se pueda realizar en
para llevar a cabo la generación de una señal PWM a través de la configuración de al mismo tiempo de ejecución de otras instrucciones en el microcontrolador. La
los registros del modulo CCP1 y otro ejercicio utilizando el comando en alto nivel sintaxis para este tipo de comando es:
HPWM. La sintaxis del comando es:
PWM Pin , Ciclo útil, Ciclos
HPWM Canal , Ciclo útil , Frecuencia
• Pin – Un valor constante que especifica cual pin del microcontrolador se
• Canal – Un valor constante que especifica cual módulo CCPx se utilizará, las utilizará. PORT.pin
opciones son CCP1 ó CCP2. En el PIC16F876 la frecuencia para la generación
PWM en ambos canales deberá ser la misma, mientras que el ciclo útil es • Ciclo útil – Una variable, constante (0-255), o expresión que especifica la
ajustable e independiente para cada canal. Los pines del microcontrolador relación entre los estados lógicos altos y bajos de la señal.
asociados a cada módulo CCPx son: Para el CCP1 -> PORTC<2> y para el • Ciclos – Una Variable ó constante (0-255) que especifica el número de ciclos de
CCP2 -> PORTC<1>. salida de la señal a generar. El valor de los ciclos es dependiente del oscilador
• Ciclo útil – Una variable, constante (0-255), o expresión que especifica la utilizado, para un oscilador de 20 MHz la duración de cada ciclo será aprox. 1
relación entre los estados lógicos altos y bajos de la señal. ms.

• Frecuencia – Una variable, constante (0-32767), o expresión que especifica la


frecuencia en (Hz) de la señal a generar. La mayor frecuencia que se puede El comando PWM, puede ser
generar es de 32767 Hz. Y la menor frecuencia que se puede generar utilizando utilizado para generar voltajes
un oscilador como el que viene incluido en el sistema de desarrollo es de 1221 analógicos en el rango de (0-5) Vdc a
Hz. través de un pin del microcontrolador y
un arreglo resistencia – condensador
La directiva declare se utiliza al comienzo del programa para indicar los pines como el mostrado en la figura anexa.
asociados a los módulos CCPx. Por defecto para el módulo CCP1 es el pin Debido a que el condensador se
PORTC<2> y para el CCP2 es el pin PORTC<1>. descargará gradualmente, el comando
PWM deberá ser ejecutado en forma
DECLARE CCP1_PIN PORTC.2 periódica a fin de refrescar el voltaje en
DECLARE CCP2_PIN PORTC.1 el condensador.

PWM colocará un cero(0) ó un uno (1) en la salida del pin a una rata controlada
por el ciclo útil escogido. Si el ciclo útil es uno (1) el pin estará alimentado
constantemente con un voltaje cercano al de alimentación Vdd = 5 Vdc. Por el
contrario, si el ciclo útil es cero (0) el pin tendrá un voltaje cercano a 0 Vdc. Para
valores entre 0 y 255 la proporción será: Ciclo útil /255. por ejemplo, si el ciclo útil
es igual a 127 voltaje del pin aprox = 127/255 * 5Vdc = 2.49 Vdc.

90
12.9. Ejemplo de HPWM y configuración a través de registros
' CAP_12_Ejemplo_02.bas
' Ejemplo básico de utilización del módulo de CCP1 a través de los
' registros. Se generará una señal HPWM de frecuencia aprox. 5 KHz
' que varia su ciclo útil entre 20% y 80% en 3 segundos. CCP1 se_
' ra el módulo a utilizar PORTC<2> al mismo se le colocará un LED
' en serie con una resistencia de 220 Ohm para poder observar los
' cambios en el brillo del LED.
' -----------------------------------------------------------------
Device = 16F876
XTAL 20

Dim Duty As Word ' Ciclo útil, registro:


' CCPR1L:CCP1CON<5:4>)

TRISC.2 = 0 ' CCP1 como salida PORTC<2> pin salida


CCP1CON = %00001100 ' Configura a CCP1 como PWM
T2CON = %00000101 ' Configura Timer2, Prescalador = 4
PR2 = 249 ' Ajusta PR2 para obtener 5KHz salida
Duty = 200 ' Ajusta el ciclo útil a 20%

Loop:
CCP1CON.4 = Duty.0 ' Almacena el ciclo útil como una
CCP1CON.5 = Duty.1 ' palabra de 10-bit
CCPR1L = Duty >> 2
Duty = Duty + 10 ' Incrementa el ciclo útil
DelayMS 50 ' Retardo de 50 ms seg.
If Duty < 800 Then Loop ' Incrementa hasta el 80%
Duty = 200 ' Se regresa a 20%
GoTo Loop

Figura 12.12. Fotografía de la corrida del programa CAP_12_Ejemplo_02.bas y


12.10. Ejemplo de HPWM y comandos en alto nivel CAP_12_Ejemplo_03. Módulo de Captura, comparación y PWM.
' CAP_12_Ejemplo_03.bas
' Ejemplo básico de utilización del módulo de CCP1 a través de el
' comando en alto nivel HPWM. Se generará una señal de frecuencia
' aprox. 5 KHz que varie su ciclo útil entre 20% y 80% en 3 seg.
' CCP1 será el módulo a utilizar PORTC<2> al mismo se le colocará
' un LED en serie con una resistencia de 220 Ohm para observar los
' cambios en el brillo del LED.
' ----------------------------------------------------------------
Device = 16F876
XTAL 20

Declare CCP1_PIN PORTC.2 ' Declaración del pin a usar


Dim Duty As Byte ' Variable Ciclo útil

Loop:
For Duty = 50 To 200 Step 15
HPWM 1,Duty,5000 ' HPWM pin PORTC<2> ciclo útil
DelayMS 250 ' y freq. 5000 Hz.
Next
GoTo Loop
End

91
11.5. El coprocesador utilizado como Conversor A/D

El coprocesador dispone de dos pines (CP0 y CP1) que pueden ser OWrite OWP,1,[$CC, $CC, $FF] ' Skip ROM, Seleccionar Aux (U6)
configurados como entradas analógicas a fin de realizar la conversión A/D de 10 ORead OWP,0,[RESP, FED] ' Respuesta, feedback
bits de resolución. La conversión A/D se puede realizar utilizando como referencia el
voltaje de alimentación al chip (Vdd) ó a través de una referencia interna de 1.1 ' De Aquí en adelante ya se trabajará directamente con el ATMEL
' -------------------------------------------------------------
Volt. La configuración se realiza con el envío de un byte que contiene la información Loop:
de los pines que se activarán como entradas para la conversión A/D. El formato del OWrite OWP,0,[%00001011] 'Conf. CP0 conv. A/D con Ref. = Vdd
byte de control es el siguiente: Repeat
ORead OWP,4,[Busy]
Until Busy <> 1
0 0 A1 A0 1 Ref 1 1
ORead OWP,0,[ValorAD.HighByte, ValorAD.LowByte]
Voltaje = ValorAD * (5/1023) ' Factor de conversión A/D
Si A1 A0 = 00; entonces se activa como entrada A/D el pin CP0
Si A1 A0 = 01; entonces se activa como entrada A/D el pin CP1 HRSOut "Volt. LED(On) = ", DEC2 Voltaje," Vdc", 13

DelayMS 1000
Si Ref = 0; El voltaje de ref. utilizado para la CAD será Vdd GoTo Loop
Si Ref =1; El voltaje de ref. utilizado para la CAD será 1.1 Volt End

El resultado de la conversión A/D es un número de 10 bits, por ello, el valor


mínimo será de 0 y el máximo de 1023. Para poder leer el valor obtenido de una
conversión A/D será necesario consultar el coprocesador para determinar si está
ocupado “busy” o ya ha alcanzado la conversión A/D. El siguiente ejemplo, muestra
como realizar una conversión A/D a través del pin CP0 del coprocesador.

' CAP_11_Ejemplo_06.bas
' Programa para configurar los pines del coprocesador: Pin CP0 como
' entrada para realizar una conversión A/D y de esta forma determinar
' la tensión en directo (ON) de un diodo LED conectado a Vdd a través
' de una resistencia en serie de 220 Ohm. Se deberá conectar el Pin
' CP0 al ánodo del diodo LED. El resultado se presentará a través del
' IDE Serial Comunicator ...
------------------------------------------------------------------
Device 16F876
XTAL 20
Dim RESP As Byte ' Var. uso general (Obligatoria)
Dim FED As Byte ' Var. uso general (Obligatoria)
Dim ValorAD As Word ' Var. uso general para la CAD
Dim Voltaje As Float ' Var. uso general para la CAD
Dim Busy As Bit ' Var. uso general para la CAD
Symbol OWP = PORTB.0 ' Puerto.pin conexión a la iBOARD III
Figura 11.7. Resultado de la ejecución del programa CAP_11_Ejemplo_06.bas.
DelayMS 10 ' Retardo inicial requerido por el
' coprocesador ATMEL. En el manual AVR Firmware: GPIO-3 (2006.08.27) www.parallax.com, puede
encontrar más información sobre los comandos implementados por el coprocesador,
Main:
' Instrucciones requeridas para configurar el multiplexor 1-Wire
algunos comandos no fueron incluidos en este trabajo.
' del sistema iBOARD III. Integrado (U6). (Obligatorio) ........

84
REFERENCIAS BIBLIOGRÁFICAS
ATMEL™ Corporation. 8-bit Microcontroller with 1K Bytes In-System Future Technology Devices International Ltd. FT232R USB UART IC. (2008).
Programmable Flash ATtiny13. (Enero, 2007). 2535G–AVR–01/07. Hoja de Document No.: FT_000053. Hoja de especificaciones técnicas. FTDI# 38.
especificaciones técnicas. Disponible a través de http://www.atmel.com/dyn/ Disponible a través de http://www.ftdichip.com/Documents/DataSheets/DS
resources/prod_documents/doc2535.pdf _FT232R.pdf
Crowhill Associates Limited. Development suite Proton, Integrated Himpe, Vicent. Visual Basic 5.0, 6.0, VBA, .NET, 2005. Editorial Elector-
development environmnet compiler user manual (2004). Cambridge Elektroniccs. 3ra. Edición Mayo 2007. ISBN: 978-0-905705-68-2.
England.
Microchip Technologies, Inc. 24LC16B 16K I2C™ Serial EEPROM. (Enero 1,
Chicala, C. Adquisición de datos, medir para conocer y controlar. Soluciones 2007) DS21703G. Hoja de especificaciones técnicas. Disponible a través de
en Control SRL. México. (Agosto 1, 2004). ISBN 987-20960-1-5. http://ww1.microchip.com/downloads/en/DeviceDoc/21703H.pdf
Dallas Semiconductor Corp. Division of Maxim Integrated Products, Inc., App Note Milan Verle, “PIC Microcontrollers” mikroElektronika; 1st edition (2008). Material
27: Understanding and Using Cyclic Redundancy Checks with Maxim didáctico de consulta gratuita a través de Internet. ISBN 13- 978-86-84417-15-4
iButton Products. (Junio 19, 2007). Hoja de especificaciones técnicas. Disponible http://www.mikroe.com/en/books/picbook/picbook.htm
a través de http://pdfserv.maxim-ic.com/en/an/AN27.pdf
Microchip Technologies, Inc. PIC16F876 28/40-pin 8-Bit CMOS FLASH
Dallas Semiconductor Corp. Division of Maxim Integrated Products, Inc. Microcontrollers 1999. DS30292B. Hoja de especificaciones técnicas. Disponible a
Application Note 155: 1-Wire® Software Resource Guide Device través de http://ww1.microchip.com/downloads/en/DeviceDoc/30292c.pdf
Description. (Octubre 11, 2005). Disponible a través de http://pdfserv.maxim-
ic.com/en/an/AN155.pdf Parallax, Inc. AVR Firmware: GPIO, Version 3. (Agosto 8, 2007). Hoja de
especificaciones técnicas. Disponible a través de http://www.parallax.com/detail
Dallas Semiconductor Corp. Division of Maxim Integrated Products, Inc., App Note .asp?product_id=28300.
187: 1-Wire® Search Algorithm. (Marzo 28, 2002). Disponible a través de
http://pdfserv.maxim-ic.com/en/an/AN187.pdf Parallax, Inc. MoBoStamp-pe BS2pe Motherboard (#28300). (Septiembre 13,
2006). Hoja de especificaciones técnicas. Disponible a través de
Dallas Semiconductor Corp. Division of Maxim Integrated Products, Inc., App Note http://www.parallax.com/Portals/0/Downloads/docs/prod/boards/28300-MoBo-
937: Book of iButton Standards. (Agosto 12, 1997). Disponible a través de 0906.PDF
http://pdfserv.maxim-ic.com/en/an/appibstd.pdf
Rodríguez, J. Comunicación 1-Wire®. En Sistema de Desarrollo MDK-B28
Dallas Semiconductor Corp. Division of Maxim Integrated Products, Inc., DS1307 (pág. 415-417). Enero, 2006. Valencia, Venezuela. Disponible a través de
64 x 8 Serial Real-Time Clock, (Mayo 4, 2004). Hoja de especificaciones http://www.roso-control.com/WEB_ROSO/_Download/Cursos/MDK_B28_Manual_
técnicas. Disponible a través de http://www.maxim-ic.com/getds.cfm?qv_pk=2688 Full.pdf
Dallas Semiconductor Corp. Division of Maxim Integrated Products, Inc., DS18B20 Smith, Jack R. (2005). Programming the PIC Microcontroller with MBasic.
Programmable Resolution 1-Wire® Digital Thermometer. (Enero 5, 2002). Editorial ELSEVIER, Burlington USA. (2005). ISBN: 0-7506-7946-8.
Hoja de especificaciones técnicas. Disponible a través de http://datasheets.maxim-
ic.com/en/ds/DS18B20.pdf

Dallas Semiconductor Corp. Division of Maxim Integrated Products, Inc., DS2409


MicroLAN Coupler. (Junio 19, 2007). Hoja de especificaciones técnicas. Disponible
a través de http://datasheets.maxim-ic.com/en/ds/DS2409.pdf

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


92
ANEXO A
PANTALLA LCD DE CARACTERES
La Pantalla LCD es uno de los periféricos más empleados para la presentación Los terminales de conexión de las pantallas LCD de caracteres han sido
de mensajes, variables y casi cualquier información proveniente de un estandarizados y generalmente son compatibles pin a pin con la distribución de
microcontrolador. Gracias a su flexibilidad, buena visibilidad y precio reducido se ha pines mostrada en la Figura A.2.
convertido en el estándar de visualización más utilizado con los microcontroladores.
El sistema de desarrollo iBOARD III, incluye una pantalla LCD 2x16 caracteres, la
cual, es extraíble a través de un conector tipo lineal de 14 pines. La figura A.1.
muestra el diagrama de conexiones de la pantalla LCD al sistema de desarrollo
iBOARD III.

Figura A.2. Distribución de pines de conexión de la pantalla LCD 2x16 del iBOARD III.

COMANDOS UTILIZADOS
La información que se envía a la pantalla LCD puede interpretarse de dos
formas: como un comando, cuando se coloca al (pin) denominado RS en nivel
bajo y como un carácter, cuando el (pin) RS está en nivel alto. Un comando es un
dato numérico de 8 bits que le indica al controlador HITACHI 44780 ó compatible,
que deber realizar una operación; entre las cuales, se encuentran las mostradas en
la figura A.3.
Figura A.1. Conexiones de la pantalla LCD 2x16 al sistema de desarrollo iBOARD III.
CONJUNTO (SET) DE CARACTERES

La pantalla LCD deL iBOARD III, incluye un microcontrolador interno como el Aún cuando los comandos mostrados en la tabla de la figura A.3. son suficientes
HITACHI 44780 ó compatible y puede entre otras cosas: para manejar la pantalla LCD, en la mayoría de las aplicaciones, un usuario puede
crear sus propios comandos de control para el manejo de la LCD. Para ello deberá
· Presentar caracteres ASCII y griegos utilizar las especificaciones que suministra fabricante. La totalidad de las pantallas
· Recibir y mostrar caracteres personalizados LCD compatibles con la Hitachi 44780, incluyen un conjunto de caracteres
· Desplazamiento de caracteres (Scroll) tanto a la derecha como a la izquierda precargados en la memoria RAM. Este conjunto de caracteres lo podemos observar
· Cambiar el aspecto y el movimiento del cursor a través de la figura A.4.
· Direccionar de manera simple la posición de visualización de los caracteres

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


93
Usted podrá crear sus propios símbolos; simplemente vaya a la dirección de la
memoria de símbolos de la LCD (CGRAM) y escriba en ella los ocho bytes que
contienen su selección. Sólo se utilizarán los bit 0 al 4.

Figura A.3. Comandos disponibles en una pantalla LCD con controlador


HITACHI 44780 ó compatible.

TÉRMINOS UTILIZADOS CON LAS LCD’S

CGRAM (Character Generator RAM): Memoria volátil de 64 bytes que permite


almacenar hasta 8 caracteres personalizados para ser mostrados en la pantalla.
SCRRAM (Display Data RAM): Memoria volátil de 80 bytes, en la cual, se
almacenan los caracteres que se van a mostrar en la pantalla.
CGROM (Character Generator ROM): Memoria no volátil, en la cual, se almacenan
los caracteres predefinidos que soportan la pantalla y su controlador

CARACTERES PERSONALIZADOS

Si el set de caracteres estándar de la LCD no contiene un carácter requerido por


usted, puede utilizar la memoria CGRAM para almacenar hasta ocho (8) caracteres
personalizados. La memoria CGRAM de un LCD estándar compatible con el
controlador HITACHI 44780, es una memoria volátil, lo que significa, que no
almacena la información en forma permanente. Una vez desenergizada la LCD, la
memoria CGRAM perderá su contenido.
Figura A.4. Conjunto (set) de caracteres para una pantalla LCD con controlador
Todo carácter visualizado en la pantalla LCD está conformado por una matriz de HITACHI 44780 ó compatible.
5x8 pixel, con la fila inferior reservada para la visualización del cursor.

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


94
Parallax,inc dispone de una aplicación que facilita la creación de caracteres
especiales denominada LCDCC.exe "LCD Character Creator", la cual, viene en el CD
que se ha entregado a usted junto al sistema de desarrollo iBOARD III, en la
carpeta 34 Aplicaciones\10 LCDCC\LCDCC.exe.

En la Figura A.5. se muestra el programa “LCD Character Creador” de la


empresa Parallax.inc, mediante el cual, usted podrá crear sus propios caracteres
especiales. Como se observa en la figura, puede dibujar cualquier píxel, el de su
preferencia, al final el programa le indica el código en hexadecimal del carácter por
cada una de los 8 líneas de la matriz 5x8. El código puede expresarse en
Hexadecimal ó en formato decimal como aparece también el la figura A.6.

Figura A.6. Código en formato decimal para un carácter especial.

La figura A.7. muestra una fotografía del sistema de desarrollo iBOARD III,
ejecutando el programa de demostración de la pantalla LCD. Este ejemplo se
encuentra en el CD entregado a usted, en la carpeta Ejemplos/
CAP_04/iBOARD_III_DEMO.bas. Ya en el capítulo 04, se había descrito como cargar
y ejecutar el programa de demostración. En esta sección explicaremos su
funcionamiento, sin embargo, antes se describirán los comandos en alto nivel que
posee en compilador Basic® PROTON® para el manejo de una pantalla LCD.

Figura A.7. Fotografía de la ejecución del programa CAP_04_Ejemplo_01.bas


Figura A.5. Programa LCD Carácter Creador de Parallax, inc. en el sistema de desarrollo iBOARD III.
Fuente: www.parallax.com

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


95
COMANDO EN ALTO NIVEL PARA EL MANEJO DE UNA LCD

El compilador Basic® PROTON® dispone de un comando para el manejo de las DECLARE LCD_ENPIN PORT . PIN
pantallas LCD.
Asigna el Puerto y el pin de conexión que se utilizarán para la conexión de la línea
PRINT Item { , Item... }
de habilitación (EN) de la pantalla LCD. Por defecto se utiliza el pin PORTB<2>.
Item - Es una constante, variable, expresión, modificador de formato y/o un(a)
DECLARE LCD_RSPIN PORT . PIN
string.
Asigna el Puerto y el pin de conexión que se utilizarán para la conexión de la línea
También el comando PRINT acepta modificadores de formato como los de selección (RS) de la pantalla LCD. Por defecto se utiliza el pin PORTB<3>.
mostrados en la siguiente tabla.
DECLARE LCD_INTERFACE 4 or 8
Informa al compilador si la pantalla LCD trabajará en modo 4 bits ó 8 bits. Por
defecto se utiliza el modo 4 bits.
AT ypos,xpos Posiciona el cursor de una pantalla al valor x,y de la LCD
CLS Limpia la Pantalla LCD y crea un retardo de 30ms
BIN{1..32} Envía dígitos en formato binario
DECLARE LCD_LINES 1 , 2 , or 4
DEC{1..10} Envía dígitos en formato decimal Informa al compilador el número de líneas de la pantalla LCD. Por defecto se utiliza
HEX{1..8} Envía dígitos en formato hexadecimal el valor de dos (2) líneas.
SBIN{1..32} Envía dígitos en formato binario con signo
SDEC{1..10} Envía dígitos en formato decimal con signo
SHEX{1..8} Envía dígitos en formato hexadecimal con signo
Ejemplos de utilización pantalla LCD.
IBIN{1..32} Envía dígitos en formato binario precedidos de '%'
IDEC{1..10} Envía dígitos en formato decimal precedidos de '#'
IHEX{1..8} Envía dígitos en formato hexadecimal precedidos de '$' Ya en el capítulo 4, se había cargado y ejecutado el programa
ISBIN{1..32} Envía dígitos en formato binario con signo precedidos de '%' CAP_04_Ejemplo_01.bas, el cual, hace uso de la pantalla LCD para mostrar un
ISDEC{1..10} Envía dígitos en formato decimal con signo precedidos de '#’ mensaje inicial y luego el valor incremental de una variable. La codificación del
ISHEX{1..8} Envía dígitos en formato hexadecimal con signo prec. de '$' programa es mostrada a continuación:
REP c\n Envía el carácter “c” repetido “n” veces
STR array\n Envía todo ó parte de un arreglo ' CAP_04_Ejemplo_01.bas
CSTR cdata Envía datos tipo “string” definidos por el comando CData ' Ejemplo básico de utilización del sistema iBOARD III con LCD
' -------------------------------------------------------------------
Device = 16F876 ' Define el microcontrolador utilizado
ALL_DIGITAL = True ' Config. todos los puertos como dig.
A fin de utilizar la pantalla LCD de caracteres con el sistema de desarrollo XTAL = 20 ' Define la velocidad del resonador
iBOARD III, primero hay que configurarla a través de las directivas del compilador.
Estas directivas son las denominadas “Declares”. Existen seis declaraciones ' Pines de conexión a la pantalla LCD
Declare LCD_DTPIN PORTB.4 ' Pin de Datos LCD conec. al PORTB.4
diferentes para la configuración de una LCD.
Declare LCD_ENPIN PORTB.3 ' Pin de Enable LCD conec. al PORTB.3
Declare LCD_RSPIN PORTB.1 ' Pin de RS LCD conec. al PORTB.1
DECLARE LCD_TYPE 1 or 0 , GRAPHIC or ALPHA TRISB.2 = 0 ' Declara a PORTB.2 como Salida Dig.
Informa al compilador el tipo de pantalla LCD a utilizar. (1) selecciona una pantalla PORTB.2 = 0 ' Coloca en PORTB.2 un cero (0) Lógico
LCD del tipo gráfica. (0) selecciona una pantalla LCD del tipo carácter. Por defecto
Dim Contador As Byte ' Declaración de var. de uso general
se escoge el uso de una pantalla de caracteres. Dim ValorF As Float ' Declaracion de var. de uso general
ValorF = 0 ' Inicializa la variable en cero
DECLARE LCD_DTPIN PORT . PIN TRISA = $FF ' Declara el Puerto A como entrada dig.
Asigna el Puerto y el pin de conexión que se utilizarán para la conexión de la línea TRISC = $00 ' Declara el Puerto C como salida dig.
data de la pantalla LCD. Por defecto se utiliza el pin PORTB<4>.

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


96
Main: Se utiliza para limpiar la pantalla LCD. Esto es: Borrar todo el contenido
Print $FE, 1 ' Comando para limpiar pantalla LCD
Print At 1,1, "Sist. Desarrollo" ' Lleva el cursos a posic. 1,1 mostrado en la pantalla LCD, colocar el cursor en la primera línea – columna y
Print At 2,4, "iBOARD III" ' Lleva el cursor a posic. 2,4 generar un retardo de 30ms. Otras instrucciones se utilizan para visualizar
DelayMS 2000 ' Pausa de 2000 ms mensajes en la LCD. Note que el comando Print At (Linea, Columna) posiciona el
cursor de la pantalla LCD a la posición especificada, así:
For Contador = 0 To 255 ' Ciclo iterativo "For"
ValorF = ValorF + 0.1 ' éste segmento de código Print At 1,1, "Sist. Desarrollo" ' Lleva el cursos a posic. 1,1
Print At 2,3, "Valor = ", DEC1 ValorF ' mostrará en la pantalla Print At 2,4, "iBOARD III" ' Lleva el cursor a posic. 2,4
PORTC.2 = PORTA.0 ' Si presionan los pulsa_
PORTC.3 = PORTA.1 ' dores, encenderán los
PORTC.4 = PORTA.2 ' Led's correspondientes Mostrará el contenido dentro de las comillas en la posición (línea1, columna1) y
PORTC.5 = PORTA.3 ' a la posición corresp. el texto “BOARD III” en la (línea 2, columna 4). Por último, la instrucción:
DelayMS 100 ' Retardo de 100 ms
Next ' Print At 2,3, "Valor = ", DEC1 ValorF
GoTo Main
End Permite visualizar el valor d la variable “ValorF” con un digito decimal. Esto lo hace
a partir de la línea 2, columna 3. En la figura A.7. puede visualizar el resultado de la
ejecución del programa mencionado.
Note que en el programa anterior, se realiza la configuración de los pines de
conexión entre el sistema de desarrollo iBOARD III y la pantalla LCD. Esto se logra
a través de las siguientes directivas: Ejemplo_02. Creando un carácter especial

Declare LCD_DTPIN PORTB.4 ' Pin de Datos LCD conec. al PORTB.4 ' Anexo_A_Ejemplo_02.bas
Declare LCD_ENPIN PORTB.3 ' Pin de Enable LCD conec. al PORTB.3 ' Creación y visualización de un caracter especial en LCD
Declare LCD_RSPIN PORTB.1 ' Pin de RS LCD conec. al PORTB.1 ' -------------------------------------------------------------------
TRISB.2 = 0 ' Declara a PORTB.2 como Salida Dig. Device = 16F876
PORTB.2 = 0 ' Coloca en PORTB.2 un cero (0) Lógico ALL_DIGITAL = True
XTAL = 20
Las primeras tres instrucciones se utilizan para indicarle al compilador cual pin
Declare LCD_DTPIN PORTB.4 ' Pin de Datos LCD conect. al PORTB.4
del microcontrolador será utilizado para manejar las líneas de datos, habilitación y Declare LCD_ENPIN PORTB.3 ' Pin de Enable LCD conect. al PORTB.3
selección de la pantalla LCD. La cuarta línea TRISB.2 = 0, configura al pin Declare LCD_RSPIN PORTB.1 ' Pin de RS LCD conect. al PORTB.1
PORTB<2> como una salida digital. La instrucción cinco: PORTB.2 = 0, coloca un
cero (0) lógico 0 Vdc en el pin PORTB<2>. Este pin está conectado al pin RW de la TRISB.2 = 0 ' Declara a PORTB.2 como Salida Digital
PORTB.2 = 0 ' Coloca en PORTB.2 un Edo. Bajo 0 VDC
pantalla LCD, el cual, deberá estar conectado a tierra para que la pantalla reciba los
datos del microcontrolador. Como el compilador Basic® PROTON® sólo da soporte Symbol CGRAM = $64 ' Apuntador a la Memoria CGRAM del LCD
para la escritura de la LCD y no la lectura, no incluye la definición de este pin Dim I As Byte
dentro de las directivas del compilador. Si RW en la pantalla LCD se coloca a cero
(0) lógico 0 Vdc, la pantalla LCD se habilitara en modo de escritura y estará lista Main:
'CARGANDO EL 1ER. CARACTER PERSONALIZADO EN LA CGRAM
para visualizar la información enviada desde el microcontrolador. Esto es
Print 254,64, 31,04,14,10,10,14,04,31
justamente lo que hace la instrucción cinco: PORTB.2 = 0. Coloca al pin RW de la Print Cls ' Limpia la pantalla LCD
LCD a cero. ' Muestra texto en línea1
Print At 1,1, "CaracterEspecial" ' CaracterEspecial
Las instrucción: Print At 2,7, 0 ' muestra caracter especial
DelayMS 1000 ' segunda línea
Print $FE, 1 ' Comando para limpiar pantalla LCD GoTo Main
End

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


97
Print 254,80, 31,00,31,00,31,00,31,00
'CARGANDO EL 4TO. CARACTER PERSONALIZADO EN LA CGRAM
Print 254,88, 31,21,21,21,21,21,21,31
'CARGANDO EL 5TO. CARACTER PERSONALIZADO EN LA CGRAM
Print 254,96, 00,21,21,21,21,21,21,00
'CARGANDO EL 6TO. CARACTER PERSONALIZADO EN LA CGRAM
Print 254,104, 00,27,27,04,04,04,17,14
'CARGANDO EL 7MO. CARACTER PERSONALIZADO EN LA CGRAM
Print 254,112, 31,31,31,04,04,31,31,31
'CARGANDO EL 8VO. CARACTER PERSONALIZADO EN LA CGRAM
Print 254,120, 00,27,27,04,04,00,14,17

Print Cls ' Limpia la pantalla LCD


For I = 0 To 7
Print I," " ' muestra los 8 caracteres
DelayMS 1000
Next

GoTo Main
Figura A.8. Fotografía de la ejecución del programa Anexo_A_Ejemplo_02.bas End
Creación de un carácter especial en CGRAM de la LCD.

Ejemplo 3. Creación de ocho caracteres especiales

' Anexo_A_Ejemplo_03.bas
' Creación y visualización de 8 caracteres especiales en LCD
' -------------------------------------------------------------------
Device = 16F876
ALL_DIGITAL = True
XTAL = 20

Declare LCD_DTPIN PORTB.4 ' Pin de Datos LCD conect. al PORTB.4


Declare LCD_ENPIN PORTB.3 ' Pin de Enable LCD conect. al PORTB.3
Declare LCD_RSPIN PORTB.1 ' Pin de RS LCD conect. al PORTB.1

TRISB.2 = 0 ' Declara a PORTB.2 como Salida Digital


PORTB.2 = 0 ' Coloca en PORTB.2 un Edo. Bajo 0 VDC

Symbol CGRAM = $64 ' Apuntador a la Memoria CGRAM del LCD


Dim I As Byte

Main:
'CARGANDO EL 1ER. CARACTER PERSONALIZADO EN LA CGRAM
Print 254,64, 31,04,14,10,10,14,04,31
'CARGANDO EL 2DO. CARACTER PERSONALIZADO EN LA CGRAM
Print 254,72, 31,31,31,31,31,31,31,31 Figura A.9. Fotografía de la ejecución del programa Anexo_A_Ejemplo_03.bas
'CARGANDO EL 3RO. CARACTER PERSONALIZADO EN LA CGRAM Creación de ocho caracteres especiales en CGRAM de la LCD.

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


98
Ejemplo 4. Efectos especiales con una Pantalla LCD

El siguiente programa presentará un mensaje en la pantalla LCD y lo correrá


hacia la izquierda (Scroll Left) dieciséis posiciones. Luego lo correrá a la derecha
(Scroll Right) otras dieciséis posiciones.

' Anexo_A_Ejemplo_04.bas
' Efectos especiales con una pantalla LCD
' -------------------------------------------------------------------
Device = 16F876
ALL_DIGITAL = True
XTAL = 20

Dim Index As Byte


Symbol SCRLEFT = 24 ' Constante para hacer SCR a la izq.
Symbol SCRRIGHT = 28 ' Constante para hacer SCR a la der.
Declare LCD_DTPIN PORTB.4 ' Pin de Datos LCD conect. al PORTB.4
Declare LCD_ENPIN PORTB.3 ' Pin de Enable LCD conect. al PORTB.3
Declare LCD_RSPIN PORTB.1 ' Pin de RS LCD conect. al PORTB.1

TRISB.2 = 0 ' Declara a PORTB.2 como Salida Digital


PORTB.2 = 0 ' Coloca en PORTB.2 un Edo. Bajo 0 VDC

Main:
Print $FE, 1 ' Limpia la pantalla LCD
Print At 1,1, " Pantalla LCD " ' Visualiza mensaje en la
Print At 2,1, " iBOARD III " ' Línea 1 y Línea 2
DelayMS 2000 Figura A.10. Fotografía de la ejecución del programa Anexo_A_Ejemplo_04.bas
Efectos especiales con una pantalla LCD.
GoSub Scroll_Izquierda 'Desplaza todo el texto a la izquierda
GoSub Scroll_Derecha 'Desplaza todo el texto a la derecha
DelayMS 1000
GoTo Main

'SUB-RUTINAS
'--------------------------------------------------------------------
Scroll_Izquierda:
For Index = 0 To 15
Print $FE, SCRLEFT
DelayMS 300
Next
Return

Scroll_Derecha:
For Index = 0 To 15
Print $FE, SCRRIGHT
DelayMS 300
Next
Return

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


99
Ejemplo 5. Gráfica de Barras con LCD

' Programa: Anexo_A_Ejemplo_05.bas For BAR_VAL = 48 To 0 Step -1


' Ejemplo para generar un código de barras horizontal en la LCD GoSub Bargraph
' |||||||||||||||||||||| DelayMS 100
' Valor = xx Next
' ------------------------------------------------------------------ GoTo Main
Device = 16F876
ALL_DIGITAL = True ' Config. todos los puertos como dig. 'SubRutinas
XTAL = 20 ' Define la velocidad del resonador '------------------------------------------------------------------
Bargraph:
' Pines de conexión a la pantalla LCD WARNINGS = OFF
Declare LCD_DTPIN PORTB.4 ' Pin de Datos LCD conec. al PORTB.4 BYTE_MATH = On
Declare LCD_ENPIN PORTB.3 ' Pin de Enable LCD conec. al PORTB.3 BARS = (BAR_VAL Min MAXBAR) / 3
Declare LCD_RSPIN PORTB.1 ' Pin de RS LCD conec. al PORTB.1 BALANCE = (BAR_VAL Min MAXBAR) //3
Low PORTB.2 ' Pin de RW LCD conec. al PORTB.2 BALF = BALANCE Min 1
Print At 1,1,Rep FULLBAR\BARS,Rep (BALANCE + BASEBAR)\BALF,_
Rep " " \B_WDTH - (BARS + BALF)
' Declaración de variables y constantes Print At 2,1,"Valor = ", Dec BAR_VAL," "
' ----------------------------------------------------------------- BYTE_MATH = OFF
Dim BAR_VAL As Byte ' Valor a graficar WARNINGS = On
Dim BARS As Byte ' Numero de barras ||| a graficar Return
Dim BALANCE As Byte ' Balance a la izq. | después barras
Dim BALF As Byte ' Se necesita un caracter de balance

Symbol B_WDTH = 16 ' Max No. de caracteres en la barra


Symbol MAXBAR = B_WDTH * 3 ' Max No. de segmentos barra
Symbol FULLBAR = 3 ' Valor ASCII de la barra |||
Symbol BASEBAR = 0 ' Valor ASCII de la barra en blanco
Symbol CGRAM = 64
' Retardo requerido por la LCD
DelayMS 1000 ' Limpia todas variables en RAM
Cls

'CARGANDO EL 1ER. CARACTER ( ) PERSONALIZADO EN LA CGRAM


Print 254,64, $00,$00,$00,$00,$00,$00,$00,$00
'CARGANDO EL 2DO. CARACTER (| ) PERSONALIZADO EN LA CGRAM
Print 254,72, $10,$10,$10,$10,$10,$10,$10,$10
'CARGANDO EL 3RO. CARACTER (|| )PERSONALIZADO EN LA CGRAM
Print 254,80, $14,$14,$14,$14,$14,$14,$14,$14
'CARGANDO EL 4TO. CARACTER (|||)PERSONALIZADO EN LA CGRAM
Print 254,88, $15,$15,$15,$15,$15,$15,$15,$15

' Programa Principal


'------------------------------------------------------------------
Main:
For BAR_VAL = 0 To 48 Figura A.11. Fotografía de la ejecución del programa Anexo_A_Ejemplo_05.bas
GoSub Bargraph Gráfica de barras con una pantalla LCD.
DelayMS 100
Next

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


100
ANEXO B
B.1. PROGRAMA iLOADER Nivel II: iLOADER + PT-40.
El programa iLOADER es una aplicación desarrollada para trabajar con los
Con el nivel intermedio usted dispondrá de una plataforma compacta de
productos: iFT232, iBOARD III y PT-40, el cual, permite efectuar la
desarrollo que incluye, en la base de colocación de cuarenta pines DIP 40 del
programación de los microcontroladores PIC® en forma “boot-loader” ICSP,
microcontrolador PIC®, un convertidor USB a Serial RS232 TTL, un circuito de
visualizar datos en forma de texto o gráfica e incluso intercambiar datos con el
RESET, un oscilador de 20 MHz y una pantalla LCD de 2 líneas x 16 columnas; todo
microcontrolador utilizando el estándar OPC® ampliamente aceptado en el campo
listo para su correcto funcionamiento sin necesidad de utilizar componentes
de la automatización industrial.
adicionales. Por su pequeño tamaño, el sistema PT-40 puede ser incluido como
parte de sus proyectos, ya que, ocupa una superficie muy similar a la de un circuito
iLOADER® se fundamenta en un concepto novedoso, en el cual, se combinan
integrado con encapsulado de 40 pines. Esta combinación le permitirá trabajar con
las aplicaciones típicas del microcontrolador junto con la instrumentación virtual y la
la mayoría de los microcontroladores PIC® de 40 pines de la serie 16F y 18F, tales
automatización/control de procesos en un sólo entorno unificado. Esta única mezcla
como:
de características permite su uso en diversos campos que abarcan desde la
enseñanza hasta el desarrollo de soluciones de bajo costo para aplicaciones
comerciales y/o industriales. PIC16F874 PIC16F874A PIC16F877 PIC16F877A PIC18F442
PIC18F448 PIC18F452 PIC18F458 PIC18F4220 PIC18F4320
Nivel I: iLOADER® + iFT232. PIC18F4331 PIC18F4420 PIC18F4431 PIC18F4439 PIC18F4455
PIC18F4480 PIC18F4520 PIC18F4525 PIC18F4539 PIC18F4550
PIC18F4580 PIC18F4585 PIC18F4620 PIC18F4680

Figura B.1. Fotografía del software iLOADER + iFT232.

Esta combinación constituye el nivel básico de desarrollo, ofreciendo el menor


costo de un sistema de desarrollo con comunicación USB. La combinación iLOADER
+ iFT232, le permiten a usted disfrutar de:

. Un (01) Conversor USB a Serial RS232 TTL


. Un (01) Programador para PIC boot-loader ICSP Figura B.2. Fotografía del software iLOADER + PT-40.
. Un (01) Osciloscopio virtual de ocho (08) canales
. Un (01) Uart ( Hyper – Terminal ) recepción – transmisión Nota: Mayor información sobre el producto PT-40, está disponible a través de la
. Un (01) Servidor de datos OPC página web: http://www.roso-control.com

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


101
Nivel III: iLOADER + iBOARD III.
El software iLOADER, se acompaña de un CD de instalación que contiene todos
los elementos necesarios para su utilización. La instalación del software es sencilla,
con una interfaz para Windows® muy amigable. Le agradecemos lea
detenidamente las siguientes indicaciones antes de continuar.

Pasos para la instalación del programa


1. Introduzca el CD que acompaña al programador etiquetado como
“iLOADER” en la unidad de CD-ROM ó DVD de su PC.
2. Si el programa de instalación no se inicia de forma automática, utilice el
explorador de Windows® y haga doble clic sobre el archivo “setup.exe”.
3. Siga las instrucciones que se le presentarán en la pantalla.
4. Seleccione la carpeta de instalación. Asegúrese de recordar el directorio
donde instaló el programa, ya que, los archivos para el boot-loader,
Figura B.3. Fotografía del software iLOADER + iBOARD III. manual de operación y otros documentos de interés serán copiados en
este directorio.
Obtenga el máximo beneficio y la mayor potencia de desarrollo al combinar el
5. Durante la instalación, se observará la secuencia de pantallas como las
iLOADER con el sistema de desarrollo para microcontroladores PIC® iBOARD III.
indicadas en las figuras B.4.(1,2,3,4).
Esta plataforma le permitirá trabajar con los microcontroladores PIC® de 28 pines
DIP 40 tales como:
6. Al concluir verifique que los drivers o controladores de su producto han
sido instalados de forma correcta según se indica en su respectivo manual
PIC16F870 PIC16F871 PIC16F873 PIC16F873A PIC16F876
de usuario en cada producto en particular.
PIC16F876A PIC18F242 PIC18F248 PIC16F252 PIC18F258
PIC18F2220 PIC18F2320 PIC18F2331 PIC18F2420 PIC18F2431/39
PIC18F2455 PIC18F2480 PIC18F2520 PIC18F2525 PIC18F2539
PIC18F2550 PIC18F2580 PIC18F2585 PIC18F2620 PIC18F2680

La amplia variedad de periféricos incluidos en la iBOARD III, como el reloj de


tiempo real DS1307, la memoria EEprom y el coprocesador ATMEL®, la hacen
adecuada para el desarrollo de proyectos ambiciosos como trabajos especiales de
grado y resolución de problemas en el área tanto comercial como industrial. Por
otra parte, su conexión al exterior por medio de terminales estándar de 0.1”
permite su fácil instalación sobre un protoboard y/o tarjetas finales de control.

B.2. INSTALACIÓN DEL SOFTWARE

Requerimientos mínimos del computador


• Procesador Pentium 266 MHz o superior
• Memoria Ram 128 MBytes
• Espacio disponible HD 50 MBytes
• Unidad de CD ROM y/o DVD
• Puerto de comunicaciones USB
• Sistema Operativo Windows XP®/ Vista® Figura B.4.1. Asistente para la instalación del iLOADER.

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


102
Figura B.4.4. Secuencia de pantallas mostradas durante la instalación del iLOADER.
Figura B.4.2. Selección de la carpeta de instalación del iLOADER.

B.3. DISPOSITIVOS SOPORTADOS


El programa iLOADER es completamente actualizable en forma gratuita a través
de la página web: http://www.roso-control.com. Actualmente, el programa soporta
los siguientes microcontroladores

Microcontroladores soportados en la versión actual del iLOADER:

PIC16F87 PIC16F88 PIC16F870 PIC16F871 PIC16F873


PIC16F873A PIC16F874 PIC16F874A PIC16F876 PIC16F876A
PIC16F877 PIC16F877A PIC18F242 PIC18F248 PIC18F252
PIC18F258 PIC18F442 PIC18F448 PIC18F452 PIC18F458
PIC18F1220 PIC18F1320 PIC18F2220 PIC18F2320 PIC18F2331
PIC18F2420 PIC18F2431/39 PIC18F2455 PIC18F2480 PIC18F2520
PIC18F2525 PIC18F2539 PIC18F2550 PIC18F2580 PIC18F2585
PIC18F2620 PIC18F2680 PIC18F4220 PIC18F4320 PIC18F4331
PIC18F4420 PIC18F4431 PIC18F4439 PIC18F4455 PIC18F4480
PIC18F4520 PIC18F4525 PIC18F4539 PIC18F4550 PIC18F4580
PIC18F4585 PIC18F4620 PIC18F4680 PIC18F6520 PIC18F6525
PIC18F6585 PIC18F6620 PIC18F6621 PIC18F6627 PIC18F6680
PIC18F6720 PIC18F6722 PIC18F8520 PIC18F8525 PIC18F8620
PIC18F8621 PIC18F8627 PIC18F8680
Figura B.4.3. Visualización de la instalación del iLOADER.

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


103
B.4. ARCHIVOS “boot-loader” *.hex

Antes de utilizar el programa iLOADER como grabador/cargador de


microcontroladores PIC®, éstos deben pre-programarse con un “firmware”
suministrado por el fabricante. Este código se suministra gratuitamente en forma de Programador Serial
archivos binarios con extensión *.hex, los cuales, permiten al programa iLOADER:
identificar al microcontrolador PIC®, leer la versión del “firmware” instalado,
identificar tipo y memoria Flash, RAM y Eeprom del microcontrolador.

Dentro del directorio de instalación del programa, encontrará una carpeta con el
nombre “12_PIC_Boot.hex”, la cual, contiene los archivos *.hex de todos los
dispositivos soportados y listos para trabajar con dos diferentes tipo de reloj ó
resonador en 4Mhz y 20Mhz. Programador USB

Para seleccionar el firmware adecuado para su aplicación, basta con ubicar el


nombre del archivo junto con su velocidad de trabajo. Por ejemplo, el archivo
18F4320_20.hex, ha sido compilado para trabajar con un microcontrolador
PIC18F4320 y un reloj con frecuencia de 20 Mhz.

Algunos microcontroladores PIC incluyen un multiplicador de frecuencias PLL, el


cual, permite al núcleo del procesador trabajar a una velocidad muy superior al
cristal/resonador externo que se encuentra conectado. En este caso, el firmware Firmware
identificado como PLL_18F4550_04_48.hex indica que el microcontrolador Boot-loader
utilizado es un PIC18F4550, con un oscilador externo de 4Mhz pero que su recurso
PLL ha sido configurado para que el microcontrolador trabaje internamente a 48 Figura B.5. Programación del PIC con el archivo *.hex.
Mhz.

B.6. PROGRAMA iLOADER.


B.5. PASOS A SEGUIR PARA CONVERTIR UN MICROCONTROLADOR PIC®
NUEVO (Virgen) EN UN MICROCONTROLADOR TIPO BOOT-LOADER iLOADER® se compone de las siguientes partes:
(1) Adquirir el modelo del microcontrolador deseado en base a los modelos
1. Una herramienta de programación o carga de código en
soportados por el software iLOADER.
microcontroladores tipo boot-loader.
(2) Convertir el microcontrolador comprado en un microcontrolador tipo boot- 2. Una herramienta de visualización de datos gráficos y terminal de
loader. Para ello, es necesario utilizar un programador para PIC® del tipo serial comunicaciones ASCII.
(iP3, iP3B) ó del tipo USB (iPROG18 ó PICKit2). Grabar la memoria flash del 3. Una aplicación servidor de datos basada en el estándar OPC®.
microcontrolador PIC® con el archivo (*.hex) de su preferencia, el mismo se
encuentra en el directorio donde instaló el programa. La conjunción de estas potentes herramientas permite su utilización en múltiples
aplicaciones, abarcando desde de la programación de los microcontroladores PIC®,
En la figura B.5., se muestra el esquema de bloques utilizado para la la visualización de datos en tiempo real, instrumentación virtual hasta incursionar en
programación del microcontrolador PIC® con el firmware boot-loader. Se observa áreas como el control de procesos por computadora y la automatización industrial.
que el firmware se puede grabar a través de un programador del tipo serial y/o un
programador del tipo USB.

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


104
B.7. DESCRIPCIÓN GENERAL DEL iLOADER. Barra de identificación del programa (1)

La pantalla principal de la aplicación se presenta en la figura B.6.

Presenta el nombre del programa, junto con los controles para minimizar y cerrar el
programa iLOADER.

Menú de la aplicación (2)

El menú del programa iLOADER, brinda las siguientes opciones:

Archivo. Ofrece opciones para el manejo del código ejecutable del


microcontrolador.

• Importar Archivo *.hex:


Carga el contenido de un archivo con código
ejecutable de extensión *.“hex” para ser
grabado en el microcontrolador.
• Lista de Archivos Recientes: Presenta
los tres últimos archivos abiertos por el
programa durante su ejecución actual. Esta
lista se pierde al cerrar al iLOADER®.
• Salir: Finaliza la ejecución del programa
iLOADER®.

iLOADER. Ofrece un acceso por medio del menú a las funciones básicas de
programación.

• Escribir: Graba el contenido de la memoria de


programa y/o de la memoria de datos EEPROM
Figura B.6. Vista general del programa iLOADER. • Leer: Realiza la lectura de las memorias del
microcontrolador.
En esta pantalla podemos distinguir los siguientes elementos: • Verificar: Compara el contenido de la memoria de
programa y de datos EEPROM existente en el
• Barra de Identificación del programa (1) microcontrolador con el contenido cargado en el
• Menú de la aplicación (2) programa iLOADER en caso de haber discordancias
• Cuadro de información del hardware (3) envía un mensaje de error.
• Funciones para la programación de microcontroladores PIC® (4) • Borrar. Borra el programa grabado en el microcontrolador PIC®.
• Contenido de la memoria de Programa (5)
• Contenido de la memoria de datos (6) Opciones. Controla las opciones de programación del microcontrolador.
• Íconos de información y estado (7)
• Cuadro de mensajes (8) • Programar Flash: Habilita/Deshabilita la escritura en la memoria flash.
• Programar EEPROM: Habilita/Deshabilita la escritura en la memoria EEPROM.
A continuación se describen cada uno de ellos:

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


105
• Verificar al programar: Controla la verificación automática al terminar de Cuadro de Información del Hardware (3)
programar.
• Ejecutar programa al terminar: Esta opción al estar habilitada, permite que En este cuadro podemos encontrar la siguiente información:
una vez concluida la programación; el pin de re-inicialización o /MCLR del • Hardware. Indica el producto detectado
microcontrolador PIC® sea liberado para permitir la ejecución del programa. Si está (iBOARD III, iFT232 ó PT-40).
deshabilitado el PIC® se quedará en estado de RESET. • Versión. Corresponde a la versión del
firmware boot-loader residente en el
PIC®.
• Puerto. Es el puerto COM virtual creado
por el hardware al conectarse al puerto
USB del computador.
• Dispositivo. Modelo del PIC© detectado.

Funciones para la programación de microcontroladores PIC® (4)

Este conjunto de botones, llevan asociadas las mismas funciones que el menú
iLOADER descrito en la sección anterior. El botón “Ejecutar” efectúa un reset del
microcontrolador y comienza la ejecución del programa grabado en el PIC®.
UART/SCOPE. Despliega la herramienta UART/SCOPE, la cual se compone de un
terminal bi-direccional de comunicaciones seriales ASCII y de un gráfico de
visualización de señales de múltiples canales. El terminal de datos puede ser
utilizado para depurar los programas escritos para el microcontrolador funcionando
como un visualizador de texto. El componente gráfico tiene un gran campo de
aplicación, permitiendo efectuar el registro de valores de forma visual en tiempo
real de hasta 8 canales independientes de información. Los datos graficados pueden
ser impresos como parte de reportes o para analizar el comportamiento de las
variables capturadas por el microcontrolador.
Contenido de la memoria de programa (5)

Muestra el contenido de la memoria de programa o memoria flash del


microcontrolador. Se actualiza al cargar un archivo .hex nuevo o al efectuar la
Servidor OPC. Esta poderosa herramienta al ser desplegada, permite transformar lectura del microcontrolador. Es un cuadro de sólo lectura que no puede ser editado
al microcontrolador en una fuente de datos en tiempo real utilizando uno de los por el usuario.
estándares de intercambio de datos más aceptados por el entorno industrial. De
esta forma, resulta muy simple integrar al microcontrolador en aplicaciones de
automatización y control, pudiendo interactuar con cientos de programas de
aplicación y otros dispositivos de control presentes en la industria moderna.

Ayuda. Este sub-menú despliega El cuadro “Acerca de..” con información de la


versión del programa iLOADER.

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


106
Contenido de la memoria de datos EEPROM (6)

Muestra el contenido de la memoria de datos EEPROM del microcontrolador. Se


actualiza al efectuar la lectura del microcontrolador PIC®.

Íconos de información y estado (7)

Constituyen una ayuda gráfica que facilita el uso del programa iLOADER y
advierte sobre el funcionamiento y las operaciones realizadas de forma exitosa o
fallida. Algunos de los íconos presentados durante el uso normal del programa se
muestran a continuación:

Cuadro de mensajes (8)

Ubicado en el extremo inferior izquierdo de la pantalla, suministra mensajes


auxiliares que para indicar el estado del programa o de las acciones realizadas por
el mismo.
Figura B.7. Herramienta UART/SCOPE incluida en el iLOADER.

En esta pantalla podemos distinguir los siguientes elementos:

• Barra de Identificación del programa (1)


B.8. HERRAMIENTA DE VISUALIZACIÓN DE DATOS UART/SCOPE • Cuadro de recepción de mensajes desde el microcontrolador (2)
• Selector del modo de trabajo (3)
La herramienta UART/SCOPE implementa un completo interfaz de visualización • Configuración de la conexión (4)
tipo texto (como un Hyper terminal) trabajando en forma de UART y tipo gráfico • Opciones de la UART (5)
(como un osciloscopio) con capacidad de envío y recepción de datos a velocidades • Opciones del SCOPE (6)
en el rango de 2400 a 57600 Baud. Tiene dos formas de operación: la primera • Escala de tiempo del SCOPE (7)
destinada a manejar datos tipo texto (UART), en la cual, disponemos de un • Cuadro de edición de texto enviado al microcontrolador (8)
terminal de comunicaciones bi-direccional para enviar y recibir mensajes en forma
de cadenas de texto codificados en ASCII. A continuación se describen cada uno de ellos:

Cuando trabajamos con el modo gráfico (SCOPE) disponemos de un Barra de identificación de la herramienta (1)
componente que permite graficar de forma simultánea hasta 8 canales de
información digital o analógica. De ésta forma podemos transformar en segundos al
iLOADER en un registrador gráfico en tiempo real de los datos provenientes desde
el microcontrolador PIC®..
Presenta el nombre de la herramienta: “iLOADER Herramienta UART/SCOPE”,
La figura B.7. Muestra la pantalla de la herramienta UART/SCOPE. junto con los controles para minimizar, maximizar y cerrar la aplicación.

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


107
Cuadro de recepción de mensajes desde el microcontrolador (2) • Botón “Desconectar”: Se utiliza para cerrar el puerto de comunicaciones
del computador.
Es este cuadro se observan los datos enviados por el microcontrolador. Se • Botón “Salir”: Cierra la herramienta UART/SCOPE.
comporta como un terminal de datos ASCII que admite todos los caracteres ASCII
estándar (0 al 127). Permite el uso de los comandos de control mostrados en la Opciones de la UART (5)
tabla anexa figura B.8.
Este grupo de controles solo está activo en el modo UART y permite efectuar las
Comando ASCII Significado siguientes acciones:
0 Clear. Borra la pantalla de textos. • Eco Activado: Al estar activo, permite que los mensajes enviados al
microcontrolador PIC®, se visualicen en pantalla del UART.
7 Bell. Emite un sonido por la campana del computador. • Incluir CR+LF: Añade un carácter de fin de línea a los datos enviados al
8 Backspace. Borra un carácter. microcontrolador.
9 TAB. Agrega un tabulador para dar formato al texto. • Limpiar: Borra el contenido del cuadro de recepción de mensajes y realiza
un reset al microcontrolador.
13 Carriage Return. Avance el texto a la siguiente línea.
Opciones del SCOPE (6)
Figura B.8. Comandos de control soportados por la Herramienta UART/SCOPE del iLOADER.
Este conjunto de opciones estará disponible sólo cuando esté activada la opción
SCOPE.
Selector del modo de trabajo (3) • Mostrar CH. se refiere a mostrar los paneles indicadores digitales que se
encuentran en la parte inferior de la pantalla SCOPE. Allí se visualizan los
Es un selector con forma de interruptor deslizante con dos posiciones: valores que toman los tres (03) primeros canales disponibles de la pantalla
UART/SCOPE. SCOPE, los cuales se denominan: C0, C1 y C2.
• Grillas On, permite la visualización o no de las grillas horizontales y
Configuración de la conexión (4) verticales de la gráfica SCOPE.
• La opción “Color Negro”, hace que el fondo de la pantalla cambie de color
Este grupo de controles está conformado por cuatro (04) elementos: negro a color blanco, a fin de, disminuir el costo de impresión de la gráfica
mostrada.
• Caja de selección de la velocidad de conexión: Establece • Tracking: Establece el modo de visualización de los datos, pudiendo en ser
la velocidad de la comunicación en baudios (bits/seg) forma deslizante o comprimido. En el modo deslizante, la gráfica SCOPE
entre el microcontrolador PIC® y el computador. Los sólo mostrará los datos recibidos durante una ventana temporal. En modo
datos se transmiten utilizando el formato 8N1, con un comprimido, el eje del tiempo de la gráfica se comprime cada vez que llega
bit de inicio, 8 bits de datos y un bit de parada sin un nuevo dato. En la figura B.9. se observa la diferencia entre ambos
verificación de paridad. Se pueden seleccionar modos de trabajo al recibir los mismos datos.
velocidades de comunicación estándar entre 2400 y
57600 baudios. La opción “Otro Valor”, permite Escala de tiempo del SCOPE (7)
definir una velocidad personalizada comprendida
entre estos mismos valores. Advertencia: El uso de Define la escala horizontal de tiempo de la gráfica cuando
velocidades no estándar al momento de comunicarse se trabaja en modo deslizante. Mediante este selector el
con el microcontrolador PIC® debe hacerse usuario puede cambiar la escala de tiempo horizontal de la
cuidadosamente, ya que, algunos compiladores para gráfica desde un valor de 10 segundos a 10 minutos. Los
PIC® sólo soportan velocidades normalizadas. valores posibles: 10 segundos, 30 segundos, 1 minuto y 10
minutos.
• Botón “Conectar”: Se utiliza para abrir el puerto de comunicaciones del
computador. Para poder activarse; debe seleccionar primero la velocidad
de comunicación en Baudios.

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


108
B.9. HERRAMIENTA SERVIDOR DE DATOS OPC®

Una de las características más interesantes del iLOADER, la cual, la hace una
aplicación única en su tipo; es la implementación de la herramienta servidor de
datos OPC®.

El OPC, (OLE para el Control de Procesos) es una especificación técnica no


propietaria definida por la OPC Foundation (http://www.opcfoundation.org) y
consiste básicamente en un sistema de interfaces estándar basado en OLE/DCOM
de Microsoft™. Con OPC® es posible ínter-operar dispositivos industriales con
sistemas de información.

Un sistema de automatización industrial en un ambiente moderno basado en


OPC®, se caracteriza por la presencia de elementos heterogéneos que intercambian
datos de forma transparente tal como se muestra en la figura B.10.

Con el iLOADER correctamente configurado, podemos incluir al microcontrolador


PIC® como un equipo más dentro de este tipo de ambientes de una manera
sumamente sencilla. Esto implica que el microcontrolador puede comenzar a actuar
como un equipo de medición o control abriéndole a usted un enorme conjunto de
posibilidades, ya que, usted ahora puede desarrollar sus propios equipos,
instrumentos y aparatos e integrarlos a la red de instrumentación y control OPC®
disponible en la industria.

Para disfrutar de todo estos beneficios, Ud. sólo tendrá que enviar y recibir sus
datos de forma serial – USB al computador y el software iLOADER se encargará del
resto.

Figura B.9. Gráfica de datos en modo deslizante (arriba) y modo comprimido (abajo).

Cuadro de edición de texto enviado al microcontrolador (9)


Este cuadro se compone de dos elementos, el primero es una caja de texto
estándar, en la cual, podemos escribir mensajes en forma de texto o valores
numéricos que posteriormente se enviarán al microcontrolador PIC®. El segundo
elemento, en el botón “Enviar”, el cual, se utiliza para enviar los datos desde el
computador hacia el microcontrolador PIC®. Figura B.10. Interconexión de elementos heterogéneos en un ambiente de trabajo.

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


109
Descripción de la Herramienta Servidor de Datos OPC

La figura B.11., muestra la pantalla de la herramienta Servidor OPC. En ésta


pantalla podemos distinguir los siguientes elementos:

• Barra de Identificación del programa (1)


• Información del Servidor de Datos OPC (2)
• Configuración de la conexión al PIC® (3)
• Configuración de variables de entrada (4)
• Configuración de variables de salida (5)

A continuación se describen cada uno de ellos:

Barra de identificación de la herramienta (1)

Presenta el nombre de la herramienta: “iLOADER Herramienta Servidor de Datos


OPC ”, junto con los controles para minimizar, maximizar y cerrar la aplicación.

Información del Servidor de Datos OPC (2)


Figura B.11. Herramienta Servidor de Datos OPC incluida con el iLOADER.
Contiene la información referente a:

• Puerto (COM): Puerto COM virtual, utilizado por el hardware.


Configuración de la conexión al PIC® (3)
• Estado del Servidor OPC: Indica si el servidor se encuentra o no
configurado para trabajar, si está ejecutándose de manera correcta o si ha Este grupo de controles está conformado por cuatro (04) elementos:
ocurrido un error.
• Caja de selección de la velocidad de conexión: Establece
• No. Clientes OPC conectados: Refleja la cantidad clientes que están la velocidad de la comunicación en baudios (bits/seg)
recibiendo datos desde el servidor OPC iLOADER. Una vez que se está entre el microcontrolador PIC® y el computador. Los
ejecutando no puede cerrarse el servidor hasta que todos los clientes están datos se transmiten utilizando el formato 8N1, con un
desconectados. bit de inicio, 8 bits de datos y un bit de parada sin
• No. Variables de entrada: Indica la cantidad de variables que son verificación de paridad. Se pueden seleccionar
enviadas desde el PIC® al PC. Estas variables sólo deben ser leídas por los velocidades de comunicación estándar entre 2400 y
clientes OPC conectados. 57600 baudios. La opción “Otro Valor”, permite
definir una velocidad personalizada comprendida
• No. Variables de salida: Indica la cantidad de variables que son enviadas
entre estos mismos valores. Advertencia: El uso de
desde el PC al microcontrolador PIC®.
velocidades no estándar al momento de comunicarse
con el microcontrolador debe hacerse
cuidadosamente, ya que, algunos compiladores para
PIC® sólo soportan las velocidades normalizadas.

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


110
• Botón “Iniciar Servidor”: Al presionar este botón se crea el servidor de Por ejemplo, para actualizar el valor de la variable entera “E0”, el PIC® debe
datos OPC, el cual, estará disponible de inmediato a los clientes OPC. Para enviar al PC :
su correcta activación; debe seleccionarse primero: la velocidad de “E0”, DEC Valor_Variable, 13
conexión en Baudios, la cantidad de variables de entrada o salida
requeridas y el tipo canónico de las mismas. Es imprescindible el uso del carácter de terminación 13 (CR) para poder
establecer la comunicación con el PC.
• Botón “Detener Servidor”: Sólo se activa una vez que todos los clientes
OPC se han desconectado. Detiene el servicio y el servidor ya no estará
disponible hasta presionar de nuevo “Iniciar Servidor”. Estando detenido el Configuración de las variables de salida (5)
servidor, es posible cambiar la configuración de sus variables de entrada o
salida. Las variables de salida del servidor OPC, se definen como aquellas que van en
sentido del PC -> al microcontrolador PIC®. Normalmente estas variables son
• Botón “Salir”: Cierra la herramienta Servidor de Datos OPC. modificadas por una aplicación tipo cliente OPC®, por ejemplo: el programa
MatLAB®, LABView®, programas propietarios y/o aplicaciones genéricas realizadas
en VB6, *.net y otras plataformas, las cuales, hace uso del servidor para
Configuración de las variables de entrada (4)
intercambiar información con el microcontrolador PIC®. Mediante los botones
Las variables de entrada del servidor OPC, se definen como aquellas que van en “Añadir” y “Eliminar” podemos modificar la cantidad de variables de salida desde 0
sentido Microcontrolador PIC® -> al PC. Mediante los botones “Añadir” y “Eliminar” hasta 19.
podemos modificar la cantidad de variables de entrada desde 0 hasta 19. En caso
de alcanzar el máximo de variables permitidas, el software mostrará un mensaje de Las variables de salida se identifican mediante “Sx”, donde x es un número del
error. 0 al 19. El nombre de cada variable es visible para los clientes OPC que hagan uso
del servidor dentro de una carpeta llamada “Salidas”

Haciendo clic sobre la celda “Tipo de Dato” se puede seleccionar el tipo canónico
de las variables entre las opciones: Boolean, Entero, Double y String. El mecanismo
de funcionamiento de las variables de salida es el siguiente:

1. El servidor OPC expone a los clientes OPC los nombres y tipos de las
variables de salida disponibles.
2. La aplicación “cliente” envía el valor de la salida al servidor OPC del
iLOADER.
Las variables de entrada se identifican mediante “Ex”, donde x es un número 3. El servidor OPC actualiza internamente el valor de la variable.
entero en el rango de 0 al 19. El nombre de cada variable es visible para los clientes
OPC® que hagan uso del servidor dentro de una carpeta llamada “Entradas”. 4. El microcontrolador PIC® debe enviar una solicitud de lectura de la
variable de salida que requiere. Por ejemplo, para leer la variable “S0” el
Haciendo clic sobre la celda “Tipo de Dato” se puede escoger la forma canónica PIC® debe enviar al iLOADER: “S0”, 13
de las variables, por ejemplo: Boolean, Entero, Double y String. La celda “Valor” 5. El servidor procesa la solicitud de lectura y envía al PIC® el último valor
puede ser editada de forma manual. Al recibir el valor de la variable enviada por el disponible de la variable utilizando el siguiente formato:
microcontrolador PIC®, éste se actualizará en forma inmediata en la celda
denominada “Valor”. Nombre Variable , Valor , 13

Para enviar un dato desde el microcontrolador PIC® al servidor OPC, de utiliza 6. El Microcontrolador PIC® recibirá la información (variable) enviada por el
el siguiente formato: PC.
Nombre Variable , Valor , 13

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


111
Por ejemplo, para leer el valor de la variable entera “S0”, la secuencia de Al encontrar un hardware válido (PT-40, iBOARD III ó iFT232), aparecerá la
operaciones es la siguiente: pantalla principal mostrada en la figura B.13.

PIC -> PC : “ S0”, 13


PC -> PIC : ”S0”, DEC Valor_Variable, 13

B.10. COMO UTILIZAR AL PROGRAMA iLOADER.

En esta sección describiremos los pasos necesarios para lograr utilizar el


iLOADER® como programador ICSP boot-loader de microcontroladores.

Paso No.1. Preparación del Microcontrolador PIC® como Boot-Loader


Siga las instrucciones señaladas en la sección B.5. para convertir un
microcontrolador nuevo en boot-loader de manera que pueda ser utilizado con el
programa iLOADER. Esta acción no es necesaria para los microcontroladores
incluidos en los sistemas PT-40 y/o iBOARD III, los cuales, vienen pre-programados
de fábrica.

Paso No.2. Conecte el Hardware al puerto USB


Antes de inicializar el software asegúrese que los controladores o drivers
adecuados para el hardware utilizado han sido cargados de forma satisfactoria.

Conecte un extremo del cable USB al PC y el otro al hardware de desarrollo y


verifique es éste se encuentra energizado.

Inicie el programa iLOADER. En caso de ocurrir algún error, aparecerá el


mensaje de la figura B.12. y el programa se cerrará automáticamente.
Figura B.13. Pantalla principal del iLOADER.

Paso No.3. Importar el archivo ejecutable

Seleccione el Menú: Archivo->Importar Archivo *.hex

Utilizando el cuadro de búsqueda de archivos .hex de la figura anterior, elija el


Figura B.12. Mensaje de error del programa iLOADER al no detectar archivo que contiene su programa. En este ejemplo, utilizaremos uno de los
ningún hardware compatible. archivos ejemplos incluidos en CD de instalación del iLOADER.

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


112
Al cargar de forma exitosa el archivo, se mostrará en los cuadros Memoria de En caso de ocurrir algún error, se indicará en forma de texto y mediante el ícono
Programa y Datos en EEPROM el contenido del archivo .hex, . El ícono de la parte gráfico como se muestra en la figura B.16.
inferior derecha de la pantalla indicará que la operación ha sido exitosa (figura
B.15). En la parte inferior podemos observar el directorio y nombre del archivo
cargado.

Figura B.16. Ejemplo de error en la carga de archivo .hex.


Figura B.14. Selección del archivo .hex.

Paso No.4. Seleccione las opciones de programación (opcional)

Por defecto, las opciones de programación activas son: Programar Flash,


Programar EEPROM y Ejecutar Programa al Terminar. Usted puede habilitar la
opción “Verificar al Terminar” para comprobar la correcta grabación del PIC® de
forma automática. La opción “Ejecutar Programa al Terminar” permite que el
programa cargado al micro se ejecute inmediatamente después de terminar la
programación del PIC®. El contenido de la memoria Flash y Eeprom se pueden
visualizar activando la opción “Ver Memo. Flash y Eeprom”.

Figura B.15. Archivo *.hex cargado de forma exitosa.

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


113
Paso No.5. Escribir en el Microcontrolador Paso No.1. Cargar el Programa

Presione el botón “Escribir” para iniciar el proceso de grabación. Una barra de Cargue el programa UART_01.hex al microcontrolador siguiendo las indicaciones
progreso le indicará el desarrollo de la operación y al finalizar de forma satisfactoria dadas en la sección anterior. Todos los programas utilizados en esta parte se
el ícono de grabación exitosa aparecerá en parte inferior de la pantalla. encuentran se dentro del CD que acompaña al iLOADER en la carpeta de instalación
del software en su computador. Directorio: “\16_Uart_Scope_OPC”.

Paso No.2. Iniciar Herramienta UART/SCOPE

Haga clic en el menú UART/SCOPE. Se desplegará la pantalla de la figura B.16.

Paso No.6. Verificar la programación del Microcontrolador (opcional)

Presione el botón “Verificar” para iniciar el proceso. Una barra de progreso le


indicará el desarrollo de la operación y al finalizar de forma satisfactoria el ícono de
verificación exitosa aparecerá en parte inferior de la pantalla.

Paso No.7. Ejecutar Programa (opcional)

Si desea ejecutar el programa recién transmitido al


microcontrolador PIC®, haga clic sobre “Ejecutar”. El ícono de
programa en ejecución le informará que el PIC® se encuentra
ejecutando su programa.

Figura B.16. Pantalla de la aplicación UART/SCOPE

B.11. MANEJO DE LA UART/SCOPE Paso No.3. Conexión con el PIC®

Seleccione la velocidad de conexión en 19200 baudios y oprima conectar. La


La comunicación con la herramienta UART/SCOPE se hace mediante el formato figura B.17 muestra la ejecución del ejemplo UART_01.hex Veamos en detalle el
8N1 a una velocidad ajustable entre 2400 y 57600 bps. En esta sección código fuente en lenguaje PROTON® del programa UART_01.bas
describiremos los pasos necesarios para lograr utilizar la herramienta UART/SCOPE
del iLOADER con los programas de ejemplo incluidos en el CD de instalación. La instrucción DECLARE HSERIAL_BAUD 19200 define la velocidad de la
comunicación en el PIC® en 19200 Baudios.

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


114
La instrucción HRSOUT se utiliza para transmitir información serial por medio de Main:
' El comando 0 hará una limpieza de pantalla y colocará el cursor
la USART del PIC® mientras que HRSIN recibe los datos provenientes del ' en la primera posición de la pantalla arriba y a la izquierda.
computador. HRSOut 0,"El Comando 0, Limpia la pantalla y lleva el cursor",13
HRSOut "Al punto inicial: linea 0, columna 0 ... ",13
HRSOut "------------------------------------------------",13,13
DelayMS 5000

' Se utilizará el comando 7 para emitir un sonido (beep) en el PC


HRSOut "Ahora utilizaremos el comando 7 (Beep) ... ",13
HRSOut "-------------------------------------------",13
HRSOut 7," (.) Se emitio un beep ...",13
DelayMS 5000
HRSOut 7," (..) Se emitio otro beep...",13,13
DelayMS 5000

' Se utilizará el comando 9 para colocar tabulaciones y se


' mostrarán los códigos ASCII(32) al ASCII(127)
HRSOut "Uso del Comando 9 Tabulaciones y los codigos ASCII ",13
HRSOut "---------------------------------------------------",13
DelayMS 2000
For i = 32 To 125 Step 3
ii = i+1
iii = i+2
HRSOut "El Valor ASCII(",Dec i, ")= ", i, 9
HRSOut "El Valor ASCII(",Dec ii, ")= ", ii, 9
HRSOut "El Valor ASCII(",Dec iii, ")= ", iii, 13
Next

' Iteración con el usuario, utilización de HRSIN


HRSOut 13,"Iteracciones con el usuario a traves del HRSin ",13
HRSOut "-----------------------------------------------",13

Figura B.17. Ejecución del programa UART_01.hex Repeat


HRSOut "Marque un numero entre cero (0) y nueve (9) = "
' ------------------------------------------------------------------- HRSin Dec i
' Programa: UART_01 Until i >= 0 And i <= 9
' Utilización de la herramienta UART del iLOADER, se practicarán los
' comandos: HRSOut "Usted ha marcado el numero ", Dec i,13
' 0 ... Clear Screen (Limpiar pantalla)
' 7 ... Beep (Emite un Beep, Campana) Loop:
' 9 ... Tabulador (Cursor Tabulación) HRSOut "Desea ir al inicio del programa (s/n)? ",13
' 13 ... Carry Return (Control de Carro) HRSin i
' If i = "s" Or i = "S" Then
' Los caracteres ASCII permitidos son desde el ASCII (32 - 127). GoTo Main
' ------------------------------------------------------------------- EndIf
Device = 16F876 ' Microcontrolador Utilizado If i = "n" Or i = "N" Then
XTAL 20 ' Velocidad del Reloj (resonador) HRSOut "Fin del programa, hasta luego ...",13
HRSOut 7, 7, 7
Dim i As Byte ' Variable auxiliar End
Dim ii As Byte ' Variable auxiliar EndIf
Dim iii As Byte ' Variable auxiliar
Declare HSERIAL_BAUD 19200 ' Velocidad de conexión Micro <-> PC GoTo Loop
DelayMS 1000 ' Retardo inicial requerido por el End

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


115
El programa UART_01.bas muestra cómo utilizar todos los comandos de control Declare HSERIAL_BAUD 19200 ' Velocidad de conexión al PC
DelayMS 1000 ' Retardo inicial requerido por el
admitidos por la herramienta UART/SCOPE. También podemos observar la forma en
' UART, es obligatorio su uso.
que es recibida la información enviada desde el PC. Main: '

Durante la ejecución, se le solicita al usuario que introduzca valores por medio ' El comando 0 hará una limpieza de pantalla y colocará el cursor
del teclado. Para ello escriba el valor en la casilla “Enviar String” y presione ' en la primera posición de la pantalla arriba y a la izquierda.
“Enviar”. Al hacer esto, los valores escritos por usted ya sean del tipo texto (String) ' Comando 0 (Clear)
o numéricos serán enviados al microcontrolador PIC®. HRSOut 0
HRSOut "Este programa presenta los valores de i",13
HRSOut "en formato Decimal, Hexadecimal y binario",13
HRSOut "-----------------------------------------",13
HRSOut 9,"DEC i", 9, "HEX i", 9, "BIN i",13
HRSOut "-----------------------------------------",13

For i=0 To 255


HRSOut 9, DEC3 i, 9, HEX2 i, 9, BIN8 i,13
Next
End
OTRO EJEMPLO CON EL UART.

Una vez cargado en el microcontrolador PIC® el programa UART_02.hex,


mediante el menú UART/SCOPE seleccione la velocidad de comunicación a 19200
baudios y oprima conectar. La figura B.18 muestra la ejecución del programa
UART_02.hex. Veamos en detalle el código fuente del programa UART_02.bas en
lenguaje Basic PROTON®.

En este programa vemos como desplegar datos en forma de texto, por ejemplo:
la instrucción envía el texto encerrado entre comillas seguido del comando 13.

HRSOUT "Este programa presenta los valores de i",13

También se puede observar el uso del comando 0 para borrar el contenido de la


pantalla y de los modificadores de formato para presentar información numérica en
diferentes formas. Así la instrucción mostrada a continuación, presenta en la
pantalla del computador la variable i en tres formatos numéricos diferentes: (a)
decimal de 3 dígitos (DEC3), (b) Hexadecimal de 2 dígitos (HEX2) y binario de 8
dígitos (BIN8).

HRSOUT 9, DEC3 i, 9, Hex2 i, 9, BIN8 i, 13

' -------------------------------------------------------------------
' Programa: UART_02
' Visualización lineal de datos ...
' -------------------------------------------------------------------
Device = 16F876 ' Microcontrolador Utilizado
XTAL 20 ' Velocidad del Reloj (resonador) Figura B.18. Ejecución del programa UART_02.hex
Dim i As Byte ' Variable auxiliar

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


116
B.12. OPERACIÓN EN MODO SCOPE

Las recomendaciones generales para el manejo del SCOPE son las siguientes: Paso No.2. Iniciar Herramienta UART/SCOPE

1. El programa debe incluir un retardo al principio del mismo de 1000 ms, Haga clic en el menú UART/SCOPE. Se desplegará una pantalla como la
necesario para sincronizar correctamente los datos. mostrada de la figura B.19. Coloque el selector de modo de trabajo en la posición
“SCOPE” (a la derecha).
2. Se pueden graficar datos tipo entero o flotante. Al trabajar con números en
flotante debe considerarse la configuración regional del computador y ajustar Paso No.3. Conexión con el PIC®
el símbolo decimal en punto “.” mientras el símbolo de separación de miles
debe ser una coma “,”. Seleccione la velocidad de comunicación a 19200 baudios y oprima conectar. La
figura B.19, muestra la ejecución del programa SCOPE_01.hex
3. La herramienta permite trabajar con 8 canales, los cuales, se identifican como
“C0”, “C1”, “C2”, “C3”, “C4”, “C5”, “C6” y “C7”.
En la parte inferior de la pantalla, podemos observar tres indicadores numéricos,
4. El formato usado para enviar datos a un canal del SCOPE, es el siguiente: los cuales, reflejan el último valor graficado en los canales C0, C1 y C2,
respectivamente.
“Cx”, DEC Valor, 13 con x = 1,2,3,4,5,6 y/o 7

Paso No.1. Cargar el Programa

Siga las indicaciones suministradas anteriormente y programe al


microcontrolador PIC® con el código del programa denominado SCOPE_01.hex. El
programa fuente en Basic PROTON® puede cargarse a través del archivo
SCOPE1.bas, el cual, se encuentra en el CD de instalación y es mostrado a
continuación:

' -------------------------------------------------------------------
' Programa: SCOPE_01
' Visualización de datos Enteros a través del canal "C0" del SCOPE ..
' -------------------------------------------------------------------
Device = 16F876 ' Microcontrolador Utilizado
XTAL 20 ' Velocidad del Reloj (resonador)

Dim i As Word ' Variable auxiliar


Declare HSERIAL_BAUD 19200 ' Velocidad de Conexión al PC
DelayMS 1000 ' Retardo inicial requerido por el
' SCOPE, es obligatorio su uso.

Main:
For i = 0 To 999
HRSOut "C0", DEC3 i ,13
Next i
GoTo Main

Figura B.19. Programa SCOPE_01.hex. Graficando una señal diente de sierra.

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


117
En el ejemplo del programa SCOPE_04.bas, ver figura B.20, podemos observar El ejemplo siguiente, suministrado en el CD del iLOADER como programa
como el SCOPE puede graficar datos con diferentes formas canónicas. Los datos SCOPE_05, muestra como graficar datos tipo entero en los 8 canales del SCOPE en
correspondientes al canal de color rojo son del tipo punto flotante, mientras que los forma simultánea. El resultado del programa podemos verlo en la figura B.21.
datos correspondientes al canal en azul son del tipo entero. El listado de la
codificación del programa SCOPE_04.bas en Basic PROTON® se presenta a ' --------------------------------------------------------------
' Programa: SCOPE_05
continuación: ' Visualización de datos en los 8 canales en forma simultánea
' "C0", "C1", "C2", "C3", "C4", "C5", "C6", "C7".
' ------------------------------------------------------------------- ' --------------------------------------------------------------
' Programa: SCOPE_04 Device = 16F876 ' Micro Utilizado
' Visualización de datos en punto flotante a través de los canales XTAL 20 ' Velocidad del Reloj
' "C0", "C1". Dim i As Byte ' Variable auxiliar
' ------------------------------------------------------------------- Dim Valor As Byte
Device = 16F876 ' Micro Utilizado Declare HSERIAL_BAUD 19200 ' Velocidad de conexión al PC
XTAL 20 ' Velocidad del Reloj
Dim i As Float ' Variable auxiliar Main:
Dim j As Float
Declare HSERIAL_BAUD 19200 ' Velocidad de conexión al PC For i = 0 To 99
i = 0 HRSOut "C0", Dec i, 13
j = 0 HRSOut "C1", Dec i+100, 13
HRSOut "C2", Dec i+200, 13
DelayMS 1000 HRSOut "C3", Dec i+300, 13
HRSOut "C4", Dec i+400, 13
Main: HRSOut "C5", Dec i+500, 13
HRSOut "C0", DEC2 i, 13 HRSOut "C6", Dec i+600, 13
HRSOut "C1", DEC2 j, 13 HRSOut "C7", Dec i+700, 13
If i >= 10 Then Next
i = 0 GoTo Main
j = 0
EndIf
i = i + 0.10
j = ((Random)/10000.0 / 2.5)
j = j + 20.0
GoTo Main

Figura B.20. Programa SCOPE_04.bas graficando dos señales de diferentes tipo canónico. Figura B.21. Programa SCOPE_05.bas graficando en los 8 canales en forma simultánea.

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


118
B.13. MANEJO DEL SERVIDOR OPC

En esta sección, describiremos el manejo y uso del servidor de datos OPC incluido Nota: La velocidad de conexión estará establecida por la velocidad de comunicación
en el iLOADER. Con el servidor de datos OPC usted podrá exportar – importar serial utilizada por usted en el programa realizado, en los ejemplos aquí incluidos se
variables desde su microcontrolador a cualquier programa con capacidad de manejo utiliza una velocidad de 19200 Baudios. A continuación se presenta el código fuente
de datos a través del protocolo OPC®, ya sea en la computadora local o en del programa OPC_01.bas codificado en Basic PROTON®.
cualquier otra computadora instalada en red, local y/o extendida. Estos programas
podrán ser, entre otros: MatLAB®, LabView® y aplicaciones realizadas en VB6®, ' -------------------------------------------------------------------
Excel®, .NET. ' Programa: OPC_01
' Envío de datos a las variables "E0", E1" y "E2" del Servidor OPC
' -------------------------------------------------------------------
Paso No.1. Cargar el Programa e inicializar el servidor Device = 16F876 ' Micro Utilizado
XTAL 20 ' Velocidad del Reloj
Siguiendo las instrucciones previas programe el código OPC_01.bas en el PIC®. Dim i As Byte ' Variables auxiliar
Seguidamente presione en el menú principal del programa iLOADER la opción Dim a As Byte
“Servidor OPC”. Se mostrará la pantalla de configuración/trabajo del Servidor OPC Declare HSERIAL_BAUD 19200 ' Velocidad de conexión al PC
tal como se muestra en la figura B.22.
Main:
For i = 0 To 127
a = Sin i
HRSOut "E0", Dec (i+127), 13
HRSOut "E1", Dec a, 13
HRSOut "E2", Dec ((i/64*127)+256), 13
Next
GoTo Main

Paso No.2. Configurar el Servidor

Como puede observarse en el código fuente, este programa utiliza 3 variables


de entrada al servidor (E0, E1 y E2) siendo todas de ellas de tipo canónico entero.
Estas variables son generadas por el microcontrolador PIC® a través del programa
Basic PROTON®.

Utilizando el botón “Eliminar”, dejaremos en el cuadro de variables de entrada del


menú Servidor OPC, solamente a aquellas variables que se utilizarán, es decir E0,
E1 y E2. También debemos ajustar mediante la casilla de selección de tipo, el tipo
de las variables siendo E0, E1 y E2, del tipo canónico entero. Utilizando el botón
“Eliminar”, se eliminarán todas las variables de salida no requeridas. El servidor ya
ha sido configurado y está listo para ser iniciado (ver figura B.23).

Paso No.3. Conexión con el PIC®

Seleccione la velocidad de comunicación adecuada (en este ejemplo 19200


Baudios) y oprima “Iniciar Servidor”. Esta acción dará inicio al servicio OPC en el
Figura B.22. Vista del Servidor OPC® al iniciarse. computador, lo cual, permitirá a los clientes OPC recibir los datos. En la figura B.24
se observa al servidor OPC ejecutando el programa OPC_01.bas.

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


119
En este punto, es necesario el uso de un programa cliente OPC para visualizar
los datos que exporta el microcontrolador PIC® a través del servidor OPC del
programa iLOADER. Dentro del CD del iLOADER encontrará una aplicación
ejecutable llamada iLOADER_OPC_Cliente, la cual, nos servirá para poder
interactuar con el servidor OPC y microcontrolador PIC®.

Ejecute la aplicación “iLOADER_OPC_Cliente”. Observe los valores graficados y


los valores correspondientes a las entradas como se muestra en la figura B.25.

Figura B.23. Configuración del servidor OPC para el ejemplo OPC_01.bas

Figura B.25. Visualización de la aplicación “Cliente_OPC_iLOADER.exe”

OTRO EJEMPLO CON EL OPC®.

El ejemplo denominado OPC_02.bas es un programa que muestra las


capacidades de exportación e importación de variables a través del
microcontrolador PIC® y el uso del servidor OPC. Anexo se presenta su
codificación en Basic PROTON®.

' -------------------------------------------------------------------
' Programa: OPC_02.bas
' Porgrama para probar el servidor OPC
' -------------------------------------------------------------------
Device = 16F876 ' Micro Utilizado
XTAL 20 ' Velocidad del Reloj

Dim i As Byte
Dim J As DWord ' Variables Auxiliares

Declare HSERIAL_BAUD 19200 ' Velocidad de conexión al PC


Figura B.24. Servidor OPC ejecutando el programa OPC_01.bas HSERIAL_CLEAR = On ' Limpia el Buffer antes de recibir

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


120
Main: Si la ejecución es exitosa, las variables E1 y S0 deben contener en todo
momento el mismo valor, al igual que E2 y S1. Para ejecutar el programa,
For i = 0 To 255
HRSOut "E0", Dec i, 13 debemos configurar e iniciar el servidor como se muestra en la figura B.26.
HRSOut "S0", 13
HSerIn 100 , TIMEOUT,[Wait("S0") , Dec J]
HRSOut "E1", Dec J, 13
TIMEOUT:
HRSOut "S1", 13
HSerIn 100 , TIMEOUT1,[Wait("S1") , Dec J]
HRSOut "E2", Dec J, 13
TIMEOUT1:
Next
GoTo Main
Figura B.26. Configuración del servidor OPC para el programa OPC_02.bas

En la figura B.2., se observa el resultado de la ejecución del programa. Las


Explicación del programa anterior variables S0 y S1 escritas mediante su respectivo cuadro editable de la aplicación
cliente, se actualizan en el servidor, envían al PIC® y luego re-escriben sus valores
Por medio de un ciclo for, el PIC® envía un valor de 0 a 255 a la variable de en la variables de entrada E1 y E2 mostrando el flujo de la información en forma
entrada E0 del servidor, esto lo hace mediante la instrucción: bi-direccional.

HRSOut "E0", Dec i, 13 En total el servidor OPC puede procesar hasta veinte (20) variables de entrada y
(20) variables de salida, cantidad suficiente como para manejar un pequeño
El PIC® solicita al servidor OPC el valor de la variable de salida S0 y espera la proceso de control industrial.
respuesta durante 100 ms. En caso de no existir respuesta del servidor, el programa
continúa en la etiqueta TIMEOUT.

HRSOut "S0", 13
HSerIn 100 , TIMEOUT,[Wait("S0") , Dec J]

Si el servidor envía el valor de S0 el dato recibido se almacena en la variable j y


se re-transmite hacia la variable de entrada E1 dentro del servidor:

HRSOut "E1", Dec J, 13

Este proceso de re-transmisión permite visualizar en la pantalla del computador,


como la variable de salida, ha sido escrita por el programa cliente OPC®, procesada
por el servidor y luego recibida correctamente en el microcontrolador PIC®.

Seguidamente, el PIC® solicita y espera por el valor de la variable S1, la cual, al


ser recibida por el microcontrolador PIC®, se re-transmite hacia la variable de
entrada E2.

HRSOut "S1", 13
HSerIn 100 , TIMEOUT1,[Wait("S1") , Dec J] Figura B.27. Estado de la aplicación OPC®. Estado del Servidor OPC®.
HRSOut "E2", Dec J, 13

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


121

Você também pode gostar