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 [email protected]

Manual Iboard III

Embed Size (px)

Citation preview

Page 1: Manual Iboard III

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 • [email protected]

Page 2: Manual Iboard III

iBOARD III Sistema de Desarrollo para

Microcontroladores PIC con interfaz USB Autores:

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

Editor:

Ángel L. Villegas

Page 3: Manual Iboard III

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: [email protected] 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

Page 4: Manual Iboard III

INDICE

PAG. CAPITULO 01

1.0. Descripción del sistema 1 1.1. Requerimientos mínimos del computador 1 1.2. Contenido del CD-ROM 1 1.3. Características del sistema de desarrollo iBOARD III 1 1.4. Características del microcontrolador PIC16F876 1 1.5. Capacidades del Hardware 1 1.6. Capacidades del Software. El Compilador Basic® PROTON® 2 1.7. Características del Coprocesador ATMEL™ 2 1.8. Descripción modular del sistema iBOARD III 3 1.9. Diagrama electrónico del sistema iBOARD III 4

CAPITULO 02

2.0. Instalación de “Drivers” 6 2.1. Optimizando la velocidad de transferencia de información entre

la iBOARD III y el computador ( PC ). 6

CAPITULO 03

3.0. Descripción del sistema 8 3.1. Interfaz de programación y alimentación USB 8 3.2. El Microcontrolador 8 3.3. La regleta de conexiones 9 3.4. Periféricos de entrada y salida 9 3.5. El Coprocesador ATMEL™ 9

CAPITULO 04

4.0. Primeros Pasos 10 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 4.3. Paso No. 03. Configuración del cargador “Loader” 10 4.4. Paso No. 04. Selección del puerto de comunicaciones serial 10 4.5. Paso No. 05. Carga del archivo iBOARD_III_DEMO.hex 11 4.6. Paso No. 06. Grabar programa en el microcontrolador 12 4.7. Referencias sobre el primer programa 13 4.8. Cargador “BootLOADER” 13

CAPITULO 05

5.0. El Microcontrolador PIC® 16 5.1. Clasificación de los microcontroladores según el bus de datos 16

PAG.

5.2. Lenguajes de programación más utilizados con microcontroladores 16 5.3. Microcontroladores “BootLoaders” 17 5.4. Características Principales del PIC 16F876 17 5.5. Anatomía de un microcontrolador PIC16F876 18 5.6. Arquitectura del PIC16F876 19 5.7. Organización de la memoria de programación del PIC16F876 19 5.8. Organización de la memoria de datos del PIC16F876 20 5.9. El registro de Estatus 21 5.10. El registro de Opciones 22 5.11. El registro de Interrupciones 23 5.12. Interrupciones en el microcontrolador PIC16F886/887 24 5.13. Entrada – Salida Digital 25 5.14. Puertos de Entrada/Salida (E/S) 26 5.15. Comandos en alto nivel para el manejo de puertos de E/S 29 5.16. Comandos en alto nivel para el manejo de Interrupciones 31

CAPITULO 06

6.0. Conversión Analógica – Digital 33 6.1. Registros asociados al conversor A/D 33 6.2. El Registro ADCON0 (detalle de sus bits) 34 6.3. El Registro ADCON1 (detalle de sus bits) 34 6.4. Reloj para la conversión A/D 35 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 6.7. Comandos en alto nivel para la conversión A/D 36 6.8. Pasos a realizar para una conversión A/D con interrupciones 38

CAPITULO 07

7.0. El USART / EUSART de un microcontrolador 39 7.1. Transmisión Asincrónica 39 7.2. Recepción Asincrónica 40 7.3. Interconexión de microcontroladores PIC a través de EUSART 42 7.4. Generador de Baud 42 7.5. Resumen de pasos a seguir para realizar una transmisión serial

asincrónica a través de los registros del módulo EUSART. 43

7.6. Resumen de pasos a seguir para realizar una transmisión serial asincrónica a través de los registros del módulo EUSART.

43

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

Page 5: Manual Iboard III

INDICE, continuación. PAG. CAPITULO 08 8.0. Temporizadores “TIMERS” 47 8.1. Interrupción por TMR0 48 8.2. Registros asociados al TMR0 48 8.3. Como trabaja la temporización del TMR0 48 8.4. Pasos a seguir para la utilización del TMR0 48 8.5. Ejemplo de utilización del TMR0 48 8.6. El timer TMR1 50 8.7. El timer TMR1 trabajando como Temporizador 51 8.8. El timer TMR1 trabajando como Contador 51 8.9. El timer 1 del PIC16F886 / 887 51 8.10. Como trabaja la temporización del TMR1 51 8.11. Pasos a seguir para la utilización del TMR1 52 8.12. Ejemplo de utilización del TMR1 52 8.13. El timer TMR2 55 8.14. Como trabaja la temporización TMR2 55 8.15. Pasos a seguir para la utilización del TMR2 55 8.16. Ejemplo de utilización del TMR2 55 8.17. Ejemplo del TMR0, TMR1 y TMR2 en forma simultánea 57 CAPITULO 09 9.0. Comunicación Serial sincrónica I2C 58 9.1. Características del BUS I2C 58 9.2. Detalle de la comunicación I2C 59 9.3. Direccionamiento y formato de transferencia de información 59 9.4. Inicialización en modo maestro 59 9.5. Transmisión en modo maestro 60 9.6. Recepción en modo maestro 60 9.7. Dispositivos I2C en el sistema de desarrollo iBOARD III 61 9.8. Comandos en alto nivel para el manejo del protocolo I2C 62 9.9. Memoria Eeprom 24LC16B 62 9.10. Ejemplo de utilización de una memoria Eeprom 24LC16B 63 9.11. Reloj en tiempo Real DS1307 64 9.12. Ejemplo práctico con reloj de tiempo real DS1307 64 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

PAG. 10.4. Conexión entre el PIC16F876 y los dispositivos esclavos 69 10.5. Los iButton® 1-Wire® 70 10.6. Ejemplo de aplicación. Lectura del serial de un iButton® 70 10.7. Cálculo del CRC-8, identificación de errores en la RED 1-Wire® 71 10.8. Ejemplo del cálculo del CRC8 72 10.9. Termómetro Digital modelo DS18B20 73 10.10. Ejemplo de lectura de temperatura con un DS18B20 74 10.11. Algoritmo de Search ROM 76 CAPITULO 11 11.0. El coprocesador ATMEL™ ATTiny13s 78 11.1. El coprocesador utilizado como Salidas Digitales 79 11.2. El coprocesador utilizado como Entradas Digitales 81 11.3. El coprocesador utilizado como Salidas PWM 82 11.4. El coprocesador utilizado como Contador Digital 83 11.5. El coprocesador utilizado como Conversor A/D 84 CAPITULO 12 12.0. MODULO CCP/PWM. Captura, Comparación y PWM 85 12.1. Modo de Captura 85 12.2. Modo de Comparación 86 12.3. Modo PWM 86 12.4. Registros asociados a la Captura, Comparación y TMR1 88 12.5. Registros asociados al módulo PWM y TMR2 88 12.6. Ejemplos de aplicación del módulo CCP1 en modo Captura 89 12.7. Comando en Alto nivel para HPWM por hardware 90 12.8. Comando en Alto nivel para PWM por software 90 12.9. Ejemplo de HPWM y configuración a través de registros 91 12.10. Ejemplo de HPWM y comandos en alto nivel 91 Referencias Bibliográficas 92 Anexo A. Pantalla LCD 93 Anexo B. Software cargador iLOADER, Uart/Scope/OPC®. 101

Page 6: Manual Iboard III

INTRODUCCIÓN El sistema de desarrollo para microcontroladores modelo iBOARD III, es una plataforma educativa de avanzada tecnología, con la cual, usted podrá configurar, programar, verificar e implementar diseños electrónicos digitales utilizando como base a los microcontroladores PIC® de las familias serie F modelos 16Fxxx y 18Fxxx. Es un sistema completo que posee además de un microcontrolador, una gran cantidad de dispositivos pasivos y activos generalmente de montaje superficial, los cuales, se complementan para conformar elementos de interfaz hombre – máquina, cálculo, procesamiento, visualización, medición y almacenamientos de información. El software que acompaña al sistema iBOARD III, fue totalmente diseñado 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 “bootloader” denominado iLOADER, el usuario contará con una interfaz completa UART/SCOPE que le permitirán visualizar la información proveniente del microcontrolador en forma de texto y en forma gráfica. Adicionalmente, se incluye una herramienta de mayores prestaciones y tecnología denominada servidor de datos OPC™, la cual, le permitirá exportar en tiempo real variables internas del microcontrolador a cualquier aplicación compatible Microsoft™ con capacidad de comunicación OPC™, como por ejemplo: Excel®, PowerPoint®, Visual Basic®, Delphi® Borland, Visual Studio, etc. El sistema de desarrollo iBOARD III, se encuentra en continuo proceso de actualización por parte del fabricante. Tanto el software como el hardware incluyen las últimas innovaciones electrónicas para proporcionar a usted una herramienta poderosa, sólida y bien construida, pensada para resistir un trato duro y aún así brindar un acabado profesional. 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 USB del computador. Usted podrá entonces, alimentar a sus circuitos electrónicos directamente de la salida de voltaje del programador hasta 400 ma de carga por puerto USB sin inconvenientes. 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 compilación del programa en formato Intel *.Hex. Sin embargo, el sistema es acompañado del excelente compilador en Basic® modelo PROTON® y casi la totalidad de los ejemplos desarrollados en el manual, fueron realizados con

el compilador Basic® PROTON™, esto se hizo con la finalidad de estandarizar el método de enseñanza de los microcontroladores PIC®. A medida que se desarrollan los capítulos, los ejemplos aumentarán el nivel de complejidad tanto de conexiones en hardware como de descriptores en software. El capítulo 1,2 y 3, son capítulos informativos. El primero de ellos describe al sistema de desarrollo, sus partes y capacidad del hardware incluido. El segundo capítulo explica en forma detallada como instalar los “Drivers” de la tarjeta iBOARD 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 detallada de cada módulo funcional del sistema de desarrollo iBOARD III. El capítulo 4, fue escrito con la finalidad de utilizar el sistema de desarrollo directamente con el compilador Basic® PROTON®, los primeros pasos que el usuario deberá seguir para la instalación del software y el desarrollo del primer programa de aplicación. En el capitulo 5, se desarrolla una breve introducción a la organización y arquitectura de los microcontroladores PIC®, haciendo especial énfasis en los elementos de entrada y salida. Se incluyen ejemplos para el manejo de los puertos 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 del microcontrolador. El capítulo 8, hace una explicación sobre los periféricos tipo “Timers” internos que posee el microcontrolador, su utilidad y ejercicios de aplicación. En el capítulo 9 se aborda la comunicación serial sincrónica en especial el protocolo de comunicaciones I2C. Se desarrollan ejemplos para el manejo del reloj de tiempo real DS1307 incluido en el sistema y la memoria EEprom serial modelo 24LC16B. El capítulo 10, es una síntesis del protocolo de comunicaciones 1-Wire® de Dallas Semiconductor, un protocolo de comunicaciones de avanzada tecnología muy utilizado en la actualidad. Por último en el capítulo 11, se detalla el funcionamiento del microcontrolador ATMEL™ incluido en el sistema de desarrollo, ventajas y aplicaciones del coprocesador. Mayor información teórico práctica sobre el uso y aplicación de los microcontroladores PIC® está disponible para su consulta a través de la página web www.roso-control.com.

Page 7: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 1

CAPÍTULO 1 DESCRIPCIÓN DEL SISTEMA El propósito de éste manual es:

• Presentar las características, potencialidades y ventajas del iBOARD III. • Guiarlo durante el proceso de instalación del software incluido en CD-ROM. • Suministrarle un conjunto de ejemplos e instrucciones de utilización que

harán de su experiencia con el iBOARD III todo un éxito.

Antes de continuar, tomaremos un tiempo para revisar el contenido del material que acompaña al sistema de desarrollo:

• Tarjeta de desarrollo iBOARD III. • Microcontrolador PIC16F876 con resonador 20 MHz. • Pantalla LCD estándar de 2x16 caracteres. • Cable de programación USB. • CD con programa de instalación y documentación adicional. • Código de ejemplo para el microcontrolador PIC16F876. • Compilador en lenguaje Basic® PROTON® versión DEMO. • Manual de uso y referencia del microcontrolador PIC16F876.

1.1. Requerimientos mínimos del computador • Procesador Pentium 266 Mhz o superior con Windows XP® ó Vista®. • Unidad de CDROM. • Puerto de comunicaciones USB. • Conexión a Internet (opcional para actualizar la versión de los programas

incluidos en el CD-ROM y descargar nuevos ejemplos disponibles en la RED).

1.2. Contenido del CD-ROM • Programa de instalación del iBOARD III. • “Drivers” para interfaz de puerto USB. • Especificaciones del PIC16F876 (Microchip™) en inglés. • Especificaciones técnicas del DS1307, 24LC256 y pantalla LCD. • Códigos de ejemplo y diagramas esquemáticos. • CD con programas de aplicación.

1.3. Características del sistema de desarrollo iBOARD III • Interfaz de programación USB, lista para conectar directamente al PC. • No requiere de transformador y/o fuente externa de alimentación. • Se conecta de forma sencilla a cualquier protoboard estándar. • Alimenta al protoboard directamente desde la tarjeta impresa hasta 400 ma. • Incluye un LED de color verde para indicar la alimentación del sistema. • Incluye un LED de color rojo para indicar la actividad del puerto USB. • Pulsador de “RESET” para reiniciar al microcontrolador. • Todos los terminales de E/S del PIC están disponibles para el Protoboard. • Pantalla LCD de 2x16 pre-conectada y lista para trabajar. • Cuatro (04) entradas digitales con pulsadores N.A. conectadas a los pines

RA0 … RA3 del microcontrolador PIC. • Cuatro (04) salidas digitales con LEDs pre-conectados a los terminales RC2

..RC5 del microcontrolador PIC a través de un interruptor tipo mini DIP. • Microcontrolador PIC16F876 con resonador de 20 Mhz incluido. • Memoria EEPROM I2C modelo 24LC16B de 2K x 8 Bits.. • 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.4. Características del microcontrolador PIC16F876 El microcontrolador incluido en el sistema de desarrollo iBOARD III, está basado en el muy utilizado microcontrolador PIC16F876, probado como uno de los PIC más robustos, completo y destacados de su gama. 1.5. Capacidades del Hardware • 384 bytes de memoria RAM. • 8 K x14 Words de memoria de programa Flash re-programable. • 256 Bytes de memoria Eeprom. • Convertidor Analógico/Digital de 4 canales y 10 bits de resolución. • Un (01) USART (comunicación serial). • Dos (02) módulos CCP (Capture/Compare/PWM). • Tres (03) Timers o temporizadores (TMR0, TMR1 y TMR2). • Hasta ocho (08) posibles fuentes de interrupción.

Page 8: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 2

1.6. Capacidades del Software. El Compilador Basic® PROTON® • Programación en alto nivel, estructurada y modular en lenguaje Basic®. • Facilidad para la definición y manejo de memoria RAM, EEprom y Flash,

definición de variables y modificadores de formato. • Funciones matemáticas, trigonométricas y lógicas incluidas. • Funciones incluidas para facilitar el manejo de “string”. • Manejo directo de pantallas LCD alfanuméricas y gráficas. • Generación de múltiples tonos y sonidos de alarma. • Medición de pulsos, frecuencia y conteo de eventos. • Manejo de pulsadores e interruptores de forma fácil y eliminando rebotes. • Manejo total de interrupciones para todos los periféricos incluidos. • 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. • Acceso a los registros internos del microcontrolador para lectura y/o

escritura. • Comunicación serial RS232 por hardware a través de los pines RC7/RC6 del

microcontrolador. USART directamente conectada al puerto USB del PC. Por software, puede generarse la PWM por cualquier pin del microcontrolador.

• Manejo de los protocolos de comunicación serial:

1-Wire ® de Dallas Semiconductors. I2C de Phillips Semiconductors. 3-Wire de Dallas-Maxim. SPI de Motorola.

• 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.

1.7. Características del Coprocesador ATMEL™ El microcontrolador ATMEL™ viene totalmente preprogramado para realizar las siguientes configuraciones y tareas como coprocesador: • Cuatro (4) puertos digitales programables como entradas y/o salidas. • Cuatro (4) puertos digitales prog. como contadores de freq. hasta 1 MHz. • Dos (2) puertos como salidas programables PWM de 37.5 KHz. • Dos puertos (2) como entradas analógicas 10 bits. • Tres puertos (3) como comparadores analógicos. • Referencia interna de 1.1 Volts para la conversión A/D y comparación. • 32 Bytes de memoria RAM disponibles al usuario para lectura / escritura. En el capítulo No. 11 se detalla la operación completa del microcontrolador ATMEL™ como coprocesador. El fabricante está desarrollando el software necesario para utilizar al coprocesador como elemento central en la conexión de sistemas de desarrollo a través de una red de comunicaciones, inicialmente, no todos los sistemas de desarrollo incorporarán el microcontrolador ATMEL™, el 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 sin el microcontrolador ATMEL™, podrá adquirirlo como una opción a través del fabricante.

Igualmente, el programa iLOADER®, se podrá descargar en forma gratuita y sin restricciones desde la página www.roso-control.com. Este programa es un extra y no es imprescindible para la puesta en funcionamiento del sistema de desarrollo iBOARD III.

Page 9: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 3

1.8. Descripción modular del sistema iBOARD III

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

PANTALLA LCD 2X16 CARACTERES

MICROCONTROLADOR PIC16f876

RELOJ DE TIEMPO REAL DS1307

XTAL DE 13.768 KHz PARA RELOJ DE TIEMPO REAL

RESONADOR 20 MHz

SWITCH MINI DIP 4X N.O. PARA

CONEXIÓN DE LEDS AL

MICROCONTROLADOR

CONECTOR EXTRAÍBLE PARA LA LCD

BORNERA DE CONEXIÓN AL PROTOBOARD

CONVERTIDOR USB A SERIAL FT232

LED BICOLOR VERDE / ROJO

HUECOS PARA EL MONTAJE EN

TABLERO

CONECTOR MINI USB

MICROCONTROLADOR ATMEL 8 BITS

MEMORIA EEPROM 2K X 8 BITS

LED’S Y PULSADORES

PULSADOR DE RESET

Page 10: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 4

1.9. Diagrama electrónico del sistema iBOARD III

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

Page 11: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 5

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

Page 12: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 6

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.

Una vez instalados los “Drives”, conecte la iBOARD III al puerto USB del computador, de inmediato deberá observar una secuencia de ventanas que aparecen indicando al final; que la instalación del nuevo hardware ó tarjeta iBOARD III ha sido completada en forma satisfactoria. Note que la figura 2.2(c) muestra incluso el puerto serial COM(8) seleccionado como puerto virtual. En este caso el PC instaló la iBOARD III seleccionando para su funcionamiento el puerto (COM8). 2.1. Optimizando la velocidad de transferencia de información entre la iBOARD III y el computador ( PC ). 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 variedad de CPU’s y tarjetas de memoria con diferentes velocidades de procesadores y 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 sincronización entre ambos equipos. La propiedad latencia la podemos ajustar de la siguiente forma:

Figura 2.2. Diferentes mensajes observados durante la instalación del sistema de desarrollo

iBOARD III. 1.- Abra el menú propiedades del sistema “Hardware” a través del panel de control de Windows®. Seleccione “Administrador de dispositivos”, esto se puede observar en la figura 2.3. 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. 3. Haga doble clic sobre “Configuración del Puerto” y “Opciones Avanzadas”, esto se puede observar en la figura 2.5. 4. Modifique la propiedad “Temporizador de Latencia” a un valor igual a 3, como se muestra en la figura 2.6. De esta forma usted ya optimizó la transferencia de información entre el PC y el sistema de desarrollo iBOARD III.

Page 13: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 7

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.5. Menú Configuración de puerto del sistema operativo Windows™.

Figura 2.6. Menú configuración avanzada del COM del sistema operativo Windows™.

Page 14: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 8

CAPITULO 3 DESCRIPCIÓN DEL SISTEMA Para describir funcionalmente al sistema iBOARD III vamos a dividirlo en cinco bloques operativos bien definidos:

• Interfaz de programación y alimentación USB • El microcontrolador PIC • La regleta de conexiones • Los periféricos de entrada y salida • Coprocesador ATMEL™

3.1. Interfaz de programación y alimentación USB Se encarga de ajustar los niveles de tensión del puerto USB a los niveles aceptados por el microcontrolador (0 - 5 Vdc) y de tomar la alimentación de +5V necesaria para el funcionamiento del sistema de desarrollo. Los elementos que conforman a este bloque se muestran resaltados en color rojo en la Figura 3.1.

Figura 3.1. Interfaz de programación y alimentación del iBOARD III.

Los componentes que integran la interfaz de programación son:

• Un circuito integrado convertidor USB / RS-232 TTL modelo FT232. • Un conector USB tipo mini 5P que permite utilizar cualquier cable USB mini

estándar (como los usados en cámaras, MP3 y muchos otros dispositivos USB) para programar al microcontrolador.

• Un diodo LED de color verde que indica el voltaje de alimentación. • Un diodo LED de color rojo que indica la actividad del puerto USB.

3.2. El Microcontrolador El microcontrolador incluido en el sistema de desarrollo iBOARD III es el PIC16F876, el cual, se presenta en un encapsulado de 28 pines tipo DIP 0.3”. Se le ubica en la parte superior izquierda del sistema y está acompañado de un pulsador de “RESET” y un resonador de 20 Mhz como se muestra en la Figura 3.2.

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

Page 15: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 9

3.3. La regleta de conexiones Abarca toda la parte inferior del sistema y sirve de soporte al mismo. En ella se encuentran claramente identificados todos los pines del microcontrolador además de los terminales de alimentación +5V y GND. +5V es una salida de 5 Vdc aunque puede utilizarse como una entrada de 5 Vdc si no se desea alimentar al iBOARD III desde el puerto USB del PC. Nota Importante. Para poder alimentar con una fuente externa regulada de +5Vdc por el pin +5V, deberá primero desconectar el cable de conexión USB al sistema iBOARD III, a fin de, evitar daños que pudiese ocasionar sobre el puerto USB del PC. Referencia Figura 3.3.

Figura 3.3. Ubicación de la regleta de conexiones del iBOARD III .

3.4. Periféricos de entrada y salida El iBOARD III, cuenta con un grupo de periféricos muy utilizados en aplicaciones industriales, estos son:

• 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 del sistema y reflejan en todo momento el estado de los pines mencionados. Los LEDs son indicadores visuales muy llamativos utilizados en casi todos los equipos electrónicos. Referencia (1) en la Figura 3.3.

• Dip-Switch mini de cuatro (4) posiciones, los cuales, están conectados en

serie con cada uno de los LED’s descritos en el punto anterior. La función de este interruptor es la de conectar y/o desconectar física y eléctricamente los LED’s de los pines del microcontrolador. Referencia (2) en la Figura 3.3.

• Un banco de 4 pulsadores pre-conectados en los terminales RA0,RA1,RA2 y RA3 del microcontrolador, puerto A, bits <3:0>, los cuales se utilizan 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 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 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 funcionamiento. Referencia (6) en la Figura 3.3.

3.5. El Coprocesador ATMEL™

Es un microcontrolador de 8 bit’s fabricado por la casa ATMEL™ muy eficiente y veloz, el cual, ha sido incluido para funcionar como coprocesador del microcontrolador PIC 16F876, “expansor” de puertos E/S, PWM, convertidor A/D y funciones futuras de comunicación en RED. Referencia (7) en la Figura 3.3.

Page 16: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 10

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 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 microchip™ y editar su programa con el compilador de su preferencia, sea C, Pascal, MikroBasic®, PBasic®, MBASIC®, etc, Por supuesto, el sistema viene por defecto con el compilador versión Basic® PROTON® IDE Lite. En ésta sección 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.1. Paso No. 01: 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® en la Carpeta ..\30 Compilador. Abra ésta carpeta y se encontrará dos sub-carpetas denominada 10 Manual y 20 Compilador. Abra la carpeta 20 Compilador y ejecute el instalador como aparece en la figura 4.2, siga las instrucciones indicadas en pantalla.

Figura 4.2. Pantalla de instalación del compilador PROTON®. 4.2. Paso No. 02: Ejecute el entorno PROTON® IDE, haciendo “click” en el icono creado en el escritorio por el programa de instalación ó a través del menú Inicio\todos los programas\.. como aparece en la figura 4.3. 4.3. Paso No. 03: Ahora realice la configuración del cargador de programas (Loader). Para ello seleccione la opción Loader… del menú View, como aparece en la figura 4.4. 4.4. Paso No. 04: Seleccione ahora el puerto de comunicaciones serial donde se instaló previamente el sistema de desarrollo iBOARD III. Como referencia puede ver la figura 2.3.

Page 17: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 11

Figura 4.3. Pantalla inicial del IDE PROTON®.

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

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 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.

Page 18: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 12

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.8. Pantalla final presentada por el IDE del 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.

Page 19: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 13

' CAP_04_Ejemplo_01.bas ' 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. XTAL = 20 ' Define la velocidad del resonador ' Pines de conexión a la pantalla LCD 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 Declare LCD_RSPIN PORTB.1 ' Pin de RS LCD conec. al PORTB.1 TRISB.2 = 0 ' Declara a PORTB.2 como Salida Dig. PORTB.2 = 0 ' Coloca en PORTB.2 un cero (0) Lógico Dim Contador As Byte ' Declaración de var. de uso general Dim ValorF As Float ' Declaracion de var. de uso general 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 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 .bas con la extensión (.bas) está escrito en lenguaje de alto nivel Basic®. Para que éste programa pueda ser ejecutado por el PIC® primero hay que compilarlo, lo cual, genera el archivo compilado con el mismo nombre pero con la extensión .hex. El código escrito en Basic® lo denominaremos código fuente y el codificado (.hex) lo denominaremos de ahora en adelante código objeto.

4.8. Cargador “Boot LOADER”

Los microcontroladores PIC16F87x(A) y PIC18Fxxx(x) pueden escribir su propia memoria de programa (Flash) sin necesidad de utilizar un programador externo, para ello, deberán ser cargados inicialmente con un pequeño código de programa 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 microcontrolador desde un puerto de comunicación serial y/o USB, sean efectivamente almacenados en dicho microcontrolador.

El programa cargador “MicroCode Loader” es un ejemplo de esto; permite 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 del programa MicroCode Loader.

Figura 4.11. Fotografía de la pantalla principal del programa MicroCode Loader. Antes de utilizar el programa MicroCode Loador, es necesario que el microcontrolador a utilizar ya haya sido pre-programado con el código “boot loader”, esto se deberá realizar con un programador para PIC®, ya sea fuera de circuito y/o tipo ICSP. Nosotros recomendamos utilizar el programador de nuestra casa comercial modelo iPROG18. Por defecto, el microcontrolador PIC16F876 incluido en el iBOARD III, ya ha sido pre-programado con el código “boot loader”.

Page 20: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 14

En el CD incluido con el sistema de desarrollo, carpeta 12 Bootloader, se encuentra el archivo correspondiente al código “boot loader” (16F876_20.hex), el mismo, deberá ser cargado en el microcontrolador PIC16F876 a través de un programador estándar. Si este programa no se carga en el microcontrolador, el programa MicroCode Loader no se podrá comunicar con el microcontrolador. 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 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 deberá escribir:

Para microcontroladores PIC16Fxxx

ORG 0 GOTO StartOfProgram ORG 4 StartOfProgram ; El programa de usuario comienza aquí

Para microcontroladores PIC18Fxxx ORG 0 GOTO StartOfProgram ORG 8 StartOfProgram ; El programa de usuario comienza aquí 4.9. BARRA DE HERRAMIENTAS DEL MicroCode Loader:

Figura 4.12. Fotografía del menú principal del programa MicroCode Loader.

Open Hex File

Se utiliza para cargar en memoria del programa MicroCode Loader un archivo del tipo *.hex

Page 21: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 15

Program

El botón “program” se utiliza para cargar el archivo *.hex en el microcontrolador. Cuando se programa el microcontrolador, se realiza una verificación normalmente del programa contenido en el microcontrolador, la verificación asegura que tanto los datos contenidos en la memoria de programa 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 independiente, ya sea la memoria de programa “Verify Code When Programming” ó en la Eeprom “Verify Data When Programming”. Otras opciones están también disponibles a través del menú principal, tales son:

• “Verify After Programming”, verificar después de programar. • “Load File Before Programming”, cargar el archivo antes de

programar. • “Run User Code After Programming”, ejecutar el código o programa del usuario después de programar al microcontrolador. • “Program Code”, programar sólo el área código de programas. • “Program Data”, programar sólo la memoria Eeprom.

Read

Al presionar el botón de leer, el programa MicroCode Loader leerá tanto la memoria de programación como los registros de la Eeprom del microcontrolador 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.

Run User Code

El botón de “Run User Code” al ser presionado, hace que el programa “boot loader” termine su funcionamiento y se ejecute el programa almacenado en la memoria flash del microcontrolador.

Loader Information

Muestra la información acerca de la versión del “firmware” ó “bootloader” utilizado, al mismo tiempo, muestra el tipo de microcontrolador utilizado. En este caso mostrará PIC16F876.

Loader Serial Port

Mediante esta caja de texto, se selecciona el puerto de comunicaciones a utilizar por el programa MicroCode Loader y es donde físicamente estará conectado el microcontrolador PIC®. Es importante seleccionar correctamente el puerto serial a utilizar, si esto no se realiza el programa MicroCode loader presentará en mensaje de error. El puerto de conexión serial a utilizar debe coincidir con el que previamente se seleccionó para la conexión del sistema iBOARD III. Como referencia puede ve la figuras 2.4 de este manual.

Page 22: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 16

CAPÍTULO 5 EL MICROCONTROLADOR PIC Es un chip (Circuito integrado) que contiene un computador completo junto a diversos recursos auxiliares con prestaciones y capacidades limitadas, de muy bajo costo y tamaño reducido. • Es un sistema digital cerrado • RAM de poca capacidad interna (bytes ó Kb) • Memoria de programa pequeña (algunos Kb) • No se requiere de decodificadores de E/S o de memoria • Velocidad de operación de algunos MIPS • Orientados a operaciones de E/S • Costo de desarrollo e implementación reducido • Muy fáciles y sencillos de utilizar • Circuitos simples y tendencia a la modularidad • Por lo general dan cabida a un sólo programa y el soporte de tareas múltiples (de existir), es limitado • Dos o tres modos de direccionamiento • Casi todos son RISC • Tiempo de aprendizaje/desarrollo reducido • Para el Año 2002 se habían vendido 49.000 Millones de piezas. • En el año 2008 la empresa Microchip™ fue líder mundial en Ventas

Figura 5.1. Familia de microcontroladores fabricados por Microchip™. Fuente: Tomado del “site” del fabricante www.microchips.com

5.1. Clasificación de los microcontroladores según el bus de datos (bits) Microcontroladores de 4 bits:

Son los más sencillos en todos los aspectos técnicos y prestaciones asociadas, de muy bajo costo. Se fabrican en grandes volúmenes y sus aplicaciones típicas: pequeños automatismos y juguetería Microcontroladores de 8 bits:

Son los más utilizados en la actualidad, gran diversidad y versatilidad. Los PIC® son los microcontroladores de 8 bits más usados por el mercado mundial, con más de 2000 millones de unidades vendidas/año. Se aplican generalmente en todos los automatismos modernos y sistemas simples de control, electrodomésticos, máquinas y herramientas y en las áreas de la instrumentación digital entre otras. Microcontroladores de 16 bits:

Prestaciones superiores a los microcontroladores de 8 bits. Se aplican típicamente en el procesamiento digital de señales. La casa microchip™ fábrica las series PIC24xx y los dsPIC33xxx. 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.2. Compiladores más utilizados en la actualidad. Fuente: Tomado de la páginas web de los fabricantes.

Page 23: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 17

5.3. Microcontroladores “Boot Loaders”

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 (Flash) sin necesidad de utilizar un programador externo, esto es sin duda una “ventaja”, sin embargo, a estos microcontroladores inicialmente hay que cargarles un pequeño código de programa denominado “boot loader”, el cual, permite que tanto el código del programa de usuario como el valor de los registros en EEprom transmitidos al microcontrolador desde un puerto de comunicación serial y/o USB, sean efectivamente almacenados en dicho microcontrolador. Existen en el mercado actual diferentes fabricantes de Microcontroladores “Boot Loader” como: Parallax™, Basic® Micro ATOM®, BASICX®, PicAXE®.

Básicamente un microcontrolador “boot loador” constituye un contrato de servicio entre el fabricante y el usuario. El usuario compra al fabricante el microcontrolador con el firmware “boot loador” precargado y el fabricante le permite utilizar a cambio, toda la plataforma de hardware y software desarrollada para este microcontrolador. Entre los programas generalmente disponibles por el fabricante se encuentran: editores de texto, compiladores, rutinas gráficas y de comunicación serial entre otras. El iBOARD III, también utiliza un microcontrolador tipo “boot loador”. El PIC16F876 que viene incluido en el sistema iBOARD III, fue inicialmente preprogramado con un firmware, el cual, le permite a usted, cargar sus programas infinitas veces sin necesidad de que tenga que comprar un costoso programador. Por otra parte, todos los programas actuales y futuros que realice el fabricante estarán disponibles sin costo adicional para ser utilizados sin limitaciones por el iBOARD III. Actualmente el fabricante está desarrollando una completa plataforma de programación denominada iLOADER, la cual, le permitirá además de programar, leer, escribir y verificar sus programas en el microcontrolador, utilizar un interfaz gráfico denominado UART/SCOPE y un servidor de datos OPC™ 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.

5.4. Características Principales del PIC 16F876 • Procesador RISC de sólo 35 instrucciones • Toda las instrucciones tienen la misma duración (1 ciclo) salvo los saltos que demoran dos ciclos 1 ciclo = 4 pulsos reloj • Velocidad de operación máxima 20 MHz • Hasta 8K x 14 words de FLASH Program Memory • Hasta 368 x 8 bytes de Data Memory (RAM) • Hasta 256 x 8 bytes de EEPROM para datos • 14 fuentes de interrupción seleccionables en forma independiente • Stack de ocho niveles • Tres modos de direccionamiento: Directo, indirecto y relativo • Power-on Reset (POR) • Power-up Timer (PWRT) • Oscillator Start-up Timer (OST) • Watchdog Timer (WDT) con oscilador interno RC • Protección de código programable medio código o completo • Modo SLEEP para ahorro de energía • Fuente de reloj seleccionada por software • Programación en circuito “In-Circuit Serial Programming (ICSP)” • In-Circuit Debugging utilizando dos pines de conexión • Acceso a la memoria de programa desde el procesador en tiempo de ejecución para una lectura y/o escritura de datos • Voltaje de operación desde 2.0V to 5.5V • Capacidad de drenar/sumir corriente de 25 mA (FAN OUT/FAN IN) • Consumo de energía: < 2 mA @ 5V, 4 MHz 20 uA @ 3V, 32 kHz < 1 uA en modo de reposo (sleep)

Figura 5.3. Fotografía del PIC16F876 28 pines Dip 0.3”. Fuente: Tomado de www.microchip.com

Page 24: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 18

5.5. Anatomía de un microcontrolador PIC® En la figura 5.4., se muestra el diagrama funcional interno de un microcontrolador 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 donde se almacena el código del programa a ejecutar. En el bloque de memoria, se encuentra un sub-bloque denominado SFR, el cual, representa a los registros internos del microcontrolador. Todo, absolutamente todo lo que queremos que el microcontrolador haga, se realiza a través de la modificación de los registros internos 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, los cuales, como se indicó anteriormente, se encuentran representados en el bloque de memoria SFR.

Dentro de los periféricos de un microcontrolador se encuentran:

• Timers T0, T1 y T2 • Convertidor analógico a digital (ADC) • Módulo de captura y comparación (CCP) • Módulo de PWM • Módulo de comunicación serial SPI, I2C y UART

Figura 5.5. Arquitectura de un microcontrolador PIC®. Fuente: Manual técnico del PC16F876.

Page 25: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 19

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:

• 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®.

Memoria Flash

Page 26: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 20

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.

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.

Memoria RAM

Page 27: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 21

5.9. El registro de Estatus 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.

Fuente: Fuente: Tomado de www.mikroe.com

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

Fuente: Manual técnico del PC16F876.

Page 28: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 22

5.10. El registro de Opciones

Figura 5.9. Registros de opciones de un PIC16F876. Fuente: Tomado de www.mikroe.com

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.

Page 29: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 23

5.11. El registro de Interrupciones 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

Fuente: 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.

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.

Page 30: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 24

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

Page 31: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 25

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 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 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 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 de tres (03) puertos de entrada/salida (A,B y C) todas las líneas de estos puertos realizan diversas funciones según estén programadas, sin embargo, todas ellos tienen la capacidad de trabajar como entradas/salidas binarias.

Señal analógica

Es aquella señal que puede tomar infinitos valores posibles entre dos límites, por lo cual, se denominan continuas.

Señal digital

Es aquella señal que puede tomar un número finito de valores entre dos límites. Si utilizamos lógica booleana será Cero (0) y el Uno (1).

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

Page 32: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 26

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

Figura 5.14. Puertos de entrada – salida digital de un PIC16F876. Fuente: Fuente: Tomado de www.mikroe.com

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 microcontrolador, se tiene que realizar a través de la modificación de los valores de los registros. En el caso específico de la entrada – salida digital, existen un par de registros asociados a cada puerto, ellos son como se muestran en la Figura 5.15. El registro TRIS y el registro PORT. El registro TRIS es el encargado de configurar al puerto como entrada ó salida digital, por ejemplo: TRISA = 0; TRISB = 0; TRISC = 0 -> configurará a los puertos A,B y C como salidas digitales, mientras que TRISA = $FF, TRISB = $FF y TRISC = $ FF -> configurará a los puertos A, B y C como entradas digitales. También podemos configurar en forma aleatoria los bits individuales de cada puerto; Esto se logra asignando al registro TRIS valores diferentes para cada bits. Por ejemplo: TRISB = %00001111 configurará al puerto B como:

Puerto B, bit 7 -> como salida digital Puerto B, bit 6 -> como salida digital Puerto B, bit 5 -> como salida digital Puerto B, bit 4 -> como salida digital Puerto B, bit 3 -> como entrada digital 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.15. Registros asociados a la entrada – salida digital en un PIC16F876.

El registro PORT, es el encargado de establecer el valor lógico y eléctrico de salida de cada pin en el puerto del microcontrolador. Cuando el registro PORTB = 0; todos los pines del puerto B tomarán el valor lógico cero, lo que significa que la tensión de salida en cada pin estará cercana a los cero voltios. Si por el contrario PORTB = $FF, todos los pines del puerto B tomarán el valor lógico 1, lo que significa que la tensión de salida en cada pin estará cercana a la tensión de alimentación del microcontrolador. Los bits que conforman al registro PORT son independientes entre si, lo cual, permite que tengan valores lógicos diferentes en cualquier momento. Si el puerto se configura como una entrada digital, por ejemplo TRISB = $FF, entonces el registro PORTB contendrá el valor lógico de entrada en cada pin del puerto B asociado en cada momento.

Page 33: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 27

CAP_05_Ejemplo_01.bas (Entrada – Salida Digital). Utilizando el sistema de desarrollo iBOARD III, desarrolle un programa que permita encender el LED “L0” al presionar el pulsador “S0” .

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 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. Podemos entonces decir que el LED “L0” esta ubicado en PORTB<2>, en serie con una resistencia limitadora de corriente de 220 OHM y un mini switch normalmente abierto (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.

Figura 5.17. Conexión de LED’s al iBOARD III.

Segundo Paso: Ubicar en que puerto está conectado el pulsador “S0”. Para ello hacemos referencia a la figura 5.18, en la cual, se observa que los pulsadores del sistema de desarrollo “S3”, “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.18. Conexión de pulsadores del sistema de desarrollo iBOARD III.

Este tipo de conexión de los pulsadores se denomina Activa Alta, lo que significa que cuando se activa el pulsador, el nivel de tensión obtenido en el punto de conexión al microcontrolador, es un voltaje con un nivel lógico alto.

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 “encendido” es equivalente a: PORTC<2> = 1 y “apagado” es equivalente a: PORTC<2> = 0

Page 34: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 28

Cuarto Paso: Codificación. Utilizaremos el Basic® PROTON® para escribir nuestro programa: ' CAP_05_Ejemplo_01.bas ' Ejemplo básico de utilización del sistema iBOARD III ' Encender el led L0 al presionar el pulsador S0 ' ------------------------------------------------------------------- Device = 16F876 ' Define el microcontrolador utilizado ALL_DIGITAL = True ' Define todos los puertos como digitales XTAL = 20 ' Define la velocidad del resonador TRISA.0 = 1 ' Configura a PORTA.0 como Entrada Digital TRISC.2 = 0 ' Configura a PORTC.2 como Salida Digital Main: PORTC.2 = PORTA.0 ' Asigna al puerto PORTC.2 de Salida el ' valor de entrada al puerto PORTA.0 DelayMS 100 ' Retardo de 100 ms GoTo Main End Quinto Paso: Pruebas Operativas.

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

CAP_05_Ejemplo_02.bas (Entrada – Salida Digital).

Utilizando el sistema de desarrollo iBOARD III, desarrolle un programa que permita encender los LED “L0” a “L3” cuando se presionan los pulsadores correspondientes “S0” a “S3”. Este es una extensión del programa anterior. Veamos su codificación: ' CAP_05_Ejemplo_02.bas ' Ejemplo básico de utilización del sistema iBOARD III ' Encender el led L0 a L3 al presionar el pulsador S0 al S3 ' ------------------------------------------------------------------- Device = 16F876 ' Define el microcontrolador utilizado ALL_DIGITAL = True ' Define todos los puertos como digitales XTAL = 20 ' Define la velocidad del resonador TRISA.0 = 1 ' Configura a PORTA.0 como Entrada Digital TRISA.1 = 1 ' Configura a PORTA.1 como Entrada Digital TRISA.2 = 1 ' Configura a PORTA.2 como Entrada Digital TRISA.3 = 1 ' Configura a PORTA.3 como Entrada Digital 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 TRISC.5 = 0 ' Configura a PORTC.5 como Salida Digital 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.20. Fotografía de la iBOARD III ante la ejecución del programa

CAP_05_Ejemplo_02.bas

Page 35: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 29

5.15. Comandos en alto nivel para el manejo de puertos de E/S

HIGH: Configura el puerto y/o el pin especificado como salida y lo coloca a uno lógico. 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.

LOW: Configura el puerto y/o pin especificado como salida y lo coloca a cero lógico. Es equivalente a hacer un TRIS del puerto y luego un PORT. Sintaxis: LOW pin, donde pin es cualquier bit de los puertos A,B ó C.

TOGGLE: Configura el pin especificado como salida y lo cambia de estado lógico. Sintaxis: TOGGLE pin, donde pin es cualquier bit de los puertos A,B ó C. No se acepta Toggle de un puerto completo, sólo de un Pin.

INPUT: Configura el puerto y/o pin especificado como entrada. Es equivalente a hacer un TRIS del puerto. Sintaxis: INPUT pin, donde pin es cualquier bit de los puertos A,B ó C.

OUTPUT: Configura el puerto y/o pin especificado como salida. Es equivalente a hacer un TRIS del puerto. Sintaxis: OUTPUT pin, donde pin es cualquier bits de los puertos A,B ó C.

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.

PULSIN: Mide el ancho de un pulso presente en un pin y su valor en tiempo lo almacena en una variable: Sintaxis:

Variable = PULSIN Pin, Estado

Pin: Es una variable ó constante que indica cual pin de E/S será utilizado, el mismo será convertido en entrada. Estado: (0,1) (Low/High) es el flanco requerido para empezar la cuenta. Variable: Variable que almacena el resultado de la operación.

Nota: Para un resonador de 20 MHz, el conteo de PULSIN se realizará en intervalos de 2us. El rango de PULSIN será entre 1 y 65535.

PULSEOUT: Genera un pulso de una duración especificada en un terminal de E/S. Sintaxis:

PULSOUT Pin, Período, Estado Inicial

Pin: Es una variable ó constante que indica cual pin de E/S será utilizado, el mismo será convertido en salida. Período: Es una variable, constante o expresión de (4 – 65535) us que especifica la cantidad de tiempo en micro-segundos que durará el pulso.

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

Page 36: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 30

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 se mezclaran a través del pin especificado, para de esta forma, generar un único tono. Sintaxis:

FREQOUT Pin, Período, Freq1 ,Freq2 Pin: Variable, constante o expresión que especifica el pin de E/S usado. Este será configurado como salida. Período: Variable, constante o expresión de 0 a 65535. Especifica el periodo de tiempo que dura el tono generado. Freq1: Variable, constante o 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 tono generado. 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 pequeño filtro pasa bajo usted podrá general ondas sinusoidales por cualquier pin de E/S. Esta conexión se puede visualizar a través de la figura 5.23.

Figura 5.23. Esquema de conexiones de un filtro pasa bajos utilizado por el comando FREQOUT para la generación de ondas sinusoidales.

SOUND: Genera uno tono o ruido blanco por el pin seleccionado. Sintaxis:

SOUND Pin, [Nota, Duración] Pin: Variable, constante o expresión que especifica el pin de E/S usado. Este será configurado como salida. Nota: Un valor de 8 Bits (0..127) el (0) equivale a silencio, el (1) Equivale a 78 Hz y el (127) Equivale a 10KHz y entre (128..255) se obtendrá ruido blanco. Duración: Variable, constante o expresión de 8 bits que especifica la duración de la nota en intervalos de 10ms.

SOUND2: Genera uno ó dos tonos por los pines seleccionados, es más completa que la instrucción sound. Sintaxis:

SOUND2 Pin1, Pin2, [Nota1\ Nota\ Duración]

Pin1,2: Variable, constante o expresión que especifica los pines de E/S. Estos serán configurados como salida. Nota1,2: Una variable o constante que especifica su valor en Hz en el rango de (0..16000) Hz. Duración: Variable, constante o expresión de 16 bits que especifica la duración de la nota en intervalos de 1ms.

RCIN: Se utiliza generalmente para medir períodos de tiempos muy cortos como la carga / descarga de un circuito RC a través de un pin de E/S. Sintaxis:

Variable = RCIN Pin, Estado

Pin: Es una variable ó constante que indica cual pin de E/S será utilizado. Estado: Es una variable ó constante de 1 bit (0 ó 1) que especifica el estado en el cual terminará el 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.24. Esquema de conexiones utilizado con el comando RCIN.

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 comando, se deberán realizar las siguientes acciones: (1) Colocar el pin de E/S como salida y con un nivel lógico alto. (2) Esperar suficiente tiempo para que el condensador se cargue, aprox. 4 constantes de tiempo = (4xRxC) seg. (3) Ejecutar el comando RCIN. El cual, configurará al pin seleccionado como una entrada y medirá el voltaje del 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)

Page 37: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 31

Pulsador NA. conectadoentre PORTB<0> y GND

5.16. Comandos en alto nivel para el manejo de Interrupciones ENABLE, DISABLE: Habilita o deshabilita una ó todas las interrupciones. Sintaxis:

• Enable • Disable

Estos comandos actuarán sobre la habilitación y/o des-habilitación global del registro INTCON bit <GIE>. ON INTERRUPT Label: Salta la ejecución del programa a la rutina de interrupción especificada por la etiqueta Label. RESUME: Finalización de la rutina de interrupción, devuelve el programa al punto de ejecución previa antes de que ocurriera la interrupción. 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.

Figura 5.25. Mecanismo de activación ante la ocurrencia de

una interrupción. Fuente: Tomado de www.mikroe.com

CAP_05_Ejemplo_ 03.bas (Interrupción externa por RB0/EXT).

Utilizando el sistema de desarrollo iBOARD III, desarrolle un programa que permita utilizar interrupciones en el microcontrolador. El programa principal hará que un LED conectado en PORTC<5> encienda en forma intermitente, mientras que la rutina de 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 precisamente el pin de activación de interrupción externa. No se había hasta ahora hecho 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 desarrollar nuestro primer programa con interrupciones. Para el montaje electrónico se necesitará de un pulsador normalmente abierto adicional a los que vienen incluidos en el sistema de desarrollo iBOARD III. Este pulsador deberá conectarse entre el pin PORTB<0> y tierra (GND), tal como es mostrado en la Figura 5.26.

Figura 5.26. Fotografía de las conexiones necesarias para la colocación del pulsador NA, el cual, será utilizado como generador de una interrupción externa.

Page 38: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 32

' 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 XTAL = 20 ' Define velocidad resonador ' DEFINICIÓN DE CONSTANTES Y SIMBOLOS ' ------------------------------------------------------------------- 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

REGISTRO DE INTERRUPCIONES: INTCON

Fuente: Fuente: Tomado de www.mikroe.com

REGISTRO DE OPCIONES

Bit 7, OPTION<7>

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

CAP_05_Ejemplo_03. bas (Interrupciones).

Page 39: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 33

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,_ 90,20,85,140,77,20,80,20,85,20,_ 90,20,80,20,85,60,90,60,92,60,87,_ 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

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

CAP_05_Ejemplo_04.bas Comando Sound. Se escuchará a través del buzzer Un extracto de la canción: Star Trek The Next Generation.

Page 40: Manual Iboard III

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. 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. La tensión de referencia puede implementarse con la tensión interna de alimentación VDD, o bien, con una externa que se introduce a través de los pines RA3/AN3/Vref+ y /o RA2/AN2/Vref- 6.1. Registros asociados al conversor A/D

• ADRESH : Registro alto del resultado de la conversión A/D. • ADRESL : Registro bajo del resultado del la conversión A/D. • ADCON0 : Controla la operación del conversor A/D. • ADCON1 : Configura los Pines de E/S del conversor A/D.

Figura 6.1. Esquema electrónico equivalente de la entrada de un canal del convertidor A/D del PIC16F876.

Fuente: Fuente: Tomado de www.mikroe.com

Son dos los registros más importantes involucrados en la conversión A/D. el ADCON0 y el ADCON1. Como se explicó en capítulos anteriores, si se desea realizar una 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 configuración de los registros internos del microcontrolador, en este caso, el ADCON0 y el ADCON1. Básicamente la idea de la conversión analógica – digital es la digitalizar una señal de entrada al pin del microcontrolador, la señal puede ser AC, DC ó AC+DC pero de tensión 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.

Page 41: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 34

Existen limitaciones teóricas y prácticas en cuanto a la máxima frecuencia de 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. Fuente: Manual técnico del PC16F876.

6.3. El Registro ADCON1 (detalle de sus bits)

Figura 6.3. Descripción de los bits que conforman el registro ADCON1 del convertidor A/D del PIC16F876.

Fuente: Manual técnico del PC16F876.

Page 42: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 35

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 representa la lógica de funcionamiento de un PIC16F887 en vez de un PIC16F876, sin embargo, estos microcontroladores comparten más de un 95% de características comunes.

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 desconecte el capacitor de “Hold” de la entrada analógica.

Luego arranca el proceso de conversión por aproximaciones sucesivas, se consume un próximo TAD que no producirá resultados en la conversión y luego los 10 TAD necesarios para la digitalización de la señal. Una vez transcurridos los 12 TAD, el 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.6. Proceso de conversión A/D en base a aproximaciones sucesivas. Fuente: Manual técnico del PC16F876.

Page 43: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 36

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

Figura 6.6. Registros asociados a la conversión A/D y al puerto de entrada – salida A. Fuente: Manual técnico del PC16F876.

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.

PIR1: Registro asociado a las interrupciones. ADIF bandera de ocurrencia de una interrupción por conversión A/D.

PIE1: Registro asociado a las interrupciones. ADIE bit de habilitación de la interrupción por conversión A/D.

ADRESH, ADRESL: Registros donde se almacena el valor de la conversión A/D.

ADCON0, ADCN1: Registros de configuración general asociados a la conversión A/D.

TRISA: Registro de configuración del puerto A como entrada ó salida digital.

PORTA: Como Salida, Registro que configura el valor lógico de los pines del puerto A. Como Entrada, Registro que almacena el valor de entrada al puerto A. 6.6. Otras Consideraciones importantes al realizar una conversión A/D

1. La máxima impedancia de entrada recomendada de la fuente analógica, a fin de no afectar la exactitud de la conversión, no deberá ser mayor de 10 KΩ.

2. Después de cada conversión de deberá esperar un mínimo de tiempo equivalente a 2 ٠TAD, durante este tiempo el condensador interno de “Hold” no estará conectado a la fuente analógica de entrada.

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 conversor. Existen cuatro pines de entrada analógica, son: AN0, AN1, AN2 y AN3.

Otros ajustes necesarios por el convertidor A/D, se realizan a través de las declaraciones: DECLARE ADIN_TAD 2_FOSC, 8_FOSC, 32_FOSC … 2_FOSC: rápido (oscilador/2) 8_FOSC: medio (oscilador/8) 32_FOSC: lento (oscilador/32) 64_FOSC: basado en el oscilador interno, valor por defecto = 64_FOSC. DECLARE ADIN_RES 8, 10, 12. Bits de resolución, valor por defecto = 10

DECLARE ADIN_STIME (0 .. 65535) ms. Tiempo para la carga y descarga del capacitor de HOLD. Valor por defecto = 50

Nota: El voltaje máximo sobre cualquier pin del PIC® no deberá exceder nunca los 5 Vdc. El comando ADIN, convierte un voltaje (0 a 5 Vdc) aplicado a un pin, en un valor digital entre (0 y 1023) aplicado a una variable. La entrada puede ser en todo momento escalada si se utiliza un voltaje de referencia externo Vref sobre el pin AN3. Si el voltaje de referencia aplicado al pin es de 2.5 VDC, se obtendrá el doble de resolución para el mismo conteo de (0 a 1023). El rango permitido de voltajes de referencia deberá estar entre (1 y 5) Vdc, el cual, siempre deberá ser aplicado sobre el pin AN3.

Page 44: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 37

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 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.9. Menú de selección del IDE Serial Comuicator.

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

Page 45: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 38

6.8. Pasos a realizar para una conversión A/D con interrupciones 1) Configurar el módulo Conversor A/D

• Configurar los pines que actuarán como entradas analógicas, las que trabajan como E/S digitales y las usadas para la tensión de referencia a través del registro ADCON1

• Seleccionar el reloj de la conversión a través del registro ADCON0 • Seleccionar el canal de entrada A/D a través del registro ADCON0 • Activar el módulo A/D a través del registro ADCON0

2) Activar, si se desea la interrupción, escribiendo sobre los registros PIE1 y PIR1

• Borrar la bandera de interrupción por conversión A/D ADIF. • Habilitar la interrupción por conversión A/D, poner a 1 el bit ADlE. • Habilitar la interrupción global y la interrupción por periféricos, poner a 1 los bits

habilitadores GIE y PEIE. 3) Tiempo de espera para que transcurra el tiempo de adquisición 4) Inicio de la conversión

• Poner a 1 el bit GO/DONE# a través del registro ADCON0. 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 valer 0.

• Esperando a que se produzca la interrupción si se ha programado, al finalizar la conversión.

• Aunque no se permita interrupción, el señalizador ADIF se pondrá a 1 al finalizar la conversión.

6) Leer el resultado en los 10 bits válidos de los registros ADRESH:L y borrar el flag ó

bandera de interrupción ADIF. 7) Para una nueva conversión regresar al paso 1) y 2).

• El tiempo de conversión por bit está definido por TAD. Se exige esperar un mínimo de 2 ٠ TAD para reiniciar una nueva conversión.

Figura 6.11. Visualización de la ejecución del programa CAP_06_Ejemplo_02.bas a través del IDE Serial Comunicator. Nota. Debe producir

los mismos resultados que produjo el programa CAP_06_Ejemplo_01.bas

CAP_06_Ejemplo_02 (Conversión A/D utilizando Interrupciones).

'CAP_06_Ejemplo_02.bas ' Ejemplo básico de utilización del conv. A/D con interrupciones ' ------------------------------------------------------------------- Device = 16F876 ' Define el microcontrolador utilizado XTAL = 20 ' Define la velocidad del resonador ADCON1 = %10000000 ' Configura PORTA como analógico ADCON0 = %11000001 ' justificar el resultado a la derecha y ' F_OSC/32, AN0, ADC -> Activo. Symbol GIE = INTCON.7 ' Bit habilit. interrupciones globales Symbol ADIE = PIE1.6 ' Bit habilit. interrupciones por ADC Symbol ADIF = PIR1.6 ' Bit flag interrupciones por ADC Symbol PEIE = INTCON.6 ' Bit habilit. interrupciones perifer. Symbol GO = ADCON0.2 ' Bit GO_/DONE del ADC Dim Valor As Word ' Variable de uso general On Interrupt GoTo ADC_INT ' Cuando ocurre una interrupción va a la ' subrrutina "ADC_INT" ' PROGRAMA PRINCIPAL. ' ------------------------------------------------------------------- Main: ADIF = 0 ' Limpia el Flag de int. del ADC GIE = 1 ' Habilita interrupciones globales 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 ' 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 End Disable ' Esta instrucción debe siempre ir al ' final del programa principal y antes ' de la sub_rutina de interrupción. ' SUB_RUTINA DE INTERRUPCIÓN ' ----------------------------------------------------------------- ADC_INT: 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 ADIE = 1 ' Habilita la interrupción por ADC GO = 1 ' Arranca de nuevo la conversión ADC Resume

Page 46: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 39

CAPÍTULO 7 EL USART DE UN MICROCONTROLADOR PIC USART: Universal Synchronous Asynchronous Receiver Transmitter (EUSART). Es un periférico de comunicación serial de entrada / salida también conocido como 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:

• Comunicación asíncrona en modo Full Duplex • Comunicación síncrona Half Duplex en modo maestro y esclavo • Largo de los caracteres programables de 8 – 9 bits. • Detección de errores en la comunicación

MODO Asincrónico: Los datos se transmiten y reciben utilizando la codificación de no retorno por cero (NRZ), no se utiliza una señal de reloj y básicamente los datos son transferidos de la siguiente forma:

• En estado de reposo la línea de datos permanece en estado alto (1) • Cada transmisión de datos comienza con un bit de arranque (START), el

cual, siempre es cero (0) • Los datos son transmitidos desde el bit menos significativo (LSB) al más

significativo (MSB) • Cada transmisión de datos culmina con un bit de parada (STOP), el cual,

siempre es uno (1)

Figura 7.1. Representación gráfica de una señal en el USART de un PIC®.

7.1. Transmisión Asincrónica 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 información. La figura 7.2., muestra los bits individuales que conforman el registro de transmisión TXSTA del EUSART de un PIC16F886.

Figura 7.2. Registro de transmisión del USART de un PIC16F886. Fuente: Tomado de la página web: www.mikroe.com

CSRC - Clock Source Select bit – Sólo en modo sincrónico. Determina el origen del reloj. 1 – Modo Maestro. Reloj generado internamente por el “Baud Rate Generator”. 0 - Modo Esclavo. Reloj proveniente de una fuente externa.

TX9 - 9-bit Transmit Enable bit 1 - 9-bit Largo en bits de la transmisión 0 - 8-bit Largo en bits de la transmisión

TXEN - Transmit Enable bit 1 – Transmisión habilitada 0 - Transmisión no habilitada

SYNC - EUSART Mode Select bit 1 - EUSART Operación en forma sincrónica 0 - EUSART Operación en forma asincrónica

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.

TX9D - Ninth bit of Transmit Data puede ser usado como dirección o bit de paridad.

Page 47: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 40

Figura 7.3. Diagrama de bloque del registro de transmisión del EUSART de un PIC16F886. Fuente: Tomado de la página web: www.mikroe.com

Haciendo referencia a la figura 7.3., podemos entender el funcionamiento de los diferentes bloques que conforman el módulo de transmisión del EUSART. El pin de transmisión generalmente ubicado en el PORTC<6> es el encargado de enviar la información al mundo exterior, por ejemplo, un puerto serial de un computador ó PC. Los bytes de información que el CPU coloque en el buffer de salida serán transmitidos a una velocidad programable por el bloque generador de baudios “BAUD Rate generador” a través del pin PORTC<6> denominado también Tx pin. Existen diferentes bits de control, cada uno de ellos con una función específica como la habilitación o no del EUSART TXEN, bit de bandera de interrupción TXIF y habilitación de interrupciones TXIE, tamaño del dato a transmitir 8 ó 9 bits, bit de status TRMT y bits de configuración del generador de Baudios. Cada uno de estos bits juega un papel importante en la configuración final del módulo USART / EUSART, pueden configurarse en forma manual y/o a través del uso de instrucciones especializadas encontradas en los lenguajes de alto nivel.

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 Asynchronous mode: 1 – Recepción habilitada 0 – Recepción no habilitada Synchronous mode: 1 – Se habilita la recepción continua hasta que el bit “CREN “ sea cero(0). 0 - No habilita la recepción en forma continua ADDEN - Address Detect Enable bit es solo utilizado en el modo de detectar dirección 1 – Habilita la detección de dirección de los 9 bit de datos recibidos 0 – No habilita la detección de dirección. El noveno bit se utiliza como bit de paridad FERR - Framing Error bit 1 – En la recepción de detecta el error “Framing Error” 0 - No se detecta el error “Framing Error” OERR - Overrun Error bit. 1 – En la recepción se detecta el error “Overrun Error” 0 - No se detecta el error “Overrun Error” RX9D - Ninth bit of Received Data puede ser usado como bit de dirección o de paridad

Page 48: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 41

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 error “Framing” FERR y error de “Overrun” OERR.

“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.5. Diagrama de bloque del registro de recepción, recepción del noveno bit . Fuente: Tomado de la página web: www.mikroe.com

Page 49: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 42

7.3. Interconexión de microcontroladores PIC® a través de EUSART

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 velocidad de transmisión / recepción en el módulo EUSART, mientras que el la

Figura 7.7b, se observan las relacioneS matemáticas para el calculo de la velocidad de comunicación en Baudios.

Figura 7.7. a) Registros relacionados con el módulo generador de Baud del EUSART, b) Formulación matemática para el cálculo de los Baud. Fuente: Tomado de la página web: www.mikroe.com

Page 50: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 43

7.5. Resumen de pasos a seguir para realizar una transmisión serial asincrónica a través de los registros del módulo EUSART.

• La velocidad deseada (Baud) debe ser justada a través de 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 transmisión de 9 bits, el bit TX9 del registro TXSTA deberá ser colocado en uno (1)

• La transmisión de datos es habilitada colocando en uno (1) el bit TXEN del 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, PEIE y TXIE del registro INTCON deberán ser habilitados.

• En una transmisión de 9 bits, el valor del noveno bits, deberá ser escrito en el bit TX9D del registro TXSTA.

• La Transmisión comienza cuando se escriben los 8 bits de datos sobre el registro de recepción TXREG.

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.

7.7. Comandos en alto nivel para el manejo del USART/EUSART Como hemos podido observar a lo largo de este capítulo, a medida que los periféricos del microcontrolador realizan tareas más complicadas y complejas aumenta también la complejidad para la configuración de sus registros. Trabajar en lenguaje ensamblador con los registros del EUSART es una tarea titánica. Gracias al desarrollo de los compiladores de lenguajes en alto nivel como el Basic® PROTON®, CCS® y MikroBasic®, podemos realizar programas que involucren la utilización del USART/EUSART de los microcontroladores en cuestión de segundos. Sin embargo, la teoría explicada con anterioridad, es total y completamente necesaria para entender la arquitectura y la organización del módulo de comunicación serial. Transmisión Asincrónica: HRSout Transmite uno o más valores utilizando el USART/EUSART del microcontrolador. Sintaxis:

HRSout item, item … 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.

Figura 7.8. Modificadores de Formato utilizados por el comando HRSout. Fuente: Manual del Usuario compilador Basic® PROTON®.

Page 51: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 44

Comando para la Recepción Asincrónica: HRSin Recibe uno o más valores utilizando el USART/EUSART del microcontrolador. Sintaxis:

Variable = HRSin , TimeOut, TimeOut Label HRSin TimeOut, TimeOut Label , Parity Error Label , Modificadores, Variable ,

Variable…

• TimeOut: Opcional, valor en ms que el comando HRSin esperará por la recepción de un dato antes de saltar a TimeOut Label.

• Parity Error Label: Opcional, salta a la etiqueta cuando el dato recibido tiene un error de paridad.

• Modificadores: Uno o más modificadores de formato para la variable recibida.

• Variable: Bit, Byte, Word o Dword que almacenará el valor recibido en la comunicación serial.

Figura 7.9. Modificadores de Formato utilizados por el comando HRSin.

Fuente: Manual del Usuario compilador Basic® PROTON®. 7.8. Configuración de los registros del USART/EUSART en alto nivel Para facilitar la configuración de los registros asociados a la comunicación serial mediante el módulo USART / EUSART, el compilador Basic® PROTON® dispone de la directiva “DECLARE”, Existen cinco (05) directivas asociadas al USART/EUSART cuando se utiliza como transmisión - recepción asincrónica: DECLARE HSERIAL_BAUD Valor Ajusta la velocidad del módulo generador de Baud del microcontrolador. Por defecto su valor es de 2400 Baudios.

DECLARE HSERIAL_RCSTA Valor (0..255) Escribe en el registro RCSTA el valor de configuración entre (0 .. 255) DECLARE HSERIAL_TXSTA Valor (0..255) Escribe en el registro TXSTA el valor de configuración entre (0 .. 255) DECLARE HSERIAL_PARITY ODD ó EVEN Habilita o deshabilita la detección de errores de paridad en el puerto serial DECLARE HSERIAL_CLEAR ON ó OFF Limpia el bit de “Overrun Error” antes de comenzar a leer el puerto. Este error también se puede limpiar colocando el bit CREN del registro RCSTA en cero (0) y luego en uno (1). 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 Main: HRSOut "Sistema de Desarrollo para PIC iBOARD III", 13 HRSOut "Ejemplo de utilización del USART ........", 13 HRSOut "-----------------------------------------", 13 Repeat HRSOut "Introduzca su edad?",13 HRSin DEC2 Edad Until Edad >= 10 And Edad <= 50 HRSOut "Muy bien ...", 13 HRSOut "Usted escribió: ", DEC2 Edad, " Años",13 DelayMS 10000 GoTo Main

Figura 7.10. Listado de la codificación del programa CAP_07_Ejemplo_01.bas

Page 52: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 45

El programa mostrado en la figura 7.10., es una aplicación básica de la utilización del USART/EUSART del microcontrolador. Envía y recibe datos al PC y de esta forma se establece una comunicación con el usuario. El primer paso es ejecutar el programa CAP_07_Ejemplo_01.bas desde el microcontrolador, esto se realiza a través de la compilación y carga del programa mostrado en la figura 7.10. Una vez cargado el programa en el microcontrolador, deberá seleccionar del menú del compilador: View/Plugin tal como se muestra en la Figura 7.12.

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.

Si no aparece el texto mostrado en pantalla, deberá hacer un reset a través del pulsador de reset que se encuentra en el iBOARD III. Deberá observar el texto tal 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 líneas, más una tercera línea de separación “----“ y luego en la cuarta línea le preguntará: Introduzca su Edad?, deberá escribir en el cuadro superior de la pantalla su edad, ésta deberá estar comprendida entre diez 10 años y cincuenta 50 años, de lo contrario le volverá a preguntar su edad. Una vez escrita su edad en el 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”

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

Page 53: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 46

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 procesos. En el siguiente ejemplo, utilizaremos el microcontrolador PIC® para enviar información a un programa realizado en VB6 y por supuesto se hará utilizando el periférico USART. El listado completo del programa en VB6 código fuente y ejecutable, se encuentra en el mismo directorio del ejemplo CAP_07_Ejemplo_02.bas en el CD del iBOARD III entregado a usted, bajo el

nombre de: ' CAP_07_Ejemplo_02.bas ' Ejemplo básico de utilización del USART/EUSART con VB6 ' ----------------------------------------------------------------- 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.

En la pantalla de configuración del programa UART_1 en VB6, deberá configurar el puerto de conexión serial donde está conectada el sistema de desarrollo iBOARD III, si este sistema se conecta al puerto USB, la pregunta es ¿Cuál puerto de comunicación serial?. La respuesta es simple. Los “Drivers” del sistema de desarrollo iBOARD III, crean un puerto serial virtual y se lo asignan a un COM disponible en el computador, tal y como se explicó en el capítulo 2, Instalación 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 comunicación serial se está realizando entre el USART del microcontrolador PIC® y el computador.

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

Page 54: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 47

CAPÍTULO 8

TEMPORIZADORES “TIMERS” Introducción. Los microcontroladores PIC16F876 disponen de un potente conjunto de temporizadores para manejar eficientemente todas las operaciones que involucran tiempo y conteo de eventos. Dichos temporizadores son tres y se denominan técnicamente: TMR0, TMR1 y TMR2.

TMR0, es un temporizador de 8 bits que, puede utilizarse como cronómetro de tiempo (modo Timer) con señal de reloj tanto interna como externa. También puede ser utilizado como contador de eventos externos aplicados al pin RA4/T0CKI. El TMR0, tiene las siguientes características:

• 8 bit’s puede ser utilizado como “timer” y como “counter” • Se puede leer y escribir • Tiene un pre-escalador de 8 bits por software • La señal de reloj puede ser interna o externa • Interrupción por desbordamiento programable • Selección del flanco habilitación de la señal externa • Pre-escalador compartido con el periférico WDT

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 observan los diferentes bits que componen al registro de Opciones.

La Figura 8.2., presenta el diagrama funcional de bloques del timer TMR0, vemos que hay un pin de E/S asociado a este timer que es el PORTA<4>, a través de este pin se puede introducir una señal externa al microcontrolador, el mismo puede realizar el conteo de flancos de subida (alfa) ó bajada (beta) dependiendo de la programación asignada al bit T0SE. El bit T0CS es el encargado de configurar al TMR0 como temporizador ó como contador de eventos externos. Algunos de los bits de configuración se comparten para la configuración del TMR0 ó del WDT que es otro temporizador interno del microcontrolador PIC®. Por ejemplo: existe un 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 almacena la cuenta de tiempo (modo timer) o de eventos (modo counter) a los que ha tenido lugar la señal luego de pasar por el pre-escalador, si el conteo es mayor a 255, éste registro se desbordará y comenzará de nuevo su conteo en cero, pero se producirá una activación de la bandera de interrupción por TMR0 bit No. 2 del registro de interrupciones INTCON<2> T0IF. Si el bit de habilitación por TMR0 INTCON<5> T0IE y el bit de interrupciones globales INTCON<7> GIE están activados, entonces el TMR0 podrá interrumpir al CPU del microcontrolador, pudiéndose ejecutar la rutina de interrupción por TMR0 previamente compilada.

Figura 8.2. Diagrama funcional de bloques del timer TMR0.

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

Page 55: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 48

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 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 ocurrirá y se ejecutará la rutina de servicio de interrupción por TMR0. 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 entra en modo de reposo o dormido. 8.2. Registros asociados al TMR0

Figura 8.3. Registros asociados al funcionamiento del TMR0. Fuente: Manual técnico del PIC16F876.

8.3. Como trabaja la temporización del TMR0 Frecuencia de oscilación (resonador/cristal) FOSC = 20 MHz para el PIC16F876 del sistema de desarrollo iBOARD III Incremento del Registro TMR0 INCREM = Pre-escalador * 4/FOSC Tiempo de interrupción Tint = INCREM * (255- Valor I) Ejemplo: Utilice al TMR0 para generar una interrupción cada 10 ms, utilizando el PIC 16F876 del sistema de desarrollo iBOARD III. Tint = 10 ms FOSC = 20 MHz

Tint|MAX(p) = Pre-escalador * 4/20MHz*(255-Valor I) Tint|MAX(256) = 256 * 4/20Mhz * (255-0) = 13.056 ms Tint|MAX(128) = 128 * 4/20Mhz * (255-0) = 6.528 ms -> El pre-escalador tendrá que ser de 256 para 10 ms INCREM = Pre-escalador * 4/FOSC = 51.2 us Valor I = 255 – Tint/INCREM = 255 – 10 ms/51.2 us 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. Para un pre-escalador de 256, el valor de PS2= 1, PS1 = 1, PS0 = 1.

• Introducir en el TMR0, el valor inicial del conteo. TMR0 = 60

• Habilitar la interrupción por TMR0, a través del registro INTCON<5> bit TOIE

• Habilitar la interrupción por Periféricos, a través del registro INTCON<6> bit PEIE

• Habilitar la interrupción global , a través del registro INTCON<7> bit GIE 8.5. Ejemplo de utilización del TMR0 El siguiente ejemplo, muestra como hacer la configuración del TMR0 para que 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á configurarse para recibir información serial a 38400 Baud.

Page 56: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 49

' 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 ' Conteo_T0 cada 10ms, utilizando el TMR0 para que interrumpa al pro_ ' grama principal cada 10 ms. ' ------------------------------------------------------------------- Device = 16F876 XTAL = 20 ' DEFINICIÓN DE SIMBOLOS, VARIABLES Y CONSTANTES ' ----------------------------------------------------------------- Declare HSERIAL_BAUD 38400 ' Velocidad conexión serial en baud Symbol GIE = INTCON.7 ' Bit habilit. interrupciones globales Symbol PEIE = INTCON.6 ' Bit habilit. interrupciones perifer. 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 HSerOut ["Conteo = ", Dec Conteo, " ", "Conteo_T0 = ",_ Dec Conteo_T0, 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 ' ----------------------------------------------------------------- TMR0_INT: T0IE = 0 ' Deshabilita la interrupción por TMR0 Conteo_T0 = Conteo_T0 + 1 ' Incrementa la variable Conteo_T0 TMR0 = 60 ' Carga inicialmente al registro TMR0 T0IF = 0 ' Limpia el flag de int. del TMR0 T0IE = 1 ' Habilita la interrupción por TMR0 Resume

Figura 8.4. Imagen de la ejecución del programa CAP_08_Ejemplo_01.bas Se observa que para cada conteo de 1 seg en la variable Conteo del programa

principal, la variable Conteo_T0 se incrementa 100 veces, como era de esperarse.

Page 57: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 50

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 configuración denominado T1CON. La figura 8.6. contiene la descripción de los bits individuales del registro TMR1.

Figura 8.6. Descripción de los bits individuales del registro T1CON. Manual técnico del PIC16F876.

Page 58: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 51

8.7. El timer TMR1 trabajando como Temporizador

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.8. Timer 1 trabajando en modo contador.

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

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.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 Tiempo de interrupción Tint = INCREM * (65535- Valor I)

Page 59: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 52

Ejemplo: Utilice al TMR1 para generar una interrupción cada 10 ms, utilizando el PIC16F876 del sistema de desarrollo iBOARD III. Tint = 10 ms FOSC = 20 MHz Tint|MAX(p) = Pre-escalador * 4/20MHz*(65535-Valor I) Tint|MAX(1:8) = 8 * 4/20Mhz * (65535-0) = 104.856 ms Tint|MAX(1:4) = 4 * 4/20Mhz * (65535-0) = 52.428 ms Tint|MAX(1:2) = 2 * 4/20Mhz * (65535-0) = 26.214 ms Tint|MAX(1:1) = 1 * 4/20Mhz * (65535-0) = 13.107 ms -> El pre-escalador podrá ser cualquiera de los anteriores pero se utilizará 1:1 para disminuir el error que introduce el pre-escalador. INCREM = Pre-escalador * 4/FOSC = 0.2 us Valor I = 65535 – Tint/INCREM = 65535 – 10 ms/0.2 us Valor I = 65535 – Tint/INCREM = 65535 - 50000 Valor I = 15535 8.11. Pasos a seguir para la utilización del TMR1 • Ajustar el registro T1CON<5:4> Bit’s T1CKPS2 = 0 T1CKPS1 = 0, lo que significa pre-escalador = 1:1

• Ajustar el registro T1CON<3> Bit T1OSCEN = 1 para habilitar el TMR1.

• Ajustar el registro T1CON<2> Bit T1SYNC = 0 sincronización del TMR1

• Ajustar el registro T1CON<1> Bit TMR1CS = 0 selección del reloj para el TMR1 (int. ó Ext.)

• Ajustar el registro T1CON<0> Bit TMR1ON = 1 Bit de ON/OFF del TMR1

• Introducir en el TMR1H y TMR1L, el valor inicial del conteo, TMR1(H,L) = 15535

• Habilitar la interrupción por TMR1, a través del registro PIE1<0> bit TMR1IE

• Habilitar la interrupción por Periféricos, a través del registro INTCON<6> bit PEIE

• Habilitar la interrupción global , a través del registro INTCON<7> bit GIE 8.12. Ejemplo de utilización del TMR1 El siguiente ejemplo, muestra como hacer la configuración del TMR1 para que 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á configurarse para recibir información serial a 38400 Baud. ' CAP_08_Ejemplo_02.bas ' Ejemplo básico de utilización del TMR1. En este programa se incre_ ' 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_ ' grama principal cada 10 ms. ' ------------------------------------------------------------------- Device = 16F876 XTAL = 20 ' DEFINICIÓN DE SIMBOLOS, VARIABLES Y CONSTANTES ' ------------------------------------------------------------------ Declare HSERIAL_BAUD 38400 ' Velocidad conexión serial en baud Symbol GIE = INTCON.7 ' Bit habilit. int. globales Symbol PEIE = INTCON.6 ' Bit habilit. int. perifer. Symbol T1IE = PIE1.0 ' Bit habilit. int. por TMR1 Symbol T1IF = PIR1.0 ' Bit flag interrupciones por TMR1 Symbol T1CKPS1 = OPTION_REG.5 ' Bit selección pre-escalador Symbol T1CKPS0 = OPTION_REG.4 ' Bit selección pre-escalador Symbol T1OSCEN = T1CON.3 ' Bit habilit. Conteo TMR1 Symbol T1SYNC = T1CON.2 ' Bit habilit. sincronización Symbol TMR1CS = T1CON.1 ' Bit selección del reloj Symbol TMR1ON = T1CON.0 ' Bit habilit. On/Off del TMR1 Dim Conteo As Word ' Variable de uso general Dim Conteo_T1 As Word ' Variable de uso general Dim Index As Word ' Variable de uso general Dim TMR1A As Word ' Valor Inicial del Timer1 On Interrupt GoTo TMR1_INT ' Cuando ocurre una interrupción va a ' la subrrutina "TMR1_INT"

Page 60: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 53

' 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 T1IE = 1 ' Habilita la interrupción por TMR1 Resume

Figura 8.10. Imagen de la ejecución del programa CAP_08_Ejemplo_02.bas Se observa que pos cada conteo de 1 seg en la variable Conteo del programa

Principal, la variable Conteo_T1 se incrementa 100 veces, como era de esperarse.

Page 61: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 54

8.13. El timer TMR2 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.11. Significado de cada bit en particular del registro T2CON.

Fuente: Manual técnico del PIC16F876.

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. Fuente: Manual técnico del PIC16F876.

Page 62: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 55

8.14. Como trabaja la temporización TMR2 Frecuencia de oscilación (resonador/cristal) FOSC = 20 MHz para el PIC16F876

Incremento del Registro TMR2 INCREM = Pre-escalador * 4/FOSC

Tiempo de interrupción Tint = INCREM * ( PR2) * Post-escalador Ejemplo: Utilice al TMR2 para generar una interrupción cada 10 ms, utilizando el PIC16F876 del sistema de desarrollo iBOARD III. Tint = 10 ms FOSC = 20 MHz Tint|MAX(p) = Pre * 4/20MHz*(PR2) * Post Tint|MAX(1:16,1:16) = 16*4/20Mhz*(255)*16 = 13.056 ms Tint|MAX(1:16,1:13) = 16*4/20Mhz*(255)*13 = 10.608 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á 1:13, y el valor exacto del PR2 será: INCREM = Pre-escalador * 4/FOSC = 0.2 us INCREM = 16 * 4/FOSC = 3.2 us PR2 = Tint/(INCREM * post) = 10ms/(3.2us * 13) PR2 = 240 8.15. Pasos a seguir para la utilización del TMR2 • Ajustar el registro T2CON<6:3> Bit’s TOUTPS3 = 1 TOUTPS2 = 1, TOUTPS1 = 0 y TOUTPS0 = 0, lo que significa post-escalador = 1:13

• Ajustar el registro T2CON<2> Bit TMR2ON = 1 para habilitar el TMR2.

• Ajustar el registro T2CON<1:0> Bit’s T2CKPS1 = 1 T2CKPS0 = 1, lo que significa pre-escalador = 1:16

• Introducir en el TMR2, el valor inicial de 240

• Habilitar la interrupción por TMR2, a través del registro PIE1<1> bit

TMR2IE

• Habilitar la interrupción por Periféricos, a través del registro INTCON<6> bit PEIE

• Habilitar la interrupción global , a través del registro INTCON<7> bit GIE 8.16. Ejemplo de utilización del TMR2 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á observar a través del PROTON® IDE Serial Comunicator, el cual, deberá configurarse para recibir información serial a 38400 Baud. ' 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 ' Conteo_T2 cada 10ms, utilizando el TMR2 para que interrumpa al pro_ ' grama principal cada 10 ms. ' ------------------------------------------------------------------- Device = 16F876 XTAL = 20 ' DEFINICIÓN DE SIMBOLOS, VARIABLES Y CONSTANTES ' ------------------------------------------------------------------ Declare HSERIAL_BAUD 38400 ' Velocidad conexión serial en baud Symbol GIE = INTCON.7 ' Bit habilit. interrupciones globales Symbol PEIE = INTCON.6 ' Bit habilit. interrupciones perifer. 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 Symbol TOUTPS2 = T2CON.5 ' " Symbol TOUTPS1 = T2CON.4 ' " Symbol TOUTPS0 = T2CON.3 ' " Symbol TMR2ON = T2CON.2 ' Bit habilit. On/Off del TMR2 Symbol T2CKPS1 = T2CON.1 ' Selección del Pre-escalador Symbol T2CKPS0 = T2CON.0 ' " Dim Conteo As Word ' Variable de uso general Dim Conteo_T2 As Word ' Variable de uso general Dim Index As Word ' Variable de uso general On Interrupt GoTo TMR2_INT ' Cuando ocurre una interrupción va a ' la subrrutina "TMR2_INT"

Page 63: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 56

' 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.

Page 64: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 57

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, TMR1 y TMR2 para que interrumpan al programa principal cada 10 ms. El resultado del programa se podrá observar a través del PROTON® IDE Serial Comunicator, el cual, deberá configurarse para recibir información serial a 38400 Baud. ' CAP_08_Ejemplo_04.bas ' Utilización del TMR0,TMR1 y TMR2 en forma simultánea. ' En este programa se incrementará el valor de la variable Conteo ' cada 1000 ms y las variables Conteo_T0, Conteo_T1 y Conteo_T2 cada ' 10ms, utilizando los tres timers para que se interrumpa al progra_ ' ma principal cada 10 ms. Device = 16F876 XTAL = 20 ' DEFINICIÓN DE SIMBOLOS, VARIABLES Y CONSTANTES ' ----------------------------------------------------------------- Declare HSERIAL_BAUD 38400 ' Velocidad conexión serial en baud Symbol GIE = INTCON.7 ' Bit habilit. interrupciones globales Symbol PEIE = INTCON.6 ' Bit habilit. interrupciones perifer. 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 Symbol T1IE = PIE1.0 ' Bit habilit. int. por TMR1 Symbol T1IF = PIR1.0 ' Bit flag interrupciones por TMR1 Symbol T1CKPS1 = OPTION_REG.5 ' Bit selección pre-escalador Symbol T1CKPS0 = OPTION_REG.4 ' Bit selección pre-escalador Symbol T1OSCEN = T1CON.3 ' Bit habilit. Conteo TMR1 Symbol T1SYNC = T1CON.2 ' Bit habilit. sincronización Symbol TMR1CS = T1CON.1 ' Bit selección del reloj Symbol TMR1ON = T1CON.0 ' Bit habilit. On/Off del TMR1 Symbol T2IE = PIE1.1 ' Bit habilit. int. por TMR2 Symbol T2IF = PIR1.1 ' Bit flag interrupciones por TMR2 Symbol TOUTPS3 = T2CON.6 ' Selección del Post-Escalador Symbol TOUTPS2 = T2CON.5 ' " Symbol TOUTPS1 = T2CON.4 ' " Symbol TOUTPS0 = T2CON.3 ' " Symbol TMR2ON = T2CON.2 ' Bit habilit. On/Off del TMR2 Symbol T2CKPS1 = T2CON.1 ' Selección del Pre-escalador Symbol T2CKPS0 = T2CON.0 ' "

Dim Conteo As Word ' Variable de uso general Dim Conteo_T0 As Word ' Variable de uso general Dim Conteo_T1 As Word ' Variable de uso general Dim Conteo_T2 As Word ' Variable de uso general Dim Index As Word ' Variable de uso general Dim TMR1A As Word ' Valor inicial del Timer1 On Interrupt GoTo TMR012_INT ' Cuando ocurre una interrupción va a ' la subrrutina "TMR012_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 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 = 50000 ' 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 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

Page 65: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 58

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 T1IF = 0 ' Limpia el flag de int. del TMR1 T1IE = 1 ' Habilita la interrupción por TMR1 EndIf 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

Figura 8.15. Imagen de la ejecución del programa CAP_08_Ejemplo_04.bas Se observa que pos cada conteo de 1 seg en la variable Conteo del programa Principal, las variables: Conteo_T0, Conteo_T1 y Conteo_T2 se incrementan

100 veces, como era de esperarse.

Page 66: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 59

CAPÍTULO 9

COMUNICACIÓN SERIAL SINCRÓNICA I2C Introducción. I2C es un bus de comunicación serial, sobre el cual, se implementa un protocolo de comunicaciones desarrollado por Phillips Semiconductors™ a principios de los años 80’s. Este bus se creó con la finalidad de reducir la complejidad del cableado interno encontrado en las tarjetas electrónicas de equipos digitales de radio y TV. Actualmente, su uso se ha extendido a innumerables aplicaciones en el área digital, hecho que lo convierte, en uno de los más populares estándares de comunicación serial sincrónica. Una de las principales razones para que el estudio del bus I2C sea un punto obligatorio en la capacitación de un estudiante en el desarrollo de aplicaciones con microcontroladores, es la gran variedad de productos y fabricantes que producen circuitos integrados con ésta tecnología, entre los que se pueden citar: Phillips, National, Xicor, Siemens y Dallas-Maxim Semiconductors™. El térmico I2C es una simplificación comercial y práctica, su nombre real es Inter-Integrated Circuit bus, es decir, bus de interconexión de circuitos integrados. 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 otros: manejadores de puertos E/S, convertidores A/D, medidores de temperatura, memorias Eeprom, relojes en tiempo real, sincronizadores, convertidores de protocolos, etc.

Figura 9.1. Conexión entre dispositivos bajo el bus I2C.

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

9.1. Características del BUS I2C

• Utiliza dos líneas para la comunicación, una para datos llamada (SDA) y otra para el reloj (SCL).

• Cada dispositivo conectado al bus es identificado por una única dirección (dentro del bus), la cual, queda establecida a través de una combinación de Hardware/Software.

• Bus I2C es multi-master y aún cuando ésta característica es poco utilizada, se define un mecanismo para la detección de las colisiones y arbitraje que busca prevenir la pérdida de información si dos o más maestros inicializan comunicaciones en forma simultánea.

• Las transferencias de información se realizan en paquetes de 8 bits, en forma bi-direccional y pueden ser efectuadas a tres velocidades: Normal (Standard ) a unos 100 kbit/s (definición original), a 400 kbit/s (implementado a partir de la versión 1.1 del año 1992) en el modo rápido (Fast) a 3.4 Mbit/s en el modo de alta velocidad (High- speed) disponible desde la versión 2.0 del año 1998).

La generación de los pulsos de reloj es siempre responsabilidad del maestro que controla el bus. El maestro comienza y termina todas las transferencias de datos y para ello hace uso de dos condiciones especiales denominadas INICIO y PARADA (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. Fuente: Tomado de la web: www.Philip.com

Page 67: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 60

9.2. Detalle de la comunicación I2C

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 proceso de transmisión/recepción de la información “Bytes” entre el dispositivo maestro y el dispositivo esclavo como se puede apreciar en la Figura 9.3. Todos los bytes de información colocados sobre la línea SDA deben tener 8 bits. El número máximo de bytes que pueden ser enviados en una transmisión no está restringido, siendo el esclavo quien fija esta cantidad de acuerdo a sus características. 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 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 nivel bajo. Esto hace que el maestro entre en un estado de espera, durante el cual, no transmite información esperando a que el esclavo esté listo para continuar la transferencia en el punto donde había sido detenida.

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.4. Formato de la transferencia de bytes en un Bus I2C.

Fuente: Tomado de la web: www.Philip.com A partir de la versión 1.0 del año 1992, existe un formato de direccionamiento de 10 bits y se ha incrementado significativamente el número de dispositivos que pueden conectarse simultáneamente al bus. El compilador Basic® no da soporte para dispositivos con direcciones de 10 bits por lo cual, no se hará un estudio exhaustivo del direccionamiento del bus en estos casos. 9.4. Inicialización en modo maestro La forma común de comunicación I2C, es utilizar al PIC® como único maestro y los periféricos como esclavos, bajo está configuración, la habilitación de las comunicaciones se logra a través de la configuración de los siguientes registros:

Page 68: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 61

• Ajustar la velocidad de Transmisión/Recepción a través del registro SSPADD.

• Eliminar el control del “slew rate” colocando a uno el bit SMP del registro SSPSTAT.

• Seleccionar el modo de comunicación tipo “Maestro” a través del registro SSPCON.

• Habilitar el módulo de comunicaciones bit SSPEN del registro SSPCON

• 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 • Una vez inicializado el módulo I2C (bit SSPIF = 1 del registro PIR1) se

comienza la transmisión de los datos una vez que son cargados en el registro SSPBUF.

• El primer dato a cargar en el registro SSPBUF deberá ser la dirección del dispositivo esclavo, al cual, se pretende comunicar.

• El microcontrolador tendrá que esperar la señal de reconocimiento (ACK) por parte del dispositivo esclavo, cuando esto ocurre el bit ASKSTAT del registro

SSPCON2 se colocará en cero (0), y se podrán enviar los próximos bytes que representan los datos de igual forma.

• 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” habilitándose al pin SDA de nuevo a recibir una nueva trama de comunicación: “Arranque … Dirección … Reconocimiento …Datos … Reconocimiento … Datos … Reconocimiento …. Parada”

Figura 9.6. Transmisión en modo maestro I2C para un PIC16F876. Fuente: Tomado de la web: www.Mikroe.com

9.6. Recepción en modo maestro • La preparación para la recepción de datos es similar a la transmisión con la

excepción de que el último bit del primer byte enviado (dirección) contiene un uno (1). Esto le indica al maestro que recibirá datos desde el dispositivo esclavo.

Page 69: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 62

• El dispositivo esclavo comienza a enviar los bytes de datos uno a la vez, estos bytes son almacenados en el registro SSPSR.

• Una vez leído éste registro por parte del maestro, automáticamente el maestro genera el bit de reconocimiento (ACK) al esclavo, lo cual, indica que el maestro 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”

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 la empresa Dallas Semiconductor™ modelo DS1307. Este dispositivo es un

completo reloj – cronómetro en tiempo real, el cual, utilizaremos en general, como 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 8bits.

Figura 9.8. Dispositivos con capacidad de comunicación I2C incluidos en el sistema de desarrollo iBOARD III.

DS1307 24LC16B

Pines de conexión al BUS I2C

Page 70: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 63

9.8. Comandos en alto nivel para el manejo del protocolo I2C 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] Control. :Es una variable o constante (byte) que contiene los bits de identificación - dirección del dispositivo I2C.

Dirección : Es una variable o constante adicional (tipo byte o word) que especifica la dirección de comienzo de lectura del dispositivo I2C, si no se especifica se tomará por defecto la dirección cero.

DatosEntrada : Es una lista de variables con modificadores de formato que se reciben como datos de entrada.

DatosSalida : Es una lista de variables con modificadores de formato que se transmiten como datos de salida.

La declaración de pines para la comunicación I2C, se realiza a través de las directivas:

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. La velocidad por defecto es 100 KHz

9.9. Memoria Eeprom 24LC16B

El sistema de desarrollo iBOARD III, incluye una memoria Eeprom modelo 24LC16B de 16 Kbits, dispuestos en arreglos de 2K x 8 bits para ser utilizada con un bus de comunicación I2C a un voltaje de operación entre 2.5 y 5.5 Vdc. En la figura anexa, se muestra la distribución de los pines de conexión. Los Pines 1, 2, y 3 se utilizan para determinar parte de la palabra de identificación del dispositivo (dirección por hardware). Los pines 4 y 8 se utilizan para la alimentación de tensión, los pines 5 y 6 son utilizados para la conexión al bus I2C, mientras que el pin 7 es la habilitación de la protección a la escritura de la memoria Eeprom. 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 registros de la memoria 24LC16B se debe enviar un byte de control y otro de dirección como se muestra indicado en la Figura 9.9.

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.

Page 71: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 64

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 .... ' ----------------------------------------------------------------- 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.10. Fotografía de las conexiones entre el PIC16F876 y el Bus I2C del sistema de desarrollo iBOARD III.

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

Page 72: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 65

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 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.

Figura 9.12. Secuencia de Bytes para acceder los registros internos del DS1307.

Los registros internos del reloj en tiempo real DS1307, se encuentran codificados en formato BCD (Binario Codificado en Decimal). En total el DS1307 posee ocho registros con direcciones 00h a la 07h, de las cuales, las primeras siete se utilizan para almacenar la información acerca del reloj - calendario; la última 07h se utiliza como registro de control. La figura 9.13., muestra la distribución de los registros internos del DS1307, mientras que en la Figura 9.14 se puede observar el diagrama de conexiones del DS1307 en el sistema de desarrollo iBOARD III.

Figura 9.13. Registros internos del reloj en tiempo real 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.

9.12. Ejemplo práctico con reloj de tiempo real DS1307 Utilizando el sistema de desarrollo iBOARD III, haga un programa que permita configurar los registros internos del reloj de tiempo real DS1307 con fecha y hora de referencia. Por ejemplo podrá utilizar un año bisiesto y ajustar el calendario a 28 de febrero y la hora a las 23:50. De esta forma, podrá observar como el reloj de tiempo real se incrementa en forma correcta. Puede repetir la configuración con un año no bisiesto para que observe la diferencia.

Page 73: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 66

' CAP_09_Ejemplo_02.bas ' Configurar, leer y escribir en los registros internos del RTC ' Reloj de Tiempo Real, modelo DS1307 ......................... ' ------------------------------------------------------------- Device = 16F876 XTAL 20 Declare SDA_PIN PORTB.0 ' Asignación pin SDA Declare SCL_PIN PORTB.1 ' Asignación pin SCL Symbol Seg = 0 ' Registro de Seg. Symbol Minu = 1 ' Registro de Min. Symbol Hora = 2 ' Registro de Horas Symbol Dia = 4 ' Registro de Día Symbol Mes = 5 ' Registro de Mes Symbol Ano = 6 ' Registro de Año 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 Next ' del RTC 0..6 GoSub BCD2BIN Return

MOSTRAR_RTC: HRSOut "Hora = ", DEC2 RTC[Hora], ":", DEC2 RTC[Minu],_ ":", DEC2 RTC[Seg],13 HRSOut "Fecha = ", DEC2 RTC[Dia], "/", DEC2 RTC[Mes],_ "/", DEC2 RTC[Ano],13,13 Return BCD2BIN: For Index = 0 To 6 RTC[Index] = (RTC[Index]/16)*10 + RTC[Index] & $0F Next Return

Figura 9.15. Resultado de la ejecución del programa CAP_09_Ejemplo_02.bas Utilizando el IDE Serial Comunicator.

Page 74: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 67

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. El BUS 1-Wire®, permite realizar una comunicación serial asincrónica entre un 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: • Utiliza niveles de alimentación CMOS/TTL con un rango de operación que

abarca desde 2.8V hasta 6V. • Tanto el maestro como los esclavos transmiten información de forma bi-

direccional, pero, sólo en una dirección a la vez, de ésta manera la comunicación es realizada en forma “half duplex”.

• Toda la información es leída o escrita comenzando por el bit menos significativo (LSB).

• No se requiere del uso de una señal de reloj, ya que, cada dispositivo 1-Wire® posee un oscilador interno que se sincroniza con el del maestro cada vez que en la línea de datos aparezca un flanco de bajada (Beta).

• La alimentación de los esclavos se puede hacer utilizando el voltaje propio del BUS. Para ello, cada circuito esclavo posee un rectificador de media onda y un 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.1. Esquema de conexión entre un maestro PIC16F876 y varios esclavos

en una RED de comunicaciones 1-Wire®. 10.1. Descripción del protocolo de comunicaciones 1-Wire® Podemos describir al protocolo 1-Wire® como una secuencia de transacciones de información, la cual, se desarrolla según los siguientes pasos: (1) La Inicialización, (2) Comandos y funciones de ROM, (3) Comandos y funciones de control y memoria, (4) Transferencia de bytes ó datos. INICIALIZACIÓN

Todas las comunicaciones en el bus 1-Wire® comienzan con una secuencia de un pulso de Reset y Presencia. El pulso de reset provee una forma limpia de iniciar las comunicaciones, ya que, con él se sincronizan todos los dispositivos esclavos presentes en el bus. Un Reset es un pulso que genera el maestro al colocar la línea de datos en estado lógico bajo por unos 480 µs. Esto se puede observar a través de la Figura 10.2.

Figura 10.2. Inicialización de la red 1-Wire®. Pulso de reset y presencia.

Page 75: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 68

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.3. Comandos de ROM utilizados por los dispositivos 1-Wire®. COMANDOS Y FUNCIONES DE CONTROL Y MEMORIA

Son funciones propias del dispositivo 1-Wire®. Incluyen comandos para leer/escribir en localidades de memoria, leer memorias de “scratchpad”, controlar el inicio de la conversión de un ADC, iniciar la medición de una temperatura o manipular el estado de un bit de salida, entre otros. Cada dispositivo define su propio conjunto de comandos. TRANSFERENCIA DE DATOS

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. Cuando el maestro lee información del bus, debe forzar la línea de datos a estado 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 dispositivo esclavo. La figura 10.4., muestra el proceso de lectura de un “Slot” típico que produce un microcontrolador PIC16F876 actuando como maestro 1-Wire®. Al momento de efectuar la escritura de un bit en el bus ocurre algo similar, el maestro produce un pulso de entre 1 µs y 15 µs de duración, para luego colocar en el bus al bit que se desea transmitir. Este bit deberá permanecer en el bus al menos 60 µs.

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

10.2. Implementación del maestro 1-Wire® con el PIC16F876

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. La implementación hecha por éstas funciones, tiene las siguientes características: La velocidad de transmisión de datos es aproximadamente de 20 Kbps en modo normal, El PIC16F876 sólo puede trabajar como dispositivo maestro y se permite el uso de todos los modificadores de formato.

Para efectuar una lectura del Bus 1-Wire®, se utiliza el comando:

ORead Pin, Modo, [DatoEntrada] Para efectuar una escritura en el Bus 1-Wire®, se utiliza el comando:

OWrite Pin, Modo, [DatoSalida] • Pin : Variable, constante o expresión que especifica cual pin de E/S será usado

para la comunicación 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, selecciona el modo de transferencia en bytes ó bits y define la velocidad de comunicación a utilizar, modo normal o modo de alta velocidad.

Page 76: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 69

• 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.5. Diferentes modos de transferencia de información en la RED 1-Wire®. 10.3. Topologías de conexión entre dispositivos en una RED 1-Wire® La figura 10.6., muestra las diferentes topologías de interconexión entre dispositivos en una RED 1-Wire®. La topología exclusiva también denominada 1:1, es la más simple de todas, se permite en este tipo de topología la conexión sólo de un dispositivo maestro con un dispositivo esclavo. Es muy utilizada para la medición de parámetros en dispositivos esclavos tipo “stand alone” como por ejemplo: los dispositivos iButton® de Dallas Semiconductor™. La topología lineal y ramificada extienden el alcance de la RED 1-Wire® hasta una distancia de aprox. 200 metros. En ellas, los dispositivos esclavos pueden interconectarse en forma secuencial y/o a través de ramificaciones.

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. 10.4. Conexión entre el PIC16F876 y los dispositivos esclavos 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 cada pin del microcontrolador puede implementar cualquiera de las topologías anteriormente mencionadas con un sólo dispositivo esclavo ó con muchos de ellos conectados en forma simultánea. La única consideración que hay que tener es la colocación de una resistencia de “Pull Up” generalmente de valor 2 KOhm. Esto se puede observar el la figura 10.7., en la cual, se han conectado dos dispositivos 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 necesidad de conocer a priori el serial del dispositivo. Como hay uno sólo dispositivo en la línea ó pin de conexión, el microcontrolador puede acceder a la memoria del dispositivo esclavo a través de la función de ROM ($CC) Skip ROM.

Page 77: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 70

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 en el capítulo 11.

10.5. Los iButton® 1-Wire® Un iButton es un circuito integrado encerrado en un envoltorio de acero inoxidable de 16 mm de diámetro más parecido a una batería que a un micro chip. La interfaz de comunicaciones utilizada en los iButtons® es el protocolo 1-Wire® de Dallas Semiconductor™, es por ello, que sólo necesitan dos terminales de conexión, uno para datos y otro para la referencia o tierra. La energía requerida para el funcionamiento del microcircuito es tomada del propio conductor de datos en forma parásita. Existen iButtons® que contienen únicamente un número de identificación, memorias (EPROM, EEPROM, NVRAM), relojes de tiempo real, sensores y registradores (loggers) de temperatura, encriptadores de información, convertidores analógico/digital, etc. En la figura anexa, se observan dos tipos diferentes de iButton®.

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>. ' CAP_10_Ejemplo_01.bas ' Leer el serial de un dispositivo 1-Wire ' --------------------------------------------------------- Device = 16F876 XTAL 20 Symbol DQ = PORTB.1 ' Pin de conexión 1-Wire® Dim Index As Byte ' Variable de uso general Dim SERIAL[8] As Byte ' Arreglo almacena serial Main: GoSub Leer_Serial ' Rutina para leer el serial GoSub Mostrar ' Rutina para mostrar serial DelayMS 1000 GoTo Main End Leer_Serial: OWrite DQ,1,[$33] ' Read ROM, leer Serial For Index = 0 To 7 ORead DQ,0,[SERIAL[Index]] Next Return Mostrar: HRSOut "SERIAL DEL DISP.1-Wire® ENCONTRADO..",13 HRSOut "------------------------------------",13 For Index = 7 To 0 Step -1 HRSOut HEX2 SERIAL[Index] Next HRSOut 13,13 Return

Page 78: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 71

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 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) contenidos en el paquete de 9 bits siempre sea par o impar. Este procedimiento se le conoce como verificación de paridad y permite encontrar errores que ocurren en un bit, pero no es confiable cuando cambia más de un bit dentro del byte. Uno de los mecanismos de detección de errores más eficientes es el Chequeo de Redundancia Cíclica (del inglés Cyclic Redundancy Check) conocido por sus iniciales 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 conjunto de datos. Así, si el CRC es de 4 bits se denominará CRC4, si es de 8 bits se llamará CRC8, si es de 16 bits será CRC16, etc.

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.9. Algoritmo para el cálculo del CRC8 utilizado por Dallas Semiconductor™.

El cálculo del CRC8 puede hacerse de varias formas. La primera de ellas es evidentemente por hardware, siguiendo el esquema de la figura 10.9. Cuando se implementa por software, una forma simple de hacerlo, es por medio de una tabla 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 presenta el inconveniente de requerir el uso de 256 bytes de la memoria del microcontrolador. La figura 10.10., muestra un iButton® típico de Dallas Semiconductor™. La figura presenta una fotografía frontal del dispositivo, en la cual, se pueden observar 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.

Page 79: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 72

Cada iButton® viene estampado de fábrica con ésta numeración y por supuesto cada iButton® tendrá un serial de identificación único.

Figura 10.10. Fotografía frontal de un iButton® de Dallas Semiconductor™. 10.8. Ejemplo del cálculo del CRC8 El siguiente programa codificado en Basic® PROTON® permite calcular el CRC8 del iButton® que se muestra en la Figura 10.10. Realmente el ejemplo ilustra la forma correcta de codificar el algoritmo de CRC8 mostrado en a Figura 10.9. El programa le solicitará a través del IDE Serial Comunicator que introduzca el serial del dispositivo 1-Wire®. Usted deberá introducir el serial del dispositivo, la familia y el programa le devolverá el valor del CRC8 para este dispositivo en particular. Codifique el programa según la codificación mostrada a continuación y ejecute el 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 Dim CRCt As Byte Dim ByteAct As Byte Clear

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 Next HRSOut 13,"CRC8 = ", HEX CRC, 13 DelayMS 5000 GoTo Main CRCCalc: For Indice = 0 To 7 IBit = CRC.0 ^ CRCt.0 CRC = CRC >> 1 CRC.2 = CRC.2 ^ IBit CRC.3 = CRC.3 ^ IBit CRC.7 = IBit CRCt = CRCt >> 1 Next Return

Figura 10.11. Resultado de la ejecución del programa CAP_10_Ejemplo_02.bas

Cálculo de CRC8 de un iButton® 1-Wire®.

Page 80: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 73

10.9. Termómetro Digital modelo DS18B20

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. El DS18B20, tiene una resolución programable de 9,10,11 y 12 bits, lo cual, permite obtener temperaturas con una exactitud de hasta 1/8 de grado centígrado. En la Figura 10.12., se muestra un diagrama de bloques funcionales internos al DS18B20, de izquierda a derecha podemos mencionar que a la entrada del dispositivo se encuentran los circuitos de alimentación tanto por fuente externa 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.12. Diagrama de bloques funcionales del DS18B20. Fuente: Hoja de especificaciones del 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.

Figura 10.13. Diagrama de conexiones entre un maestro PIC16F876 y un DS18B20 esclavo.

Fuente: Hoja de especificaciones del DS18B20. La memoria “scratchpad” del DS18B20, contiene 9 registros de 8 bits cada uno. Los primeros dos registros Byte 0 y 1, se utilizan para almacenar el valor de 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 podrá escribir. El byte 4, es el byte de configuración del dispositivo, los siguientes bytes 5,6 y 7 están reservados para uso del fabricante y por último el byte 8, es el valor de aplicar el algoritmo CRC8 de los bytes 0 al 7.

Figura 10.14: Registros internos del sensor de temperatura DS18B20.

Fuente: Hoja de especificaciones del DS18B20.

Page 81: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 74

El registro de configuración, es el encargado de seleccionar la resolución en bits que se utilizará para la determinación de la temperatura. La figura 10.15., muestra una tabla de selección de las diferentes resoluciones, mientras más es el número de bits utilizados, mejor es la precisión, sin embargo el tiempo de conversión de la temperatura se incrementa significativamente.

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 termómetro digital a través del comando de ROM ($CC) Skip ROM. De esta forma, el DS18B20 quedará habilitado para la recepción de los comandos de memoria relacionados con la configuración, lectura y escritura de sus registros.

Figura 10.16: Formato binario de la temperatura en un DS18B20.

Los comando de memoria disponibles en el DS18B20, se presentan en la Figura 10.17., existen comandos para la conversión de la temperatura, lectura y escritura de la memoria de trabajo, copiar los registros de alarmas de la memoria de trabajo a la memoria Eeprom y lectura del status de energía relacionada a la alimentación del dispositivo.

Figura 10.17: Comandos de memoria utilizados por el DS18B20. Fuente: Hoja de especificaciones del DS18B20.

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

Page 82: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 75

Main: GoSub Conversion ' Rutina convertir Temperatura GoSub Mostrar ' Rutina mostrar los valores DelayMS 1000 GoTo Main End Conversion: OWrite DQ,1,[$CC,$44] ' Comando Convertir Temp 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.18. Resultado de la ejecución del programa CAP_10_Ejemplo_03.bas

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

En la Figura 10.18. se observa la fotografía del montaje electrónico realizado para el ejemplo CAP_10_Ejemplo_03. Note que el esquema de alimentación adoptado es del tipo parásito, ya que, el terminal 1 (GND) y el terminal 3 (Vcc) del DS18B20 están conectador ambos a tierra (GND). Por otra parte la resistencia de Pull Up utilizada fue de 2.2 KOhm.

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.

Page 83: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 76

10.11. Algoritmo de Search ROM Cuando existe un sólo dispositivo conectado al bus 1-Wire® puede omitirse el direccionamiento mediante el uso del comando SKIP ROM. También puede utilizarse el comando READ ROM para leer la identificación del esclavo y direccionarlo. Pero, ¿Qué hacer cuando existe más de un dispositivo en la RED 1-Wire® al mismo tiempo?. Quizás, podríamos leer manualmente los seriales de identificación de todos los esclavos a conectar en el bus. Para ello, se tendría que colocar cada 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) para luego almacenarla en una memoria EEprom externa o en la memoria EEprom del PIC16F876. Posteriormente, se deberá repetir el procedimiento con todos los demás dispositivos hasta llegar al último. Una vez identificado cada dispositivo y su 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 cual desee comunicarse, de esta forma, el dispositivo esclavo elegido quedará activo y los demás dispositivos 1-Wire® en la RED quedarán fuera de línea hasta que se produzca en la RED una condición de RESET. Previendo esta situación, todos los dispositivos que emplean la tecnología 1-Wire®, soportan un comando de ROM llamado Search ROM, el cual, permite al maestro identificar los seriales independientes de cada dispositivo conectado a la RED en forma automática. Buscando dispositivos en el Bus 1-Wire®

La búsqueda de dispositivos en una red 1-Wire® deberá comenzar un “RESET” realizado por el maestro, quien luego deberá enviar un comando Search ROM. En ese momento, cada dispositivo esclavo enviará al bus el primer bit de su identificación, seguido del complemento del mismo. El maestro, deberá leer estos dos bits. Las combinaciones posibles de estos dos bits, se muestran en la tabla de la figura 10.20.

Figura 10.20: Combinaciones posibles al efectuar el un “ Search ROM”. Fuente: 1-Wire® Search Algorithm, Application Note 187, pág, 2002.

A continuación, el maestro escribirá un bit en el bus y cada esclavo comparará este bit con el que él previamente había transmitido. En caso de que los bits sean diferentes, el esclavo entrará en estado de espera, del cual, sólo saldrá al producirse un nuevo reset. Si ambos bits coinciden, el esclavo trasmitirá el siguiente bit de su ID seguido de su complemento. El proceso se repetirá hasta que se completen los 64 bits de identificación en cada dispositivo esclavo. Pero, ¿Qué bit transmitió el maestro?. En el caso de las dos combinaciones centrales de la tabla mostrada en la figura 10.20 (01 y 10) el maestro tomará el bit recibido (ID Bit), lo almacenará en una variable temporal donde al final del proceso se obtendrán los 64 bits de la ID de uno de los dispositivos Cuando se produce una primera discrepancia (se reciben dos ceros consecutivos), el maestro colocará un 0 en el bus y almacenará el bit, en el cual, se produjo la colisión. Esto hará que los dispositivos cuya ID fuese 1 en la posición 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 de búsqueda continúa y al momento de presentarse otra colisión se compara el bit en el que ésta ocurre con la posición del cero del párrafo anterior; si coinciden, entonces se enviará un 1 por el bus (ID bit se toma igual a 1). Si la posición de la 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 bit. La figura 10.21., muestra el diagrama de bloques del algoritmo Search ROM. Si desea mayor información sobre este algoritmo podrá consultar la nota de aplicación del fabricante Dallas Semiconductor™ AN187, “1-Wire Search Algorithm”, Mar 28, 2002. Esta nota de aplicación también se encuentra en el CD entregado a usted en el directorio \10 Manuales\AN187.pdf 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

Page 84: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 77

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

Page 85: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 78

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 a tiempo de ejecución

• Conversión Analógica a Digital ADC de 10 bits de resolución por dos pines de entrada – salida disponibles

• Comparador analógico de tensión por tres pines de entrada – salida disponibles

• Memoria RAM de 32 registros de 8 bits, la cual, puede ser escrita y leída En la Figura 11.1. se muestra el diagrama de conexiones electrónicas asociadas al coprocesador, en la misma se observa la existencia de otros componentes 1-Wire® tales como multiplexores, los cuales, explicaremos en detalle más adelante, por ahora, nos concentraremos en el coprocesador.

Figura 11.1. Diagrama esquemático de conexiones del coprocesador

en el sistema de desarrollo iBOARD III. Acceder al coprocesador, se puede hacer a través del microcontrolador PIC16F876 PORTB<0> y el multiplexor 1-Wire® DS2409 (U6). También se puede acceder utilizando el terminal en bornera o punto de conexión en regleta OWI y el 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 fabricante termine el software de comunicación que permitirá implementar, a través del computador, una RED de sistemas de desarrollo iBOARD III. A la fecha de escritura de este manual, el fabricante ha adelantado en un 60% el software de comunicación en RED denominado OPC™ View.exe.

Page 86: Manual Iboard III

79

Para tener acceso al coprocesador, es necesario pre-configurar el integrado DS2409 multiplexor 1-Wire® (U6) a fin de que este multiplexor haga la conexión física y eléctrica del pin PORTB<0> a través del pin 3 del DS2409 (MAN) al pin de 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 deberá colocar en su programa a fin de poder tener acceso al coprocesador. 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 ------------------------------------------ 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) ORead OWP,0,[RESP, FED] ' Respuesta, feedback ' De Aquí en adelante ya se trabajará directamente con el ' coprocesador ATMEL. Primero se envía el comando $DD para ' indicarle que queremos conocer su identificación. El co_ ' procesador devolverá tres (3) bytes de información: ' I,J se refieren al tipo de dispositivo, K se ref. versión

OWrite OWP,0,[$DD] ORead OWP,0,[I,J,K] HRSOut "Device: ",I,J," Versión: ", Dec K,13 DelayMS 1000 GoTo Main

Figura 11.2. Resultado de la ejecución del programa CAP_11_Ejemplo_01.bas. 11.1. El coprocesador utilizado como Salidas Digitales El proceso para configurar y activar los pines de salida del coprocesador es sencillo. Se realiza la configuración a través del envío de un byte que contiene la información de los pines que se activarán como salidas digitales y además el valor que tomarán estos pines de salida cero (0) lógico ó uno (1) lógico.

Page 87: Manual Iboard III

80

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 ' 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 ' en este pin. Después de una pausa de 250 ms. Se enviará el coman ' do $05 para colocar un lógico (5Vdc) en el pin CP0,esto encederá ' el LED conectado en este pin. Luego de otro retardo de 250 ms,el ' programa volverá a ejecutarse en forma cíclica. Loop: OWrite OWP,0,[$04] DelayMS 250 OWrite OWP,0,[$05] DelayMS 250 GoTo Loop End

Figura 11.3. Resultado de la ejecución del programa CAP_11_Ejemplo_02.bas.

Nota: Los 4 pines disponibles del coprocesador (CP0, CP1, CP2 y CP3) se pueden configurar como salidas y tomar valores arbitrarios 0 ó 1. Si se desea que todas las salidas sean de valor cero lógico (0Vdc), se le debe enviar al coprocesador los bytes de configuración:

0 0 A1 A0 0 1 0 N

$04; para activar y poner a cero la salida al pin CP0 $14; para activar y poner a cero la salida al pin CP1 $24; para activar y poner a cero la salida al pin CP2 $34; para activar y poner a cero la salida al pin CP3

Page 88: Manual Iboard III

81

Por el contrario, si se desea que todas las salidas tengan el valor uno lógico (5Vdc), se le debe enviar al coprocesador los bytes de configuración:

0 0 A1 A0 0 1 0 N

$05; para activar y poner a cero la salida al pin CP0 $15; para activar y poner a cero la salida al pin CP1 $25; para activar y poner a cero la salida al pin CP2 $35; para activar y poner a cero la salida al pin CP3

11.2. El coprocesador utilizado como Entradas Digitales El proceso para configurar y activar los pines de entrada del coprocesador, se realiza con el envío de un byte que contiene la información de los pines que se activarán como entradas digitales. El formato es el siguiente:

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

' De Aquí en adelante ya se trabajará directamente con el coproce_ ' 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_ ' gunta por el valor de la variable EstadoPin si es: ' . cero (0) se activa al pin CP0 como salida y se coloca a 0Vdc ' . 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 ' en forma cíclica. 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. If EstadoPin = 0 Then OWrite OWP,0,[$04] ' Si EstadoPin = 0 se apaga el LED Else OWrite OWP,0,[$05] ' Si EstadoPin = 1 se enciende LED EndIf DelayMS 50 ' Retardo 50 ms GoTo Loop End

Figura 11.4. Resultado de la ejecución del programa CAP_11_Ejemplo_03.bas.

Page 89: Manual Iboard III

82

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 configuración como si el pin fuera una entrada, pero con la diferencia de usar el 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: OWrite OWP,2,[$10] ' Se configura CP1 como tres estados 11.3. El coprocesador utilizado como Salidas PWM 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-100)% en 255 pasos independientes. Si a la salida del pin que está generando una señal PWM se coloca un filtro pasa bajos, se podrá implementar un convertidor 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 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 PWM utiliza dos bytes. El primer byte configura cual(es) pin(es) de salida(s) serán salidas PWM y el segundo byte es un número entre $00 y $FF que especifica el ciclo útil de la señal PWM a generar. Ambos pines CP2 y CP3 se pueden configurar en forma arbitraria y con valores diferentes de ciclo útil.

0 0 A1 A0 0 1 1 Inv

Segundo Byte: de $00 a $FF

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

Si Inv = 0; Los pulsos PWM serán ascendentes (Alfa)

Si Inv = 1; Los pulsos PWM serán descendentes (Beta)

La frecuencia a la cual se generará(n) la(s) señal(es) PWM es la misma para los dos pines CP2 y CP3 y se puede configurar a través del envío de un comando con el siguiente formato:

1 1 1 1 A3 A2 A1 A0 donde A3 A2 A1 A0: representa un número binario de 4 bits, que puede tomar el valor desde cero (0) a nueve (9). La figura 11.5., muestra una tabla que relaciona las diez posibles combinaciones binarias con las frecuencia PWM de salida que se pueden obtener para los pines de salida PWM CP2 y CP3.

A3..A0 Frecuencia (Hz) Codificación 0000 37500,oo OWrite OWP,0,[$F0]

0001 18823,53 OWrite OWP,0,[$F1]

0010 4687,50 OWrite OWP,0,[$F2]

0011 2352,94 OWrite OWP,0,[$F3]

0100 585,94 OWrite OWP,0,[$F4]

0101 294,12 OWrite OWP,0,[$F5]

0110 146,48 OWrite OWP,0,[$F6]

0111 73,52 OWrite OWP,0,[$F7]

1000 36,62 OWrite OWP,0,[$F8]

1001 18,38 OWrite OWP,0,[$F9]

Figura 11.5. Diferentes frecuencias de salida para la señal PWM.

Nota: El fabricante diseñó el coprocesador para que la selección de las frecuencias arriba indicadas bajo números impares (1,3,5,7,9) produzcan una señal PWM con pulsos corregidos en fase, es decir, cuando el valor del ciclo útil cambia, el cambio es hecho en forma simétrica sobre el centro del pulso. Esto es muy utilizado en aplicaciones para controlar la velocidad de los motores DC, donde un corrimiento de fase del pulso no es deseado. ' CAP_11_Ejemplo_04.bas ' Programa para configurar los pines del coprocesador Pin CP2 como ' 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 ' PWM generada será de aprox. 4.687 KHz. El pin de salida CP2 se de_ ' 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. ' ------------------------------------------------------------------ Device 16F876 XTAL 20 Dim RESP As Byte ' Var. uso general (Obligatoria) Dim FED As Byte ' Var. uso general (Obligatoria) Dim I As Byte ' 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. 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

Page 90: Manual Iboard III

83

' De Aquí en adelante ya se trabajará directamente con el ATMEL ' ------------------------------------------------------------- OWrite OWP,0,[$F2] ' Configura Freq. Salida PWM = 4687.5 KHz Loop: For I = 0 To 255 Step 25 OWrite OWP,0,[$26, I] ' Configura Salida PWM = CP2, ' ciclo útil = I DelayMS 1000 Next GoTo Loop End

11.4. El coprocesador utilizado como Contador Digital El proceso para configurar y activar los pines del coprocesador como entradas de conteo “counter” se realiza a través del envío de un byte que contiene la información de los pines que se activarán como entradas de conteo de pulsos. El formato del byte de control es el siguiente:

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.

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 ' De Aquí en adelante ya se trabajará directamente con el ATMEL ' ------------------------------------------------------------- OWrite OWP,0,[$F2] ' Configura Freq. Salida PWM = 4687.5 KHz Loop: OWrite OWP,0,[$26, 127] ' Configura Salida PWM = CP0, CU=50% Conteo = 0 ' Configura Entrada CP1 "counter" y OWrite OWP,0,[$13] ' comienza a medir los pulsos de CP2 DelayMS 1000 ' Retardo de 1000 ms = 1 seg ORead OWP,1,[Conteo.HighByte, Conteo.LowByte] HRSOut "Frec. Leída en CP1 = ", Dec Conteo*2, 13 DelayMS 500 GoTo Loop End

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

Page 91: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 85

CAPÍTULO 12

MODULO CCP/PWM. Captura, Comparación y PWM Introducción. El PIC16F876 posee dos módulos CCP (CCP1 y CCP2) Captura, Comparación y PWM, los cuales, realiza tres funciones diferentes según su nombre lo indica. El módulo CCP1 tiene asignado el pin PORTC<2> y el CCP2 tiene asignado el pin PORTC<1>. Ambos módulos pueden ser configurados a través de sus registros asociados CCP1CON y CCP2CON. 12.1. Modo de Captura

Modo Captura: Esta función se utiliza para la determinación de la duración de un pulso aplicado a los pines PORTC<2:1>. La Captura de una señal comienza cuando cambia el valor de entrada del pin PORTC<2> ó PORTC<1>, lo cual, desencadena una serie de eventos como la copia el contenido del Timer1 (TMR1H, TMR1L) en los registros (CCPR1H, CCPR1L) y la activación de la bandera de interrupción. Los posibles cambios en los pines PORTC<2:1> que pueden desencadenar una captura son:

• Una (01) transición de nivel Alto a nivel Bajo en el pin PORTC<2:1> • Una (01) transición de nivel Bajo a nivel Alto en el pin PORTC<2:1> • Cuatro (04) transiciones de nivel Bajo a nivel Alto en el pin PORTC<2:1> • Dieciséis (16) transiciones de nivel Bajo a nivel Alto en el pin PORTC<2:1>

Los registros de configuración tanto para el CCP1 y CCP2 son los encargados de la selección y/o configuración de las diferentes funciones y bits asociadas a los módulos CCP. En la figura 12.1. se observan los bits que conforman cada uno de los registros de configuración CCP1CON y CCP2CON.

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.

bit 3-0: CCPxM3:CCPxM0: Bits de selección

0000 = Reset del módulo CCPx. Captura/Comparación/PWM = OFF 0100 = Modo Captura, cada transición beta 1-> 0 0101 = Modo Captura, cada transición alfa 0-> 1 0110 = Modo Captura, a la cuarta transición alfa 0 -> 1 0111 = Modo Captura, a la 16va. transición alfa 0-> 1 1000 = Modo Comparación, coloca a uno (1) lógico el pin de salida PORTC<2:1>, cuando se activa la bandera de int. CCPxIF 1001 = Modo Comparación, coloca a cero (0) lógico el pin de salida PORTC<2:1>, cuando se active la bandera de int. CCPxIF 1010 = Modo Comparación, genera interrupción CCPxIF, el valor lógico del pin de salida PORTC<2:1> no cambia. 1011 = Modo Comparación, genera interrupción CCPxIF, el valor lógico del pin de salida PORTC<2:1> no cambia. Si está utilizando el CCP1, el valor del registro TMR1 es colocado a cero (0). Si está utilizando el CCP2, el valor del TMR1 es colocado a cero (0) y se produce la habilitación del módulo de conversión A/D. 11xx = Modo PWM.

En la Figura 12.2., se observa el diagrama de bloques funcionales del módulo CCP1. Cuando el evento preprogramado a través de los bits CCP1M3 al CCP1M0 dispara, la captura del valor del TMR1 se copia al registro CCPR1 y al mismo tiempo la bandera de interrupción bit CCPR1IF se activa.

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

Page 92: Manual Iboard III

86

12.2. Modo de Comparación Modo Comparación: Esta función se utiliza en general, para disparar un evento externo a través del pin PORTC<2:1> del microcontrolador, evento es dependiente de la comparación de dos registros internos del microcontrolador, asociados al módulo CCP. La Comparación literalmente significa: El valor del registro del Timer1 es continuamente comparado con un valor prefijado en el registro CCPR1 ó CCPR2, cuando los registros alcancen el mismo valor, uno de los cuatro posibles eventos ocurrirán: 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

colocado en cero (reset) y se habilita el módulo de conversión A/D para 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.

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

12.3. Modo PWM Modo PWM: Se utiliza para generar señales con el algoritmo de la modulación del ancho del pulso, lo que significa, que las señales pueden variar en forma independiente la frecuencia y el ciclo útil. Para entender que significado tiene la frecuencia y el ciclo útil, podemos observar la figura 12.4. Si un cero (0) lógico por analogía representa la conexión abierta de un interruptor que alimenta a una bombilla y un uno (1) lógico representa la conexión cerrada de un interruptor, entonces, la potencia en la bombilla será directamente proporcional a la duración del pulso. Esta relación se denomina ciclo útil.

Figura 12.4. Diferente ciclos útiles de una señal PWM. Fuente: Tomado de www.mikroe.com

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. Fuente: Tomado de www.mikroe.com

Page 93: Manual Iboard III

87

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

Ciclo útil de una Señal: El ciclo útil de una señal generada utilizando el modo 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 en el registro de configuración CCP1CON bits (CCPxX:CCPxY ). El ciclo útil se puede calcular a través de la siguiente formula:

Ciclo útil = (CCPR1L:CCP1CON<5:4>) * Tosc * TMR2 Prescale Value

Los registros CCPR1L y CCP1CON<5:4> pueden ser escritos en cualquier momento, sin embargo, el valor del ciclo útil no pasará al registro CCPR1H hasta que el valor del registro PR2 y el valor del registro TMR2 sean iguales. La tabla de la Figura 12.7, muestra como generar señales PWM de diferentes frecuencias a 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

TMR2 y PR2. Fuente: Tomado de www.mikroe.com

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

Resolución: Una señal PWM no es más que una secuencia de pulsos que varían su ciclo útil. Para una frecuencia específica (No. de pulsos x seg), existen un número discreto de combinaciones. Este número es llamado resolución, la cual, depende de del valor contenido en el registro PR2 y de la frecuencia generada. La mayor resolución es obtenida cuando el registro PR2 tiene el valor $FF. En la figura 12.9 , se observan diferentes resoluciones obtenidas de una señal PWM cuando se utiliza un oscilador de 20 MHz.

Figura 12.9. Resolución obtenida a partir de la frecuencia y el valor del registro PR2.

Fuente: Tomado de www.mikroe.com

Page 94: Manual Iboard III

88

12.4. Registros asociados a la Captura, Comparación y TMR1

Figura 12.10. Registros asociados al módulo de Captura, Comparación y al TMR1.

Fuente: Manual técnico del PIC16F876.

Banderas de interrupción: CCP1IF, CCP2IF, TMR1IF Habilitación de interrupciones: CCP1IE, CCP2IE, TMR1IE Configuración del módulo CCPx: CCPxM<3:0> Configuración Timer1: T1CON<5:0>

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.

Banderas de interrupción: CCP2IF, TMR2IF Habilitación de interrupciones: CCP2IE, TMR2IE Configuración del módulo PWMx: CCPxCON<5:0>, CCPxCON<5:0> Configuración Timer2: T2CON<6: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.

Page 95: Manual Iboard III

89

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 ' introducida por el pin PORTC<2>. El resultado deberá ser mostrado ' en la pantalla LCD. Nota: para la generación de la señal se ' utilizará el microcontrolador coprocesador ATMEL, generando una ' una señal PWM de 50% Ciclo útil a 4687,50 KHz. ' ----------------------------------------------------------------- Device = 16F876 XTAL 20 ' Declaraciones para el manejo y utilización de la LCD '----------------------------------------------------------------- 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 Declare LCD_RSPIN PORTB.1 ' Pin de RS LCD conec. al PORTB.1 Low PORTB.2 ' Pin de RW LCD conec. al PORTB.2 ' Variables requeridas por el coprocesador ATMEL ' ---------------------------------------------------------------- Dim RESP As Byte ' Var. uso general (Obligatoria) Dim FED As Byte ' Var. uso general (Obligatoria) ' 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

CAPTURE = 0 ' Se limpia la bandera de Captura While CAPTURE = 0 : Wend ' Espera para el prox. Captura Clear TIMER1 ' Se inicializa el Timer 1 CAPTURE = 0 ' Se inicializa bandera Captura OVERFLOW = 0 ' Se inicializa bandera overflow T1 GoTo Main End Coprocesador: ' Instrucciones requeridas para configurar el multiplexor 1-Wire ' del sistema iBOARD III. Integrado (U6). (Obligatorio) ........ OWrite PORTB.0,1,[$CC, $CC, $FF] ' Skip ROM, Seleccionar Aux (U6) ORead PORTB.0,0,[RESP, FED] ' Respuesta, feedback ' De Aquí en adelante ya se trabajará directamente con el ATMEL ' --------------------------------------------------------------- OWrite PORTB.0,0,[$F2] ' Conf.Freq. Salida PWM = 4687.5 KHz OWrite PORTB.0,0,[$26, 127] ' Configura Salida PWM = CP2, CU=50% Return

Figura 12.12. Fotografía de la corrida del programa CAP_12_Ejemplo_01.bas Módulo de Captura y comparación.

Page 96: Manual Iboard III

90

12.7. Comando en Alto nivel para HPWM por hardware El compilador Basic® PROTON® posee un comando denominado HPWM, el cual, fue creado para manejar en alto nivel módulos CCPx del PIC16F876 y generar señales utilizando algoritmo de la modulación del ancho del pulso PWM. Esto sin necesidad de que usted tenga que configurar los registros asociados en el microcontrolador. Esto no significa que no podamos generar una señal PWM a través de la configuración de los registros, de echo, se hará un ejercicio práctico para llevar a cabo la generación de una señal PWM a través de la configuración de los registros del modulo CCP1 y otro ejercicio utilizando el comando en alto nivel HPWM. La sintaxis del comando es:

HPWM Canal , Ciclo útil , Frecuencia • Canal – Un valor constante que especifica cual módulo CCPx se utilizará, las

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 ajustable e independiente para cada canal. Los pines del microcontrolador asociados a cada módulo CCPx son: Para el CCP1 -> PORTC<2> y para el CCP2 -> PORTC<1>.

• Ciclo útil – Una variable, constante (0-255), o expresión que especifica la relación entre los estados lógicos altos y bajos de la señal.

• 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 generar es de 32767 Hz. Y la menor frecuencia que se puede generar utilizando un oscilador como el que viene incluido en el sistema de desarrollo es de 1221 Hz.

La directiva declare se utiliza al comienzo del programa para indicar los pines asociados a los módulos CCPx. Por defecto para el módulo CCP1 es el pin PORTC<2> y para el CCP2 es el pin PORTC<1>.

DECLARE CCP1_PIN PORTC.2 DECLARE CCP2_PIN PORTC.1

12.8. Comando en Alto nivel para PWM por software El compilador Basic® PROTON® también puede generar señales PSEUDOS PWM, significa señales PWM generadas por algoritmos en software, ejecutadas por el CPU del microcontrolador y no ejecutadas en forma independiente por el hardware periférico módulo CCPx. La ventaja de la PWM por software, es que se puede ejecutar sobre cualquier pin del microcontrolador. La desventaja es que consume ciclos de reloj del CPU y por ello no es una tarea que se pueda realizar en al mismo tiempo de ejecución de otras instrucciones en el microcontrolador. La sintaxis para este tipo de comando es:

PWM Pin , Ciclo útil, Ciclos

• Pin – Un valor constante que especifica cual pin del microcontrolador se utilizará. PORT.pin

• Ciclo útil – Una variable, constante (0-255), o expresión que especifica la relación entre los estados lógicos altos y bajos de la señal.

• Ciclos – Una Variable ó constante (0-255) que especifica el número de ciclos de salida de la señal a generar. El valor de los ciclos es dependiente del oscilador utilizado, para un oscilador de 20 MHz la duración de cada ciclo será aprox. 1 ms.

El comando PWM, puede ser utilizado para generar voltajes analógicos en el rango de (0-5) Vdc a través de un pin del microcontrolador y un arreglo resistencia – condensador como el mostrado en la figura anexa. Debido a que el condensador se descargará gradualmente, el comando PWM deberá ser ejecutado en forma periódica a fin de refrescar el voltaje en 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.

Page 97: Manual Iboard III

91

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

12.10. Ejemplo de HPWM y comandos en alto nivel

' 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

Figura 12.12. Fotografía de la corrida del programa CAP_12_Ejemplo_02.bas y CAP_12_Ejemplo_03. Módulo de Captura, comparación y PWM.

Page 98: Manual Iboard III

84

11.5. El coprocesador utilizado como Conversor A/D El coprocesador dispone de dos pines (CP0 y CP1) que pueden ser configurados como entradas analógicas a fin de realizar la conversión A/D de 10 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 Volt. La configuración se realiza con el envío de un byte que contiene la información de los pines que se activarán como entradas para la conversión A/D. El formato del byte de control es el siguiente:

0 0 A1 A0 1 Ref 1 1

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

Si Ref = 0; El voltaje de ref. utilizado para la CAD será Vdd

Si Ref =1; El voltaje de ref. utilizado para la CAD será 1.1 Volt

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 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 ' De Aquí en adelante ya se trabajará directamente con el ATMEL ' ------------------------------------------------------------- Loop: OWrite OWP,0,[%00001011] 'Conf. CP0 conv. A/D con Ref. = Vdd Repeat ORead OWP,4,[Busy] Until Busy <> 1 ORead OWP,0,[ValorAD.HighByte, ValorAD.LowByte] Voltaje = ValorAD * (5/1023) ' Factor de conversión A/D HRSOut "Volt. LED(On) = ", DEC2 Voltaje," Vdc", 13 DelayMS 1000 GoTo Loop End

Figura 11.7. Resultado de la ejecución del programa CAP_11_Ejemplo_06.bas.

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, algunos comandos no fueron incluidos en este trabajo.

Page 99: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 92

REFERENCIAS BIBLIOGRÁFICAS

ATMEL™ Corporation. 8-bit Microcontroller with 1K Bytes In-System Programmable Flash ATtiny13. (Enero, 2007). 2535G–AVR–01/07. Hoja de especificaciones técnicas. Disponible a través de http://www.atmel.com/dyn/ resources/prod_documents/doc2535.pdf

Crowhill Associates Limited. Development suite Proton, Integrated development environmnet compiler user manual (2004). Cambridge England.

Chicala, C. Adquisición de datos, medir para conocer y controlar. Soluciones en Control SRL. México. (Agosto 1, 2004). ISBN 987-20960-1-5.

Dallas Semiconductor Corp. Division of Maxim Integrated Products, Inc., App Note 27: Understanding and Using Cyclic Redundancy Checks with Maxim iButton Products. (Junio 19, 2007). Hoja de especificaciones técnicas. Disponible a través de http://pdfserv.maxim-ic.com/en/an/AN27.pdf Dallas Semiconductor Corp. Division of Maxim Integrated Products, Inc. Application Note 155: 1-Wire® Software Resource Guide Device Description. (Octubre 11, 2005). Disponible a través de http://pdfserv.maxim-ic.com/en/an/AN155.pdf

Dallas Semiconductor Corp. Division of Maxim Integrated Products, Inc., App Note 187: 1-Wire® Search Algorithm. (Marzo 28, 2002). Disponible a través de http://pdfserv.maxim-ic.com/en/an/AN187.pdf

Dallas Semiconductor Corp. Division of Maxim Integrated Products, Inc., App Note 937: Book of iButton Standards. (Agosto 12, 1997). Disponible a través de http://pdfserv.maxim-ic.com/en/an/appibstd.pdf

Dallas Semiconductor Corp. Division of Maxim Integrated Products, Inc., DS1307 64 x 8 Serial Real-Time Clock, (Mayo 4, 2004). Hoja de especificaciones técnicas. Disponible a través de http://www.maxim-ic.com/getds.cfm?qv_pk=2688

Dallas Semiconductor Corp. Division of Maxim Integrated Products, Inc., DS18B20 Programmable Resolution 1-Wire® Digital Thermometer. (Enero 5, 2002). 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

Future Technology Devices International Ltd. FT232R USB UART IC. (2008). Document No.: FT_000053. Hoja de especificaciones técnicas. FTDI# 38. Disponible a través de http://www.ftdichip.com/Documents/DataSheets/DS _FT232R.pdf

Himpe, Vicent. Visual Basic 5.0, 6.0, VBA, .NET, 2005. Editorial Elector-Elektroniccs. 3ra. Edición Mayo 2007. ISBN: 978-0-905705-68-2.

Microchip Technologies, Inc. 24LC16B 16K I2C™ Serial EEPROM. (Enero 1, 2007) DS21703G. Hoja de especificaciones técnicas. Disponible a través de http://ww1.microchip.com/downloads/en/DeviceDoc/21703H.pdf

Milan Verle, “PIC Microcontrollers” mikroElektronika; 1st edition (2008). Material didáctico de consulta gratuita a través de Internet. ISBN 13- 978-86-84417-15-4 http://www.mikroe.com/en/books/picbook/picbook.htm Microchip Technologies, Inc. PIC16F876 28/40-pin 8-Bit CMOS FLASH Microcontrollers 1999. DS30292B. Hoja de especificaciones técnicas. Disponible a través de http://ww1.microchip.com/downloads/en/DeviceDoc/30292c.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 .asp?product_id=28300.

Parallax, Inc. MoBoStamp-pe BS2pe Motherboard (#28300). (Septiembre 13, 2006). Hoja de especificaciones técnicas. Disponible a través de http://www.parallax.com/Portals/0/Downloads/docs/prod/boards/28300-MoBo-0906.PDF

Rodríguez, J. Comunicación 1-Wire®. En Sistema de Desarrollo MDK-B28 (pág. 415-417). Enero, 2006. Valencia, Venezuela. Disponible a través de http://www.roso-control.com/WEB_ROSO/_Download/Cursos/MDK_B28_Manual_ Full.pdf

Smith, Jack R. (2005). Programming the PIC Microcontroller with MBasic. Editorial ELSEVIER, Burlington USA. (2005). ISBN: 0-7506-7946-8.

Page 100: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 93

ANEXO A

PANTALLA LCD DE CARACTERES

La Pantalla LCD es uno de los periféricos más empleados para la presentación de mensajes, variables y casi cualquier información proveniente de un microcontrolador. Gracias a su flexibilidad, buena visibilidad y precio reducido se ha 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.1. Conexiones de la pantalla LCD 2x16 al sistema de desarrollo iBOARD III.

La pantalla LCD deL iBOARD III, incluye un microcontrolador interno como el HITACHI 44780 ó compatible y puede entre otras cosas:

· Presentar caracteres ASCII y griegos · Recibir y mostrar caracteres personalizados · Desplazamiento de caracteres (Scroll) tanto a la derecha como a la izquierda · Cambiar el aspecto y el movimiento del cursor · Direccionar de manera simple la posición de visualización de los caracteres

Los terminales de conexión de las pantallas LCD de caracteres han sido estandarizados y generalmente son compatibles pin a pin con la distribución de pines mostrada en la Figura A.2.

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. CONJUNTO (SET) DE CARACTERES

Aún cuando los comandos mostrados en la tabla de la figura A.3. son suficientes 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á utilizar las especificaciones que suministra fabricante. La totalidad de las pantallas LCD compatibles con la Hitachi 44780, incluyen un conjunto de caracteres precargados en la memoria RAM. Este conjunto de caracteres lo podemos observar a través de la figura A.4.

Page 101: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 94

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. Todo carácter visualizado en la pantalla LCD está conformado por una matriz de 5x8 pixel, con la fila inferior reservada para la visualización del cursor.

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.4. Conjunto (set) de caracteres para una pantalla LCD con controlador HITACHI 44780 ó compatible.

Page 102: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 95

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.5. Programa LCD Carácter Creador de Parallax, inc. Fuente: www.parallax.com

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 en el sistema de desarrollo iBOARD III.

Page 103: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 96

COMANDO EN ALTO NIVEL PARA EL MANEJO DE UNA LCD

El compilador Basic® PROTON® dispone de un comando para el manejo de las pantallas LCD.

PRINT Item , Item...

Item - Es una constante, variable, expresión, modificador de formato y/o un(a) string. También el comando PRINT acepta modificadores de formato como los mostrados en la siguiente tabla.

AT ypos,xpos CLS

BIN1..32 DEC1..10 HEX1..8

SBIN1..32 SDEC1..10 SHEX1..8

IBIN1..32 IDEC1..10 IHEX1..8

ISBIN1..32 ISDEC1..10

ISHEX1..8 REP c\n

STR array\n CSTR cdata

Posiciona el cursor de una pantalla al valor x,y de la LCD Limpia la Pantalla LCD y crea un retardo de 30ms Envía dígitos en formato binario Envía dígitos en formato decimal Envía dígitos en formato hexadecimal Envía dígitos en formato binario con signo Envía dígitos en formato decimal con signo Envía dígitos en formato hexadecimal con signo Envía dígitos en formato binario precedidos de '%' Envía dígitos en formato decimal precedidos de '#' Envía dígitos en formato hexadecimal precedidos de '$' Envía dígitos en formato binario con signo precedidos de '%' Envía dígitos en formato decimal con signo precedidos de '#’ Envía dígitos en formato hexadecimal con signo prec. de '$' Envía el carácter “c” repetido “n” veces Envía todo ó parte de un arreglo Envía datos tipo “string” definidos por el comando CData

A fin de utilizar la pantalla LCD de caracteres con el sistema de desarrollo iBOARD III, primero hay que configurarla a través de las directivas del compilador. Estas directivas son las denominadas “Declares”. Existen seis declaraciones diferentes para la configuración de una LCD. DECLARE LCD_TYPE 1 or 0 , GRAPHIC or ALPHA Informa al compilador el tipo de pantalla LCD a utilizar. (1) selecciona una pantalla LCD del tipo gráfica. (0) selecciona una pantalla LCD del tipo carácter. Por defecto se escoge el uso de una pantalla de caracteres. DECLARE LCD_DTPIN PORT . PIN Asigna el Puerto y el pin de conexión que se utilizarán para la conexión de la línea data de la pantalla LCD. Por defecto se utiliza el pin PORTB<4>.

DECLARE LCD_ENPIN PORT . PIN Asigna el Puerto y el pin de conexión que se utilizarán para la conexión de la línea de habilitación (EN) de la pantalla LCD. Por defecto se utiliza el pin PORTB<2>. DECLARE LCD_RSPIN PORT . PIN Asigna el Puerto y el pin de conexión que se utilizarán para la conexión de la línea de selección (RS) de la pantalla LCD. Por defecto se utiliza el pin PORTB<3>. 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. DECLARE LCD_LINES 1 , 2 , or 4 Informa al compilador el número de líneas de la pantalla LCD. Por defecto se utiliza el valor de dos (2) líneas. Ejemplos de utilización pantalla LCD. Ya en el capítulo 4, se había cargado y ejecutado el programa CAP_04_Ejemplo_01.bas, el cual, hace uso de la pantalla LCD para mostrar un mensaje inicial y luego el valor incremental de una variable. La codificación del programa es mostrada a continuación: ' CAP_04_Ejemplo_01.bas ' 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. XTAL = 20 ' Define la velocidad del resonador ' Pines de conexión a la pantalla LCD 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 Declare LCD_RSPIN PORTB.1 ' Pin de RS LCD conec. al PORTB.1 TRISB.2 = 0 ' Declara a PORTB.2 como Salida Dig. PORTB.2 = 0 ' Coloca en PORTB.2 un cero (0) Lógico Dim Contador As Byte ' Declaración de var. de uso general Dim ValorF As Float ' Declaracion de var. de uso general 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.

Page 104: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 97

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

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: 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 Declare LCD_RSPIN PORTB.1 ' Pin de RS LCD conec. al PORTB.1 TRISB.2 = 0 ' Declara a PORTB.2 como Salida Dig. PORTB.2 = 0 ' Coloca en PORTB.2 un cero (0) Lógico

Las primeras tres instrucciones se utilizan para indicarle al compilador cual pin del microcontrolador será utilizado para manejar las líneas de datos, habilitación y selección de la pantalla LCD. La cuarta línea TRISB.2 = 0, configura al pin 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 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 para la escritura de la LCD y no la lectura, no incluye la definición de este pin 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 para visualizar la información enviada desde el microcontrolador. Esto es justamente lo que hace la instrucción cinco: PORTB.2 = 0. Coloca al pin RW de la LCD a cero. Las instrucción: Print $FE, 1 ' Comando para limpiar pantalla LCD

Se utiliza para limpiar la pantalla LCD. Esto es: Borrar todo el contenido mostrado en la pantalla LCD, colocar el cursor en la primera línea – columna y generar un retardo de 30ms. Otras instrucciones se utilizan para visualizar 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í: 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 Mostrará el contenido dentro de las comillas en la posición (línea1, columna1) y el texto “BOARD III” en la (línea 2, columna 4). Por último, la instrucción: Print At 2,3, "Valor = ", DEC1 ValorF 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. Ejemplo_02. Creando un carácter especial ' Anexo_A_Ejemplo_02.bas ' Creación y visualización de un caracter especial 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 Print Cls ' Limpia la pantalla LCD ' Muestra texto en línea1 Print At 1,1, "CaracterEspecial" ' CaracterEspecial Print At 2,7, 0 ' muestra caracter especial DelayMS 1000 ' segunda línea GoTo Main End

Page 105: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 98

Figura A.8. Fotografía de la ejecución del programa Anexo_A_Ejemplo_02.bas 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 'CARGANDO EL 3RO. CARACTER PERSONALIZADO EN LA CGRAM

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 End

Figura A.9. Fotografía de la ejecución del programa Anexo_A_Ejemplo_03.bas Creación de ocho caracteres especiales en CGRAM de la LCD.

Page 106: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 99

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 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

Figura A.10. Fotografía de la ejecución del programa Anexo_A_Ejemplo_04.bas Efectos especiales con una pantalla LCD.

Page 107: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 100

Ejemplo 5. Gráfica de Barras con LCD ' Programa: Anexo_A_Ejemplo_05.bas ' Ejemplo para generar un código de barras horizontal en la LCD ' |||||||||||||||||||||| ' Valor = xx ' ------------------------------------------------------------------ Device = 16F876 ALL_DIGITAL = True ' Config. todos los puertos como dig. XTAL = 20 ' Define la velocidad del resonador ' Pines de conexión a la pantalla LCD 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 Declare LCD_RSPIN PORTB.1 ' Pin de RS LCD conec. al PORTB.1 Low PORTB.2 ' Pin de RW LCD conec. al PORTB.2 ' Declaración de variables y constantes ' ----------------------------------------------------------------- Dim BAR_VAL As Byte ' Valor a graficar Dim BARS As Byte ' Numero de barras ||| a graficar 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 GoSub Bargraph DelayMS 100 Next

For BAR_VAL = 48 To 0 Step -1 GoSub Bargraph DelayMS 100 Next GoTo Main 'SubRutinas '------------------------------------------------------------------ Bargraph: WARNINGS = OFF BYTE_MATH = On BARS = (BAR_VAL Min MAXBAR) / 3 BALANCE = (BAR_VAL Min MAXBAR) //3 BALF = BALANCE Min 1 Print At 1,1,Rep FULLBAR\BARS,Rep (BALANCE + BASEBAR)\BALF,_ Rep " " \B_WDTH - (BARS + BALF) Print At 2,1,"Valor = ", Dec BAR_VAL," " BYTE_MATH = OFF WARNINGS = On Return

Figura A.11. Fotografía de la ejecución del programa Anexo_A_Ejemplo_05.bas Gráfica de barras con una pantalla LCD.

Page 108: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 101

ANEXO B

B.1. PROGRAMA iLOADER

El programa iLOADER es una aplicación desarrollada para trabajar con los productos: iFT232, iBOARD III y PT-40, el cual, permite efectuar la programación de los microcontroladores PIC® en forma “boot-loader” ICSP, visualizar datos en forma de texto o gráfica e incluso intercambiar datos con el microcontrolador utilizando el estándar OPC® ampliamente aceptado en el campo de la automatización industrial.

iLOADER® se fundamenta en un concepto novedoso, en el cual, se combinan

las aplicaciones típicas del microcontrolador junto con la instrumentación virtual y la automatización/control de procesos en un sólo entorno unificado. Esta única mezcla 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.

Nivel I: iLOADER® + iFT232.

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 . Un (01) Osciloscopio virtual de ocho (08) canales . Un (01) Uart ( Hyper – Terminal ) recepción – transmisión . Un (01) Servidor de datos OPC

Nivel II: iLOADER + PT-40.

Con el nivel intermedio usted dispondrá de una plataforma compacta de

desarrollo que incluye, en la base de colocación de cuarenta pines DIP 40 del microcontrolador PIC®, un convertidor USB a Serial RS232 TTL, un circuito de RESET, un oscilador de 20 MHz y una pantalla LCD de 2 líneas x 16 columnas; todo listo para su correcto funcionamiento sin necesidad de utilizar componentes 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 integrado con encapsulado de 40 pines. Esta combinación le permitirá trabajar con la mayoría de los microcontroladores PIC® de 40 pines de la serie 16F y 18F, tales como:

PIC16F874 PIC16F874A PIC16F877 PIC16F877A PIC18F442 PIC18F448 PIC18F452 PIC18F458 PIC18F4220 PIC18F4320 PIC18F4331 PIC18F4420 PIC18F4431 PIC18F4439 PIC18F4455 PIC18F4480 PIC18F4520 PIC18F4525 PIC18F4539 PIC18F4550 PIC18F4580 PIC18F4585 PIC18F4620 PIC18F4680

Figura B.2. Fotografía del software iLOADER + PT-40. Nota: Mayor información sobre el producto PT-40, está disponible a través de la página web: http://www.roso-control.com

Page 109: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 102

Nivel III: iLOADER + iBOARD III.

Figura B.3. Fotografía del software iLOADER + iBOARD III. Obtenga el máximo beneficio y la mayor potencia de desarrollo al combinar el

iLOADER con el sistema de desarrollo para microcontroladores PIC® iBOARD III. Esta plataforma le permitirá trabajar con los microcontroladores PIC® de 28 pines DIP 40 tales como:

PIC16F870 PIC16F871 PIC16F873 PIC16F873A PIC16F876 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®

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, manual de operación y otros documentos de interés serán copiados en este directorio.

5. Durante la instalación, se observará la secuencia de pantallas como las indicadas en las figuras B.4.(1,2,3,4).

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 de usuario en cada producto en particular.

Figura B.4.1. Asistente para la instalación del iLOADER.

Page 110: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 103

Figura B.4.2. Selección de la carpeta de instalación del iLOADER.

Figura B.4.3. Visualización de la instalación del iLOADER.

Figura B.4.4. Secuencia de pantallas mostradas durante la 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

Page 111: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 104

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 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.

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 identificado como PLL_18F4550_04_48.hex indica que el microcontrolador 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 Mhz. B.5. PASOS A SEGUIR PARA CONVERTIR UN MICROCONTROLADOR PIC® NUEVO (Virgen) EN UN MICROCONTROLADOR TIPO BOOT-LOADER

(1) Adquirir el modelo del microcontrolador deseado en base a los modelos soportados por el software iLOADER.

(2) Convertir el microcontrolador comprado en un microcontrolador tipo boot-loader. Para ello, es necesario utilizar un programador para PIC® del tipo serial (iP3, iP3B) ó del tipo USB (iPROG18 ó PICKit2). Grabar la memoria flash del microcontrolador PIC® con el archivo (*.hex) de su preferencia, el mismo se encuentra en el directorio donde instaló el programa.

En la figura B.5., se muestra el esquema de bloques utilizado para la programación del microcontrolador PIC® con el firmware boot-loader. Se observa que el firmware se puede grabar a través de un programador del tipo serial y/o un programador del tipo USB.

Programador Serial Programador USB Firmware Boot-loader

Figura B.5. Programación del PIC con el archivo *.hex. B.6. PROGRAMA iLOADER.

iLOADER® se compone de las siguientes partes: 1. Una herramienta de programación o carga de código en

microcontroladores tipo boot-loader. 2. Una herramienta de visualización de datos gráficos y terminal de

comunicaciones ASCII. 3. Una aplicación servidor de datos basada en el estándar OPC®.

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®, la visualización de datos en tiempo real, instrumentación virtual hasta incursionar en áreas como el control de procesos por computadora y la automatización industrial.

Page 112: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 105

B.7. DESCRIPCIÓN GENERAL DEL iLOADER.

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

Figura B.6. Vista general del programa iLOADER.

En esta pantalla podemos distinguir los siguientes elementos:

• Barra de Identificación del programa (1) • Menú de la aplicación (2) • Cuadro de información del hardware (3) • Funciones para la programación de microcontroladores PIC® (4) • Contenido de la memoria de Programa (5) • Contenido de la memoria de datos (6) • Íconos de información y estado (7) • Cuadro de mensajes (8)

A continuación se describen cada uno de ellos:

Barra de identificación del programa (1)

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 • Leer: Realiza la lectura de las memorias del microcontrolador. • Verificar: Compara el contenido de la memoria de programa y de datos EEPROM existente en el microcontrolador con el contenido cargado en el programa iLOADER en caso de haber discordancias envía un mensaje de error.

• Borrar. Borra el programa grabado en el microcontrolador PIC®. Opciones. Controla las opciones de programación del microcontrolador. • Programar Flash: Habilita/Deshabilita la escritura en la memoria flash. • Programar EEPROM: Habilita/Deshabilita la escritura en la memoria EEPROM.

Page 113: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 106

• Verificar al programar: Controla la verificación automática al terminar de programar. • Ejecutar programa al terminar: Esta opción al estar habilitada, permite que una vez concluida la programación; el pin de re-inicialización o /MCLR del microcontrolador PIC® sea liberado para permitir la ejecución del programa. Si está deshabilitado el PIC® se quedará en estado de RESET. 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.

Servidor OPC. Esta poderosa herramienta al ser desplegada, permite transformar al microcontrolador en una fuente de datos en tiempo real utilizando uno de los 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.

Cuadro de Información del Hardware (3)

En este cuadro podemos encontrar la siguiente información: • Hardware. Indica el producto detectado

(iBOARD III, iFT232 ó PT-40). • 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®.

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 lectura del microcontrolador. Es un cuadro de sólo lectura que no puede ser editado por el usuario.

Page 114: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 107

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.

B.8. HERRAMIENTA DE VISUALIZACIÓN DE DATOS UART/SCOPE

La herramienta UART/SCOPE implementa un completo interfaz de visualización tipo texto (como un Hyper terminal) trabajando en forma de UART y tipo gráfico (como un osciloscopio) con capacidad de envío y recepción de datos a velocidades en el rango de 2400 a 57600 Baud. Tiene dos formas de operación: la primera destinada a manejar datos tipo texto (UART), en la cual, disponemos de un terminal de comunicaciones bi-direccional para enviar y recibir mensajes en forma de cadenas de texto codificados en ASCII.

Cuando trabajamos con el modo gráfico (SCOPE) disponemos de un

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®..

La figura B.7. Muestra la pantalla de la herramienta UART/SCOPE.

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) • Cuadro de recepción de mensajes desde el microcontrolador (2) • Selector del modo de trabajo (3) • Configuración de la conexión (4) • Opciones de la UART (5) • Opciones del SCOPE (6) • Escala de tiempo del SCOPE (7) • Cuadro de edición de texto enviado al microcontrolador (8) 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 UART/SCOPE”, junto con los controles para minimizar, maximizar y cerrar la aplicación.

Page 115: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 108

Cuadro de recepción de mensajes desde el microcontrolador (2)

Es este cuadro se observan los datos enviados por el microcontrolador. Se 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 tabla anexa figura B.8.

Figura B.8. Comandos de control soportados por la Herramienta UART/SCOPE del iLOADER.

Selector del modo de trabajo (3)

Es un selector con forma de interruptor deslizante con dos posiciones: UART/SCOPE.

Configuración de la conexión (4)

Este grupo de controles está conformado por cuatro (04) elementos:

• Caja de selección de la velocidad de conexión: Establece la velocidad de la comunicación en baudios (bits/seg) entre el microcontrolador PIC® y el computador. Los datos se transmiten utilizando el formato 8N1, con un bit de inicio, 8 bits de datos y un bit de parada sin verificación de paridad. Se pueden seleccionar velocidades de comunicación estándar entre 2400 y 57600 baudios. La opción “Otro Valor”, permite definir una velocidad personalizada comprendida entre estos mismos valores. Advertencia: El uso de velocidades no estándar al momento de comunicarse con el microcontrolador PIC® debe hacerse cuidadosamente, ya que, algunos compiladores para PIC® sólo soportan velocidades normalizadas.

• 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.

• Botón “Desconectar”: Se utiliza para cerrar el puerto de comunicaciones del computador.

• Botón “Salir”: Cierra la herramienta UART/SCOPE. Opciones de la UART (5)

Este grupo de controles solo está activo en el modo UART y permite efectuar las siguientes acciones:

• Eco Activado: Al estar activo, permite que los mensajes enviados al microcontrolador PIC®, se visualicen en pantalla del UART.

• Incluir CR+LF: Añade un carácter de fin de línea a los datos enviados al microcontrolador.

• Limpiar: Borra el contenido del cuadro de recepción de mensajes y realiza un reset al microcontrolador.

Opciones del SCOPE (6)

Este conjunto de opciones estará disponible sólo cuando esté activada la opción SCOPE.

• 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 valores que toman los tres (03) primeros canales disponibles de la pantalla SCOPE, los cuales se denominan: C0, C1 y C2.

• Grillas On, permite la visualización o no de las grillas horizontales y verticales de la gráfica SCOPE.

• La opción “Color Negro”, hace que el fondo de la pantalla cambie de color negro a color blanco, a fin de, disminuir el costo de impresión de la gráfica mostrada.

• Tracking: Establece el modo de visualización de los datos, pudiendo en ser forma deslizante o comprimido. En el modo deslizante, la gráfica SCOPE sólo mostrará los datos recibidos durante una ventana temporal. En modo comprimido, el eje del tiempo de la gráfica se comprime cada vez que llega un nuevo dato. En la figura B.9. se observa la diferencia entre ambos modos de trabajo al recibir los mismos datos.

Escala de tiempo del SCOPE (7)

Define la escala horizontal de tiempo de la gráfica cuando se trabaja en modo deslizante. Mediante este selector el usuario puede cambiar la escala de tiempo horizontal de la gráfica desde un valor de 10 segundos a 10 minutos. Los valores posibles: 10 segundos, 30 segundos, 1 minuto y 10 minutos.

Comando ASCII Significado 0 Clear. Borra la pantalla de textos.

7 Bell. Emite un sonido por la campana del computador.

8 Backspace. Borra un carácter.

9 TAB. Agrega un tabulador para dar formato al texto.

13 Carriage Return. Avance el texto a la siguiente línea.

Page 116: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 109

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®.

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.10. Interconexión de elementos heterogéneos en un ambiente de trabajo.

Page 117: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 110

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) Contiene la información referente a:

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

• 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 ocurrido un error.

• No. Clientes OPC conectados: Refleja la cantidad clientes que están recibiendo datos desde el servidor OPC iLOADER. Una vez que se está ejecutando no puede cerrarse el servidor hasta que todos los clientes están desconectados.

• No. Variables de entrada: Indica la cantidad de variables que son enviadas desde el PIC® al PC. Estas variables sólo deben ser leídas por los clientes OPC conectados.

• No. Variables de salida: Indica la cantidad de variables que son enviadas desde el PC al microcontrolador PIC®.

Figura B.11. Herramienta Servidor de Datos OPC incluida con el iLOADER. Configuración de la conexión al PIC® (3)

Este grupo de controles está conformado por cuatro (04) elementos:

• Caja de selección de la velocidad de conexión: Establece la velocidad de la comunicación en baudios (bits/seg) entre el microcontrolador PIC® y el computador. Los datos se transmiten utilizando el formato 8N1, con un bit de inicio, 8 bits de datos y un bit de parada sin verificación de paridad. Se pueden seleccionar velocidades de comunicación estándar entre 2400 y 57600 baudios. La opción “Otro Valor”, permite definir una velocidad personalizada comprendida entre estos mismos valores. Advertencia: El uso de 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.

Page 118: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 111

• Botón “Iniciar Servidor”: Al presionar este botón se crea el servidor de datos OPC, el cual, estará disponible de inmediato a los clientes OPC. Para su correcta activación; debe seleccionarse primero: la velocidad de conexión en Baudios, la cantidad de variables de entrada o salida requeridas y el tipo canónico de las mismas.

• 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 servidor, es posible cambiar la configuración de sus variables de entrada o salida.

• Botón “Salir”: Cierra la herramienta Servidor de Datos OPC. Configuración de las variables de entrada (4)

Las variables de entrada del servidor OPC, se definen como aquellas que van en sentido Microcontrolador PIC® -> al PC. Mediante los botones “Añadir” y “Eliminar” 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 error.

Las variables de entrada se identifican mediante “Ex”, donde x es un número 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”.

Haciendo clic sobre la celda “Tipo de Dato” se puede escoger la forma canónica de las variables, por ejemplo: Boolean, Entero, Double y String. La celda “Valor” puede ser editada de forma manual. Al recibir el valor de la variable enviada por el microcontrolador PIC®, éste se actualizará en forma inmediata en la celda denominada “Valor”.

Para enviar un dato desde el microcontrolador PIC® al servidor OPC, de utiliza

el siguiente formato: Nombre Variable , Valor , 13

Por ejemplo, para actualizar el valor de la variable entera “E0”, el PIC® debe enviar al PC :

“E0”, DEC Valor_Variable, 13

Es imprescindible el uso del carácter de terminación 13 (CR) para poder establecer la comunicación con el PC.

Configuración de las variables de salida (5)

Las variables de salida del servidor OPC, se definen como aquellas que van en sentido del PC -> al microcontrolador PIC®. Normalmente estas variables son 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 intercambiar información con el microcontrolador PIC®. Mediante los botones “Añadir” y “Eliminar” podemos modificar la cantidad de variables de salida desde 0 hasta 19.

Las variables de salida se identifican mediante “Sx”, donde x es un número del 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.

3. El servidor OPC actualiza internamente el valor de la variable.

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 PIC® debe enviar al iLOADER: “S0”, 13

5. El servidor procesa la solicitud de lectura y envía al PIC® el último valor disponible de la variable utilizando el siguiente formato:

Nombre Variable , Valor , 13

6. El Microcontrolador PIC® recibirá la información (variable) enviada por el PC.

Page 119: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 112

Por ejemplo, para leer el valor de la variable entera “S0”, la secuencia de operaciones es la siguiente:

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.12. Mensaje de error del programa iLOADER al no detectar ningún hardware compatible.

Al encontrar un hardware válido (PT-40, iBOARD III ó iFT232), aparecerá la pantalla principal mostrada en la figura B.13.

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 archivo que contiene su programa. En este ejemplo, utilizaremos uno de los archivos ejemplos incluidos en CD de instalación del iLOADER.

Page 120: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 113

Al cargar de forma exitosa el archivo, se mostrará en los cuadros Memoria de Programa y Datos en EEPROM el contenido del archivo .hex, . El ícono de la parte 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.14. Selección del archivo .hex.

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

En caso de ocurrir algún error, se indicará en forma de texto y mediante el ícono gráfico como se muestra en la figura B.16.

Figura B.16. Ejemplo de error en la carga de 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”.

Page 121: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 114

Paso No.5. Escribir en el Microcontrolador

Presione el botón “Escribir” para iniciar el proceso de grabación. Una barra de progreso le indicará el desarrollo de la operación y al finalizar de forma satisfactoria el ícono de grabación exitosa aparecerá en parte inferior de la pantalla.

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. B.11. MANEJO DE LA UART/SCOPE

La comunicación con la herramienta UART/SCOPE se hace mediante el formato 8N1 a una velocidad ajustable entre 2400 y 57600 bps. En esta sección 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.

Paso No.1. Cargar el Programa

Cargue el programa UART_01.hex al microcontrolador siguiendo las indicaciones dadas en la sección anterior. Todos los programas utilizados en esta parte se 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.

Figura B.16. Pantalla de la aplicación UART/SCOPE Paso No.3. Conexión con el PIC®

Seleccione la velocidad de conexión en 19200 baudios y oprima conectar. La figura B.17 muestra la ejecución del ejemplo UART_01.hex Veamos en detalle el código fuente en lenguaje PROTON® del programa UART_01.bas La instrucción DECLARE HSERIAL_BAUD 19200 define la velocidad de la comunicación en el PIC® en 19200 Baudios.

Page 122: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 115

La instrucción HRSOUT se utiliza para transmitir información serial por medio de la USART del PIC® mientras que HRSIN recibe los datos provenientes del computador.

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

' ------------------------------------------------------------------- ' Programa: UART_01 ' Utilización de la herramienta UART del iLOADER, se practicarán los ' comandos: ' 0 ... Clear Screen (Limpiar pantalla) ' 7 ... Beep (Emite un Beep, Campana) ' 9 ... Tabulador (Cursor Tabulación) ' 13 ... Carry Return (Control de Carro) ' ' Los caracteres ASCII permitidos son desde el ASCII (32 - 127). ' ------------------------------------------------------------------- Device = 16F876 ' Microcontrolador Utilizado XTAL 20 ' Velocidad del Reloj (resonador) Dim i As Byte ' Variable auxiliar Dim ii As Byte ' Variable auxiliar Dim iii As Byte ' Variable auxiliar Declare HSERIAL_BAUD 19200 ' Velocidad de conexión Micro <-> PC DelayMS 1000 ' Retardo inicial requerido por el

Main: ' El comando 0 hará una limpieza de pantalla y colocará el cursor ' en la primera posición de la pantalla arriba y a la izquierda. 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 Repeat HRSOut "Marque un numero entre cero (0) y nueve (9) = " HRSin Dec i Until i >= 0 And i <= 9 HRSOut "Usted ha marcado el numero ", Dec i,13 Loop: HRSOut "Desea ir al inicio del programa (s/n)? ",13 HRSin i If i = "s" Or i = "S" Then GoTo Main EndIf If i = "n" Or i = "N" Then HRSOut "Fin del programa, hasta luego ...",13 HRSOut 7, 7, 7 End EndIf GoTo Loop End

Page 123: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 116

El programa UART_01.bas muestra cómo utilizar todos los comandos de control admitidos por la herramienta UART/SCOPE. También podemos observar la forma en que es recibida la información enviada desde el PC.

Durante la ejecución, se le solicita al usuario que introduzca valores por medio del teclado. Para ello escriba el valor en la casilla “Enviar String” y presione “Enviar”. Al hacer esto, los valores escritos por usted ya sean del tipo texto (String) o numéricos serán enviados al microcontrolador PIC®.

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) Dim i As Byte ' Variable auxiliar

Declare HSERIAL_BAUD 19200 ' Velocidad de conexión al PC DelayMS 1000 ' Retardo inicial requerido por el ' UART, es obligatorio su uso. Main: ' ' El comando 0 hará una limpieza de pantalla y colocará el cursor ' en la primera posición de la pantalla arriba y a la izquierda. ' Comando 0 (Clear) 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

Figura B.18. Ejecución del programa UART_02.hex

Page 124: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 117

B.12. OPERACIÓN EN MODO SCOPE

Las recomendaciones generales para el manejo del SCOPE son las siguientes: 1. El programa debe incluir un retardo al principio del mismo de 1000 ms,

necesario para sincronizar correctamente los datos.

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 el símbolo decimal en punto “.” mientras el símbolo de separación de miles debe ser una coma “,”.

3. La herramienta permite trabajar con 8 canales, los cuales, se identifican como “C0”, “C1”, “C2”, “C3”, “C4”, “C5”, “C6” y “C7”.

4. El formato usado para enviar datos a un canal del SCOPE, es el siguiente:

“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

Paso No.2. Iniciar Herramienta UART/SCOPE

Haga clic en el menú UART/SCOPE. Se desplegará una pantalla como la mostrada de la figura B.19. Coloque el selector de modo de trabajo en la posición “SCOPE” (a la derecha).

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

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

En la parte inferior de la pantalla, podemos observar tres indicadores numéricos, los cuales, reflejan el último valor graficado en los canales C0, C1 y C2, respectivamente.

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

Page 125: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 118

En el ejemplo del programa SCOPE_04.bas, ver figura B.20, podemos observar como el SCOPE puede graficar datos con diferentes formas canónicas. Los datos correspondientes al canal de color rojo son del tipo punto flotante, mientras que los 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 continuación: ' ------------------------------------------------------------------- ' Programa: SCOPE_04 ' Visualización de datos en punto flotante a través de los canales ' "C0", "C1". ' ------------------------------------------------------------------- Device = 16F876 ' Micro Utilizado XTAL 20 ' Velocidad del Reloj Dim i As Float ' Variable auxiliar Dim j As Float Declare HSERIAL_BAUD 19200 ' Velocidad de conexión al PC i = 0 j = 0 DelayMS 1000 Main: HRSOut "C0", DEC2 i, 13 HRSOut "C1", DEC2 j, 13 If i >= 10 Then i = 0 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.

El ejemplo siguiente, suministrado en el CD del iLOADER como programa SCOPE_05, muestra como graficar datos tipo entero en los 8 canales del SCOPE en forma simultánea. El resultado del programa podemos verlo en la figura B.21. ' -------------------------------------------------------------- ' Programa: SCOPE_05 ' Visualización de datos en los 8 canales en forma simultánea ' "C0", "C1", "C2", "C3", "C4", "C5", "C6", "C7". ' -------------------------------------------------------------- Device = 16F876 ' Micro Utilizado XTAL 20 ' Velocidad del Reloj Dim i As Byte ' Variable auxiliar Dim Valor As Byte Declare HSERIAL_BAUD 19200 ' Velocidad de conexión al PC Main: For i = 0 To 99 HRSOut "C0", Dec i, 13 HRSOut "C1", Dec i+100, 13 HRSOut "C2", Dec i+200, 13 HRSOut "C3", Dec i+300, 13 HRSOut "C4", Dec i+400, 13 HRSOut "C5", Dec i+500, 13 HRSOut "C6", Dec i+600, 13 HRSOut "C7", Dec i+700, 13 Next GoTo Main

Figura B.21. Programa SCOPE_05.bas graficando en los 8 canales en forma simultánea.

Page 126: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 119

B.13. MANEJO DEL SERVIDOR OPC

En esta sección, describiremos el manejo y uso del servidor de datos OPC incluido en el iLOADER. Con el servidor de datos OPC usted podrá exportar – importar variables desde su microcontrolador a cualquier programa con capacidad de manejo de datos a través del protocolo OPC®, ya sea en la computadora local o en 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. Paso No.1. Cargar el Programa e inicializar el servidor

Siguiendo las instrucciones previas programe el código OPC_01.bas en el PIC®. Seguidamente presione en el menú principal del programa iLOADER la opción “Servidor OPC”. Se mostrará la pantalla de configuración/trabajo del Servidor OPC tal como se muestra en la figura B.22.

Figura B.22. Vista del Servidor OPC® al iniciarse.

Nota: La velocidad de conexión estará establecida por la velocidad de comunicación serial utilizada por usted en el programa realizado, en los ejemplos aquí incluidos se utiliza una velocidad de 19200 Baudios. A continuación se presenta el código fuente del programa OPC_01.bas codificado en Basic PROTON®.

' ------------------------------------------------------------------- ' Programa: OPC_01 ' Envío de datos a las variables "E0", E1" y "E2" del Servidor OPC ' ------------------------------------------------------------------- Device = 16F876 ' Micro Utilizado XTAL 20 ' Velocidad del Reloj Dim i As Byte ' Variables auxiliar Dim a As Byte Declare HSERIAL_BAUD 19200 ' Velocidad de conexión al PC 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 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.

Page 127: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 120

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

Figura B.24. Servidor OPC ejecutando el programa OPC_01.bas

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.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 HSERIAL_CLEAR = On ' Limpia el Buffer antes de recibir

Page 128: Manual Iboard III

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 121

Main: For i = 0 To 255 HRSOut "E0", Dec i, 13 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 Explicación del programa anterior Por medio de un ciclo for, el PIC® envía un valor de 0 a 255 a la variable de entrada E0 del servidor, esto lo hace mediante la instrucción:

HRSOut "E0", Dec i, 13 El PIC® solicita al servidor OPC el valor de la variable de salida S0 y espera la 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]

HRSOut "E2", Dec J, 13

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, debemos configurar e iniciar el servidor como se muestra en la figura B.26.

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 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 en la variables de entrada E1 y E2 mostrando el flujo de la información en forma bi-direccional. 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 proceso de control industrial.

Figura B.27. Estado de la aplicación OPC®. Estado del Servidor OPC®.