You are on page 1of 128

iBOARD III

Sistema de Desarrollo para Microcontroladores PIC con interfaz USB

Marzo 15, 2009 ROSO Electric Supply Telfono (0241) 8426384 Cel (0414) 4266490 www.roso-control.com soporte@roso-control.com

iBOARD III

Sistema de Desarrollo para Microcontroladores PIC con interfaz USB

Autores:

Jos M. Rodrguez S. ngel L. Villegas

Editor:

ngel L. Villegas

iBOARD III
Sistema de Desarrollo para Microcontroladores PIC con interfaz USB
El Editor Hecho el depsito de Ley
Depsito Legal ISBN 1ra. Edicin Marzo 2009 Tiraje: 50 Ejemplares (electrnico). Este libro est destinado a su publicacin gratuita en Internet y puede ser descargado en la direccin electrnica: http://www.roso-control.com
Para solicitar ejemplares (slo en formato electrnico) comunquese con:

Jos M. Rodrguez S. ROSO Electric Supply, C.A. Calle 127 C/C Av. 90-A Edificio Cotoper 10-6 La Trigalea, Cdigo Postal 2001, Valencia Venezuela. Telfonos: +58 241 414 4266490 Email: jmrs@roso-control.com Prohibida la reproduccin total o parcial de esta obra, por cualquier medio o mtodo sin la autorizacin escrita de los editores. El uso del contenido de los cdigos de programacin presentados en la obra slo est permitido para fines educativos y no comerciales. El autor no es responsable de ningn dao ocasionado a personas o cosas que resulten de una mala aplicacin de los programas contenidos en la obra. La responsabilidad de tal utilizacin quedar entendida y aceptada por el lector o usuario de stos cdigos. Impreso en Venezuela

INDICE
PAG. 1.0. 1.1. 1.2. 1.3. 1.4. 1.5. 1.6. 1.7. 1.8. 1.9. 2.0. 2.1. CAPITULO 01 Descripcin del sistema Requerimientos mnimos del computador Contenido del CD-ROM Caractersticas del sistema de desarrollo iBOARD III Caractersticas del microcontrolador PIC16F876 Capacidades del Hardware Capacidades del Software. El Compilador Basic PROTON Caractersticas del Coprocesador ATMEL Descripcin modular del sistema iBOARD III Diagrama electrnico del sistema iBOARD III CAPITULO 02 Instalacin de Drivers Optimizando la velocidad de transferencia de informacin entre la iBOARD III y el computador ( PC ). CAPITULO 03 Descripcin del sistema Interfaz de programacin y alimentacin USB El Microcontrolador La regleta de conexiones Perifricos de entrada y salida El Coprocesador ATMEL CAPITULO 04 Primeros Pasos Paso No. 01. Instalacin del compilador Basic PROTON IDE Paso No. 02. Ejecucin del entorno PROTON IDE Paso No. 03. Configuracin del cargador Loader Paso No. 04. Seleccin del puerto de comunicaciones serial Paso No. 05. Carga del archivo iBOARD_III_DEMO.hex Paso No. 06. Grabar programa en el microcontrolador Referencias sobre el primer programa Cargador BootLOADER CAPITULO 05 El Microcontrolador PIC Clasificacin de los microcontroladores segn el bus de datos 1 1 1 1 1 1 2 2 3 4 6 6 5.2. 5.3. 5.4. 5.5. 5.6. 5.7. 5.8. 5.9. 5.10. 5.11. 5.12. 5.13. 5.14. 5.15. 5.16. 6.0. 6.1. 6.2. 6.3. 6.4. 6.5. 6.6. 6.7. 6.8. 7.0. 7.1. 7.2. 7.3. 7.4. 7.5. 7.6. 16 16 7.7. 7.8. Lenguajes de programacin ms utilizados con microcontroladores Microcontroladores BootLoaders Caractersticas Principales del PIC 16F876 Anatoma de un microcontrolador PIC16F876 Arquitectura del PIC16F876 Organizacin de la memoria de programacin del PIC16F876 Organizacin de la memoria de datos del PIC16F876 El registro de Estatus El registro de Opciones El registro de Interrupciones Interrupciones en el microcontrolador PIC16F886/887 Entrada Salida Digital Puertos de Entrada/Salida (E/S) Comandos en alto nivel para el manejo de puertos de E/S Comandos en alto nivel para el manejo de Interrupciones CAPITULO 06 Conversin Analgica Digital Registros asociados al conversor A/D El Registro ADCON0 (detalle de sus bits) El Registro ADCON1 (detalle de sus bits) Reloj para la conversin A/D Resumen de Registros utilizados por la conversin A/D Otras Consideraciones importantes al realizar la conversin A/D Comandos en alto nivel para la conversin A/D Pasos a realizar para una conversin A/D con interrupciones CAPITULO 07 El USART / EUSART de un microcontrolador Transmisin Asincrnica Recepcin Asincrnica Interconexin de microcontroladores PIC a travs de EUSART Generador de Baud Resumen de pasos a seguir para realizar una transmisin serial asincrnica a travs de los registros del mdulo EUSART. Resumen de pasos a seguir para realizar una transmisin serial asincrnica a travs de los registros del mdulo EUSART. Comandos en alto nivel para el manejo del USART / EUSART Configuracin de los registros del USART / EUSART en alto nivel PAG. 16 17 17 18 19 19 20 21 22 23 24 25 26 29 31 33 33 34 34 35 36 36 36 38 39 39 40 42 42 43 43 43 44

3.0. 3.1. 3.2. 3.3. 3.4. 3.5. 4.0. 4.1. 4.2. 4.3. 4.4. 4.5. 4.6. 4.7. 4.8. 5.0. 5.1.

8 8 8 9 9 9 10 10 10 10 10 11 12 13 13

INDICE,
8.0. 8.1. 8.2. 8.3. 8.4. 8.5. 8.6. 8.7. 8.8. 8.9. 8.10. 8.11. 8.12. 8.13. 8.14. 8.15. 8.16. 8.17. 9.0. 9.1. 9.2. 9.3. 9.4. 9.5. 9.6. 9.7. 9.8. 9.9. 9.10. 9.11. 9.12. 10.0. 10.1. 10.2. 10.3.

continuacin.
PAG. PAG. 10.4. 10.5. 10.6. 10.7. 10.8. 10.9. 10.10. 10.11. 11.0. 11.1. 11.2. 11.3. 11.4. 11.5. 12.0. 12.1. 12.2. 12.3. 12.4. 12.5. 12.6. 12.7. 12.8. 12.9. 12.10. Conexin entre el PIC16F876 y los dispositivos esclavos Los iButton 1-Wire Ejemplo de aplicacin. Lectura del serial de un iButton Clculo del CRC-8, identificacin de errores en la RED 1-Wire Ejemplo del clculo del CRC8 Termmetro Digital modelo DS18B20 Ejemplo de lectura de temperatura con un DS18B20 Algoritmo de Search ROM CAPITULO 11 El coprocesador El coprocesador El coprocesador El coprocesador El coprocesador El coprocesador ATMEL ATTiny13s utilizado como Salidas Digitales utilizado como Entradas Digitales utilizado como Salidas PWM utilizado como Contador Digital utilizado como Conversor A/D 69 70 70 71 72 73 74 76 78 79 81 82 83 84 85 85 86 86 88 88 89 90 90 91 91 92 93 101

CAPITULO 08 Temporizadores TIMERS Interrupcin por TMR0 Registros asociados al TMR0 Como trabaja la temporizacin del TMR0 Pasos a seguir para la utilizacin del TMR0 Ejemplo de utilizacin del TMR0 El timer TMR1 El timer TMR1 trabajando como Temporizador El timer TMR1 trabajando como Contador El timer 1 del PIC16F886 / 887 Como trabaja la temporizacin del TMR1 Pasos a seguir para la utilizacin del TMR1 Ejemplo de utilizacin del TMR1 El timer TMR2 Como trabaja la temporizacin TMR2 Pasos a seguir para la utilizacin del TMR2 Ejemplo de utilizacin del TMR2 Ejemplo del TMR0, TMR1 y TMR2 en forma simultnea CAPITULO 09 Comunicacin Serial sincrnica I2C Caractersticas del BUS I2C Detalle de la comunicacin I2C Direccionamiento y formato de transferencia de informacin Inicializacin en modo maestro Transmisin en modo maestro Recepcin en modo maestro Dispositivos I2C en el sistema de desarrollo iBOARD III Comandos en alto nivel para el manejo del protocolo I2C Memoria Eeprom 24LC16B Ejemplo de utilizacin de una memoria Eeprom 24LC16B Reloj en tiempo Real DS1307 Ejemplo prctico con reloj de tiempo real DS1307 CAPITULO 10 Protocolo de comunicaciones 1-Wire Descripcin del protocolo de comunicaciones 1-Wire Implementacin del maestro 1-Wire con el PIC16F876 Topologas de conexin entre dispositivos en una RED 1-Wire

47 48 48 48 48 48 50 51 51 51 51 52 52 55 55 55 55 57 58 58 59 59 59 60 60 61 62 62 63 64 64 67 67 68 69

CAPITULO 12 MODULO CCP/PWM. Captura, Comparacin y PWM Modo de Captura Modo de Comparacin Modo PWM Registros asociados a la Captura, Comparacin y TMR1 Registros asociados al mdulo PWM y TMR2 Ejemplos de aplicacin del mdulo CCP1 en modo Captura Comando en Alto nivel para HPWM por hardware Comando en Alto nivel para PWM por software Ejemplo de HPWM y configuracin a travs de registros Ejemplo de HPWM y comandos en alto nivel Referencias Bibliogrficas Anexo A. Pantalla LCD Anexo B. Software cargador iLOADER, Uart/Scope/OPC.

INTRODUCCIN
El sistema de desarrollo para microcontroladores modelo iBOARD III, es una plataforma educativa de avanzada tecnologa, con la cual, usted podr configurar, programar, verificar e implementar diseos electrnicos digitales utilizando como base a los microcontroladores PIC de las familias serie F modelos 16Fxxx y 18Fxxx. Es un sistema completo que posee adems 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 mquina, clculo, procesamiento, visualizacin, medicin y almacenamientos de informacin. El software que acompaa al sistema iBOARD III, fue totalmente diseado para explotar al mximo las prestaciones del sistema y cumplir con las exigencias actuales en el diseo de sistemas digitales. Adems del programa cargador tipo bootloader denominado iLOADER, el usuario contar con una interfaz completa UART/SCOPE que le permitirn visualizar la informacin proveniente del microcontrolador en forma de texto y en forma grfica. Adicionalmente, se incluye una herramienta de mayores prestaciones y tecnologa denominada servidor de datos OPC, la cual, le permitir exportar en tiempo real variables internas del microcontrolador a cualquier aplicacin compatible Microsoft con capacidad de comunicacin 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 actualizacin por parte del fabricante. Tanto el software como el hardware incluyen las ltimas innovaciones electrnicas para proporcionar a usted una herramienta poderosa, slida y bien construida, pensada para resistir un trato duro y an as brindar un acabado profesional. El sistema de desarrollo no necesita ser alimentado con una fuente de tensin externa, por el contrario; toma el voltaje de alimentacin directamente del puerto USB del computador. Usted podr entonces, alimentar a sus circuitos electrnicos 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 programacin para PIC, ya sea, Basic, C y/o cualquier otro compilador que produzca la compilacin del programa en formato Intel *.Hex. Sin embargo, el sistema es acompaado 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 mtodo de enseanza de los microcontroladores PIC. A medida que se desarrollan los captulos, los ejemplos aumentarn el nivel de complejidad tanto de conexiones en hardware como de descriptores en software. El captulo 1,2 y 3, son captulos informativos. El primero de ellos describe al sistema de desarrollo, sus partes y capacidad del hardware incluido. El segundo captulo 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 captulo tres, el usuario encontrar una explicacin ms detallada de cada mdulo funcional del sistema de desarrollo iBOARD III. El captulo 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 instalacin del software y el desarrollo del primer programa de aplicacin. En el capitulo 5, se desarrolla una breve introduccin a la organizacin 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 conversin A/D. El captulo 7 sobre la comunicacin serial asincrnica con el USART / EUSART del microcontrolador. El captulo 8, hace una explicacin sobre los perifricos tipo Timers internos que posee el microcontrolador, su utilidad y ejercicios de aplicacin. En el captulo 9 se aborda la comunicacin serial sincrnica 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 captulo 10, es una sntesis del protocolo de comunicaciones 1-Wire de Dallas Semiconductor, un protocolo de comunicaciones de avanzada tecnologa muy utilizado en la actualidad. Por ltimo en el captulo 11, se detalla el funcionamiento del microcontrolador ATMEL incluido en el sistema de desarrollo, ventajas y aplicaciones del coprocesador. Mayor informacin terico prctica sobre el uso y aplicacin de los microcontroladores PIC est disponible para su consulta a travs de la pgina web www.roso-control.com.

CAPTULO 1
DESCRIPCIN DEL SISTEMA El propsito de ste manual es: Presentar las caractersticas, potencialidades y ventajas del iBOARD III. Guiarlo durante el proceso de instalacin del software incluido en CD-ROM. Suministrarle un conjunto de ejemplos e instrucciones de utilizacin que harn de su experiencia con el iBOARD III todo un xito. Antes de continuar, tomaremos un tiempo para revisar el contenido del material que acompaa al sistema de desarrollo: Tarjeta de desarrollo iBOARD III. Microcontrolador PIC16F876 con resonador 20 MHz. Pantalla LCD estndar de 2x16 caracteres. Cable de programacin USB. CD con programa de instalacin y documentacin adicional. Cdigo de ejemplo para el microcontrolador PIC16F876. Compilador en lenguaje Basic PROTON versin DEMO. Manual de uso y referencia del microcontrolador PIC16F876. 1.3. Caractersticas del sistema de desarrollo iBOARD III Interfaz de programacin USB, lista para conectar directamente al PC. No requiere de transformador y/o fuente externa de alimentacin. Se conecta de forma sencilla a cualquier protoboard estndar. Alimenta al protoboard directamente desde la tarjeta impresa hasta 400 ma. Incluye un LED de color verde para indicar la alimentacin 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 estn 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 travs 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 batera de respaldo. Coprocesador ATMEL de 8 bits.

1.1. Requerimientos mnimos del computador Procesador Pentium 266 Mhz o superior con Windows XP Vista. Unidad de CDROM. Puerto de comunicaciones USB. Conexin a Internet (opcional para actualizar la versin de los programas incluidos en el CD-ROM y descargar nuevos ejemplos disponibles en la RED).

1.4. Caractersticas 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 ms 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 Analgico/Digital de 4 canales y 10 bits de resolucin. Un (01) USART (comunicacin serial). Dos (02) mdulos CCP (Capture/Compare/PWM). Tres (03) Timers o temporizadores (TMR0, TMR1 y TMR2). Hasta ocho (08) posibles fuentes de interrupcin.

1.2. Contenido del CD-ROM Programa de instalacin del iBOARD III. Drivers para interfaz de puerto USB. Especificaciones del PIC16F876 (Microchip) en ingls. Especificaciones tcnicas del DS1307, 24LC256 y pantalla LCD. Cdigos de ejemplo y diagramas esquemticos. CD con programas de aplicacin.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 1

1.6. Capacidades del Software. El Compilador Basic PROTON Programacin en alto nivel, estructurada y modular en lenguaje Basic. Facilidad para la definicin y manejo de memoria RAM, EEprom y Flash, definicin de variables y modificadores de formato. Funciones matemticas, trigonomtricas y lgicas incluidas. Funciones incluidas para facilitar el manejo de string. Manejo directo de pantallas LCD alfanumricas y grficas. Generacin de mltiples tonos y sonidos de alarma. Medicin de pulsos, frecuencia y conteo de eventos. Manejo de pulsadores e interruptores de forma fcil y eliminando rebotes. Manejo total de interrupciones para todos los perifricos incluidos. Aritmtica 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 repeticin y decisin. Acceso a los registros internos del microcontrolador para lectura y/o escritura. Comunicacin serial RS232 por hardware a travs 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.

1.7. Caractersticas 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 analgicas 10 bits. Tres puertos (3) como comparadores analgicos. Referencia interna de 1.1 Volts para la conversin A/D y comparacin. 32 Bytes de memoria RAM disponibles al usuario para lectura / escritura.

Manejo de los protocolos de comunicacin serial: 1-Wire de Dallas Semiconductors. I2C de Phillips Semiconductors. 3-Wire de Dallas-Maxim. SPI de Motorola. Amigable IDE de programacin. Y muchas otras caractersticas que hacen de este uno de microcontroladores ms poderosos y a la vez sencillos de usar para casi cualquier aplicacin 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 programacin. Sin embargo, el sistema utiliza por defecto con el PIC16F876 y el compilador Basic PROTON IDE Lite, los cuales vienen incluidos junto al sistema.

En el captulo No. 11 se detalla la operacin completa del microcontrolador ATMEL como coprocesador. El fabricante est desarrollando el software necesario para utilizar al coprocesador como elemento central en la conexin de sistemas de desarrollo a travs de una red de comunicaciones, inicialmente, no todos los sistemas de desarrollo incorporarn el microcontrolador ATMEL, el fabricante se reserva el derecho de incluirlos en la medida de que el software para su utilizacin ya est disponible. Si usted recibi un sistema de desarrollo sin el microcontrolador ATMEL, podr adquirirlo como una opcin a travs del fabricante. Igualmente, el programa iLOADER, se podr descargar en forma gratuita y sin restricciones desde la pgina www.roso-control.com. Este programa es un extra y no es imprescindible para la puesta en funcionamiento del sistema de desarrollo iBOARD III.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 2

1.8. Descripcin modular del sistema iBOARD III

MICROCONTROLADOR PIC16f876

PANTALLA LCD 2X16 CARACTERES

CONVERTIDOR USB A SERIAL FT232

XTAL DE 13.768 KHz PARA RELOJ DE TIEMPO REAL

HUECOS PARA EL MONTAJE EN TABLERO

RELOJ DE TIEMPO REAL DS1307

LED BICOLOR VERDE / ROJO

RESONADOR 20 MHz

CONECTOR MINI USB

CONECTOR EXTRABLE PARA LA LCD

MEMORIA EEPROM 2K X 8 BITS

SWITCH MINI DIP 4X N.O. PARA CONEXIN DE LEDS AL MICROCONTROLADOR BORNERA DE CONEXIN AL PROTOBOARD

MICROCONTROLADOR ATMEL 8 BITS LEDS Y PULSADORES

PULSADOR DE RESET

Figura 1.1. Fotografa del sistema de desarrollo iBOARD III. Sistema de desarrollo para microcontroladores PIC, iBOARD III. 3

1.9. Diagrama electrnico del sistema iBOARD III

Figura 1.2. Esquema electrnico del sistema de desarrollo iBOARD III.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 4

Figura 1.3. Esquema electrnico del sistema de desarrollo iBOARD III, continuacin. Sistema de desarrollo para microcontroladores PIC, iBOARD III. 5

CAPITULO 2
INSTALACIN DE DRIVERS Al igual que todos los accesorios USB actuales, la iBOARD III, requiere de la instalacin 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 ratn en el archivo de instalacin de los Drivers; momentneamente se ejecutar en forma automtica la instalacin de los Drivers, esto se puede observar en la figura 2.1 anexa.

Figura 2.1. Ventana de instalacin 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 instalacin 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 informacin entre la iBOARD III y el computador ( PC ). El fabricante, diseo 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 CPUs y tarjetas de memoria con diferentes velocidades de procesadores y tecnologas. Por ello, la propiedad latencia retardo en la comunicacin entre la CPU y la iBOARD III es ajustable por el usuario, esto con la finalidad de lograr una optima sincronizacin entre ambos equipos. La propiedad latencia la podemos ajustar de la siguiente forma:

Figura 2.2. Diferentes mensajes observados durante la instalacin del sistema de desarrollo iBOARD III.

1.- Abra el men propiedades del sistema Hardware a travs 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 Configuracin 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 informacin entre el PC y el sistema de desarrollo iBOARD III.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 6

Figura 2.5. Men Configuracin de puerto del sistema operativo Windows.

Figura 2.3. Men Propiedades del sistema/Hardware/Administrador de dispositivos del sistema operativo Windows.

Figura 2.4. Men Administrador de dispositivos del sistema operativo Windows.

Figura 2.6. Men configuracin avanzada del COM del sistema operativo Windows.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 7

CAPITULO 3
DESCRIPCIN DEL SISTEMA Para describir funcionalmente al sistema iBOARD III vamos a dividirlo en cinco bloques operativos bien definidos: Interfaz de programacin y alimentacin USB El microcontrolador PIC La regleta de conexiones Los perifricos de entrada y salida Coprocesador ATMEL Los componentes que integran la interfaz de programacin son: Un circuito integrado convertidor USB / RS-232 TTL modelo FT232. Un conector USB tipo mini 5P que permite utilizar cualquier cable USB mini estndar (como los usados en cmaras, MP3 y muchos otros dispositivos USB) para programar al microcontrolador. Un diodo LED de color verde que indica el voltaje de alimentacin. Un diodo LED de color rojo que indica la actividad del puerto USB.

3.1. Interfaz de programacin y alimentacin USB Se encarga de ajustar los niveles de tensin del puerto USB a los niveles aceptados por el microcontrolador (0 - 5 Vdc) y de tomar la alimentacin 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.

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 acompaado de un pulsador de RESET y un resonador de 20 Mhz como se muestra en la Figura 3.2.

Figura 3.1. Interfaz de programacin y alimentacin del iBOARD III.

Figura 3.2. Ubicacin del microcontrolador, resonador y pulsador de RESET del iBOARD III .

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 8

3.3. La regleta de conexiones Abarca toda la parte inferior del sistema y sirve de soporte al mismo. En ella se encuentran claramente identificados todos los pines del microcontrolador adems de los terminales de alimentacin +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 conexin USB al sistema iBOARD III, a fin de, evitar daos que pudiese ocasionar sobre el puerto USB del PC. Referencia Figura 3.3. Dip-Switch mini de cuatro (4) posiciones, los cuales, estn conectados en serie con cada uno de los LEDs descritos en el punto anterior. La funcin de este interruptor es la de conectar y/o desconectar fsica y elctricamente los LEDs 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 electrnicos, en funciones de ajuste y seleccin de configuraciones. Referencia (3) en la Figura 3.3. Un conector para pantalla LCD. Las pantallas LCD son los perifricos de salida ms llamativos, permiten desplegar texto, nmeros, mensajes y con un poco de creatividad hasta grficos. 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 operacin disponibles. Este RTC almacena y actualiza la hora y fecha de una manera muy exacta, permitindole funcionar como reloj/calendario. Adems posee 56 bytes de memoria NVRAM totalmente libres, un pin que genera una seal cuadrada de frecuencia programable ideal para generar bases de tiempo exactas y construir temporizadores. Se lpuede conectar una batera de respaldo para mantener la hora y fecha actualizndose durante aos 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 ms de un milln de veces y puede almacenar datos durante ms de 50 aos an sin estar alimentada. Este tipo de memorias son muy empleadas para almacenar configuraciones y llevar un registro histrico de fallas o de valores de una variable medida con el microcontrolador. La comunicacin con la memoria Eeprom 24LC16B y el RTC DS1307 se hace por medio de un protocolo serial llamado I2C que slo requiere de dos lneas para su funcionamiento. Referencia (6) en la Figura 3.3.

Figura 3.3. Ubicacin de la regleta de conexiones del iBOARD III .

3.4. Perifricos de entrada y salida El iBOARD III, cuenta con un grupo de perifricos 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 electrnicos. Referencia (1) en la Figura 3.3.

3.5. El Coprocesador ATMEL Es un microcontrolador de 8 bits 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 comunicacin en RED. Referencia (7) en la Figura 3.3.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 9

CAPITULO 4
PRIMEROS PASOS Vamos a comenzar a desarrollar actividades en nuestro sistema, para ello es necesario que ubique claramente cada uno de los componentes. Sistema de desarrollo iBOARD III, incluido. Cable de programacin mini USB 5P, incluido. Placa de experimentacin Protoboard (no incluido), ver figura 4.1.

Figura 4.1. Paca de experimentacin Protoboard.

El microcontrolador PIC16F876 incluido en el sistema de desarrollo iBOARD III, viene pre-cargado con el cdigo 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 versin Basic PROTON IDE Lite. En sta seccin 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: Instalacin 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 instalacin 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 instalacin a travs del men Inicio\todos los programas\.. como aparece en la figura 4.3. 4.3. Paso No. 03: Ahora realice la configuracin del cargador de programas (Loader). Para ello seleccione la opcin 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.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 10

Figura 4.5. Seleccin del puerto serial de conexin al iBOARD III.

Figura 4.3. Pantalla inicial del IDE PROTON.

4.5. Paso No. 05: Abra el archivo CAP_04_Ejemplo_01.hex a travs de el Men File/Open , que se encuentra en el directorio 32 Ejemplos\CAP_04\01\ en el CD entregado a usted.

Figura 4.4. Men de configuracin del cargador (Loader).

Figura 4.6. Pantalla de seleccin del archivo de ejemplo.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 11

4.6. Paso No. 6: Presione el icono de grabar programa en el microcontrolador, como se muestra en el crculo ubicado en la figura 4.7.

Figura 4.7. Pantalla del men de programacin del IDE PROTON.

Figura 4.9. Fotografa de la ejecucin 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 quizs es su primera experiencia con los microcontroladores, sin embargo, no se preocupe si no entiende el cdigo o parte de el, en los captulos posteriores se explicar en detalle la teora del funcionamiento de los microcontroladores PIC. Este slo 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 estn ansiosos de programar aplicaciones. Ahora abra el programa CAP_04_Ejemplo_01.bas, utilizando el comando FILE\Open del men principal del IDE Basic PROTON y podr visualizar el programa codificado en un lenguaje de alto nivel como el Basic PROTON, esto se muestra en la figura 4.10.

Figura 4.8. Pantalla final presentada por el IDE del PROTON. Sistema de desarrollo para microcontroladores PIC, iBOARD III. 12

4.8. Cargador Boot LOADER


' CAP_04_Ejemplo_01.bas ' Ejemplo bsico de utilizacin 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 Declare Declare Declare TRISB.2 PORTB.2 LCD_DTPIN PORTB.4 LCD_ENPIN PORTB.3 LCD_RSPIN PORTB.1 = 0 = 0 ' ' ' ' ' ' ' ' ' ' ' Pines de conexin Pin de Datos LCD Pin de Enable LCD Pin de RS LCD Declara a PORTB.2 Coloca en PORTB.2 a la pantalla LCD conec. al PORTB.4 conec. al PORTB.3 conec. al PORTB.1 como Salida Dig. un cero (0) Lgico

Los microcontroladores PIC16F87x(A) y PIC18Fxxx(x) pueden escribir su propia memoria de programa (Flash) sin necesidad de utilizar un programador externo, para ello, debern ser cargados inicialmente con un pequeo cdigo de programa denominado boot loader, el cual, permite que tanto el cdigo del programa objeto de usuario como el valor de los registros en EEprom transmitidos al microcontrolador desde un puerto de comunicacin 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.

Dim Contador As Byte Dim ValorF As Float ValorF = 0 TRISA = $FF TRISC = $00

Declaracin de var. de uso general Declaracion de var. de uso general Inicializa la variable en cero Declara el Puerto A como entrada dig. Declara el Puerto C como salida dig. limpiar pantalla LCD el cursos a posic. 1,1 el cursor a posic. 2,4 de 2000 ms ' ' ' ' ' ' ' ' ' Ciclo iterativo "For" ste segmento de cdigo mostrar en la pantalla Si presionan los pulsa_ dores, encendern los Led's correspondientes a la posicin corresp. Retardo de 100 ms

Main: Print $FE, 1 ' Comando para Print At 1,1, "Sist. Desarrollo" ' Lleva Print At 2,4, "iBOARD III" ' Lleva DelayMS 2000 ' Pausa For Contador = 0 To 255 ValorF = ValorF + 0.1 Print At 2,3, "Valor = ", DEC1 ValorF PORTC.2 = PORTA.0 PORTC.3 = PORTA.1 PORTC.4 = PORTA.2 PORTC.5 = PORTA.3 DelayMS 100 Next GoTo Main End

Figura 4.10. Listado de la codificacin del programa CAP_04_Ejemplo_01.bas

En el Paso No. 5, usted carg al microcontrolador el cdigo 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 estndar usado por los microcontroladores PIC. En contrapartida, el programa CAP_04_Ejemplo_01 .bas con la extensin (.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 extensin .hex. El cdigo escrito en Basic lo denominaremos cdigo fuente y el codificado (.hex) lo denominaremos de ahora en adelante cdigo objeto.

Figura 4.11. Fotografa 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 cdigo 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 preprogramado con el cdigo boot loader.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 13

En el CD incluido con el sistema de desarrollo, carpeta 12 Bootloader, se encuentra el archivo correspondiente al cdigo boot loader (16F876_20.hex), el mismo, deber ser cargado en el microcontrolador PIC16F876 a travs de un programador estndar. 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 comunicacin a travs del USART del micro, si existe un programa cargador como el MicroCode Loador y en ejecucin, 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 cdigo (firmware) boot loader reside o se almacena en las ltimas 256 palabras de la memoria de programacin (Flash) del microcontroladores de la serie PIC16F y/o en las ltimas 336 palabras de la memoria de programacin (Flash) de los microcontroladores de la serie PIC18F. Todos los registros de la memoria EEprom y del microcontrolador estn disponibles al usuario. El software MicroCode Loader se comunica con el microcontrolador a travs del USART del microcontrolador. Los PIC16F87x tienen ubicado el USART de recepcin (Rx) en el pin PORTC.7 y el de transmisin el pin PORTC.6. En la figura 1.2. se observa la conexin de USART del microcontrolador con el convertidor FT232 USB a SERIAL TTL, del diagrama electrnico de conexiones previamente mostrado en esa figura. Se debe tener especial cuidado cuando usted programa directamente en assembler, debido a que el cdigo boot loader reside en la parte superior de la memoria Flash, es necesario, al energizar el microcontrolador, indicarle que la primera instruccin a ejecutar sea la indicada por el cdigo contenido en el boot loader , es necesario un salto (Jump) a sta direccin. Para hacer esto, se utilizan las cuatro primeras palabras de programacin o localidades de la flash del microcontrolador denominadas vector de interrupcin. 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. Fotografa 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

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 14

Program
El botn program se utiliza para cargar el archivo *.hex en el microcontrolador. Cuando se programa el microcontrolador, se realiza una verificacin normalmente del programa contenido en el microcontrolador, la verificacin asegura que tanto los datos contenidos en la memoria de programa como en la Eeprom se cargaron correctamente. Se puede eliminar la opcin de verificacin desmarcando esta opcin en el men del programa. La opcin se puede desmarcar en forma individual referida a las reas de programacin en forma independiente, ya sea la memoria de programa Verify Code When Programming en la Eeprom Verify Data When Programming. Otras opciones estn tambin disponibles a travs del men principal, tales son: Verify After Programming, verificar despus de programar. Load File Before Programming, cargar el archivo antes de programar. Run User Code After Programming, ejecutar el cdigo o programa del usuario despus de programar al microcontrolador. Program Code, programar slo el rea cdigo de programas. Program Data, programar slo la memoria Eeprom.

Run User Code


El botn 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 informacin acerca de la versin 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 fsicamente 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 conexin serial a utilizar debe coincidir con el que previamente se seleccion para la conexin del sistema iBOARD III. Como referencia puede ve la figuras 2.4 de este manual.

Read
Al presionar el botn de leer, el programa MicroCode Loader leer tanto la memoria de programacin como los registros de la Eeprom del microcontrolador utilizado.

Verify
Mediante esta opcin se puede comparar el cdigo interno del microcontrolador (rea de programa y Eeprom) con el mostrado en la pantalla del programa MicroCode Loader. Si la verificacin es correcta ambos cdigos debern coincidir. Nota: se puede tambin realizar la verificacin del rea de programas y de la memoria Eeprom por separado utilizando las opciones Verify Code y Verify Data.

Erase
Al presionar el botn de borrar (Erase) se borrar toda la informacin contenida en el microcontrolador PIC, tanto en el rea del cdigo de Programa como en la Memoria Eeprom.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 15

CAPTULO 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 tamao reducido. Es un sistema digital cerrado RAM de poca capacidad interna (bytes Kb) Memoria de programa pequea (algunos Kb) No se requiere de decodificadores de E/S o de memoria Velocidad de operacin de algunos MIPS Orientados a operaciones de E/S Costo de desarrollo e implementacin reducido Muy fciles y sencillos de utilizar Circuitos simples y tendencia a la modularidad Por lo general dan cabida a un slo programa y el soporte de tareas mltiples (de existir), es limitado Dos o tres modos de direccionamiento Casi todos son RISC Tiempo de aprendizaje/desarrollo reducido Para el Ao 2002 se haban vendido 49.000 Millones de piezas. En el ao 2008 la empresa Microchip fue lder mundial en Ventas 5.1. Clasificacin de los microcontroladores segn el bus de datos (bits) Microcontroladores de 4 bits: Son los ms sencillos en todos los aspectos tcnicos y prestaciones asociadas, de muy bajo costo. Se fabrican en grandes volmenes y sus aplicaciones tpicas: pequeos automatismos y juguetera Microcontroladores de 8 bits: Son los ms utilizados en la actualidad, gran diversidad y versatilidad. Los PIC son los microcontroladores de 8 bits ms usados por el mercado mundial, con ms de 2000 millones de unidades vendidas/ao. Se aplican generalmente en todos los automatismos modernos y sistemas simples de control, electrodomsticos, mquinas y herramientas y en las reas de la instrumentacin digital entre otras. Microcontroladores de 16 bits: Prestaciones superiores a los microcontroladores de 8 bits. Se aplican tpicamente en el procesamiento digital de seales. La casa microchip fbrica las series PIC24xx y los dsPIC33xxx. Microcontroladores de 32 bits: Mas complejos y costosos. Algunas caractersticas similares a un microprocesador. Se dedican a proyectos muy avanzados. Aplicaciones tpicas: inteligencia artificial, aplicaciones militares y almacenamiento masivo de datos. 5.2. Lenguajes de programacin ms utilizados con los microcontroladores Ensamblador, asembler Lenguaje C, C++ Basic, MBASIC, PBASIC PASCAL JAVA

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

Figura 5.2. Compiladores ms utilizados en la actualidad. Fuente: Tomado de la pginas web de los fabricantes.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 16

5.3. Microcontroladores Boot Loaders 5.4. Caractersticas Principales del PIC 16F876 Como se explic en la seccin 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 pequeo cdigo de programa denominado boot loader, el cual, permite que tanto el cdigo del programa de usuario como el valor de los registros en EEprom transmitidos al microcontrolador desde un puerto de comunicacin 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. Bsicamente 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 grficas y de comunicacin serial entre otras. El iBOARD III, tambin 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 estarn disponibles sin costo adicional para ser utilizados sin limitaciones por el iBOARD III. Actualmente el fabricante est desarrollando una completa plataforma de programacin denominada iLOADER, la cual, le permitir adems de programar, leer, escribir y verificar sus programas en el microcontrolador, utilizar un interfaz grfico denominado UART/SCOPE y un servidor de datos OPC herramienta de avanzada prestaciones que le permitir realizar intercambio de informacin entre el microcontrolador PIC y cualquier programa con capacidad de comunicacin 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 cdigo 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. Procesador RISC de slo 35 instrucciones Toda las instrucciones tienen la misma duracin (1 ciclo) salvo los saltos que demoran dos ciclos 1 ciclo = 4 pulsos reloj Velocidad de operacin mxima 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 interrupcin 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 Proteccin de cdigo programable medio cdigo o completo Modo SLEEP para ahorro de energa Fuente de reloj seleccionada por software Programacin en circuito In-Circuit Serial Programming (ICSP) In-Circuit Debugging utilizando dos pines de conexin Acceso a la memoria de programa desde el procesador en tiempo de ejecucin para una lectura y/o escritura de datos Voltaje de operacin desde 2.0V to 5.5V Capacidad de drenar/sumir corriente de 25 mA (FAN OUT/FAN IN) Consumo de energa: < 2 mA @ 5V, 4 MHz 20 uA @ 3V, 32 kHz < 1 uA en modo de reposo (sleep)

Figura 5.3. Fotografa del PIC16F876 28 pines Dip 0.3. Fuente: Tomado de www.microchip.com

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 17

5.5. Anatoma de un microcontrolador PIC En la figura 5.4., se muestra el diagrama funcional interno de un microcontrolador PIC. Bsicamente el corazn 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 cdigo 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 travs de la modificacin de los registros internos SFR. El bloque de alimentacin por su parte, se encarga de suplir la energa utilizada por el sistema, mientras que el bloque de osciladores, se encarga de suplir la seal de reloj sincrnica al CPU para la ejecucin secuencial de las instrucciones contenidas en el bloque de memoria de programa. Dentro de los perifricos de un microcontrolador se encuentran: Timers T0, T1 y T2 Convertidor analgico a digital (ADC) Mdulo de captura y comparacin (CCP) Mdulo de PWM Mdulo de comunicacin serial SPI, I2C y UART

Figura 5.4. Anatoma de un microcontrolador PIC16F886/887. Fuente: Tomado de www.mikroe.com

La entrada salida entre el microcontrolador y el mundo exterior se realiza a travs 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 conexin del microcontrolador con el mundo exterior. Internamente el microcontrolador posee perifricos con funciones especficas, estos perifricos son autnomos, 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 lgica 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.

Figura 5.5. Arquitectura de un microcontrolador PIC. Fuente: Manual tcnico del PC16F876.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 18

5.6. Arquitectura del PIC16F876 A fin de poder entender en forma rpida 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 cdigo y el bus de datos. Ahora bin, un bus es un canal de comunicaciones que puede tener muchas lneas, en nuestro caso hablamos de una lnea por bits. Se podra hacer una analoga elctrica entre un bus y un cable, ya que ambos se utilizan como medios de interconexin. En el PIC16F876 el bus de cdigo tiene una longitud de 14 bits mximo, sin embargo, el contador de programa que direcciona a la memoria de programacin es de tan slo 13 bits, razn por la cual, no existirn 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 perifricos se conectan al CPU slo a travs del bus de datos. 5.7. Organizacin de la memoria de programacin del PIC16F876 La Memoria FLASH es donde se almacena el programa de aplicacin del microcontrolador y tiene las siguientes caractersticas:

Memoria Flash
Posee una capacidad de 8K palabras de 14 bits cada una. Est dividida en pginas (bloques) de 2K cada uno. Se direcciona a travs del Program Counter PC. Tiene asociado un Stack o pila que funciona en forma automtica, no hay instrucciones disponibles para guardar o sacar informacin del Stack, el cual, tiene ocho niveles de profundidad. La primera direccin de la memoria FLASH (0000h), la ocupa el vector de RESET. La siguiente direccin disponible la (0004h) la ocupa el vector de interrupciones. El espacio entre la direccin 0005h y 1FFFh est disponible para los cdigos del programa.

Figura 5.6. Organizacin de la memoria de Programa de un microcontrolador PIC16F876. Fuente: Manual tcnico del PC16F876.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 19

5.8. Organizacin 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 perifricos, E/S y registros de propsito general, los cuales, pueden ser utilizados por el programador como memoria de uso general.

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

Cada bloque de memoria RAM posee una longitud fija de 128 registros de 8 bits cada uno. Todos los registros especiales y perifricos tienen una localidad especfica e invariable dentro de la memoria RAM. En cada ciclo de ejecucin 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 excepcin 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. Representacin de los cuatro bloques de la memoria RAM, cada bloque contiene los registros SFR y existe un espacio de propsito general disponible al usuario de 384 Bytes. Fuente: Manual tcnico del PC16F876.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 20

5.9. El registro de Estatus

Fuente: Fuente: Tomado de www.mikroe.com

Contiene los bits de status de la ALU (Unidad Aritmtica y Lgica), del RESET y los bits de seleccin <RP1><RP0> de los bancos de memoria. Es el registro ms utilizado de todos y sus bits estn 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 aritmticas y lgicas. Z: Sealizacin de cero (0) DC: Acarrero y dbito del 4to. Bit C: Acarreo y dbito del 8vo. bit RESET: Referido al tipo de re-inicializacin 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 codificacin mostrada en la siguiente tabla.

Figura 5.8. Descripcin de los bits independientes del registro de estatus. Fuente: Manual tcnico del PC16F876.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 21

5.10. El registro de Opciones Es uno de los registros ms utilizados, como su nombre lo indica, ste registro permite seleccionar una serie de opciones disponibles para la configuracin del hardware en el microcontrolador PIC. Es un registro de 8 bits y cada bit controla una funcin 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 interrupcin. Bit 5, T0CS: Selecciona la fuente de reloj para el TMR0 (interna y/o externa). Bit 4, T0SE: Selecciona el flanco para el incremento del TMR0. Bit 3, PSA: Selecciona si el pre-escalador ser aplicado al TMR0 o al WDT. Bit2 al Bit0: Selecciona la magnitud del pre-escalador.

Figura 5.9. Registros de opciones de un PIC16F876. Fuente: Tomado de www.mikroe.com Sistema de desarrollo para microcontroladores PIC, iBOARD III. 22

5.11. El registro de Interrupciones INTCON: Es un registro de lectura y escritura, el cual, contiene varios bits de habilitacin y bandera para el TMR0, cambios de estado en el puerto B e interrupciones externas por el pin RB0/EXT. Se encuentra duplicado en los cuatro bancos de memoria, ocupando las direcciones: 0Bh, 8Bh, 10Bh y 18Bh.
Fuente: Fuente: Tomado de www.mikroe.com

INTERRUPCIN: Ante una interrupcin, 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 interrupcin. La mayora de los perifricos incluidos en el microcontrolador son capaces de interrumpir al CPU, cuando ello ocurre, se desencadenan los siguientes eventos: 1. 2. 3. 4. 5. 6. El microcontrolador termina de ejecutar la instruccin en curso (actual). Se para la secuencia de ejecucin regular del programa. El contenido del Program Counter se almacena en el stack. Se carga en el Program Counter la direccin de la rutina de interrupcin. Se ejecuta la rutina de interrupcin y se disminuye en un nivel el contenido del stack Se carga de nuevo en el Program Counter el valor de retorno guardado anteriormente en el stack. 7. Se contina con la ejecucin normal del programa antes de la interrupcin.

Figura 5.10. Eventos desencadenados ante la ocurrencia de una interrupcin. Fuente: Tomado de www.mikroe.com

Figura 5.11. Funcin de los bits independientes del registro de interrupciones. Fuente: Manual tcnico del PC16F876.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 23

5.12. Interrupciones en el microcontrolador PIC16F887

Figura 5.12. Diferentes fuentes de interrupciones para el PIC16F886/887. Fuente: Fuente: Tomado de www.mikroe.com

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 24

5.13. Entrada Salida Digital Introduccin. Para intercambiar informacin con el mundo exterior, un microcontrolador necesita de un conjunto de perifricos que sean capaces de traducir un evento en una seal elctrica de niveles lgicos entendibles, es decir, binarias. Este tema muestra algunos de los componentes ms simples del sistema de desarrollo, ensendole a trabajar con entradas y salidas digitales por medio de los perifricos ms utilizados en aplicaciones basadas en microcontroladores. De acuerdo a la naturaleza de una seal, esta puede ser analgica o discreta. El microcontrolador PIC16F876 es capaz de interpretar ambas, sin embargo, el estudio de las seales analgicas se ver ms adelante. Los microcontroladores PIC16F876 disponen de tres (03) puertos de entrada/salida (A,B y C) todas las lneas de estos puertos realizan diversas funciones segn estn programadas, sin embargo, todas ellos tienen la capacidad de trabajar como entradas/salidas binarias.

Seal analgica
Es aquella seal que puede tomar infinitos valores posibles entre dos lmites, por lo cual, se denominan continuas.

Seal digital
Es aquella seal que puede tomar un nmero finito de valores entre dos lmites. Si utilizamos lgica booleana ser Cero (0) y el Uno (1).

Figura 5.13. Representacin grfica de una seal analgica y digitales.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 25

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 lneas de estos puertos realizan diversas funciones segn su programacin, 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.

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.14. Puertos de entrada salida digital de un PIC16F876. Fuente: Fuente: Tomado de www.mikroe.com

microcontrolador, se tiene que realizar a travs de la modificacin de los valores de los registros. En el caso especfico de la entrada salida digital, existen un

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

Figura 5.15. Registros asociados a la entrada salida digital en un PIC16F876.

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

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

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 26

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 .

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 estn 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 tensin aplicado a PORTA<0> es cercano a los cero voltios, mientras que cuando el pulsador se presiona (estado activo) el nivel de tensin aplicado a PORTA<0> estar cercano al voltaje de alimentacin del microcontrolador 5 Vdc.

Figura 5.16. Sistema de desarrollo iBOARd III.

Primer Paso: Ubicar en que puerto est conectado el LED L0. Para ello hacemos referencia a la figura 1.3., donde se muestra el diagrama de conexiones electrnicas entre los LEDs y los puertos del microcontrolador. La figura 5.17. es una sntesis de la conexiones entre los LEDs 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 ctodo del led a tierra y de esta forma cerrar el circuito elctricamente.

Figura 5.18. Conexin de pulsadores del sistema de desarrollo iBOARD III.

Este tipo de conexin de los pulsadores se denomina Activa Alta, lo que significa que cuando se activa el pulsador, el nivel de tensin obtenido en el punto de conexin al microcontrolador, es un voltaje con un nivel lgico 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 lingsticas se pueden asociar a valores del puerto, por ejemplo: est presionado no est presionado encendido apagado es equivalente a: PORTA<0> = 1 y es equivalente a: PORTA<0> = 0, al mismo tiempo es equivalente a: PORTC<2> = 1 y es equivalente a: PORTC<2> = 0

Figura 5.17. Conexin de LEDs al iBOARD III.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 27

Cuarto Paso: Codificacin. Utilizaremos el Basic PROTON para escribir nuestro programa:
' ' ' ' CAP_05_Ejemplo_01.bas Ejemplo bsico de utilizacin 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 TRISC.2 = 0 Main: PORTC.2 = PORTA.0 DelayMS 100 GoTo Main End ' Configura a PORTA.0 como Entrada Digital ' Configura a PORTC.2 como Salida Digital ' Asigna al puerto PORTC.2 de Salida el ' valor de entrada al puerto PORTA.0 ' Retardo de 100 ms

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 extensin del programa anterior. Veamos su codificacin:
' ' ' ' CAP_05_Ejemplo_02.bas Ejemplo bsico de utilizacin 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 TRISA.1 TRISA.2 TRISA.3 TRISC.2 TRISC.3 TRISC.4 TRISC.5 = = = = = = = = 1 1 1 1 0 0 0 0 = = = = PORTA.0 PORTA.1 PORTA.2 PORTA.3 ' ' ' ' ' ' ' ' ' ' ' ' Configura Configura Configura Configura Configura Configura Configura Configura Asigna Asigna Asigna Asigna a a a a a a a a a a a a PORTA.0 PORTA.1 PORTA.2 PORTA.3 PORTC.2 PORTC.3 PORTC.4 PORTC.5 el el el el como como como como como como como como valor valor valor valor Entrada Entrada Entrada Entrada Salida Salida Salida Salida de de de de Digital Digital Digital Digital Digital Digital Digital Digital

Quinto Paso: Pruebas Operativas.

Main: PORTC.2 PORTC.3 PORTC.4 PORTC.5

PORTC.2 PORTC.3 PORTC.4 PORTC.5

PORTA.0 PORTA.1 PORTA.2 PORTA.3

DelayMS 100 GoTo Main End End

' Retardo de 100 ms

Figura 5.19. Fotografa de la iBOARD III ante la ejecucin del programa CAP_05_Ejemplo_01.bas

Figura 5.20. Fotografa de la iBOARD III ante la ejecucin del programa CAP_05_Ejemplo_02.bas

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 28

5.15. Comandos en alto nivel para el manejo de puertos de E/S HIGH: Configura el puerto y/o el pin especificado como salida y lo coloca a uno lgico. 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 lgico. 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 lgico. Sintaxis: TOGGLE pin, donde pin es cualquier bit de los puertos A,B C. No se acepta Toggle de un puerto completo, slo 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 nmero de ciclos (0-1-0) que ocurren en un pin de entrada/salida durante un perodo de tiempo especificado. Se utiliza para determinar frecuencias de seales, trenes de pulsos generalmente de onda cuadrada. Sintaxis: Variable = COUNTER Pin, Perodo 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 operacin.
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 duracin especificada en un terminal de E/S. Sintaxis: PULSOUT Pin, Perodo, Estado Inicial

Pin: Es una variable constante que indica cual pin de E/S ser utilizado, el mismo ser convertido en salida. Perodo: Es una variable, constante o expresin de (4 65535) us que especifica la cantidad de tiempo en micro-segundos que durar el pulso.

Pin: Variable, constante o expresin que indica cual pin de E/S ser utilizado, el mismo ser convertido en entrada. Perodo: Variable, constante o expresin 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. Representacin grfica del comando COUNT.

Figura 5.22. Representacin grfica del comando PULSOUT.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 29

FREQOUT: Genera uno o dos tonos sinusoidales de un periodo de tiempo especfico, usando un algoritmo de modulacin de ancho de pulso. En caso de ser dos tonos, estos se mezclaran a travs del pin especificado, para de esta forma, generar un nico tono. Sintaxis: FREQOUT Pin, Perodo, Freq1 {,Freq2}

SOUND2: Genera uno dos tonos por los pines seleccionados, es ms completa que la instruccin sound. Sintaxis: SOUND2 Pin1, Pin2, [Nota1\ Nota\ Duracin]

Pin: Variable, constante o expresin que especifica el pin de E/S usado. Este ser configurado como salida. Perodo: Variable, constante o expresin de 0 a 65535. Especifica el periodo de tiempo que dura el tono generado. Freq1: Variable, constante o expresin de 0 a 32767. Especifica la frecuencia en Hz del primer tono generado. Freq2:
Variable, constante o expresin de 0 a 32767. Especifica la frecuencia en Hz del segundo tono generado.

Pin1,2: Variable, constante o expresin que especifica los pines de E/S. Estos sern configurados como salida. Nota1,2: Una variable o constante que especifica su valor en Hz en el rango de (0..16000) Hz. Duracin: Variable, constante o expresin de 16 bits que especifica la duracin de la nota en intervalos de 1ms.
RCIN: Se utiliza generalmente para medir perodos de tiempos muy cortos como la carga / descarga de un circuito RC a travs de un pin de E/S. Sintaxis: Variable = RCIN Pin, Estado

Los tonos son generados en forma matemtica a travs de la modulacin del ancho de pulso sinusoidal que veremos ms adelante, sin embargo, con la utilizacin de un pequeo filtro pasa bajo usted podr general ondas sinusoidales por cualquier pin de E/S. Esta conexin se puede visualizar a travs de la figura 5.23.

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 perodo de tiempo, nivel lgico cero nivel lgico 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. Resolucin para 20 MHz igual a 2us.
Cuando RCIN se ejecuta, se comienza a incrementar un contador. El contador se parar tan pronto el estado del pin cambie de valor con respecto al valor especificado (0,1). RCIN retornar un valor que ser almacenado por la variable .

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

SOUND: Genera uno tono o ruido blanco por el pin seleccionado. Sintaxis: SOUND Pin, [Nota, Duracin]

Figura 5.24. Esquema de conexiones utilizado con el comando RCIN.

(1) Equivale a 78 Hz y el (127) Equivale a 10KHz y entre (128..255) se obtendr ruido blanco. Duracin: Variable, constante o expresin de 8 bits que especifica la duracin de la nota en intervalos de 10ms.

Pin: Variable, constante o expresin 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

RCIN, puede ser utilizado para medir el valor de resistencias y/o condensadores. Un uso muy comn es leer el valor de un potencimetro resistivo. Cuando se desee utilizar este comando, se debern realizar las siguientes acciones: (1) Colocar el pin de E/S como salida y con un nivel lgico 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 travs de la resistencia. El tiempo en que demora el pin de pasar de un estado lgico (1) al estado lgico (0) se almacenar en la variable resultado, as conociendo este tiempo podemos decir: RCIN (units) = 600 x R (Kohm) x C (uF)

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 30

5.16. Comandos en alto nivel para el manejo de Interrupciones ENABLE, DISABLE: Habilita o deshabilita una todas las interrupciones. Sintaxis: Enable Disable Estos comandos actuarn sobre la habilitacin y/o des-habilitacin global del registro INTCON bit <GIE>. ON INTERRUPT Label: Salta la ejecucin del programa a la rutina de interrupcin especificada por la etiqueta Label. RESUME: Finalizacin de la rutina de interrupcin, devuelve el programa al punto de ejecucin previa antes de que ocurriera la interrupcin. Antes de hacer un ejercicio prctico, vamos a definir algunos conceptos utilizados con las interrupciones: Fuente de interrupcin: Recurso, elemento o dispositivo que est en capacidad de producir una interrupcin. Interrupcin: Es el evento ocasionado y que debe ser atendido. Rutina de interrupcin (ISR): Es el segmento de cdigo que se ejecuta al ocurrir la interrupcin y que debe observar el manejo de la misma. Por ejemplo, guardar algunas variables, efectuar una accin de correccin, emitir algn tipo de indicacin o alarma, etctera. Habilitacin de la interrupcin: Para que la interrupcin pueda ocurrir, hay que asegurarse que la habilitacin de la interrupcin 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 condicin. Interrupciones anidadas: Dos fuentes de interrupcin pueden, de forma simultanea o no, producir una interrupcin.

CAP_05_Ejemplo_ 03.bas (Interrupcin 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 interrupcin 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 activacin de interrupcin externa. No se haba hasta ahora hecho un programa que mostrara como trabajan las interrupciones, sin embargo, ya que conocemos las herramientas bsicas del manejo de entrada salida digital, es hora de desarrollar nuestro primer programa con interrupciones. Para el montaje electrnico 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.

Pulsador N . conectado A entre PO TB R <0> y G D N

Figura 5.25. Mecanismo de activacin ante la ocurrencia de una interrupcin. Fuente: Tomado de www.mikroe.com

Figura 5.26. Fotografa de las conexiones necesarias para la colocacin del pulsador NA, el cual, ser utilizado como generador de una interrupcin externa.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 31

REGISTRO DE INTERRUPCIONES: INTCON


' ' ' ' ' ' CAP_05_Ejemplo_03.bas Ejemplo bsico de utilizacin 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

Fuente: Fuente: Tomado de www.mikroe.com

' DEFINICIN 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 ' DEFINICIN DEL MANEJADOR DE INTERRUPCIONES ' ------------------------------------------------------------------On Interrupt GoTo SUB_INT ' Cuando ocurre una interrupcin va a la ' subrrutina "SUB_INT" PULL = 0 ' Habilita las resist. de Pull_UP Pto. B INTE = 1 ' Habilita la Interrupcin por RB0 ' PROGRAMA PRINCIPAL. ' ------------------------------------------------------------------Main: Toggle L3 ' Hace parpadear el L3 cada 100 ms DelayMS 100 GoTo Main Disable ' Esta instruccin debe siempre ir al ' final del programa principal y antes ' de la sub_rutina de interrupcin.

REGISTRO DE OPCIONES Bit 7, OPTION<7>

' RUTINA DE INTERRUPCIN ' ------------------------------------------------------------------SUB_INT: Toggle L0 ' Cambia el estado del LED L0 INTF = 0 ' Limpia el Flag de Interrup, por RB0 Resume ' Retorna de la interrupcin

Figura 5.27. Fotografa de la iBOARD III ante la ejecucin del programa CAP_05_Ejemplo_03. bas (Interrupciones).

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 32

CAP_05_Ejemplo_ 04 (Comando SOUND).


' ' ' ' ' ' ' ' ' ' CAP_05_Ejemplo_04.bas Ejemplo bsico de utilizacin del comando SOUND....... ........... Star Trek The Next Generation .......... Es necesario colocar un buzzer piezoelctrico - entre el pin PORTB<3> y tierra a travs de una resistencia de 220 ohm en serie con el buzzer .................... 220 PORTB.3 -----/\/\/\-----(Buz)---+ | GND ------------------------+ Device = 16F876 ALL_DIGITAL = True XTAL = 20 Dim LOOP As Byte Dim Freq1 As Word Dim Freq2 As Word Symbol Symbol Symbol Symbol Symbol Symbol C = D = E = G = R = PIN 2092 2348 2636 3136 0 = PORTB.3 ' Define el Micro a Utilizar ' Configura Puertos como digitales ' Define velocidad resonador ' Declaracin de variable LOOP ' Declaracin de variable Frecuencia 1 ' declaracin de variable Frecuencia 2 ' ' ' ' ' ' frecuencia nota musical C frecuencia nota musical D frecuencia nota musical E frecuencia nota musical G Pausa - Silencio Pin de conexin 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. Fotografa de la iBOARD III ante la ejecucin del programa CAP_05_Ejemplo_04.bas Comando Sound. Se escuchar a travs del buzzer Un extracto de la cancin: Star Trek The Next Generation.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 33

CAPTULO 6
CONVERSIN ANALGICA A DIGITAL Introduccin. Los microcontroladores PIC16F876 poseen un conversor A/D de 10 bits de resolucin y 5 canales de entrada (puerto A). La conversin A/D se realiza por el mtodo de aproximaciones sucesivas. La resolucin que tiene cada bit procedente de la conversin tiene un valor que es funcin de la tensin de referencia Vref, de acuerdo con la siguiente frmula:

Resolucin = (Vref+ - Vref-) /1.024 = Vref /1.024


Si la Vref+ = 5 VDC y la Vref- es tierra, la resolucin es de 4,8 mV/bit, por lo tanto, a la entrada analgica 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 tensin de referencia determina los lmites mximo y mnimo de la tensin analgica que se puede convertir. El voltaje diferencial mnimo es de 2 V. En la figura 6.1. se muestra el esquema electrnico equivalente a la entrada de un canal del convertidor A/D del PIC16F876. Se observa que a travs del canal de entrada seleccionado, se aplica la seal analgica 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 seal de entrada sufra una serie de modificaciones producto de la impedancia de entrada propia del convertidor. Por ejemplo: a la entrada del pin de conversin A/D la capacitancia equivalente es de 5Pf, al mismo tiempo, dos diodos de clamping generalmente de alta velocidad limitan la tensin mxima de entrada a 5.5 VDC introduciendo pequeas deformaciones no lineales en la seal 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 seal de entrada es muestreada por la unidad de muestreo y retencin a una velocidad que vara dependiendo de ajustes proporcionados por el usuario. La tensin de referencia puede implementarse con la tensin interna de alimentacin VDD, o bien, con una externa que se introduce a travs de los pines RA3/AN3/Vref+ y /o RA2/AN2/Vref6.1. Registros asociados al conversor A/D ADRESH : ADRESL : ADCON0 : ADCON1 : Registro alto del resultado de la conversin A/D. Registro bajo del resultado del la conversin A/D. Controla la operacin del conversor A/D. Configura los Pines de E/S del conversor A/D.

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

Fuente: Fuente: Tomado de www.mikroe.com

Son dos los registros ms importantes involucrados en la conversin A/D. el ADCON0 y el ADCON1. Como se explic en captulos anteriores, si se desea realizar una conversin analgica digital por un puerto del microcontrolador (generalmente el puerto A en los PIC) Cmo hacerlo?. La respuesta siempre ser la misma. A travs de la configuracin de los registros internos del microcontrolador, en este caso, el ADCON0 y el ADCON1. Bsicamente la idea de la conversin analgica digital es la digitalizar una seal de entrada al pin del microcontrolador, la seal puede ser AC, DC AC+DC pero de tensin slo positiva, ya que, el convertidor A/D no tiene la capacidad de convertir seales de valor negativa. Esta seal es muestreada y convertida a un valor digital equivalente.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 33

Existen limitaciones tericas y prcticas en cuanto a la mxima frecuencia de conversin de la seal, atenuacin, rpida variacin en el tiempo y ruido. No sern temas que se aborden en este manual, sin embargo, el autor ha publicado en Internet tpicos relacionados a la instrumentacin virtual donde si se explica en forma detallada tpicos avanzados de la conversin A/D. Puede consultar esta informacin en: www.rosocontrol.com, en el tab relacionado a las clases impartidas sobre instrumentacin virtual. 6.2. El Registro ADCON0 (detalle de sus bits)

6.3. El Registro ADCON1 (detalle de sus bits)

Figura 6.2. Descripcin de los bits que conforman el registro ADCON0 del convertidor A/D del PIC16F876. Fuente: Manual tcnico del PC16F876.

Figura 6.3. Descripcin de los bits que conforman el registro ADCON1 del convertidor A/D del PIC16F876. Fuente: Manual tcnico del PC16F876.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 34

En la figura 6.4., se muestra la representacin grfica de las acciones que se realizan en base a la configuracin de los registros utilizados para la conversin A/D. La figura representa la lgica de funcionamiento de un PIC16F887 en vez de un PIC16F876, sin embargo, estos microcontroladores comparten ms de un 95% de caractersticas comunes.

Luego arranca el proceso de conversin por aproximaciones sucesivas, se consume un prximo TAD que no producir resultados en la conversin y luego los 10 TAD necesarios para la digitalizacin de la seal. Una vez transcurridos los 12 TAD, el resultado de la conversin A/D estar presente en los registros ADRESH y ADRESL.

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

Figura 6.4. Diagrama funcional para el mdulo de conversin A/D de un PIC16F887. Fuente: Fuente: Tomado de www.mikroe.com

6.4. Reloj para la conversin A/D El tiempo de conversin A/D se define en unidades de TAD. El conversor A/D requiere un mnimo de (12 TAD) para una conversin de 10 bits, lo que equivale a 1.6 us. El reloj para la conversin A/D se puede seleccionar a travs del registro ADCON0 <7:6>. La conversin A/D se realiza por el mtodo de aproximaciones sucesivas, son en total 12 TAD, los tiempos de conversin necesarios para la obtencin del resultado final. Como de aprecia en la Figura 6.6. La conversin analgica digital comienza con la activacin del bit de GO del registro ADCON0, all se espera un primer TAD hasta que se desconecte el capacitor de Hold de la entrada analgica.

Figura 6.6. Proceso de conversin A/D en base a aproximaciones sucesivas. Fuente: Manual tcnico del PC16F876.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 35

6.5. Resumen de Registros asociados a la conversin A/D 3. 4. Se pueden realizar conversiones A/D a pesar de que el PIC este en modo SLEEP, siempre y cuando, la seleccin del reloj para la conversin sea (RC). Si sobre el microcontrolador se realiza una operacin de RESET, el conversor A/D se apagar y la conversin ser abortada, en ese momento todos los pines del puerto A sern configurados como entradas analgicas.

6.7. Comandos en alto nivel para la conversin A/D ADIN: Inicia la conversin analgica/digital por hardware y almacena el resultado de la conversin en una variable. La resolucin de la conversin es de 10 bits. Sintaxis: variable = ADIN canal
Figura 6.6. Registros asociados a la conversin A/D y al puerto de entrada salida A. Fuente: Manual tcnico del PC16F876.

Canal: variable o constante (0..3) que estable el pin analgico para uso como entrada al conversor. Existen cuatro pines de entrada analgica, son: AN0, AN1, AN2 y AN3. Otros ajustes necesarios por el convertidor A/D, se realizan a travs de las declaraciones: DECLARE ADIN_TAD 2_FOSC, 8_FOSC, 32_FOSC 2_FOSC: 8_FOSC: 32_FOSC: 64_FOSC: rpido (oscilador/2) medio (oscilador/8) lento (oscilador/32) basado en el oscilador interno, valor por defecto = 64_FOSC.

INTCON: Registro asociado a las interrupciones. GIE bit de habilitacin de las interrupciones globales. PEIE bit de habilitacin de las interrupciones de los perifricos. PIR1: Registro asociado a las interrupciones. ADIF bandera de ocurrencia de una interrupcin por conversin A/D. PIE1: Registro asociado a las interrupciones. ADIE bit de habilitacin de la interrupcin por conversin A/D. ADRESH, ADRESL: Registros donde se almacena el valor de la conversin A/D. ADCON0, ADCN1: Registros de configuracin general asociados a la conversin A/D. TRISA: Registro de configuracin del puerto A como entrada salida digital. PORTA: Como Salida, Registro que configura el valor lgico 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 conversin A/D 1. 2. La mxima impedancia de entrada recomendada de la fuente analgica, a fin de no afectar la exactitud de la conversin, no deber ser mayor de 10 K. Despus de cada conversin de deber esperar un mnimo de tiempo equivalente a 2 TAD, durante este tiempo el condensador interno de Hold no estar conectado a la fuente analgica de entrada.

DECLARE ADIN_RES 8, 10, 12. Bits de resolucin, 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 mximo 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 resolucin 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.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 36

CAP_06_Ejemplo_01 (Conversin A/D utilizando comandos de alto nivel). Utilizando el sistema de desarrollo iBOARD III, realice la conversin A/D utilizando el canal 0 del convertidor (PORTA<0>) y el resultado mustrelo en el IDE Serial Comunicator del Compilador Basic PROTON. Este ltimo es una utilidad del compilador que permite visualizar datos enviados desde el microcontrolador. Ms adelante se describir en detalles esta utilidad. Por ahora, nos concentraremos en la conversin A/D. Para poder visualizar el valor de la conversin A/D, despus 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 bsico de utilizacin del convertidor A/D ' -----------------------------------------------------------------Device = 16F876 ' Define el microcontrolador utilizado XTAL = 20 ' Define la velocidad del resonador TRISA = $FF ADCON1 = $80 Dim Valor As Word Declare ADIN_RES 10 Declare ADIN_TAD 8_FOSC Declare ADIN_STIME 50 Main: Valor = ADIn 0 ' ' ' ' ' ' ' Configura PORTA como Entradas Configura PORTA<0> como ent. Analgica Variable de uso general Configura la resolucin en 10 bits Configura la velocidad de conversin Configura el tiempo de carga capacitor de hold del convertidor A/D

Figura 6.9. Men de seleccin del IDE Serial Comuicator.

' Realiza la conversin A/D por el canal ' AN0, PORTA<0> y el resultado lo alma_ ' cena en la variable valor. ' Enva la variable valor a travs 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. Codificacin del ejemplo bsico de utilizacin del convertidor A/D.

Luego seleccione la velocidad de conexin 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 conversin A/D como se muestra en la Figura 6.10.
<- Figura 6.8. Seleccin de la velocidad de conexin entre el PIC y el IDE Serial Comunicator.

Figura 6.10. Visualizacin de la ejecucin del programa CAP_06_Ejemplo_01.bas a travs del IDE Serial Comunicator.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 37

6.8. Pasos a realizar para una conversin A/D con interrupciones 1) Configurar el mdulo Conversor A/D Configurar los pines que actuarn como entradas analgicas, las que trabajan como E/S digitales y las usadas para la tensin de referencia a travs del registro ADCON1 Seleccionar el reloj de la conversin a travs del registro ADCON0 Seleccionar el canal de entrada A/D a travs del registro ADCON0 Activar el mdulo A/D a travs del registro ADCON0

CAP_06_Ejemplo_02 (Conversin A/D utilizando Interrupciones).


'CAP_06_Ejemplo_02.bas ' Ejemplo bsico de utilizacin del conv. A/D con interrupciones ' ------------------------------------------------------------------Device = 16F876 ' Define el microcontrolador utilizado XTAL = 20 ' Define la velocidad del resonador ADCON1 = %10000000 ADCON0 = %11000001 Symbol GIE = INTCON.7 Symbol ADIE = PIE1.6 Symbol ADIF = PIR1.6 Symbol PEIE = INTCON.6 Symbol GO = ADCON0.2 Dim Valor As Word On Interrupt GoTo ADC_INT ' ' ' ' ' ' ' ' ' ' ' Configura PORTA como analgico justificar el resultado a la derecha y F_OSC/32, AN0, ADC -> Activo. Bit habilit. interrupciones globales Bit habilit. interrupciones por ADC Bit flag interrupciones por ADC Bit habilit. interrupciones perifer. Bit GO_/DONE del ADC Variable de uso general Cuando ocurre una interrupcin va a la subrrutina "ADC_INT"

2) Activar, si se desea la interrupcin, escribiendo sobre los registros PIE1 y PIR1 Borrar la bandera de interrupcin por conversin A/D ADIF. Habilitar la interrupcin por conversin A/D, poner a 1 el bit ADlE. Habilitar la interrupcin global y la interrupcin por perifricos, poner a 1 los bits habilitadores GIE y PEIE.

3) Tiempo de espera para que transcurra el tiempo de adquisicin 4) Inicio de la conversin Poner a 1 el bit GO/DONE# a travs del registro ADCON0. 5) Tiempo de espera para completar la conversin A/D y que puede detectarse: Por la exploracin del bit GO/DONE#, que al completarse la conversin pasa a valer 0. Esperando a que se produzca la interrupcin si se ha programado, al finalizar la conversin. Aunque no se permita interrupcin, el sealizador ADIF se pondr a 1 al finalizar la conversin.

' PROGRAMA PRINCIPAL. ' ------------------------------------------------------------------Main: ADIF = 0 ' Limpia el Flag de int. del ADC GIE = 1 ' Habilita interrupciones globales PEIE = 1 ' Habilita las int. de perifricos ADIE = 1 ' Habilita la interrupcin por ADC GO = 1 ' Arranca la conversin A/D del ADC ' Enva la variable valor a travs 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 instruccin debe siempre ir al ' final del programa principal y antes ' de la sub_rutina de interrupcin.

6) Leer el resultado en los 10 bits vlidos de los registros ADRESH:L y borrar el flag bandera de interrupcin ADIF. 7) Para una nueva conversin regresar al paso 1) y 2). El tiempo de conversin por bit est definido por TAD. Se exige esperar un mnimo de 2 TAD para reiniciar una nueva conversin.

' SUB_RUTINA DE INTERRUPCIN ' ----------------------------------------------------------------ADC_INT: ADIE = 0 ' Deshabilita la interrupcin por ADC Valor.LowByte = ADRESL ' Carga el valor de la conversin en la Valor.HighByte = ADRESH ' Variable valor, byte alto y bajo. ADIF = 0 DelayUS 50 ADIE = 1 GO = 1 Resume ' ' ' ' Limpia el Flag de interrupcin por ADC Tiempo requerido para carga capacitor Habilita la interrupcin por ADC Arranca de nuevo la conversin ADC

Figura 6.11. Visualizacin de la ejecucin del programa CAP_06_Ejemplo_02.bas a travs del IDE Serial Comunicator. Nota. Debe producir los mismos resultados que produjo el programa CAP_06_Ejemplo_01.bas

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 38

CAPTULO 7
EL USART DE UN MICROCONTROLADOR PIC USART: Universal Synchronous Asynchronous Receiver Transmitter (EUSART). Es un perifrico de comunicacin serial de entrada / salida tambin conocido como interfaz SCI. Realiza la generacin de seales de reloj, registros de desplazamiento y buffer de datos necesarios para la transferencia serial de datos entre el PIC y el computador. Es un perifrico que trabaja en forma autnoma. En la Figura 7.1., se observa una representacin grfica de una seal en el USART, la cual, es codificada con codificacin NRZ. Se puede observar que una comunicacin serial comienza con 1 bit de arranque (Start), 8 9 bits de datos (8 para los PIC con mdulo USART y 9 para los PIC con mdulo EUSART), y un bit de parada (Stop). El EUSART integrado en el PIC16F886 posee las siguientes caractersticas: Comunicacin asncrona en modo Full Duplex Comunicacin sncrona Half Duplex en modo maestro y esclavo Largo de los caracteres programables de 8 9 bits. Deteccin de errores en la comunicacin

7.1. Transmisin Asincrnica Al igual que en otros perifricos del microcontrolador, el USART tiene dos registros de configuracin, uno para la transmisin y otro para la recepcin de informacin. La figura 7.2., muestra los bits individuales que conforman el registro de transmisin TXSTA del EUSART de un PIC16F886.

Figura 7.2. Registro de transmisin del USART de un PIC16F886. Fuente: Tomado de la pgina web: www.mikroe.com

CSRC - Clock Source Select bit Slo en modo sincrnico. 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 transmisin 0 - 8-bit Largo en bits de la transmisin TXEN - Transmit Enable bit 1 Transmisin habilitada 0 - Transmisin no habilitada SYNC - EUSART Mode Select bit 1 - EUSART Operacin en forma sincrnica 0 - EUSART Operacin en forma asincrnica SENDB - Send Break Character bit Slo en modo asincrnico 1 Habilitar el caracter de Break 0 - Transmisin de carcter Break se completo BRGH - High Baud Rate Select bit determina la velocidad de la transmisin en modo asincrnico 1 - EUSART Operacin a alta velocidad 0 - EUSART Operacin a baja velocidad TRMT - Transmit Shift Register Status bit 1 El registro TSR est vaco 0 El registro TSR est lleno.

MODO Asincrnico: Los datos se transmiten y reciben utilizando la codificacin de no retorno por cero (NRZ), no se utiliza una seal de reloj y bsicamente los datos son transferidos de la siguiente forma: En estado de reposo la lnea de datos permanece en estado alto (1) Cada transmisin 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 ms significativo (MSB) Cada transmisin de datos culmina con un bit de parada (STOP), el cual, siempre es uno (1)

Figura 7.1. Representacin grfica de una seal en el USART de un PIC.

TX9D - Ninth bit of Transmit Data puede ser usado como direccin o bit de paridad.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 39

7.2. Recepcin Asincrnica Para la recepcin de informacin, el microcontrolador tambin dispone de un registro de configuracin denominado RCSTA, el cual, puede observar a travs de la Figura 7.4.

Figura 7.2. Registro de Recepcin del USART de un PIC16F886. Fuente: Tomado de la pgina web: www.mikroe.com

Figura 7.3. Diagrama de bloque del registro de transmisin del EUSART de un PIC16F886. Fuente: Tomado de la pgina web: www.mikroe.com

Haciendo referencia a la figura 7.3., podemos entender el funcionamiento de los diferentes bloques que conforman el mdulo de transmisin del EUSART. El pin de transmisin generalmente ubicado en el PORTC<6> es el encargado de enviar la informacin al mundo exterior, por ejemplo, un puerto serial de un computador PC. Los bytes de informacin que el CPU coloque en el buffer de salida sern transmitidos a una velocidad programable por el bloque generador de baudios BAUD Rate generador a travs del pin PORTC<6> denominado tambin Tx pin. Existen diferentes bits de control, cada uno de ellos con una funcin especfica como la habilitacin o no del EUSART TXEN, bit de bandera de interrupcin TXIF y habilitacin de interrupciones TXIE, tamao del dato a transmitir 8 9 bits, bit de status TRMT y bits de configuracin del generador de Baudios. Cada uno de estos bits juega un papel importante en la configuracin final del mdulo USART / EUSART, pueden configurarse en forma manual y/o a travs del uso de instrucciones especializadas encontradas en los lenguajes de alto nivel.

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 recepcin de 9-bits 0 - Se habilita la recepcin de 8 bits SREN - Single ReceiveEnable bit Es utilizado en modo sincrnico y operacin como Maestro 1 Recepcin simple habilitada 0 - Recepcin simple no habilitada CREN - Continuous Receive Enable bit de pendiendo de la configuracin Asynchronous mode: 1 Recepcin habilitada 0 Recepcin no habilitada Synchronous mode: 1 Se habilita la recepcin continua hasta que el bit CREN sea cero(0). 0 - No habilita la recepcin en forma continua ADDEN - Address Detect Enable bit es solo utilizado en el modo de detectar direccin 1 Habilita la deteccin de direccin de los 9 bit de datos recibidos 0 No habilita la deteccin de direccin. El noveno bit se utiliza como bit de paridad FERR - Framing Error bit 1 En la recepcin de detecta el error Framing Error 0 - No se detecta el error Framing Error OERR - Overrun Error bit. 1 En la recepcin 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 direccin o de paridad

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 40

intervalo predeterminado de tiempo. Este error se indica mediante el bit FERR del registro RCSTA. Este error no genera por si mismo una interrupcin, 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, simultneamente causa una reinicializacin del USART.

Framing error Ocurre cuando el receptor no detecta el bit de parada en un

Overrun Error . El buffer del PIC es del tipo FIFO y puede almacenar slo dos

(2) Bytes caracteres. Un error de Overrun ocurre cuando ste buffer recibe ms de dos caracteres, simplemente no hay espacio para almacenar ms 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 recibirn ms 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.

Recepcin de 9 bits: La recepcin 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 automticamente puesto en cero (0) antes de su lectura. Esto se puede observar a travs de la Figura 7.5.

Figura 7.4. Diagrama de bloque del registro de recepcin del USART de un PIC16F886. Fuente: Tomado de la pgina web: www.mikroe.com

Haciendo referencia a la figura 7.4., podemos entender el funcionamiento de los diferentes bloques que conforman el mdulo de recepcin del EUSART. El pin de recepcin generalmente ubicado en el PORTC<7> es el encargado de recibir la informacin del mundo exterior, por ejemplo, desde el puerto serial de un computador PC. Los bytes de informacin que el PC enve 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 informacin 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 recepcin RCREG, produciendo al mismo tiempo una interrupcin. Existen diferentes bits de control, cada uno de ellos con una funcin especfica como la habilitacin o no del puerto serial SPEN, bit de habilitacin del noveno bits RX9, bit de habilitacin del mdulo de recepcin SREN, bit de bandera de interrupcin TXIF y habilitacin de interrupciones TXIE, bit habilitacin de recepcin continua CREN y los bits para el manejo de errores como el error de error Framing FERR y error de Overrun OERR.

Figura 7.5. Diagrama de bloque del registro de recepcin, recepcin del noveno bit . Fuente: Tomado de la pgina web: www.mikroe.com

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 41

7.3. Interconexin de microcontroladores PIC a travs de EUSART Cuando el bit ADDEN del registro RCSTA es uno (1), se habilita la recepcin del noveno bit, ste modo permite la comunicacin serial entre microcontroladores, el principio es simple. El Maestro enva 9 bit de datos con la direccin de un microcontrolador esclavo al cual quiere comunicarse, como todos los microcontroladores comparten la lnea de transmisin y recepcin, todos reciben el mismo dato. Una vez recibido el dato, cada microcontrolador esclavo verifica la direccin propia con la enviada, si no es la misma, el software del microcontrolador deber deshabilitar la deteccin de direccin, 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 recepcin del noveno bit bit de deteccin de direccin, esto se realiza colocando en uno (1) el bit ADDEN del registro RCSTA. La figura 7.6., muestra un esquema de interconexin entre microcontroladores a travs del mdulo EUSART.

Figura 7.7b, se observan las relacioneS matemticas para el calculo de la velocidad de comunicacin en Baudios.

Figura 7.6. Esquema de interconexin de microcontroladores utilizando el mdulo EUSART. Fuente: Tomado de la pgina web: www.mikroe.com

7.4. Generador de Baud Para la generacin de los Baud, se utilizan dos registros de ocho bits (SPBRGH ,SPBRG), el valor escrito en esos registros determinar la velocidad de transmisin/recepcin 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 clculo de los Baud. La figura 7.7a. muestra en forma grfica como se relacionan los diferentes registros para configurar la velocidad de transmisin / recepcin en el mdulo EUSART, mientras que el la

Figura 7.7. a) Registros relacionados con el mdulo generador de Baud del EUSART, b) Formulacin matemtica para el clculo de los Baud. Fuente: Tomado de la pgina web: www.mikroe.com

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 42

7.5. Resumen de pasos a seguir para realizar una transmisin serial asincrnica a travs de los registros del mdulo EUSART. La velocidad deseada (Baud) debe ser justada a travs 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 transmisin de 9 bits, el bit TX9 del registro TXSTA deber ser colocado en uno (1) La transmisin de datos es habilitada colocando en uno (1) el bit TXEN del registro TXSTA. El bit TXIF del registro PIR1 es automticamente puesto en uno (1). Si se desea que el bit TXEN cause una interrupcin, los bits GIE, PEIE y TXIE del registro INTCON debern ser habilitados. En una transmisin de 9 bits, el valor del noveno bits, deber ser escrito en el bit TX9D del registro TXSTA. La Transmisin comienza cuando se escriben los 8 bits de datos sobre el registro de recepcin TXREG.

7.7. Comandos en alto nivel para el manejo del USART/EUSART Como hemos podido observar a lo largo de este captulo, a medida que los perifricos del microcontrolador realizan tareas ms complicadas y complejas aumenta tambin la complejidad para la configuracin de sus registros. Trabajar en lenguaje ensamblador con los registros del EUSART es una tarea titnica. Gracias al desarrollo de los compiladores de lenguajes en alto nivel como el Basic PROTON, CCS y MikroBasic, podemos realizar programas que involucren la utilizacin del USART/EUSART de los microcontroladores en cuestin de segundos. Sin embargo, la teora explicada con anterioridad, es total y completamente necesaria para entender la arquitectura y la organizacin del mdulo de comunicacin serial. Transmisin Asincrnica: HRSout Transmite uno o ms valores utilizando el USART/EUSART del microcontrolador. Sintaxis: HRSout item, item

Item: Constante, variable, expresin, cadena de caracteres con o sin modificadores de formato que se transmitirn a travs del USART/EUSART del microcontrolador.

7.6. Resumen de pasos a seguir para realizar una recepcin serial asincrnica a travs de los registros del mdulo EUSART. La velocidad deseada (Baud) debe ser justada a travs 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 recepcin de 9 bits, el bit RX9 del registro RCSTA deber ser colocado en uno (1) La recepcin de datos es habilitada colocando en uno (1) el bit CREN del registro RCSTA. Si se desea que la recepcin del dato cause una interrupcin, los bits GIE, PEIE y RCIE del registro INTCON debern ser habilitados. El registro RCSTA deber leerse para obtener informacin acerca de la ocurrencia de errores Framing y Overrun. Ante una recepcin de 9 bits, el valor del noveno bits ser almacenado en el bit RX9D del registro RCREG. Ante una recepcin de 8 bits, el valor recibido ser almacenado en el registro RCREG, el cual, deber leerse para obtener dicho dato.
Figura 7.8. Modificadores de Formato utilizados por el comando HRSout. Fuente: Manual del Usuario compilador Basic PROTON.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 43

Comando para la Recepcin Asincrnica: HRSin Recibe uno o ms valores utilizando el USART/EUSART del microcontrolador. Sintaxis: Variable = HRSin , {TimeOut, TimeOut Label } HRSin {TimeOut, TimeOut Label }, {Parity Error Label }, Modificadores, Variable {, Variable}

DECLARE HSERIAL_RCSTA Valor (0..255) Escribe en el registro RCSTA el valor de configuracin entre (0 .. 255) DECLARE HSERIAL_TXSTA Valor (0..255) Escribe en el registro TXSTA el valor de configuracin entre (0 .. 255) DECLARE HSERIAL_PARITY ODD EVEN Habilita o deshabilita la deteccin 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 tambin se puede limpiar colocando el bit CREN del registro RCSTA en cero (0) y luego en uno (1). CAP_07_Ejemplo_01.bas Utilizacin bsica del USART/EUSART Utilizando el sistema de desarrollo iBOARD III, haga un programa que utilice el USART del microcontrolador para enviar y recibir informacin al computador. La codificacin realizada es mostrada en la figura 7.10.
' CAP_07_Ejemplo_01.bas ' Ejemplo bsico de utilizacin del USART/EUSART ' ----------------------------------------------------------------Device = 16F876 ' Define el microcontrolador utilizado XTAL = 20 ' Define la velocidad del resonador Declare HSERIAL_BAUD 9600 Dim Edad As Byte ' Configura vel. Baud = 9600

TimeOut: Opcional, valor en ms que el comando HRSin esperar por la recepcin 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 ms modificadores de formato para la variable recibida. Variable: Bit, Byte, Word o Dword que almacenar el valor recibido en la
comunicacin serial.

Figura 7.9. Modificadores de Formato utilizados por el comando HRSin. Fuente: Manual del Usuario compilador Basic PROTON.

7.8. Configuracin de los registros del USART/EUSART en alto nivel Para facilitar la configuracin de los registros asociados a la comunicacin serial mediante el mdulo USART / EUSART, el compilador Basic PROTON dispone de la directiva DECLARE, Existen cinco (05) directivas asociadas al USART/EUSART cuando se utiliza como transmisin - recepcin asincrnica: DECLARE HSERIAL_BAUD Valor Ajusta la velocidad del mdulo generador de Baud del microcontrolador. Por defecto su valor es de 2400 Baudios.

Main: HRSOut "Sistema de Desarrollo para PIC iBOARD III", 13 HRSOut "Ejemplo de utilizacin 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, " Aos",13 DelayMS 10000 GoTo Main Figura 7.10. Listado de la codificacin del programa CAP_07_Ejemplo_01.bas

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 44

El programa mostrado en la figura 7.10., es una aplicacin bsica de la utilizacin del USART/EUSART del microcontrolador. Enva y recibe datos al PC y de esta forma se establece una comunicacin con el usuario. El primer paso es ejecutar el programa CAP_07_Ejemplo_01.bas desde el microcontrolador, esto se realiza a travs de la compilacin 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.

Si no aparece el texto mostrado en pantalla, deber hacer un reset a travs 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 travs del USART/EUSART le enviar al PC la informacin que inicialmente mostrar dos lneas, ms una tercera lnea de separacin ---- y luego en la cuarta lnea le preguntar: Introduzca su Edad?, deber escribir en el cuadro superior de la pantalla su edad, sta deber estar comprendida entre diez 10 aos y cincuenta 50 aos, de lo contrario le volver a preguntar su edad. Una vez escrita su edad en el recuadro, el PC le enviar al microcontrolador un nmero 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 Aos

Luego seleccione la velocidad de conexin 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 conversin A/D como se muestra en la Figura 7.13. <- Figura 7.11. Seleccin de la velocidad de conexin entre el PIC y el IDE Serial Comunicator.

Figura 7.12. Men de seleccin del IDE Serial Comunicator.

Figura 7.13. Visualizacin de la ejecucin del programa CAP_07_Ejemplo_01.bas A travs del IDE Serial Comunicator.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 45

CAP_07_Ejemplo_02.bas Utilizacin del USART y Visual Basic Una necesidad creciente en la industria es la comunicacin de microcontroladores y programas de aplicacin para la supervisin y control de procesos. En el siguiente ejemplo, utilizaremos el microcontrolador PIC para enviar informacin a un programa realizado en VB6 y por supuesto se har utilizando el perifrico USART. El listado completo del programa en VB6 cdigo 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 bsico de utilizacin 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 HRSOut DEC3 Index, 13 DelayMS 10 Next GoTo Main End ' Se enva a travs del USART una rampa ' de valor cero a 255. Los datos se en_ ' vian con una pausa de 10 ms.

En la pantalla de configuracin del programa UART_1 en VB6, deber configurar el puerto de conexin serial donde est conectada el sistema de desarrollo iBOARD III, si este sistema se conecta al puerto USB, la pregunta es Cul puerto de comunicacin 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 captulo 2, Instalacin de Drivers. Una vez seleccionado el puerto de comunicacin serial, presione el botn Conectar y deber visualizar en su programa lo mostrado en la Figura 7.16. La comunicacin serial se est realizando entre el USART del microcontrolador PIC y el computador.

Figura 7.14. Listado de la codificacin del programa CAP_07_Ejemplo_02.bas

Figura 7.15. Pantalla de configuracin del programa en VB6 UART_1.

Figura 7.16. Visualizacin de la ejecucin del programa CAP_07_Ejemplo_02.bas junto al programa en VB6 UART_1.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 46

CAPTULO 8
TEMPORIZADORES TIMERS Introduccin. 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 tcnicamente: TMR0, TMR1 y TMR2. TMR0, es un temporizador de 8 bits que, puede utilizarse como cronmetro de tiempo (modo Timer) con seal de reloj tanto interna como externa. Tambin puede ser utilizado como contador de eventos externos aplicados al pin RA4/T0CKI. El TMR0, tiene las siguientes caractersticas: 8 bits puede ser utilizado como timer y como counter Se puede leer y escribir Tiene un pre-escalador de 8 bits por software La seal de reloj puede ser interna o externa Interrupcin por desbordamiento programable Seleccin del flanco habilitacin de la seal externa Pre-escalador compartido con el perifrico WDT 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 travs de este pin se puede introducir una seal externa al microcontrolador, el mismo puede realizar el conteo de flancos de subida (alfa) bajada (beta) dependiendo de la programacin 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 configuracin se comparten para la configuracin 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 travs 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 seal 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 activacin de la bandera de interrupcin por TMR0 bit No. 2 del registro de interrupciones INTCON<2> T0IF. Si el bit de habilitacin por TMR0 INTCON<5> T0IE y el bit de interrupciones globales INTCON<7> GIE estn activados, entonces el TMR0 podr interrumpir al CPU del microcontrolador, pudindose ejecutar la rutina de interrupcin por TMR0 previamente compilada.

COMO TIMER OPTION_REG<5> T0CS = 0 El registro TMR0 se incrementa en cada ciclo de instruccin La sincronizacin 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 pgina web: www.mikroe.com

El registro asociado al TMR0 es el registro de Opciones, como se mencion en el captulo 5, punto 5.10, el registro de opciones permite realizar la configuracin del TMR0 a travs de la configuracin de sus diferentes bits. En la Figura 8.1. se observan los diferentes bits que componen al registro de Opciones.

Figura 8.2. Diagrama funcional de bloques del timer TMR0. Fuente: Tomado de la pgina web: www.mikroe.com

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 47

8.1. Interrupcin por TMR0 Una interrupcin 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 interrupcin), entonces la interrupcin ocurrir y se ejecutar la rutina de servicio de interrupcin por TMR0. La interrupcin 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 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 utilizacin 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> Bits 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 interrupcin por TMR0, a travs del registro INTCON<5> bit TOIE Habilitar la interrupcin por Perifricos, a travs del registro INTCON<6> bit PEIE Habilitar la interrupcin global , a travs del registro INTCON<7> bit GIE


Figura 8.3. Registros asociados al funcionamiento del TMR0. Fuente: Manual tcnico del PIC16F876.

8.3. Como trabaja la temporizacin del TMR0 Frecuencia de oscilacin (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 interrupcin Tint = INCREM * (255- Valor I) Ejemplo: Utilice al TMR0 para generar una interrupcin cada 10 ms, utilizando el PIC 16F876 del sistema de desarrollo iBOARD III. Tint = 10 ms FOSC = 20 MHz

8.5. Ejemplo de utilizacin del TMR0 El siguiente ejemplo, muestra como hacer la configuracin del TMR0 para que interrumpa al programa principal cada 10 ms. El resultado del programa se podr observar a travs del PROTON IDE Serial Comunicator, el cual, deber configurarse para recibir informacin serial a 38400 Baud.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 48

' ' ' ' ' '

CAP_08_Ejemplo_01.bas Ejemplo bsico de utilizacin 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 ' DEFINICIN DE SIMBOLOS, VARIABLES Y CONSTANTES ' ----------------------------------------------------------------Declare HSERIAL_BAUD 38400 ' Velocidad conexin serial en baud Symbol Symbol Symbol Symbol Symbol Symbol Symbol Symbol Symbol GIE PEIE T0IE T0IF T0CS PSA PS2 PS1 PS0 = = = = = = = = = INTCON.7 INTCON.6 INTCON.5 INTCON.2 OPTION_REG.5 OPTION_REG.3 OPTION_REG.2 OPTION_REG.1 OPTION_REG.0 ' ' ' ' ' ' ' ' ' Bit Bit Bit Bit Bit Bit Bit Bit Bit habilit. interrupciones globales habilit. interrupciones perifer. habilit. interrupciones por TMR0 flag interrupciones por TMR0 seleccin fuente de Reloj TMR0 de seleccin para el prescalador de seleccin para el prescalador de seleccin para el prescalador de seleccin para el prescalador

Disable

' Esta instruccin debe siempre ir al ' final del programa principal y antes ' de la sub_rutina de interrupcin.

' RUTINA DE INTERRUPCIN ' ----------------------------------------------------------------TMR0_INT: T0IE = 0 ' Deshabilita la interrupcin 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 interrupcin por TMR0 Resume

Dim Conteo As Word Dim Conteo_T0 As Word Dim Index As Word

' Variable de uso general ' Variable de uso general ' Variable de uso general

On Interrupt GoTo TMR0_INT ' Cuando ocurre una interrupcin 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 perifricos T0IE = 1 ' Habilita la interrupcin 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

Figura 8.4. Imagen de la ejecucin 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.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 49

8.6. El timer TMR1 TMR1, es el nico temporizador/contador ascendente con un tamao 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 interrupcin por desbordamiento de su registro de conteo. Su funcionamiento est gobernado por el valor de programacin 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 acten como entradas del oscilador externo. Si T1OSCEN vale cero, el reloj vendr a travs del pin RC0/T1OSO/T1CKI. En ambos casos, el TMR1 funcionar como contador de eventos externos anulando la programacin de los bits 1 y 0 del registro TRISC<1:0>. Funcionamiento como TIMER: El registro TMR1H:TMR1L se incrementa en cada ciclo de instruccin. Funcionamiento como COUNTER: El registro TMR1H:TMR1L se incrementa en cada transicin alfa del reloj externo. 8.7. Registros asociados al TMR1

Figura 8.5. Registros asociados al funcionamiento del TMR1. Fuente: Manual tcnico del PIC16F876.

Existen varios registros asociados al TRM1, el ms importante es el registro de configuracin denominado T1CON. La figura 8.6. contiene la descripcin de los bits individuales del registro TMR1.

Figura 8.6. Descripcin de los bits individuales del registro T1CON. Manual tcnico del PIC16F876.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 50

8.7. El timer TMR1 trabajando como Temporizador

8.9. El timer 1 del PIC16F886 / 887 El nuevo PIC16F886/887 comparte casi la totalidad de los registros encontrados en los PIC16F876/877, sin embargo, incluye dos bits de configuracin adicionales denominados T1GINV y TMR1GE, estos bits permiten la configuracin del TMR1 a travs del circuito comparador presente en este tipo de microcontrolador. Esto se puede observar a travs de la Figura 8.9.

Figura 8.7. Timer 1 trabajando en modo temporizador. Fuente: Tomado de la pgina web: www.mikroe.com

8.8. El timer TMR1 trabajando como Contador

Figura 8.9. Registro T1CON en los PIC16F886/887. Fuente: Tomado de la pgina web: www.mikroe.com

8.10. Como trabaja la temporizacin del TMR1 Frecuencia de oscilacin (resonador/cristal): FOSC = 20 MHz para el PIC16F876 del sistema de desarrollo iBOARD III Incremento del Registro TMR1 INCREM = Pre-escalador * 4/FOSC
Figura 8.8. Timer 1 trabajando en modo contador. Fuente: Tomado de la pgina web: www.mikroe.com

Tiempo de interrupcin Tint = INCREM * (65535- Valor I)

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 51

Ejemplo: Utilice al TMR1 para generar una interrupcin 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) Tint|MAX(1:4) Tint|MAX(1:2) Tint|MAX(1:1) = = = = 8 4 2 1 * * * * 4/20Mhz 4/20Mhz 4/20Mhz 4/20Mhz * * * * (65535-0) (65535-0) (65535-0) (65535-0) = = = = 104.856 52.428 26.214 13.107 ms ms ms ms

Habilitar la interrupcin por Perifricos, a travs del registro INTCON<6> bit PEIE Habilitar la interrupcin global , a travs del registro INTCON<7> bit GIE

8.12. Ejemplo de utilizacin del TMR1 El siguiente ejemplo, muestra como hacer la configuracin del TMR1 para que interrumpa al programa principal cada 10 ms. El resultado del programa se podr observar a travs del PROTON IDE Serial Comunicator, el cual, deber configurarse para recibir informacin serial a 38400 Baud.
' ' ' ' ' ' CAP_08_Ejemplo_02.bas Ejemplo bsico de utilizacin 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 ' DEFINICIN DE SIMBOLOS, VARIABLES Y CONSTANTES ' -----------------------------------------------------------------Declare HSERIAL_BAUD 38400 ' Velocidad conexin serial en baud Symbol Symbol Symbol Symbol Symbol Symbol Symbol Symbol Symbol Symbol Dim Dim Dim Dim GIE = INTCON.7 PEIE = INTCON.6 T1IE = PIE1.0 T1IF = PIR1.0 T1CKPS1 = OPTION_REG.5 T1CKPS0 = OPTION_REG.4 T1OSCEN = T1CON.3 T1SYNC = T1CON.2 TMR1CS = T1CON.1 TMR1ON = T1CON.0 As As As As Word Word Word Word ' ' ' ' ' ' ' ' ' ' ' ' ' ' Bit Bit Bit Bit Bit Bit Bit Bit Bit Bit habilit. int. globales habilit. int. perifer. habilit. int. por TMR1 flag interrupciones por TMR1 seleccin pre-escalador seleccin pre-escalador habilit. Conteo TMR1 habilit. sincronizacin seleccin del reloj habilit. On/Off del TMR1

-> 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 utilizacin del TMR1 Ajustar el registro T1CON<5:4> Bits 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 sincronizacin del TMR1 Ajustar el registro T1CON<1> Bit TMR1CS = 0 seleccin 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 interrupcin por TMR1, a travs del registro PIE1<0> bit TMR1IE

Conteo Conteo_T1 Index TMR1A

Variable de uso general Variable de uso general Variable de uso general Valor Inicial del Timer1

On Interrupt GoTo TMR1_INT

' Cuando ocurre una interrupcin va a ' la subrrutina "TMR1_INT"

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 52

' PROGRAMA PRINCIPAL. ' ----------------------------------------------------------------Main: T1IF = 0 ' Limpia el flag de int. del TMR1 T1CKPS1 = 0 ' Asigna al pre-escalador valor 1:1 T1CKPS0 = 0 " T1OSCEN = 1 ' Habilit. del TMR1 T1SYNC = 0 ' Sincronizacin 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 perifricos T1IE = 1 ' Habilita la interrupcin 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 instruccin debe siempre ir al ' final del programa principal y antes ' de la sub_rutina de interrupcin.

' RUTINA DE INTERRUPCIN ' ----------------------------------------------------------------TMR1_INT: T1IE = 0 ' Deshabilita la interrupcin 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 interrupcin por TMR1 Resume

Figura 8.10. Imagen de la ejecucin 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.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 53

8.13. El timer TMR2 TMR2, es un temporizador ascendente de 8 bits, que se puede leer y escribir. Tambin puede realizar funciones especiales para el puerto serie sincrnico (SSP) y con los mdulos de captura y comparacin, que veremos ms adelante. Entre sus caractersticas ms 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 slo interna Pre-escalador de relacin 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 comunicacin serial sincrnica o de los CCP La escritura del TMR2, TCON2 o cualquier reset hacen que el pre y postescalador se borren y tomen el valor 00h.

Fuente: Manual tcnico del PIC16F876.

La seal de reloj es slo 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 travs de la Figura 8.12., mientras que en la figura 8.11. se describe el significado de cada bit en particular del registro T2CON.
Figura 8.12. Diagrama funcional de bloques del timer TMR2. Fuente: Tomado de la pgina web: www.mikroe.com

Figura 8.11. Significado de cada bit en particular del registro T2CON.

Figura 8.13. Registros asociados al funcionamiento del TMR2. Fuente: Manual tcnico del PIC16F876.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 54

8.14. Como trabaja la temporizacin TMR2 Frecuencia de oscilacin (resonador/cristal) FOSC = 20 MHz para el PIC16F876 Incremento del Registro TMR2 INCREM = Pre-escalador * 4/FOSC Tiempo de interrupcin Tint = INCREM * ( PR2) * Post-escalador Ejemplo: Utilice al TMR2 para generar una interrupcin 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 utilizacin del TMR2 Ajustar el registro T2CON<6:3> Bits 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> Bits T2CKPS1 = 1 T2CKPS0 = 1, lo que significa pre-escalador = 1:16 Introducir en el TMR2, el valor inicial de 240

Habilitar la interrupcin por TMR2, a travs del registro PIE1<1> bit TMR2IE Habilitar la interrupcin por Perifricos, a travs del registro INTCON<6> bit PEIE Habilitar la interrupcin global , a travs del registro INTCON<7> bit GIE

8.16. Ejemplo de utilizacin del TMR2 El siguiente ejemplo, muestra como hacer la configuracin del TMR2 para que interrumpa al programa principal cada 10 ms. El resultado del programa se podr observar a travs del PROTON IDE Serial Comunicator, el cual, deber configurarse para recibir informacin serial a 38400 Baud.
' ' ' ' ' ' CAP_08_Ejemplo_03.bas Ejemplo bsico de utilizacin 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 ' DEFINICIN DE SIMBOLOS, VARIABLES Y CONSTANTES ' -----------------------------------------------------------------Declare HSERIAL_BAUD 38400 ' Velocidad conexin serial en baud Symbol Symbol Symbol Symbol Symbol Symbol Symbol Symbol Symbol Symbol Symbol GIE = INTCON.7 PEIE = INTCON.6 T2IE = PIE1.1 T2IF = PIR1.1 TOUTPS3 = T2CON.6 TOUTPS2 = T2CON.5 TOUTPS1 = T2CON.4 TOUTPS0 = T2CON.3 TMR2ON = T2CON.2 T2CKPS1 = T2CON.1 T2CKPS0 = T2CON.0 ' ' ' ' ' ' ' ' ' ' ' Bit habilit. interrupciones globales Bit habilit. interrupciones perifer. Bit habilit. interrupciones por TMR2 Bit flag interrupciones por TMR2 Seleccin del Post-Escalador " " " Bit habilit. On/Off del TMR2 Seleccin del Pre-escalador "

Dim Conteo As Word Dim Conteo_T2 As Word Dim Index As Word On Interrupt GoTo TMR2_INT

' Variable de uso general ' Variable de uso general ' Variable de uso general ' Cuando ocurre una interrupcin va a ' la subrrutina "TMR2_INT"

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 55

' PROGRAMA PRINCIPAL. ' ----------------------------------------------------------------Main: T2IF = 0 ' Limpia el flag de int. del TMR2 TOUTPS3 = 1 ' Seleccin 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 perifricos T2IE = 1 ' Habilita la Interrupcin 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 instruccin debe siempre ir al ' final del programa principal y antes ' de la sub_rutina de interrupcin.

' RUTINA DE INTERRUPCIN ' -----------------------------------------------------------------TMR2_INT: T2IE = 0 ' Deshabilita la interrupcin 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 interrupcin por TMR2 Resume Figura 8.14. Imagen de la ejecucin del programa CAP_08_Ejemplo_03.bas Se observa que pos cada conteo de 1 seg en la variable Conteo del programa Principal, la variable Conteo_T2 se incrementa 100 veces, como era de esperarse.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 56

8.17. Ejemplo de utilizacin del TMR0, TMR1 y TMR2 en forma simultnea El siguiente ejemplo, muestra como hacer la configuracin de los timers TMR0, TMR1 y TMR2 para que interrumpan al programa principal cada 10 ms. El resultado del programa se podr observar a travs del PROTON IDE Serial Comunicator, el cual, deber configurarse para recibir informacin serial a 38400 Baud.
' ' ' ' ' ' CAP_08_Ejemplo_04.bas Utilizacin del TMR0,TMR1 y TMR2 en forma simultnea. 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 ' DEFINICIN DE SIMBOLOS, VARIABLES Y CONSTANTES ' ----------------------------------------------------------------Declare HSERIAL_BAUD 38400 ' Velocidad conexin serial en baud Symbol Symbol Symbol Symbol Symbol Symbol Symbol Symbol Symbol Symbol Symbol Symbol Symbol Symbol Symbol Symbol Symbol Symbol Symbol Symbol Symbol Symbol Symbol Symbol Symbol Symbol GIE PEIE T0IE T0IF T0CS PSA PS2 PS1 PS0 = = = = = = = = = INTCON.7 INTCON.6 INTCON.5 INTCON.2 OPTION_REG.5 OPTION_REG.3 OPTION_REG.2 OPTION_REG.1 OPTION_REG.0 ' ' ' ' ' ' ' ' ' Bit Bit Bit Bit Bit Bit Bit Bit Bit ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' habilit. interrupciones globales habilit. interrupciones perifer. habilit. interrupciones por TMR0 flag interrupciones por TMR0 seleccin fuente de Reloj TMR0 de seleccin para el prescalador de seleccin para el prescalador de seleccin para el prescalador de seleccin para el prescalador Bit Bit Bit Bit Bit Bit Bit Bit habilit. int. por TMR1 flag interrupciones por TMR1 seleccin pre-escalador seleccin pre-escalador habilit. Conteo TMR1 habilit. sincronizacin seleccin del reloj habilit. On/Off del TMR1 Dim Dim Dim Dim Dim Dim Conteo Conteo_T0 Conteo_T1 Conteo_T2 Index TMR1A As As As As As As Word Word Word Word Word Word ' ' ' ' ' ' Variable de uso general Variable de uso general Variable de uso general Variable de uso general Variable de uso general Valor inicial del Timer1

On Interrupt GoTo TMR012_INT

' Cuando ocurre una interrupcin 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 perifricos T0IE = 1 ' Habilita la interrupcin por TMR0 Conteo = 0 ' Limpia la variable Conteo Conteo_T0 = 0 ' Limpia la variable Conteo_T0 T1IF = 0 T1CKPS1 = 0 T1CKPS0 = 0 T1OSCEN = 1 T1SYNC = 0 TMR1ON = 1 TMR1A = 50000 TMR1H = TMR1A.HighByte TMR1L = TMR1A.LowByte GIE = 1 PEIE = 1 T1IE = 1 Conteo = 0 Conteo_T1 = 0 T2IF = 0 TOUTPS3 = 1 TOUTPS2 = 1 TOUTPS1 = 0 TOUTPS0 = 0 TMR2ON = 1 T2CKPS1 = 1 T2CKPS0 = 1 TMR2 = 240 ' Limpia el flag de int. del TMR1 ' Asigna al pre-escalador valor 1:1 " ' Habilit. del TMR1 ' Sincronizacin TMR1 ' Bit de ON/OFF del TMR1 ' Valor inicial del TMR1 ' Valor inicial del TMR1 Byte Alto ' Valor inicial del TMR1 Byte Bajo ' Habilita interrupciones globales ' Habilita las int. de perifricos ' Habilita la interrupcin por TMR1 ' Limpia la variable Conteo ' Limpia la variable Conteo_T1 ' ' ' ' ' ' ' Limpia el flag de int. del TMR2 Seleccin del Post-Escalador 1:13 " " " Habilit. del TMR2 Asigna al pre-escalador valor 1:16 " ' Valor inicial del TMR2

T1IE = PIE1.0 T1IF = PIR1.0 T1CKPS1 = OPTION_REG.5 T1CKPS0 = OPTION_REG.4 T1OSCEN = T1CON.3 T1SYNC = T1CON.2 TMR1CS = T1CON.1 TMR1ON = T1CON.0 T2IE = PIE1.1 T2IF = PIR1.1 TOUTPS3 = T2CON.6 TOUTPS2 = T2CON.5 TOUTPS1 = T2CON.4 TOUTPS0 = T2CON.3 TMR2ON = T2CON.2 T2CKPS1 = T2CON.1 T2CKPS0 = T2CON.0

Bit habilit. int. por TMR2 Bit flag interrupciones por TMR2 Seleccin del Post-Escalador " " " Bit habilit. On/Off del TMR2 Seleccin del Pre-escalador "

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 57

GIE = 1 PEIE = 1 T2IE = 1 Conteo = 0 Conteo_T2 = 0

' ' ' ' '

Habilita interrupciones globales Habilita las int. de perifricos Habilita la interrupcin por TMR2 Limpia la variable Conteo 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 instruccin debe siempre ir al ' final del programa principal y antes ' de la sub_rutina de interrupcin.

' RUTINA DE INTERRUPCIN ' -----------------------------------------------------------------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 interrupcin por TMR0 EndIf If T1IF = 1 Then T1IE = 0 Conteo_T1 = Conteo_T1 + 1 TMR1A = 15535 TMR1H = TMR1A.HighByte TMR1L = TMR1A.LowByte T1IF = 0 T1IE = 1 EndIf If T2IF = 1 Then T2IE = 0 Conteo_T2 = Conteo_T2 + 1 TMR2 = 240 T2IF = 0 T2IE = 1 EndIf Resume ' Deshabilita la int. por TMR1 ' Incrementa la variable Conteo_T1 ' Valor inicial del TMR1 Byte Alto ' Valor inicial del TMR1 Byte Bajo ' Limpia el flag de int. del TMR1 ' Habilita la interrupcin por TMR1 Figura 8.15. Imagen de la ejecucin 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.

' ' ' ' '

Deshabilita la int. por TMR2 Incrementa la variable Conteo_T2 Valor inicial del TMR2 Limpia el flag de int. del TMR2 Habilita la interrupcin por TMR2

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 58

CAPTULO 9
COMUNICACIN SERIAL SINCRNICA I2C Introduccin. I2C es un bus de comunicacin serial, sobre el cual, se implementa un protocolo de comunicaciones desarrollado por Phillips Semiconductors a principios de los aos 80s. Este bus se cre con la finalidad de reducir la complejidad del cableado interno encontrado en las tarjetas electrnicas 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 ms populares estndares de comunicacin serial sincrnica. Una de las principales razones para que el estudio del bus I2C sea un punto obligatorio en la capacitacin de un estudiante en el desarrollo de aplicaciones con microcontroladores, es la gran variedad de productos y fabricantes que producen circuitos integrados con sta tecnologa, entre los que se pueden citar: Phillips, National, Xicor, Siemens y DallasMaxim Semiconductors. El trmico I2C es una simplificacin comercial y prctica, su nombre real es Inter-Integrated Circuit bus, es decir, bus de interconexin de circuitos integrados. La Figura 9.1., muestra la conexin 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. 9.1. Caractersticas del BUS I2C Utiliza dos lneas para la comunicacin, una para datos llamada (SDA) y otra para el reloj (SCL). Cada dispositivo conectado al bus es identificado por una nica direccin (dentro del bus), la cual, queda establecida a travs de una combinacin de Hardware/Software. Bus I2C es multi-master y an cuando sta caracterstica es poco utilizada, se define un mecanismo para la deteccin de las colisiones y arbitraje que busca prevenir la prdida de informacin si dos o ms maestros inicializan comunicaciones en forma simultnea. Las transferencias de informacin 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 (definicin original), a 400 kbit/s (implementado a partir de la versin 1.1 del ao 1992) en el modo rpido (Fast) a 3.4 Mbit/s en el modo de alta velocidad (High- speed) disponible desde la versin 2.0 del ao 1998).

La generacin 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 transicin de 1 a 0 (un flanco de bajada) en la lnea SDA mientras la lnea SCL se mantiene en alto determina la condicin de INICIO; una vez que ocurre esta condicin, el bus se considera ocupado (BUSY). Una transicin de 0 a 1 (un flanco de subida) en la lnea SDA mientras la lnea SCL se mantiene en alto, determina la condicin de PARADA, transcurrido un tiempo luego de ocurrir esta condicin, el bus se considera libre (FREE).

Figura 9.1. Conexin entre dispositivos bajo el bus I2C. Fuente: Tomado de la web: www.Mikroe.com

Figura 9.2. Condiciones de arranque y parada en un Bus I2C. Fuente: Tomado de la web: www.Philip.com

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 59

9.2. Detalle de la comunicacin I2C 9.3. Direccionamiento y formato de transferencia de informacin En un bus I2C, los dispositivos se identifican por medio de una direccin nica que forma parte de un byte de control enviado por el dispositivo maestro al iniciar la comunicacin. La definicin inicial del I2C prevea la existencia de 7 bits para direccionar al esclavo, de esta forma, se pueden conectar hasta 128 dispositivos en el bus.

Figura 9.3. Detalle de la comunicacin entre dispositivos I2C. Fuente: Tomado de la web: www.Mikroe.com

Una vez inicializada la comunicacin I2C condicin de Start, comienza el proceso de transmisin/recepcin de la informacin Bytes entre el dispositivo maestro y el dispositivo esclavo como se puede apreciar en la Figura 9.3. Todos los bytes de informacin colocados sobre la lnea SDA deben tener 8 bits. El nmero mximo de bytes que pueden ser enviados en una transmisin no est restringido, siendo el esclavo quien fija esta cantidad de acuerdo a sus caractersticas. El envo de los bits se efecta siempre desde el bit ms significativo MSB hacia el menos significativo LSB. An cuando el maestro es quien siempre controla el estado de la lnea del reloj; un esclavo de baja velocidad o que deba detener la transferencia de datos mientras efecta otra funcin, puede forzar la lnea SCL a nivel bajo. Esto hace que el maestro entre en un estado de espera, durante el cual, no transmite informacin esperando a que el esclavo est listo para continuar la transferencia en el punto donde haba sido detenida.

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 versin 1.0 del ao 1992, existe un formato de direccionamiento de 10 bits y se ha incrementado significativamente el nmero de dispositivos que pueden conectarse simultneamente 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. Inicializacin en modo maestro La forma comn de comunicacin I2C, es utilizar al PIC como nico maestro y los perifricos como esclavos, bajo est configuracin, la habilitacin de las comunicaciones se logra a travs de la configuracin de los siguientes registros:

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 60

Ajustar la velocidad de Transmisin/Recepcin a travs del registro SSPADD. Eliminar el control del slew rate colocando a uno el bit SMP del registro SSPSTAT. Seleccionar el modo de comunicacin tipo Maestro a travs del registro SSPCON. Habilitar el mdulo 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 comunicacin.

SSPCON2 se colocar en cero (0), y se podrn enviar los prximos bytes que representan los datos de igual forma. La transmisin de los datos termina cuando se coloca el bit SEN = 0 del registro SSPCON2, de esta forma ocurrir una condicin de parada STOP habilitndose al pin SDA de nuevo a recibir una nueva trama de comunicacin: Arranque Direccin Reconocimiento Datos Reconocimiento {Datos Reconocimiento} . Parada

Figura 9.5. Inicializacin en modo maestro I2C para un PIC16F876. Fuente: Tomado de la web: www.Mikroe.com

9.5. Transmisin en modo maestro Una vez inicializado el mdulo I C (bit SSPIF = 1 del registro PIR1) se comienza la transmisin de los datos una vez que son cargados en el registro SSPBUF. El primer dato a cargar en el registro SSPBUF deber ser la direccin del dispositivo esclavo, al cual, se pretende comunicar. El microcontrolador tendr que esperar la seal de reconocimiento (ACK) por parte del dispositivo esclavo, cuando esto ocurre el bit ASKSTAT del registro
2

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

9.6. Recepcin en modo maestro La preparacin para la recepcin de datos es similar a la transmisin con la excepcin de que el ltimo bit del primer byte enviado (direccin) contiene un uno (1). Esto le indica al maestro que recibir datos desde el dispositivo esclavo.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 61

El dispositivo esclavo comienza a enviar los bytes de datos uno a la vez, estos bytes son almacenados en el registro SSPSR. Una vez ledo ste registro por parte del maestro, automticamente el maestro genera el bit de reconocimiento (ACK) al esclavo, lo cual, indica que el maestro est listo para recibir otro byte con informacin. La recepcin de los datos termina cuando se coloca el bit SEN = 0 del registro SSPCON2, de esta forma ocurrir una condicin de parada STOP habilitndose al pin SDA de nuevo a recibir una nueva trama de comunicacin: Arranque Direccin Reconocimiento Datos Reconocimiento {Datos Reconocimiento} . Parada

completo reloj cronmetro en tiempo real, el cual, utilizaremos en general, como fuente de informacin referida a la hora y fecha en nuestras aplicaciones. El segundo dispositivo es la memoria Eeprom modelo 24LC16B de capacidad 2KByte x 8bits.
DS1307 24LC16B

Pines de conexin al BUS I2C

Figura 9.7. Recepcin 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 fotografa del sistema de desarrollo iBOARD III, en la cual, los circuitos integrados con tecnologa 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

Figura 9.8. Dispositivos con capacidad de comunicacin I2C incluidos en el sistema de desarrollo iBOARD III.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 62

9.8. Comandos en alto nivel para el manejo del protocolo I2C BUSIN Comando para recibir datos desde un dispositivo con protocolo I2C. Sintaxis: BUSIN Control, {Direccin}, [DatosEntrada {, DatosEntrada}] BUSOUT Comando para transmitir datos desde un dispositivo con protocolo I2C. Sintaxis: BUSOUT Control, {Direccin}, [DatosSalida]

9.9. Memoria Eeprom 24LC16B

Control. :Es una variable o constante (byte) que contiene los bits de identificacin direccin del dispositivo I C.
2

Direccin : Es una variable o constante adicional (tipo byte o word) que especifica la

direccin de comienzo de lectura del dispositivo I2C, si no se especifica se tomar por defecto la direccin 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 declaracin de pines para la comunicacin I2C, se realiza a travs de las directivas: Seleccin del Pin SDA DECLARE SDA_PIN PORT . PIN Puerto.pin por defecto PORTA.0 Seleccin del Pin SCL DECLARE SCL_PIN PORT . PIN Puerto.pin por defecto PORTA.1 Seleccin de la velocidad del Bus I2C DECLARE SLOW_BUS ON - OFF or 1 - 0 Seleccin 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 lnea SCL Por defecto la resistencia es requerida. Seleccin 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

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 comunicacin I2C a un voltaje de operacin entre 2.5 y 5.5 Vdc. En la figura anexa, se muestra la distribucin de los pines de conexin. Los Pines 1, 2, y 3 se utilizan para determinar parte de la palabra de identificacin del dispositivo (direccin por hardware). Los pines 4 y 8 se utilizan para la alimentacin de tensin, los pines 5 y 6 son utilizados para la conexin al bus I2C, mientras que el pin 7 es la habilitacin de la proteccin a la escritura de la memoria Eeprom. La identificacin del dispositivo queda definida tanto por el fabricante como por los bits de direccin 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 direccin como se muestra indicado en la Figura 9.9.

Figura 9.9. Byte de control y direccin requeridos para iniciar la comunicacin con la memoria Eeprom del sistema de desarrollo iBOARD III.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 63

9.10. Ejemplo de utilizacin 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 al conectar el Bus I2C microcontrolador de la siguiente forma: PORTB<0> con SDA y PORTB<1> con SCL. Tambin se deber mostrar el resultado a travs de IDE Serial comunicator a una velocidad de conexin 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 Declare SCL_PIN PORTB.1 Dim Index Dim DatoLeido As Byte As Byte ' Asignacin SDA pin ' Asignacin SCL pin ' Variable uso general ' Variable uso general

Figura 9.10. Fotografa de las conexiones entre el PIC16F876 y el Bus I2C del sistema de desarrollo iBOARD III.

Main: For Index = 0 To 255 BusOut $A0,Index,[Index] ' $A0 = direccin memoria eeprom DelayMS 5 ' Retardo escritura por fabricante Next For Index = 0 To 255 BusIn $A1,Index,[DatoLeido] HRSOut "Eeprom[",Dec Index,"]",_ " Valor Ledo = ", Dec DatoLeido, 13 DelayMS 500 Next GoTo Main Figura 9.11. Resultado de la ejecucin del programa CAP_09_Ejemplo_01.bas Sistema de desarrollo para microcontroladores PIC, iBOARD III. 64

9.11. Reloj en tiempo Real DS1307

Un dispositivo muy utilizado con los microcontroladores es el reloj de tiempo real, el cual, es capaz de mantener en forma autnoma un conteo completo de Hora-Fecha incluso con compensacin de ao bisiesto. El reloj de tiempo real modelo DS1307, es fabricado por Dallas Semiconductor y tiene la capacidad de comunicacin a travs del protocolo I2C. La figura anexa, muestra la distribucin de los pines de conexin. Los Pines 3,4 y 8 se utilizan para su alimentacin de tensin, los pines 1 y 2 son utilizados para la conexin de un cristal de referencia de 13.768KHz y los pines 5 y 6 son utilizados para la comunicacin I2C. La identificacin 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 direccin para realizar una escritura y una lectura en los registros internos del DS1307.

Figura 9.13. Registros internos del reloj en tiempo real DS1307.

El Terminal BAT del RTC se deber conectar a una batera de 3VDC a Tierra (si decide no usar la batera).
Figura 9.14. Esquema de conexiones del DS1307 del sistema de desarrollo iBOARD III. Figura 9.12. Secuencia de Bytes para acceder los registros internos del DS1307.

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 informacin acerca del reloj - calendario; la ltima 07h se utiliza como registro de control. La figura 9.13., muestra la distribucin 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.

9.12. Ejemplo prctico 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 ao 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 configuracin con un ao no bisiesto para que observe la diferencia.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 65

' ' ' '

CAP_09_Ejemplo_02.bas Configurar, leer y escribir en los registros internos del RTC Reloj de Tiempo Real, modelo DS1307 ......................... ------------------------------------------------------------Device = 16F876 XTAL 20 Declare SDA_PIN PORTB.0 Declare SCL_PIN PORTB.1 Symbol Symbol Symbol Symbol Symbol Symbol Seg Minu Hora Dia Mes Ano = = = = = = 0 1 2 4 5 6 As Byte As Byte ' Asignacin pin SDA ' Asignacin pin SCL ' ' ' ' ' ' Registro Registro Registro Registro Registro Registro de de de de de de Seg. Min. Horas Da Mes Ao

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

Dim RTC[7] Dim Index Main: GoSub RTC_INI GoSub FECHA_INI DelayMS 500

' Vector almacenamiento ' Variable uso general ' Inicilizar el RTC ' Cargar Fecha inicial ' Retardo 500ms ' Leer registros RTC ' Mostrat registros RTC

Loop: GoSub LEER_RTC GoSub MOSTRAR_RTC DelayMS 1000 GoTo Loop End

RTC_INI: BusIn $D1,0,[RTC[Seg]] BusOut $D0,0,[RTC[Seg] & $7F] Return FECHA_INI: RTC[Seg] = $50 RTC[Minu] = $59 RTC[Hora] = $23 RTC[Dia] = $28 RTC[Mes] = $02 RTC[Ano] = $08 BusOut $D0,0,[Str RTC\7] Return ' ' ' ' ' ' '

' Lee byte 0, RTC ' Pone 0 en bit CH ' Para Activar RTC

Ajusta los Seg. iniciales Ajusta los Min. iniciales Ajusta la Hora inicial Ajusta el Da inicial Ajusta el Mes inicial Ajusta el Ao inicial Escribe registros RTC

LEER_RTC: For Index = 0 To 6 BusIn $D1,Index,[RTC[Index]] ' Lee registros Next ' del RTC 0..6 GoSub BCD2BIN Return

Figura 9.15. Resultado de la ejecucin del programa CAP_09_Ejemplo_02.bas Utilizando el IDE Serial Comunicator.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 66

CAPTULO 10
PROTOCOLO DE COMUNICACIN 1-WIRE Introduccin. Dallas Semiconductor ha desarrollado una poderosa tecnologa llamada 1-Wire, la cual, utiliza un slo conductor ms su retorno o tierra para efectuar las comunicaciones y la transmisin de energa entre un dispositivo maestro y mltiples esclavos. Una RED de dispositivos 1-Wire est conformada por un maestro y uno o ms 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 caractersticas de la tecnologa 1-Wire, es que cada dispositivo esclavo tiene una nica e irrepetible identificacin grabada en su memoria ROM al momento de su fabricacin. El BUS 1-Wire, permite realizar una comunicacin serial asincrnica entre un dispositivo maestro y uno o varios dispositivos esclavos, utilizando un nico pin de E/S del microcontrolador. Podemos sealar algunas caractersticas de ste bus: Utiliza niveles de alimentacin CMOS/TTL con un rango de operacin que abarca desde 2.8V hasta 6V. Tanto el maestro como los esclavos transmiten informacin de forma bidireccional, pero, slo en una direccin a la vez, de sta manera la comunicacin es realizada en forma half duplex. Toda la informacin es leda o escrita comenzando por el bit menos significativo (LSB). No se requiere del uso de una seal de reloj, ya que, cada dispositivo 1-Wire posee un oscilador interno que se sincroniza con el del maestro cada vez que en la lnea de datos aparezca un flanco de bajada (Beta). La alimentacin 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 perodos en los cuales no se efecta ninguna comunicacin, la lnea de datos se encuentra en estado alto debido a la resistencia de Pull Up; en esa condicin, el diodo entra en conduccin y carga al capacitor. Cuando el voltaje de la RED cae por debajo de la tensin 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 fcilmente una longitud desde 200 m y contener unos 100 dispositivos. Todas las tensiones mayores que 2,2 Voltios son consideradas un (1) lgico mientras que como un (0) lgico se interpreta cualquier voltaje menor o igual a 0,8 V. La transferencia de informacin es a 16.3 Kbps en modo Standard y hasta a 142 Kbps en modo overdrive.
Figura 10.1. Esquema de conexin entre un maestro PIC16F876 y varios esclavos en una RED de comunicaciones 1-Wire.

10.1. Descripcin del protocolo de comunicaciones 1-Wire Podemos describir al protocolo 1-Wire como una secuencia de transacciones de informacin, la cual, se desarrolla segn los siguientes pasos: (1) La Inicializacin, (2) Comandos y funciones de ROM, (3) Comandos y funciones de control y memoria, (4) Transferencia de bytes datos. INICIALIZACIN 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 lnea de datos en estado lgico bajo por unos 480 s. Esto se puede observar a travs de la Figura 10.2.

Figura 10.2. Inicializacin de la red 1-Wire. Pulso de reset y presencia.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 67

COMANDOS Y FUNCIONES DE ROM Una vez que el PIC16F876 recibe el pulso de presencia de los dispositivos esclavos, se puede enviar un comando de ROM. Los comandos de ROM son comunes a todos los dispositivos 1-Wire y se relacionan con la bsqueda, lectura y utilizacin de la direccin de 64 bits que identifica a esclavos. La Figura 10.3., muestra los comandos de ROM utilizados con los dispositivos 1-Wire.

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

Figura 10.3. Comandos de ROM utilizados por los dispositivos 1-Wire.

10.2. Implementacin 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 informacin en el bus. La implementacin hecha por stas funciones, tiene las siguientes caractersticas: La velocidad de transmisin de datos es aproximadamente de 20 Kbps en modo normal, El PIC16F876 slo 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]

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 conversin de un ADC, iniciar la medicin 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 generacin de estos es responsabilidad del maestro, en este caso, el PIC16F876. Cuando el maestro lee informacin del bus, debe forzar la lnea 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 lgico de la lnea en ese momento, estar determinado por el dispositivo esclavo. La figura 10.4., muestra el proceso de lectura de un Slot tpico que produce un microcontrolador PIC16F876 actuando como maestro 1Wire. 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 duracin, para luego colocar en el bus al bit que se desea transmitir. Este bit deber permanecer en el bus al menos 60 s.

Pin : Variable, constante o expresin que especifica cual pin de E/S ser usado para la comunicacin 1-Wire. Modo: Variable, constante o expresin que indica el tipo de transferencia de informacin. Este parmetro controla la ubicacin de los pulsos de reset, selecciona el modo de transferencia en bytes bits y define la velocidad de comunicacin a utilizar, modo normal o modo de alta velocidad.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 68

DatoEntrada: Variable de entrada o arreglo de variables. A travs del

modificador de formato se indica donde y como ser almacenada la informacin entrante.

DatoSalida: Variable de salida o arreglo de variables. A travs del modificador de formato se indica como ser enviada la informacin.

Figura 10.6. Diferentes topologas de interconexin entre dispositivos en una RED 1-Wire.

Figura 10.5. Diferentes modos de transferencia de informacin en la RED 1-Wire.

Por ltimo, la topologa tipo estrella, la cual, en la prctica es la ms utilizada, permite la conexin de ramas a travs de un punto comn denominado nodo de conexin, sin embargo, Esta topologa limita la cantidad de dispositivos esclavos en comparacin con las anteriores, ya que, incrementa la capacitancia equivalente en el punto central de conexin al estar las ramas conectadas en paralelo. 10.4. Conexin entre el PIC16F876 y los dispositivos esclavos

10.3. Topologas de conexin entre dispositivos en una RED 1-Wire La figura 10.6., muestra las diferentes topologas de interconexin entre dispositivos en una RED 1-Wire. La topologa exclusiva tambin denominada 1:1, es la ms simple de todas, se permite en este tipo de topologa la conexin slo de un dispositivo maestro con un dispositivo esclavo. Es muy utilizada para la medicin de parmetros en dispositivos esclavos tipo stand alone como por ejemplo: los dispositivos iButton de Dallas Semiconductor. La topologa 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 travs de ramificaciones.

En la prctica, se puede utilizar cualquier pin de entrada salida del microcontrolador para efectuar la conexin a dispositivos esclavos 1-Wire, incluso cada pin del microcontrolador puede implementar cualquiera de las topologas anteriormente mencionadas con un slo dispositivo esclavo con muchos de ellos conectados en forma simultnea. La nica consideracin que hay que tener es la colocacin 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 travs del pin PORTB<1>. En la prctica, es mucho ms fcil manejar un slo dispositivo esclavo por cada pin del microcontrolador, esto elimina la necesidad de conocer a priori el serial del dispositivo. Como hay uno slo dispositivo en la lnea pin de conexin, el microcontrolador puede acceder a la memoria del dispositivo esclavo a travs de la funcin de ROM ($CC) Skip ROM.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 69

En la actualidad se ha estandarizado el iButton con memoria Eeprom en las aplicaciones de control de acceso a reas restringidas, control de acceso a instalaciones comerciales e incluso control de acceso para edificios. Probablemente usted sin saberlo, tiene un iButton para acceder a su vivienda, ascensores del edificio y/o puertas de entrada principal. Por esta razn se har un primer ejemplo de aplicacin utilizando este tipo de dispositivo esclavo 1-Wire. 10.6. Ejemplo de aplicacin. 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 travs del IDE Serial Comunicator, el cual, deber estar configurado para una velocidad de conexin serial de 2400 Baud. El pin de conexin a utilizar por el microcontrolador ser: PORTB<1>.
Figura 10.7. Conexin 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 conexin 1-Wire con un DS2409 que veremos en el captulo 11. ' CAP_10_Ejemplo_01.bas ' Leer el serial de un dispositivo 1-Wire ' --------------------------------------------------------Device = 16F876 XTAL 20 Symbol DQ = PORTB.1 Dim Index As Byte Dim SERIAL[8] As Byte Main: GoSub Leer_Serial GoSub Mostrar DelayMS 1000 GoTo Main End ' Pin de conexin 1-Wire ' Variable de uso general ' Arreglo almacena serial ' Rutina para leer el serial ' Rutina para mostrar serial

10.5. Los iButton 1-Wire Un iButton es un circuito integrado encerrado en un envoltorio de acero inoxidable de 16 mm de dimetro ms parecido a una batera 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 slo necesitan dos terminales de conexin, uno para datos y otro para la referencia o tierra. La energa requerida para el funcionamiento del microcircuito es tomada del propio conductor de datos en forma parsita. Existen iButtons que contienen nicamente un nmero de identificacin, memorias (EPROM, EEPROM, NVRAM), relojes de tiempo real, sensores y de registradores (loggers) temperatura, encriptadores de informacin, convertidores analgico/digital, etc. En la figura anexa, se observan dos tipos diferentes de iButton.

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

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 70

El algoritmo utilizado para el clculo de CRC de Dallas Semiconductor (DOW CRC), cuyo resultado se incluye en la identificacin 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 cdigo de la familia a la que pertenece el dispositivo. Los errores detectables por el CRC8 implementado por Dallas Semiconductors son: Cualquier nmero 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 mayora de los errores de ms de 8 bits incorrectos.

Figura 10.8. Resultado de la ejecucin del programa CAP_10_Ejemplo_01.bas Lectura del serial de un dispositivo 1-Wire.

10.7. Clculo del CRC-8, identificacin de errores en la RED 1-Wire Cuando se transmite informacin en forma serial, es necesario verificar la posible existencia de errores que pudieran ocurrir durante la comunicacin. Existen varios mtodos para efectuar este chequeo. Uno de los ms simples consiste en aadir un bit extra a cada byte transmitido de modo que el nmero de unos (1) contenidos en el paquete de 9 bits siempre sea par o impar. Este procedimiento se le conoce como verificacin de paridad y permite encontrar errores que ocurren en un bit, pero no es confiable cuando cambia ms de un bit dentro del byte. Uno de los mecanismos de deteccin de errores ms eficientes es el Chequeo de Redundancia Cclica (del ingls Cyclic Redundancy Check) conocido por sus iniciales CRC. El CRC de un conjunto de datos, es un nmero de cierta cantidad de bits que contiene el resultado de la aplicacin de una expresin matemtica 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.
Figura 10.9. Algoritmo para el clculo del CRC8 utilizado por Dallas Semiconductor.

El clculo 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 mtodo 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 tpico de Dallas Semiconductor. La figura presenta una fotografa 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.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 71

Cada iButton viene estampado de fbrica con sta numeracin y por supuesto cada iButton tendr un serial de identificacin nico.

Main: CRC = 0 HRSOut "INTRODUZCA EL SERIAL Y LA FAMILIA...",13 For Indice = 0 To 6 HRSOut "ROM CODE (",Dec Indice,") = ",13 HRSin HEX2 ROMCODE[Indice] Next HRSOut "ROM CODE = " For Indice = 0 To 6 HRSOut HEX2 ROMCODE[Indice], " " Next For ByteAct = 6 To 0 Step - 1 CRCt = ROMCODE[ByteAct] GoSub CRCCalc 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.10. Fotografa frontal de un iButton de Dallas Semiconductor.

10.8. Ejemplo del clculo 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 travs 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 segn la codificacin mostrada a continuacin y ejecute el IDE Serial Comunicator. Deber presionar el Reset del microcontrolador para iniciar la comunicacin.
' CAP_10_Ejemplo_02.bas ' Clculo del CRC8 de un iButton 1-Wire ' --------------------------------------------------------Device = 16F876 XTAL 20 Dim Indice Dim ROMCODE[8] Dim IBit Dim CRC Dim CRCt Dim ByteAct Clear As As As As As As Byte Byte Byte Byte Byte Byte ' Variable de uso general ' Arreglo almacena serial ' ' Contiene CRC8 Calculado

Figura 10.11. Resultado de la ejecucin del programa CAP_10_Ejemplo_02.bas Clculo de CRC8 de un iButton 1-Wire.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 72

10.9. Termmetro Digital modelo DS18B20 Para realizar la conexin entre el PIC16F876 y el DS18B20, puede utilizar como referencia el diagrama mostrado en la Figura 10.13. La resistencia de Pull Up puede colocarse entre 2 KOhm y 4.7 KOhm.

El termmetro digital DS18B20 es un dispositivo de alta tecnologa fabricado por Dallas Maxim para la medicin de la temperatura. En la grfica anexa, se observan los diferentes tipos de encapsulados del dispositivo, siendo el ms comn de ellos el encapsulado tipo TO-92. El DS18B20, tiene una resolucin programable de 9,10,11 y 12 bits, lo cual, permite obtener temperaturas con una exactitud de hasta 1/8 de grado centgrado. 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 alimentacin tanto por fuente externa como por conexin parsita. El serial del dispositivo de 64 bits nicos, la lgica 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 configuracin de la memoria y un mdulo para la generacin del CRC8.

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 leda 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 configuracin del dispositivo, los siguientes bytes 5,6 y 7 estn 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. Figura 10.12. Diagrama de bloques funcionales del DS18B20. Fuente: Hoja de especificaciones del DS18B20. Sistema de desarrollo para microcontroladores PIC, iBOARD III. 73

El registro de configuracin, es el encargado de seleccionar la resolucin en bits que se utilizar para la determinacin de la temperatura. La figura 10.15., muestra una tabla de seleccin de las diferentes resoluciones, mientras ms es el nmero de bits utilizados, mejor es la precisin, sin embargo el tiempo de conversin de la temperatura se incrementa significativamente.

Los comando de memoria disponibles en el DS18B20, se presentan en la Figura 10.17., existen comandos para la conversin 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 energa relacionada a la alimentacin del dispositivo.

Figura 10.15: Registro de configuracin 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 termmetro digital a travs del comando de ROM ($CC) Skip ROM. De esta forma, el DS18B20 quedar habilitado para la recepcin de los comandos de memoria relacionados con la configuracin, lectura y escritura de sus registros.

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 termmetro digital DS18B20 y presentarla a travs del IDE Serial Comunicator.
' CAP_10_Ejemplo_03.bas ' Lectura de la temperatura de un termmetro DS18B20. ' ------------------------------------------------------Device = 16F876 XTAL 20 Symbol DQ = PORTB.1 Dim Index As Dim ROMCODE[8] As Dim TEMPERATURA As Dim FL_TEMP As Byte Byte Word Float ' ' ' ' ' Pin de conexin 1-Wire Variable de uso general Arreglo almacena el serial Variable alm. temperatura Variable alm. temperatura

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

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 74

Main: GoSub Conversion GoSub Mostrar DelayMS 1000 GoTo Main End

' Rutina convertir Temperatura ' Rutina mostrar los valores

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

En la Figura 10.18. se observa la fotografa del montaje electrnico realizado para el ejemplo CAP_10_Ejemplo_03. Note que el esquema de alimentacin adoptado es del tipo parsito, ya que, el terminal 1 (GND) y el terminal 3 (Vcc) del DS18B20 estn conectador ambos a tierra (GND). Por otra parte la resistencia de Pull Up utilizada fue de 2.2 KOhm.

Figura 10.19. Fotografa del montaje realizado para el programa CAP_10_Ejemplo_03.bas Medicin de la temperatura a travs de un DS18B20.

Figura 10.18. Resultado de la ejecucin del programa CAP_10_Ejemplo_03.bas Medicin de la temperatura a travs de un DS18B20. Sistema de desarrollo para microcontroladores PIC, iBOARD III. 75

10.11. Algoritmo de Search ROM Cuando existe un slo dispositivo conectado al bus 1-Wire puede omitirse el direccionamiento mediante el uso del comando SKIP ROM. Tambin puede utilizarse el comando READ ROM para leer la identificacin del esclavo y direccionarlo. Pero, Qu hacer cuando existe ms de un dispositivo en la RED 1-Wire al mismo tiempo?. Quizs, podramos leer manualmente los seriales de identificacin de todos los esclavos a conectar en el bus. Para ello, se tendra que colocar cada dispositivo slo en el bus y aplicar los conceptos aprendidos con los ejemplos de aplicacin vistos. Con el comando READ ROM, leeramos su identificacin (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 dems 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 identificacin del dispositivo en particular con el cual desee comunicarse, de esta forma, el dispositivo esclavo elegido quedar activo y los dems dispositivos 1-Wire en la RED quedarn fuera de lnea hasta que se produzca en la RED una condicin de RESET. Previendo esta situacin, todos los dispositivos que emplean la tecnologa 1Wire, 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 automtica. Buscando dispositivos en el Bus 1-Wire La bsqueda 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 identificacin, 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. A continuacin, el maestro escribir un bit en el bus y cada esclavo comparar este bit con el que l previamente haba transmitido. En caso de que los bits sean diferentes, el esclavo entrar en estado de espera, del cual, slo 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 identificacin 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 obtendrn 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 colisin. Esto har que los dispositivos cuya ID fuese 1 en la posicin donde se present la colisin, dejen de participar en la bsqueda. El bit que se enva al bus se almacena en la variable temporal de la ID. Ahora bien, el proceso de bsqueda contina y al momento de presentarse otra colisin se compara el bit en el que sta ocurre con la posicin del cero del prrafo anterior; si coinciden, entonces se enviar un 1 por el bus (ID bit se toma igual a 1). Si la posicin de la colisin actual es mayor que la anterior deber escogerse un cero, mientras que, si es menor debe repetirse el camino tomado en la bsqueda pasada para ese mismo bit. La figura 10.21., muestra el diagrama de bloques del algoritmo Search ROM. Si desea mayor informacin sobre este algoritmo podr consultar la nota de aplicacin del fabricante Dallas Semiconductor AN187, 1-Wire Search Algorithm, Mar 28, 2002. Esta nota de aplicacin tambin se encuentra en el CD entregado a usted en el directorio \10 Manuales\AN187.pdf Ejemplo de Aplicacin 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 travs del IDE Serial Comunicator. Este programa se dejar como actividad propuesta a futuro. El resultado y la codificacin del mismo, estarn disponibles a travs de la pgina http://www.roso-control.com
Figura 10.20: Combinaciones posibles al efectuar el un Search ROM. Fuente: 1-Wire Search Algorithm, Application Note 187, pg, 2002. Sistema de desarrollo para microcontroladores PIC, iBOARD III. 76

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

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 77

CAPTULO 11
EL COPROCESADOR ATMEL ATTiny13s Introduccin. 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 tambin pone a la disposicin el cdigo 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 fbrica sin modificaciones a objeto de dejar intacta la programacin del fabricante. Cualquier referencia adicional sobre este coprocesador, podr consultarla a travs de la pgina del fabricante www.parallax.com Haciendo referencia al manual del usuario del MoBoStamp-pe (2006.09.13) y el manual AVR Firmware: GPIO, versin 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 seal 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 Generacin de seales 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 ejecucin Conversin Analgica a Digital ADC de 10 bits de resolucin por dos pines de entrada salida disponibles Comparador analgico de tensin por tres pines de entrada salida disponibles Memoria RAM de 32 registros de 8 bits, la cual, puede ser escrita y leda

Figura 11.1. Diagrama esquemtico de conexiones del coprocesador en el sistema de desarrollo iBOARD III.

En la Figura 11.1. se muestra el diagrama de conexiones electrnicas asociadas al coprocesador, en la misma se observa la existencia de otros componentes 1Wire tales como multiplexores, los cuales, explicaremos en detalle ms adelante, por ahora, nos concentraremos en el coprocesador.

Acceder al coprocesador, se puede hacer a travs del microcontrolador PIC16F876 PORTB<0> y el multiplexor 1-Wire DS2409 (U6). Tambin se puede acceder utilizando el terminal en bornera o punto de conexin en regleta OWI y el multiplexor 1-Wire DS2409 (U7). Este ltimo integrado, probablemente sea una opcin que no est incluida en el sistema de desarrollo iBOARD III, hasta que el fabricante termine el software de comunicacin que permitir implementar, a travs 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 comunicacin en RED denominado OPC View.exe.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 78

Para tener acceso al coprocesador, es necesario pre-configurar el integrado DS2409 multiplexor 1-Wire (U6) a fin de que este multiplexor haga la conexin fsica y elctrica del pin PORTB<0> a travs del pin 3 del DS2409 (MAN) al pin de entrada salida pin 7 (IO) del coprocesador. Como el protocolo de comunicacin 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] ORead OWP,0,[RESP, FED] ' Skip ROM, Seleccionar Aux ' Respuesta, feedback

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

Estos comandos son necesarios (obligatorios) para tener acceso al coprocesador. Ms adelante se har una explicacin detallada de los mismos. Por ahora slo nos concentraremos en colocar ste cdigo en el programa principal. A continuacin se presenta un programa que permite visualizar el tipo de dispositivo y la versin 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 Dim J As Byte Dim K As Byte Dim RESP As Byte Dim FED As Byte Symbol OWP = PORTB.0 DelayMS 10 ' ' ' ' ' Var. Var. Var. Var. Var. uso uso uso uso uso general general general general general para identificacin para identificacin para identificacin (Obligatoria) (Obligatoria)

' Puerto.pin conexin a la iBOARD III ' 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 enva el comando $DD para indicarle que queremos conocer su identificacin. El co_ procesador devolver tres (3) bytes de informacin: I,J se refieren al tipo de dispositivo, K se ref. versin Figura 11.2. Resultado de la ejecucin 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 configuracin a travs del envo de un byte que contiene la informacin de los pines que se activarn como salidas digitales y adems el valor que tomarn estos pines de salida cero (0) lgico uno (1) lgico.

79

El formato es el siguiente: 0 Si Si Si Si A1 A1 A1 A1 A0 A0 A0 A0 0 = = = = 00; 01; 10; 11; A1 entonces entonces entonces entonces A0 se se se se activa activa activa activa 0 como como como como 1 0 al al al al N pin pin pin pin CP0 CP1 CP2 CP3

salida salida salida salida

Si N = 0; El valor de salida de la salida(s) activada(s) ser = 0 lgico Si N = 1; El valor de salida de la salida(s) activada(s) ser = 1 lgico
' ' ' ' ' ' 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 conexin 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 enva el comando $04 para colocar un cero lgico (0 Vdc) en el pin CP0, esto apagar el LED conectado en este pin. Despus de una pausa de 250 ms. Se enviar el coman do $05 para colocar un lgico (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 cclica.

Figura 11.3. Resultado de la ejecucin 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 lgico (0Vdc), se le debe enviar al coprocesador los bytes de configuracin: 0 $04; $14; $24; $34;
80

Loop: OWrite OWP,0,[$04] DelayMS 250 OWrite OWP,0,[$05] DelayMS 250 GoTo Loop End

0 para para para para

A1 activar activar activar activar y y y y

A0 poner poner poner poner a a a a

0 cero cero cero cero la la la la

1 salida salida salida salida

0 al al al al pin pin pin pin

N CP0 CP1 CP2 CP3

Por el contrario, si se desea que todas las salidas tengan el valor uno lgico (5Vdc), se le debe enviar al coprocesador los bytes de configuracin: 0 $05; $15; $25; $35; 0 para para para para A1 activar activar activar activar y y y y A0 poner poner poner poner a a a a 0 cero cero cero cero la la la la 1 salida salida salida salida 0 al al al al pin pin pin pin N CP0 CP1 CP2 CP3

' ' ' ' ' ' ' ' '

De Aqu en adelante ya se trabajar directamente con el coproce_ sador ATMEL. Primero se enva el comando $10 para configurar al pin CP1 como entrada analgica. 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 cclica. ' Se configura CP1 como entrada ' Se lee el valor del pin CP1 y su ' valor se almacena en EstadoPin. ' Si EstadoPin = 0 se apaga el LED ' Si EstadoPin = 1 se enciende LED ' Retardo 50 ms

Loop: OWrite OWP,0,[$10] ORead OWP,4,[EstadoPin] If EstadoPin = 0 Then OWrite OWP,0,[$04] Else OWrite OWP,0,[$05] EndIf DelayMS 50 GoTo Loop End

11.2. El coprocesador utilizado como Entradas Digitales El proceso para configurar y activar los pines de entrada del coprocesador, se realiza con el envo de un byte que contiene la informacin de los pines que se activarn como entradas digitales. El formato es el siguiente: 0 Si Si Si Si
' ' ' ' ' ' ' '

0 = = = = 00; 01; 10; 11;

A1 entonces entonces entonces entonces se se se se

A0 activa activa activa activa

0 como como como como

0 al al al al

0 pin pin pin pin CP0 CP1 CP2 CP3

A1 A1 A1 A1

A0 A0 A0 A0

entrada entrada entrada entrada

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 configuracin 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 conexin 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 81 Figura 11.4. Resultado de la ejecucin del programa CAP_11_Ejemplo_03.bas.

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 configuracin como si el pin fuera una entrada, pero con la diferencia de usar el modo de comunicacin 1-Wire (2). Por ejemplo, si se desea configurar el pin CP1 como tres estados, se deber enviar la siguiente instruccin: OWrite OWP,2,[$10] ' Se configura CP1 como tres estados

A3..A0 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001

Frecuencia (Hz) 37500,oo 18823,53 4687,50 2352,94 585,94 294,12 146,48 73,52 36,62 18,38

Codificacin OWrite OWP,0,[$F0] OWrite OWP,0,[$F1] OWrite OWP,0,[$F2] OWrite OWP,0,[$F3] OWrite OWP,0,[$F4] OWrite OWP,0,[$F5] OWrite OWP,0,[$F6] OWrite OWP,0,[$F7] OWrite OWP,0,[$F8] OWrite OWP,0,[$F9]

11.3. El coprocesador utilizado como Salidas PWM Los pines del coprocesador CP2 y CP3 se pueden configurar como salidas de una seal PWM (Modulacin del ancho del pulso) con un ciclo til programable (0100)% en 255 pasos independientes. Si a la salida del pin que est generando una seal PWM se coloca un filtro pasa bajos, se podr implementar un convertidor digital analgico; por supuesto de poca precisin. La salida PWM puede ser utilizada para manejar, con un apropiado circuito driver, cargas inductivas y elementos de electrnica de potencia. La frecuencia mxima a la cual se puede generar la PWM es de 37.5 KHz. El comando requerido para la generacin de la PWM utiliza dos bytes. El primer byte configura cual(es) pin(es) de salida(s) sern salidas PWM y el segundo byte es un nmero entre $00 y $FF que especifica el ciclo til de la seal 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
' ' ' ' ' ' ' ' '

Figura 11.5. Diferentes frecuencias de salida para la seal PWM.

Nota: El fabricante dise el coprocesador para que la seleccin de las frecuencias arriba indicadas bajo nmeros impares (1,3,5,7,9) produzcan una seal PWM con pulsos corregidos en fase, es decir, cuando el valor del ciclo til cambia, el cambio es hecho en forma simtrica 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 cclica. -----------------------------------------------------------------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 conexin a la iBOARD III DelayMS 10 ' Retardo inicial requerido por el ' coprocesador ATMEL.

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 sern ascendentes (Alfa) Si Inv = 1; Los pulsos PWM sern descendentes (Beta) La frecuencia a la cual se generar(n) la(s) seal(es) PWM es la misma para los dos pines CP2 y CP3 y se puede configurar a travs del envo de un comando con el siguiente formato: 1 1 1 1 A3 A2 A1 A0

donde A3 A2 A1 A0: representa un nmero 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.
82

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

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. Leda en CP1 = ", Dec Conteo*2, 13 DelayMS 500 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 travs del envo de un byte que contiene la informacin de los pines que se activarn como entradas de conteo de pulsos. El formato del byte de control es el siguiente: 0 Si Si Si Si A1 A1 A1 A1 A0 A0 A0 A0 = = = = 00; 01; 10; 11; 0 A1 se se se se A0 activa activa activa activa como como como como 0 0 1 1 al al al al pin pin pin pin CP0 CP1 CP2 CP3

entonces entonces entonces entonces

entrada entrada entrada entrada

counter counter counter counter

El conteo de la seal de entrada devuelve un resultado de un nmero de 16 bits, por ello el conteo mnimo ser cero (0) y el mximo 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 seal 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 travs 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 conexin a la iBOARD III DelayMS 10 ' Retardo inicial requerido por el ' coprocesador ATMEL. Figura 11.6. Resultado de la ejecucin del programa CAP_11_Ejemplo_05.bas.

83

CAPTULO 12
MODULO CCP/PWM. Captura, Comparacin y PWM Introduccin. El PIC16F876 posee dos mdulos CCP (CCP1 y CCP2) Captura, Comparacin y PWM, los cuales, realiza tres funciones diferentes segn su nombre lo indica. El mdulo CCP1 tiene asignado el pin PORTC<2> y el CCP2 tiene asignado el pin PORTC<1>. Ambos mdulos pueden ser configurados a travs de sus registros asociados CCP1CON y CCP2CON. 12.1. Modo de Captura Modo Captura: Esta funcin se utiliza para la determinacin de la duracin de un pulso aplicado a los pines PORTC<2:1>. La Captura de una seal 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 activacin de la bandera de interrupcin. Los posibles cambios en los pines PORTC<2:1> que pueden desencadenar una captura son: Una (01) transicin de nivel Alto a nivel Bajo en el pin PORTC<2:1> Una (01) transicin 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> Diecisis (16) transiciones de nivel Bajo a nivel Alto en el pin PORTC<2:1> Los registros de configuracin tanto para el CCP1 y CCP2 son los encargados de la seleccin y/o configuracin de las diferentes funciones y bits asociadas a los mdulos CCP. En la figura 12.1. se observan los bits que conforman cada uno de los registros de configuracin CCP1CON y CCP2CON. bit 3-0: CCPxM3:CCPxM0: Bits de seleccin Reset del mdulo CCPx. Captura/Comparacin/PWM = OFF Modo Captura, cada transicin beta 1-> 0 Modo Captura, cada transicin alfa 0-> 1 Modo Captura, a la cuarta transicin alfa 0 -> 1 Modo Captura, a la 16va. transicin alfa 0-> 1 Modo Comparacin, coloca a uno (1) lgico el pin de salida PORTC<2:1>, cuando se activa la bandera de int. CCPxIF 1001 = Modo Comparacin, coloca a cero (0) lgico el pin de salida PORTC<2:1>, cuando se active la bandera de int. CCPxIF 1010 = Modo Comparacin, genera interrupcin CCPxIF, el valor lgico del pin de salida PORTC<2:1> no cambia. 1011 = Modo Comparacin, genera interrupcin CCPxIF, el valor lgico 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 habilitacin del mdulo de conversin A/D. 11xx = Modo PWM. En la Figura 12.2., se observa el diagrama de bloques funcionales del mdulo CCP1. Cuando el evento preprogramado a travs 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 interrupcin bit CCPR1IF se activa. 0000 0100 0101 0110 0111 1000 = = = = = =

Figura 12.1. Registro de configuracin del mdulo CCP ( CCP1CON y CCP2CON).

Para el PIC16F876, el significado de cada bit es el siguiente: bit 7-6: No implementados: Se leern como ceros 0 bit 5-4: CCPxX:CCPxY: Bits menos significativos asociados al mdulo PWM En modo Captura : No se utilizan En modo Comparacin: No se utilizan En modo PWM: Estos bits son los bits menos significativos del ciclo til PWM. Los ocho bits ms significativos se encuentran en el registro CCPRxL.

Figura 12.2. Representacin en bloques del mdulo CCP1. Fuente: Tomado de www.mikroe.com

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 85

12.2. Modo de Comparacin Modo Comparacin: Esta funcin se utiliza en general, para disparar un evento externo a travs del pin PORTC<2:1> del microcontrolador, evento es dependiente de la comparacin de dos registros internos del microcontrolador, asociados al mdulo CCP. La Comparacin 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 ocurrirn: Para el mdulo CCP1 El Pin PORTC<2> es colocado a uno (1) lgico El Pin PORTC<2> es colocado a cero (0) lgico El Pin PORTC<2> no sufre ningn cambio de estado lgico El Pin PORTC<2> no sufre ningn cambio de estado lgico y el Timer1 es colocado en cero (reset). El TMR1 deber estar sincronizado con el oscilador interno del PIC.

12.3. Modo PWM Modo PWM: Se utiliza para generar seales con el algoritmo de la modulacin del ancho del pulso, lo que significa, que las seales 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) lgico por analoga representa la conexin abierta de un interruptor que alimenta a una bombilla y un uno (1) lgico representa la conexin cerrada de un interruptor, entonces, la potencia en la bombilla ser directamente proporcional a la duracin del pulso. Esta relacin se denomina ciclo til.

Para el mdulo CCP2 El Pin PORTC<1> es colocado a uno (1) lgico El Pin PORTC<1> es colocado a cero (0) lgico El Pin PORTC<1> no sufre ningn cambio de estado lgico El Pin PORTC<1> no sufre ningn cambio de estado lgico. El Timer1 es colocado en cero (reset) y se habilita el mdulo de conversin A/D para realizar una conversin como se puede observar en la Figura 12.3. Nota: El TMR1 deber estar sincronizado con el oscilador interno del PIC.

Figura 12.4. Diferente ciclos tiles de una seal PWM. Fuente: Tomado de www.mikroe.com

Perodo de una Seal: El perodo de una seal (T), se define a travs del registro PR2 perteneciente al TMR2. El perodo de una seal puede ser calculado a travs de la siguiente formula: PWM Perodo (T) = (PR2 +1) * 4Tosc * TMR2 Prescale Value Frecuencia F = 1/T

Figura 12.3. Representacin en bloques del mdulo CCP2. Fuente: Tomado de www.mikroe.com

Figura 12.5. Perodo y ciclo til de una seal. Fuente: Tomado de www.mikroe.com

86

Figura 12.6. Perodo y ciclo til de una seal relacionada a los registros del Timer2. Fuente: Manual tcnico 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) lgico El valor del ciclo til del PWM es pasado desde el registro CCPR1L al CCPR1H

Ciclo til de una Seal: El ciclo til de una seal generada utilizando el modo PWM, tiene una resolucin de 10 bits. Los ocho bits ms significativos se encuentran en el registro CCPR1L y los dos bits menos significativos se encuentran en el registro de configuracin CCP1CON bits (CCPxX:CCPxY ). El ciclo til se puede calcular a travs 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 seales PWM de diferentes frecuencias a travs del microcontrolador PIC. Estos valores estn relacionados al uso de un oscilador de 20 MHz.

Figura 12.8. Representacin en bloques del mdulo PWM. Fuente: Tomado de www.mikroe.com

Resolucin: Una seal PWM no es ms que una secuencia de pulsos que varan su ciclo til. Para una frecuencia especfica (No. de pulsos x seg), existen un nmero discreto de combinaciones. Este nmero es llamado resolucin, la cual, depende de del valor contenido en el registro PR2 y de la frecuencia generada. La mayor resolucin es obtenida cuando el registro PR2 tiene el valor $FF. En la figura 12.9 , se observan diferentes resoluciones obtenidas de una seal PWM cuando se utiliza un oscilador de 20 MHz.

Figura 12.7. Frecuencia de una seal obtenida a partir el valor de los registros TMR2 y PR2. Fuente: Tomado de www.mikroe.com

Figura 12.9. Resolucin obtenida a partir de la frecuencia y el valor del registro PR2. Fuente: Tomado de www.mikroe.com 87

12.4. Registros asociados a la Captura, Comparacin y TMR1

12.5. Registros asociados al mdulo PWM y TMR2

Figura 12.11. Registros asociados al mdulo PWM y al TMR2. Fuente: Manual tcnico del PIC16F876. Figura 12.10. Registros asociados al mdulo de Captura, Comparacin y al TMR1. Fuente: Manual tcnico del PIC16F876.

Banderas de interrupcin: CCP1IF, CCP2IF, TMR1IF Habilitacin de interrupciones: CCP1IE, CCP2IE, TMR1IE Configuracin del mdulo CCPx: CCPxM<3:0> Configuracin Timer1: T1CON<5:0>

Banderas de interrupcin: CCP2IF, TMR2IF Habilitacin de interrupciones: CCP2IE, TMR2IE Configuracin del mdulo PWMx: CCPxCON<5:0>, CCPxCON<5:0> Configuracin Timer2: T2CON<6:0> El compilador Basic PROTON no posee comandos en alto nivel para el manejo de los mdulos de Captura y Comparacin. Si se desea utilizar estos mdulos, el usuario tendr que configurar los registros asociados al mdulo CCP en forma manual y/o habilitar las interrupciones. El siguiente ejemplo, muestra como trabajar con el mdulo CCP para realizar la captura de una seal introducida a travs el mdulo CCP1 y de esta forma determinar el perodo y la frecuencia de la misma. El resultado se presentar en la pantalla LCD.

88

12.6. Ejemplos de aplicacin del mdulo CCP1 en modo Captura


' ' ' ' ' ' ' ' CAP_12_Ejemplo_01.bas Ejemplo bsico de utilizacin del mdulo de Captura / Comparacin CCP1 para la medicin del perodo y la frecuencia de una seal introducida por el pin PORTC<2>. El resultado deber ser mostrado en la pantalla LCD. Nota: para la generacin de la seal se utilizar el microcontrolador coprocesador ATMEL, generando una una seal PWM de 50% Ciclo til a 4687,50 KHz. ----------------------------------------------------------------Device = 16F876 XTAL 20 ' Declaraciones para el manejo y utilizacin 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 smbolos utilizados por el programa ' ---------------------------------------------------------------Dim PERIOD As Word ' Var. para almacenar el perodo 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 ' seal PWM por CP2, 50% CU 4687.5 Hz CCP1CON = %00000100 T1CON = %00000001 ' Hab. Captura por CCP1, por flanco ' beta (1 ->0) TMR1 prescale = 1

CAPTURE = 0 While CAPTURE = 0 : Wend Clear TIMER1 CAPTURE = 0 OVERFLOW = 0 GoTo Main End

' ' ' ' '

Se limpia la bandera de Captura Espera para el prox. Captura Se inicializa el Timer 1 Se inicializa bandera Captura Se inicializa bandera overflow T1

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

Main: While CAPTURE = 0 : Wend ' Espera la bandera de Captura PERIOD = CCPR1 ' Almacena valor capturado en PERIOD If OVERFLOW = 0 Then ' Si TMR1 = overflow no muestra LCD Print At 1,1, "Peri.: " , Dec PERIOD , " us " Print At 2,1, "Freq.: " , DEC2 5000.0 / PERIOD, " KHz " DelayMS 250 EndIf

Figura 12.12. Fotografa de la corrida del programa CAP_12_Ejemplo_01.bas Mdulo de Captura y comparacin. 89

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 mdulos CCPx del PIC16F876 y generar seales utilizando algoritmo de la modulacin 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 seal PWM a travs de la configuracin de los registros, de echo, se har un ejercicio prctico para llevar a cabo la generacin de una seal PWM a travs de la configuracin 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

12.8. Comando en Alto nivel para PWM por software El compilador Basic PROTON tambin puede generar seales PSEUDOS PWM, significa seales PWM generadas por algoritmos en software, ejecutadas por el CPU del microcontrolador y no ejecutadas en forma independiente por el hardware perifrico mdulo 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 ejecucin 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

Canal Un valor constante que especifica cual mdulo CCPx se utilizar, las

opciones son CCP1 CCP2. En el PIC16F876 la frecuencia para la generacin 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 mdulo CCPx son: Para el CCP1 -> PORTC<2> y para el CCP2 -> PORTC<1>. relacin entre los estados lgicos altos y bajos de la seal.

Ciclo til Una variable, constante (0-255), o expresin que especifica la


relacin entre los estados lgicos altos y bajos de la seal.

Ciclos Una Variable constante (0-255) que especifica el nmero de ciclos de

Ciclo til Una variable, constante (0-255), o expresin que especifica la Frecuencia Una variable, constante (0-32767), o expresin que especifica la

salida de la seal a generar. El valor de los ciclos es dependiente del oscilador utilizado, para un oscilador de 20 MHz la duracin de cada ciclo ser aprox. 1 ms.

frecuencia en (Hz) de la seal 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 mdulos CCPx. Por defecto para el mdulo 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

El comando PWM, puede ser utilizado para generar voltajes analgicos en el rango de (0-5) Vdc a travs 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 peridica 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 alimentacin 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 proporcin ser: Ciclo til /255. por ejemplo, si el ciclo til es igual a 127 voltaje del pin aprox = 127/255 * 5Vdc = 2.49 Vdc.

90

12.9. Ejemplo de HPWM y configuracin a travs de registros


' ' ' ' ' ' ' ' CAP_12_Ejemplo_02.bas Ejemplo bsico de utilizacin del mdulo de CCP1 a travs de los registros. Se generar una seal HPWM de frecuencia aprox. 5 KHz que varia su ciclo til entre 20% y 80% en 3 segundos. CCP1 se_ ra el mdulo 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 TRISC.2 = 0 CCP1CON = %00001100 T2CON = %00000101 PR2 = 249 Duty = 200 ' Ciclo til, registro: ' CCPR1L:CCP1CON<5:4>) ' ' ' ' ' CCP1 como salida PORTC<2> pin salida Configura a CCP1 como PWM Configura Timer2, Prescalador = 4 Ajusta PR2 para obtener 5KHz salida Ajusta el ciclo til a 20% Almacena el ciclo til como una palabra de 10-bit Incrementa Retardo de Incrementa Se regresa el ciclo til 50 ms seg. hasta el 80% a 20%

Loop: CCP1CON.4 = Duty.0 ' CCP1CON.5 = Duty.1 ' CCPR1L = Duty >> 2 Duty = Duty + 10 ' DelayMS 50 ' If Duty < 800 Then Loop ' Duty = 200 ' GoTo Loop

12.10. Ejemplo de HPWM y comandos en alto nivel


' ' ' ' ' ' ' ' CAP_12_Ejemplo_03.bas Ejemplo bsico de utilizacin del mdulo de CCP1 a travs de el comando en alto nivel HPWM. Se generar una seal de frecuencia aprox. 5 KHz que varie su ciclo til entre 20% y 80% en 3 seg. CCP1 ser el mdulo 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 Dim Duty As Byte Loop: For Duty = 50 To 200 Step 15 HPWM 1,Duty,5000 DelayMS 250 Next GoTo Loop End ' Declaracin del pin a usar ' Variable Ciclo til

Figura 12.12. Fotografa de la corrida del programa CAP_12_Ejemplo_02.bas y CAP_12_Ejemplo_03. Mdulo de Captura, comparacin y PWM.

' HPWM pin PORTC<2> ciclo til ' y freq. 5000 Hz.

91

11.5. El coprocesador utilizado como Conversor A/D El coprocesador dispone de dos pines (CP0 y CP1) que pueden ser configurados como entradas analgicas a fin de realizar la conversin A/D de 10 bits de resolucin. La conversin A/D se puede realizar utilizando como referencia el voltaje de alimentacin al chip (Vdd) a travs de una referencia interna de 1.1 Volt. La configuracin se realiza con el envo de un byte que contiene la informacin de los pines que se activarn como entradas para la conversin A/D. El formato del byte de control es el siguiente: 0 0 A1 A0 1 Ref 1 1
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 conversin A/D HRSOut "Volt. LED(On) = ", DEC2 Voltaje," Vdc", 13 DelayMS 1000 GoTo Loop End

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 conversin A/D es un nmero de 10 bits, por ello, el valor mnimo ser de 0 y el mximo de 1023. Para poder leer el valor obtenido de una conversin A/D ser necesario consultar el coprocesador para determinar si est ocupado busy o ya ha alcanzado la conversin A/D. El siguiente ejemplo, muestra como realizar una conversin A/D a travs del pin CP0 del coprocesador.
' ' ' ' ' ' ' CAP_11_Ejemplo_06.bas Programa para configurar los pines del coprocesador: Pin CP0 como entrada para realizar una conversin A/D y de esta forma determinar la tensin en directo (ON) de un diodo LED conectado a Vdd a travs de una resistencia en serie de 220 Ohm. Se deber conectar el Pin CP0 al nodo del diodo LED. El resultado se presentar a travs 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 conexin a la iBOARD III DelayMS 10 ' Retardo inicial requerido por el ' coprocesador ATMEL.

Figura 11.7. Resultado de la ejecucin del programa CAP_11_Ejemplo_06.bas.

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

En el manual AVR Firmware: GPIO-3 (2006.08.27) www.parallax.com, puede encontrar ms informacin sobre los comandos implementados por el coprocesador, algunos comandos no fueron incluidos en este trabajo.

REFERENCIAS BIBLIOGRFICAS
ATMEL Corporation. 8-bit Microcontroller with 1K Bytes In-System Programmable Flash ATtiny13. (Enero, 2007). 2535GAVR01/07. Hoja de especificaciones tcnicas. Disponible a travs de http://www.atmel.com/dyn/ resources/prod_documents/doc2535.pdf Crowhill Associates Limited. Development suite Proton, Integrated environmnet compiler user manual (2004). Cambridge Future Technology Devices International Ltd. FT232R USB UART IC. (2008). Document No.: FT_000053. Hoja de especificaciones tcnicas. FTDI# 38. Disponible a _FT232R.pdf travs de http://www.ftdichip.com/Documents/DataSheets/DS Editorial Elector-

development
England.

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

Chicala, C. Adquisicin de datos, medir para conocer y controlar. Soluciones en Control SRL. Mxico. (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 tcnicas. Disponible Dallas Semiconductor Corp. Division of Maxim Integrated Products, Inc.

Microchip Technologies, Inc. 24LC16B 16K I2C Serial EEPROM. (Enero 1, 2007) DS21703G. Hoja de especificaciones tcnicas. Disponible a travs de http://ww1.microchip.com/downloads/en/DeviceDoc/21703H.pdf Milan Verle, PIC Microcontrollers mikroElektronika; 1st edition (2008). Material didctico de consulta gratuita a travs 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 tcnicas. Disponible a

a travs de http://pdfserv.maxim-ic.com/en/an/AN27.pdf

Application Note 155: 1-Wire Software Resource Guide Device Description. (Octubre 11, 2005). Disponible a travs de http://pdfserv.maximic.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 travs de Dallas Semiconductor Corp. Division of Maxim Integrated Products, Inc., App Note 937: Book of iButton Standards. (Agosto 12, 1997). Disponible a travs de

travs de http://ww1.microchip.com/downloads/en/DeviceDoc/30292c.pdf

Parallax, Inc. AVR Firmware: GPIO, Version 3. (Agosto 8, 2007). Hoja de especificaciones tcnicas. Disponible a travs de http://www.parallax.com/detail .asp?product_id=28300. Parallax, Inc. MoBoStamp-pe BS2pe Motherboard (#28300). (Septiembre 13, 2006). Hoja de especificaciones tcnicas. Disponible a travs de http://www.parallax.com/Portals/0/Downloads/docs/prod/boards/28300-MoBo0906.PDF Rodrguez, J. Comunicacin 1-Wire. En Sistema de Desarrollo MDK-B28 (pg. 415-417). Enero, 2006. Valencia, Venezuela. Disponible a travs 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.

http://pdfserv.maxim-ic.com/en/an/AN187.pdf

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 tcnicas. Disponible a travs 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 tcnicas. Disponible a travs de http://datasheets.maximic.com/en/ds/DS18B20.pdf

Dallas Semiconductor Corp. Division of Maxim Integrated Products, Inc., DS2409 MicroLAN Coupler. (Junio 19, 2007). Hoja de especificaciones tcnicas. Disponible a travs de http://datasheets.maxim-ic.com/en/ds/DS2409.pdf

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 92

ANEXO A
PANTALLA LCD DE CARACTERES La Pantalla LCD es uno de los perifricos ms empleados para la presentacin de mensajes, variables y casi cualquier informacin proveniente de un microcontrolador. Gracias a su flexibilidad, buena visibilidad y precio reducido se ha convertido en el estndar de visualizacin ms utilizado con los microcontroladores. El sistema de desarrollo iBOARD III, incluye una pantalla LCD 2x16 caracteres, la cual, es extrable a travs 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. Los terminales de conexin de las pantallas LCD de caracteres han sido estandarizados y generalmente son compatibles pin a pin con la distribucin de pines mostrada en la Figura A.2.

Figura A.2. Distribucin de pines de conexin de la pantalla LCD 2x16 del iBOARD III.

COMANDOS UTILIZADOS La informacin que se enva 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 carcter, cuando el (pin) RS est en nivel alto. Un comando es un dato numrico de 8 bits que le indica al controlador HITACHI 44780 compatible, que deber realizar una operacin; entre las cuales, se encuentran las mostradas en la figura A.3.
Figura A.1. Conexiones de la pantalla LCD 2x16 al sistema de desarrollo iBOARD III.

CONJUNTO (SET) DE CARACTERES An cuando los comandos mostrados en la tabla de la figura A.3. son suficientes para manejar la pantalla LCD, en la mayora 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 travs de la figura A.4.

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 posicin de visualizacin de los caracteres

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 93

Usted podr crear sus propios smbolos; simplemente vaya a la direccin de la memoria de smbolos de la LCD (CGRAM) y escriba en ella los ocho bytes que contienen su seleccin. Slo se utilizarn los bit 0 al 4.

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

TRMINOS UTILIZADOS CON LAS LCDS CGRAM (Character Generator RAM): Memoria voltil de 64 bytes que permite almacenar hasta 8 caracteres personalizados para ser mostrados en la pantalla. SCRRAM (Display Data RAM): Memoria voltil de 80 bytes, en la cual, se almacenan los caracteres que se van a mostrar en la pantalla. CGROM (Character Generator ROM): Memoria no voltil, en la cual, se almacenan los caracteres predefinidos que soportan la pantalla y su controlador CARACTERES PERSONALIZADOS Si el set de caracteres estndar de la LCD no contiene un carcter requerido por usted, puede utilizar la memoria CGRAM para almacenar hasta ocho (8) caracteres personalizados. La memoria CGRAM de un LCD estndar compatible con el controlador HITACHI 44780, es una memoria voltil, lo que significa, que no almacena la informacin en forma permanente. Una vez desenergizada la LCD, la memoria CGRAM perder su contenido. Todo carcter visualizado en la pantalla LCD est conformado por una matriz de 5x8 pixel, con la fila inferior reservada para la visualizacin del cursor.
Figura A.4. Conjunto (set) de caracteres para una pantalla LCD con controlador HITACHI 44780 compatible.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 94

Parallax,inc dispone de una aplicacin que facilita la creacin 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 pxel, el de su preferencia, al final el programa le indica el cdigo en hexadecimal del carcter por cada una de los 8 lneas de la matriz 5x8. El cdigo puede expresarse en Hexadecimal en formato decimal como aparece tambin el la figura A.6.

Figura A.6. Cdigo en formato decimal para un carcter especial.

La figura A.7. muestra una fotografa del sistema de desarrollo iBOARD III, ejecutando el programa de demostracin 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 captulo 04, se haba descrito como cargar y ejecutar el programa de demostracin. En esta seccin explicaremos su funcionamiento, sin embargo, antes se describirn los comandos en alto nivel que posee en compilador Basic PROTON para el manejo de una pantalla LCD.

Figura A.5. Programa LCD Carcter Creador de Parallax, inc. Fuente: www.parallax.com

Figura A.7. Fotografa de la ejecucin del programa CAP_04_Ejemplo_01.bas en el sistema de desarrollo iBOARD III.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 95

COMANDO EN ALTO NIVEL PARA EL MANEJO DE UNA LCD El compilador Basic PROTON dispone de un comando para el manejo de las pantallas LCD. PRINT Item { , Item... }

DECLARE LCD_ENPIN PORT . PIN


Asigna el Puerto y el pin de conexin que se utilizarn para la conexin de la lnea de habilitacin (EN) de la pantalla LCD. Por defecto se utiliza el pin PORTB<2>.

Item - Es una constante, variable, expresin, modificador de formato y/o un(a)


string. Tambin el comando PRINT acepta modificadores de formato como los mostrados en la siguiente tabla.

DECLARE LCD_RSPIN PORT . PIN


Asigna el Puerto y el pin de conexin que se utilizarn para la conexin de la lnea de seleccin (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.

AT ypos,xpos CLS BIN{1..32} DEC{1..10} HEX{1..8} SBIN{1..32} SDEC{1..10} SHEX{1..8} IBIN{1..32} IDEC{1..10} IHEX{1..8} ISBIN{1..32} ISDEC{1..10} ISHEX{1..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 Enva dgitos en formato binario Enva dgitos en formato decimal Enva dgitos en formato hexadecimal Enva dgitos en formato binario con signo Enva dgitos en formato decimal con signo Enva dgitos en formato hexadecimal con signo Enva dgitos en formato binario precedidos de '%' Enva dgitos en formato decimal precedidos de '#' Enva dgitos en formato hexadecimal precedidos de '$' Enva dgitos en formato binario con signo precedidos de '%' Enva dgitos en formato decimal con signo precedidos de '# Enva dgitos en formato hexadecimal con signo prec. de '$' Enva el carcter c repetido n veces Enva todo parte de un arreglo Enva datos tipo string definidos por el comando CData

DECLARE LCD_LINES 1 , 2 , or 4
Informa al compilador el nmero de lneas de la pantalla LCD. Por defecto se utiliza el valor de dos (2) lneas.

Ejemplos de utilizacin pantalla LCD. Ya en el captulo 4, se haba 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 codificacin del programa es mostrada a continuacin:
' CAP_04_Ejemplo_01.bas ' Ejemplo bsico de utilizacin 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 Declare Declare Declare TRISB.2 PORTB.2 LCD_DTPIN PORTB.4 LCD_ENPIN PORTB.3 LCD_RSPIN PORTB.1 = 0 = 0 ' ' ' ' ' ' ' ' ' ' ' Pines de conexin Pin de Datos LCD Pin de Enable LCD Pin de RS LCD Declara a PORTB.2 Coloca en PORTB.2 a la pantalla LCD conec. al PORTB.4 conec. al PORTB.3 conec. al PORTB.1 como Salida Dig. un cero (0) Lgico

A fin de utilizar la pantalla LCD de caracteres con el sistema de desarrollo iBOARD III, primero hay que configurarla a travs de las directivas del compilador. Estas directivas son las denominadas Declares. Existen seis declaraciones diferentes para la configuracin 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 grfica. (0) selecciona una pantalla LCD del tipo carcter. Por defecto se escoge el uso de una pantalla de caracteres.

DECLARE LCD_DTPIN PORT . PIN


Asigna el Puerto y el pin de conexin que se utilizarn para la conexin de la lnea data de la pantalla LCD. Por defecto se utiliza el pin PORTB<4>.

Dim Contador As Byte Dim ValorF As Float ValorF = 0 TRISA = $FF TRISC = $00

Declaracin de var. de uso general Declaracion de var. de uso general Inicializa la variable en cero Declara el Puerto A como entrada dig. Declara el Puerto C como salida dig.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 96

Main: Print $FE, 1 ' Comando para Print At 1,1, "Sist. Desarrollo" ' Lleva Print At 2,4, "iBOARD III" ' Lleva DelayMS 2000 ' Pausa For Contador = 0 To 255 ValorF = ValorF + 0.1 Print At 2,3, "Valor = ", DEC1 ValorF PORTC.2 = PORTA.0 PORTC.3 = PORTA.1 PORTC.4 = PORTA.2 PORTC.5 = PORTA.3 DelayMS 100 Next GoTo Main End ' ' ' ' ' ' ' ' '

limpiar pantalla LCD el cursos a posic. 1,1 el cursor a posic. 2,4 de 2000 ms Ciclo iterativo "For" ste segmento de cdigo mostrar en la pantalla Si presionan los pulsa_ dores, encendern los Led's correspondientes a la posicin corresp. Retardo de 100 ms

Se utiliza para limpiar la pantalla LCD. Esto es: Borrar todo el contenido mostrado en la pantalla LCD, colocar el cursor en la primera lnea 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 posicin especificada, as:
Print At 1,1, "Sist. Desarrollo" Print At 2,4, "iBOARD III" ' Lleva el cursos a posic. 1,1 ' Lleva el cursor a posic. 2,4

Mostrar el contenido dentro de las comillas en la posicin (lnea1, columna1) y el texto BOARD III en la (lnea 2, columna 4). Por ltimo, la instruccin:
Print At 2,3, "Valor = ", DEC1 ValorF

Note que en el programa anterior, se realiza la configuracin de los pines de conexin entre el sistema de desarrollo iBOARD III y la pantalla LCD. Esto se logra a travs de las siguientes directivas:
Declare Declare Declare TRISB.2 PORTB.2 LCD_DTPIN PORTB.4 LCD_ENPIN PORTB.3 LCD_RSPIN PORTB.1 = 0 = 0 ' ' ' ' ' Pin de Datos LCD Pin de Enable LCD Pin de RS LCD Declara a PORTB.2 Coloca en PORTB.2 conec. al PORTB.4 conec. al PORTB.3 conec. al PORTB.1 como Salida Dig. un cero (0) Lgico

Permite visualizar el valor d la variable ValorF con un digito decimal. Esto lo hace a partir de la lnea 2, columna 3. En la figura A.7. puede visualizar el resultado de la ejecucin del programa mencionado. Ejemplo_02. Creando un carcter especial
' Anexo_A_Ejemplo_02.bas ' Creacin y visualizacin de un caracter especial en LCD ' ------------------------------------------------------------------Device = 16F876 ALL_DIGITAL = True XTAL = 20 Declare LCD_DTPIN PORTB.4 Declare LCD_ENPIN PORTB.3 Declare LCD_RSPIN PORTB.1 TRISB.2 = 0 PORTB.2 = 0 Symbol CGRAM = $64 Dim I As Byte ' Pin de Datos LCD conect. al PORTB.4 ' Pin de Enable LCD conect. al PORTB.3 ' Pin de RS LCD conect. al PORTB.1 ' Declara a PORTB.2 como Salida Digital ' Coloca en PORTB.2 un Edo. Bajo 0 VDC ' Apuntador a la Memoria CGRAM del LCD

Las primeras tres instrucciones se utilizan para indicarle al compilador cual pin del microcontrolador ser utilizado para manejar las lneas de datos, habilitacin y seleccin de la pantalla LCD. La cuarta lnea TRISB.2 = 0, configura al pin PORTB<2> como una salida digital. La instruccin cinco: PORTB.2 = 0, coloca un cero (0) lgico 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 slo da soporte para la escritura de la LCD y no la lectura, no incluye la definicin de este pin dentro de las directivas del compilador. Si RW en la pantalla LCD se coloca a cero (0) lgico 0 Vdc, la pantalla LCD se habilitara en modo de escritura y estar lista para visualizar la informacin enviada desde el microcontrolador. Esto es justamente lo que hace la instruccin cinco: PORTB.2 = 0. Coloca al pin RW de la LCD a cero. Las instruccin:
Print $FE, 1 ' Comando para limpiar pantalla LCD

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 lnea1 Print At 1,1, "CaracterEspecial" ' CaracterEspecial Print At 2,7, 0 ' muestra caracter especial DelayMS 1000 ' segunda lnea GoTo Main End

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 97

Print 254,80, 31,00,31,00,31,00,31,00 'CARGANDO EL 4TO. CARACTER PERSONALIZADO Print 254,88, 31,21,21,21,21,21,21,31 'CARGANDO EL 5TO. CARACTER PERSONALIZADO Print 254,96, 00,21,21,21,21,21,21,00 'CARGANDO EL 6TO. CARACTER PERSONALIZADO Print 254,104, 00,27,27,04,04,04,17,14 'CARGANDO EL 7MO. CARACTER PERSONALIZADO Print 254,112, 31,31,31,04,04,31,31,31 'CARGANDO EL 8VO. CARACTER PERSONALIZADO Print 254,120, 00,27,27,04,04,00,14,17 Print Cls For I = 0 To 7 Print I," " DelayMS 1000 Next Figura A.8. Fotografa de la ejecucin del programa Anexo_A_Ejemplo_02.bas Creacin de un carcter especial en CGRAM de la LCD. GoTo Main End

EN LA CGRAM EN LA CGRAM EN LA CGRAM EN LA CGRAM EN LA CGRAM

' Limpia la pantalla LCD ' muestra los 8 caracteres

Ejemplo 3. Creacin de ocho caracteres especiales


' Anexo_A_Ejemplo_03.bas ' Creacin y visualizacin de 8 caracteres especiales en LCD ' ------------------------------------------------------------------Device = 16F876 ALL_DIGITAL = True XTAL = 20 Declare LCD_DTPIN PORTB.4 Declare LCD_ENPIN PORTB.3 Declare LCD_RSPIN PORTB.1 TRISB.2 = 0 PORTB.2 = 0 Symbol CGRAM = $64 Dim I As Byte ' Pin de Datos LCD conect. al PORTB.4 ' Pin de Enable LCD conect. al PORTB.3 ' Pin de RS LCD conect. al PORTB.1 ' Declara a PORTB.2 como Salida Digital ' Coloca en PORTB.2 un Edo. Bajo 0 VDC ' Apuntador a la Memoria CGRAM del LCD

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

Figura A.9. Fotografa de la ejecucin del programa Anexo_A_Ejemplo_03.bas Creacin de ocho caracteres especiales en CGRAM de la LCD.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 98

Ejemplo 4. Efectos especiales con una Pantalla LCD El siguiente programa presentar un mensaje en la pantalla LCD y lo correr hacia la izquierda (Scroll Left) diecisis posiciones. Luego lo correr a la derecha (Scroll Right) otras diecisis 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 Symbol SCRRIGHT = 28 Declare LCD_DTPIN PORTB.4 Declare LCD_ENPIN PORTB.3 Declare LCD_RSPIN PORTB.1 TRISB.2 = 0 PORTB.2 = 0 Main: Print $FE, 1 Print At 1,1, " Print At 2,1, " DelayMS 2000 ' ' ' ' ' Constante para hacer SCR a la izq. Constante para hacer SCR a la der. Pin de Datos LCD conect. al PORTB.4 Pin de Enable LCD conect. al PORTB.3 Pin de RS LCD conect. al PORTB.1

' Declara a PORTB.2 como Salida Digital ' Coloca en PORTB.2 un Edo. Bajo 0 VDC ' Limpia la pantalla LCD ' Visualiza mensaje en la ' Lnea 1 y Lnea 2 Figura A.10. Fotografa de la ejecucin del programa Anexo_A_Ejemplo_04.bas Efectos especiales con una pantalla LCD.

Pantalla LCD iBOARD III

" "

GoSub Scroll_Izquierda GoSub Scroll_Derecha DelayMS 1000 GoTo Main

'Desplaza todo el texto a la izquierda 'Desplaza todo el texto a la derecha

'SUB-RUTINAS '-------------------------------------------------------------------Scroll_Izquierda: For Index = 0 To 15 Print $FE, SCRLEFT DelayMS 300 Next Return Scroll_Derecha: For Index = 0 To 15 Print $FE, SCRRIGHT DelayMS 300 Next Return Sistema de desarrollo para microcontroladores PIC, iBOARD III. 99

Ejemplo 5. Grfica de Barras con LCD


' ' ' ' ' Programa: Anexo_A_Ejemplo_05.bas Ejemplo para generar un cdigo de barras horizontal en la LCD |||||||||||||||||||||| Valor = xx -----------------------------------------------------------------Device = 16F876 ALL_DIGITAL = True XTAL = 20 Declare LCD_DTPIN PORTB.4 Declare LCD_ENPIN PORTB.3 Declare LCD_RSPIN PORTB.1 Low PORTB.2 ' Config. todos los puertos como dig. ' Define la velocidad del resonador ' ' ' ' ' Pines de conexin Pin de Datos LCD Pin de Enable LCD Pin de RS LCD Pin de RW LCD a la pantalla LCD conec. al PORTB.4 conec. al PORTB.3 conec. al PORTB.1 conec. al PORTB.2 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

' Declaracin 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. | despus barras Dim BALF As Byte ' Se necesita un caracter de balance Symbol Symbol Symbol Symbol Symbol B_WDTH = 16 MAXBAR = B_WDTH * 3 FULLBAR = 3 BASEBAR = 0 CGRAM = 64 ' ' ' ' Max No. de caracteres en la barra Max No. de segmentos barra Valor ASCII de la barra ||| Valor ASCII de la barra en blanco

DelayMS 1000 Cls

' Retardo requerido por la LCD ' Limpia todas variables en RAM EN LA CGRAM EN LA CGRAM EN LA CGRAM EN LA CGRAM

'CARGANDO EL 1ER. CARACTER ( ) PERSONALIZADO Print 254,64, $00,$00,$00,$00,$00,$00,$00,$00 'CARGANDO EL 2DO. CARACTER (| ) PERSONALIZADO Print 254,72, $10,$10,$10,$10,$10,$10,$10,$10 'CARGANDO EL 3RO. CARACTER (|| )PERSONALIZADO Print 254,80, $14,$14,$14,$14,$14,$14,$14,$14 'CARGANDO EL 4TO. CARACTER (|||)PERSONALIZADO 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

Figura A.11. Fotografa de la ejecucin del programa Anexo_A_Ejemplo_05.bas Grfica de barras con una pantalla LCD.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 100

ANEXO B
B.1. PROGRAMA iLOADER El programa iLOADER es una aplicacin desarrollada para trabajar con los productos: iFT232, iBOARD III y PT-40, el cual, permite efectuar la programacin de los microcontroladores PIC en forma boot-loader ICSP, visualizar datos en forma de texto o grfica e incluso intercambiar datos con el microcontrolador utilizando el estndar OPC ampliamente aceptado en el campo de la automatizacin industrial. iLOADER se fundamenta en un concepto novedoso, en el cual, se combinan las aplicaciones tpicas del microcontrolador junto con la instrumentacin virtual y la automatizacin/control de procesos en un slo entorno unificado. Esta nica mezcla de caractersticas permite su uso en diversos campos que abarcan desde la enseanza hasta el desarrollo de soluciones de bajo costo para aplicaciones comerciales y/o industriales. Nivel I: iLOADER + iFT232. Nivel II: iLOADER + PT-40. Con el nivel intermedio usted dispondr de una plataforma compacta de desarrollo que incluye, en la base de colocacin 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 lneas x 16 columnas; todo listo para su correcto funcionamiento sin necesidad de utilizar componentes adicionales. Por su pequeo tamao, 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 combinacin le permitir trabajar con la mayora de los microcontroladores PIC de 40 pines de la serie 16F y 18F, tales como: PIC16F874 PIC18F448 PIC18F4331 PIC18F4480 PIC18F4580 PIC16F874A PIC18F452 PIC18F4420 PIC18F4520 PIC18F4585 PIC16F877 PIC18F458 PIC18F4431 PIC18F4525 PIC18F4620 PIC16F877A PIC18F4220 PIC18F4439 PIC18F4539 PIC18F4680 PIC18F442 PIC18F4320 PIC18F4455 PIC18F4550

Figura B.1. Fotografa del software iLOADER + iFT232.

Esta combinacin constituye el nivel bsico de desarrollo, ofreciendo el menor costo de un sistema de desarrollo con comunicacin USB. La combinacin iLOADER + iFT232, le permiten a usted disfrutar de: . . . . . Un Un Un Un Un (01) (01) (01) (01) (01) Conversor USB a Serial RS232 TTL Programador para PIC boot-loader ICSP Osciloscopio virtual de ocho (08) canales Uart ( Hyper Terminal ) recepcin transmisin Servidor de datos OPC

Figura B.2. Fotografa del software iLOADER + PT-40.

Nota: Mayor informacin sobre el producto PT-40, est disponible a travs de la pgina web: http://www.roso-control.com

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 101

Nivel III: iLOADER + iBOARD III. El software iLOADER, se acompaa de un CD de instalacin que contiene todos los elementos necesarios para su utilizacin. La instalacin del software es sencilla, con una interfaz para Windows muy amigable. Le agradecemos lea detenidamente las siguientes indicaciones antes de continuar. Pasos para la instalacin del programa 1. 2. 3. 4.
Figura B.3. Fotografa del software iLOADER + iBOARD III.

Introduzca el CD que acompaa al programador etiquetado como iLOADER en la unidad de CD-ROM DVD de su PC. Si el programa de instalacin no se inicia de forma automtica, utilice el explorador de Windows y haga doble clic sobre el archivo setup.exe. Siga las instrucciones que se le presentarn en la pantalla. Seleccione la carpeta de instalacin. Asegrese de recordar el directorio donde instal el programa, ya que, los archivos para el boot-loader, manual de operacin y otros documentos de inters sern copiados en este directorio. Durante la instalacin, se observar la secuencia de pantallas como las indicadas en las figuras B.4.(1,2,3,4). Al concluir verifique que los drivers o controladores de su producto han sido instalados de forma correcta segn se indica en su respectivo manual de usuario en cada producto en particular.

Obtenga el mximo 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 PIC16F876A PIC18F2220 PIC18F2455 PIC18F2550 PIC16F871 PIC18F242 PIC18F2320 PIC18F2480 PIC18F2580 PIC16F873 PIC18F248 PIC18F2331 PIC18F2520 PIC18F2585 PIC16F873A PIC16F252 PIC18F2420 PIC18F2525 PIC18F2620 PIC16F876 PIC18F258 PIC18F2431/39 PIC18F2539 PIC18F2680

5. 6.

La amplia variedad de perifricos 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 resolucin de problemas en el rea tanto comercial como industrial. Por otra parte, su conexin al exterior por medio de terminales estndar de 0.1 permite su fcil instalacin sobre un protoboard y/o tarjetas finales de control. B.2. INSTALACIN DEL SOFTWARE Requerimientos mnimos del computador Procesador Pentium 266 MHz o superior Memoria Ram 128 MBytes Espacio disponible HD 50 MBytes Unidad de CD ROM y/o DVD Puerto de comunicaciones USB Sistema Operativo Windows XP/ Vista

Figura B.4.1. Asistente para la instalacin del iLOADER. Sistema de desarrollo para microcontroladores PIC, iBOARD III. 102

Figura B.4.2. Seleccin de la carpeta de instalacin del iLOADER.

Figura B.4.4. Secuencia de pantallas mostradas durante la instalacin del iLOADER.

B.3. DISPOSITIVOS SOPORTADOS El programa iLOADER es completamente actualizable en forma gratuita a travs de la pgina web: http://www.roso-control.com. Actualmente, el programa soporta los siguientes microcontroladores Microcontroladores soportados en la versin actual del iLOADER: PIC16F87 PIC16F873A PIC16F877 PIC18F258 PIC18F1220 PIC18F2420 PIC18F2525 PIC18F2620 PIC18F4420 PIC18F4520 PIC18F4585 PIC18F6585 PIC18F6720 PIC18F8621 PIC16F88 PIC16F874 PIC16F877A PIC18F442 PIC18F1320 PIC18F2431/39 PIC18F2539 PIC18F2680 PIC18F4431 PIC18F4525 PIC18F4620 PIC18F6620 PIC18F6722 PIC18F8627 PIC16F870 PIC16F874A PIC18F242 PIC18F448 PIC18F2220 PIC18F2455 PIC18F2550 PIC18F4220 PIC18F4439 PIC18F4539 PIC18F4680 PIC18F6621 PIC18F8520 PIC18F8680 PIC16F871 PIC16F876 PIC18F248 PIC18F452 PIC18F2320 PIC18F2480 PIC18F2580 PIC18F4320 PIC18F4455 PIC18F4550 PIC18F6520 PIC18F6627 PIC18F8525 PIC16F873 PIC16F876A PIC18F252 PIC18F458 PIC18F2331 PIC18F2520 PIC18F2585 PIC18F4331 PIC18F4480 PIC18F4580 PIC18F6525 PIC18F6680 PIC18F8620

Figura B.4.3. Visualizacin de la instalacin del iLOADER.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 103

B.4. ARCHIVOS boot-loader *.hex Antes de utilizar el programa iLOADER como grabador/cargador de microcontroladores PIC, stos deben pre-programarse con un firmware suministrado por el fabricante. Este cdigo se suministra gratuitamente en forma de archivos binarios con extensin *.hex, los cuales, permiten al programa iLOADER: identificar al microcontrolador PIC, leer la versin del firmware instalado, identificar tipo y memoria Flash, RAM y Eeprom del microcontrolador. Dentro del directorio de instalacin 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 aplicacin, 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 ncleo 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 bootloader. 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 programacin del microcontrolador PIC con el firmware boot-loader. Se observa que el firmware se puede grabar a travs de un programador del tipo serial y/o un programador del tipo USB.

Programador Serial

Programador USB

Firmware Boot-loader
Figura B.5. Programacin del PIC con el archivo *.hex.

B.6. PROGRAMA iLOADER. iLOADER se compone de las siguientes partes: 1. 2. 3. Una herramienta de programacin o carga de cdigo en microcontroladores tipo boot-loader. Una herramienta de visualizacin de datos grficos y terminal de comunicaciones ASCII. Una aplicacin servidor de datos basada en el estndar OPC.

La conjuncin de estas potentes herramientas permite su utilizacin en mltiples aplicaciones, abarcando desde de la programacin de los microcontroladores PIC, la visualizacin de datos en tiempo real, instrumentacin virtual hasta incursionar en reas como el control de procesos por computadora y la automatizacin industrial.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 104

B.7. DESCRIPCIN GENERAL DEL iLOADER. La pantalla principal de la aplicacin se presenta en la figura B.6.

Barra de identificacin del programa (1)

Presenta el nombre del programa, junto con los controles para minimizar y cerrar el programa iLOADER. Men de la aplicacin (2) El men del programa iLOADER, brinda las siguientes opciones: Archivo. Ofrece microcontrolador. opciones para el manejo del cdigo ejecutable del

Importar Archivo *.hex: Carga el contenido de un archivo con cdigo ejecutable de extensin *.hex para ser grabado en el microcontrolador. Lista de Archivos Recientes: Presenta los tres ltimos archivos abiertos por el programa durante su ejecucin actual. Esta lista se pierde al cerrar al iLOADER. Salir: Finaliza la ejecucin del programa iLOADER. iLOADER. Ofrece un acceso por medio del men a las funciones bsicas de programacin. 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 enva un mensaje de error. Borrar. Borra el programa grabado en el microcontrolador PIC.

Figura B.6. Vista general del programa iLOADER.

En esta pantalla podemos distinguir los siguientes elementos: Barra de Identificacin del programa (1) Men de la aplicacin (2) Cuadro de informacin del hardware (3) Funciones para la programacin de microcontroladores PIC (4) Contenido de la memoria de Programa (5) Contenido de la memoria de datos (6) conos de informacin y estado (7) Cuadro de mensajes (8)

Opciones. Controla las opciones de programacin del microcontrolador. Programar Flash: Habilita/Deshabilita la escritura en la memoria flash. Programar EEPROM: Habilita/Deshabilita la escritura en la memoria EEPROM.

A continuacin se describen cada uno de ellos:

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 105

Verificar al programar: Controla la verificacin automtica al terminar de programar. Ejecutar programa al terminar: Esta opcin al estar habilitada, permite que una vez concluida la programacin; el pin de re-inicializacin o /MCLR del microcontrolador PIC sea liberado para permitir la ejecucin del programa. Si est deshabilitado el PIC se quedar en estado de RESET.

Cuadro de Informacin del Hardware (3) En este cuadro podemos encontrar la siguiente informacin: Hardware. Indica el producto detectado (iBOARD III, iFT232 PT-40). Versin. Corresponde a la versin 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 programacin de microcontroladores PIC (4) Este conjunto de botones, llevan asociadas las mismas funciones que el men iLOADER descrito en la seccin anterior. El botn Ejecutar efecta un reset del microcontrolador y comienza la ejecucin del programa grabado en el PIC.

UART/SCOPE. Despliega la herramienta UART/SCOPE, la cual se compone de un terminal bi-direccional de comunicaciones seriales ASCII y de un grfico de visualizacin de seales de mltiples canales. El terminal de datos puede ser utilizado para depurar los programas escritos para el microcontrolador funcionando como un visualizador de texto. El componente grfico tiene un gran campo de aplicacin, permitiendo efectuar el registro de valores de forma visual en tiempo real de hasta 8 canales independientes de informacin. Los datos graficados pueden ser impresos como parte de reportes o para analizar el comportamiento de las variables capturadas por el microcontrolador.

Contenido de la memoria de programa (5) Muestra el contenido de la memoria de programa o memoria flash del microcontrolador. Se actualiza al cargar un archivo .hex nuevo o al efectuar la lectura del microcontrolador. Es un cuadro de slo lectura que no puede ser editado por el usuario.

Servidor OPC. Esta poderosa herramienta al ser desplegada, permite transformar al microcontrolador en una fuente de datos en tiempo real utilizando uno de los estndares de intercambio de datos ms aceptados por el entorno industrial. De esta forma, resulta muy simple integrar al microcontrolador en aplicaciones de automatizacin y control, pudiendo interactuar con cientos de programas de aplicacin y otros dispositivos de control presentes en la industria moderna.

Ayuda. Este sub-men despliega El cuadro Acerca de.. con informacin de la versin del programa iLOADER.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 106

Contenido de la memoria de datos EEPROM (6) Muestra el contenido de la memoria de datos EEPROM del microcontrolador. Se actualiza al efectuar la lectura del microcontrolador PIC. conos de informacin y estado (7) Constituyen una ayuda grfica 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 continuacin:

Cuadro de mensajes (8) Ubicado en el extremo inferior izquierdo de la pantalla, suministra mensajes auxiliares que para indicar el estado del programa o de las acciones realizadas por el mismo.
Figura B.7. Herramienta UART/SCOPE incluida en el iLOADER.

En esta pantalla podemos distinguir los siguientes elementos: B.8. HERRAMIENTA DE VISUALIZACIN DE DATOS UART/SCOPE La herramienta UART/SCOPE implementa un completo interfaz de visualizacin tipo texto (como un Hyper terminal) trabajando en forma de UART y tipo grfico (como un osciloscopio) con capacidad de envo y recepcin de datos a velocidades en el rango de 2400 a 57600 Baud. Tiene dos formas de operacin: 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 grfico (SCOPE) disponemos de un componente que permite graficar de forma simultnea hasta 8 canales de informacin digital o analgica. De sta forma podemos transformar en segundos al iLOADER en un registrador grfico en tiempo real de los datos provenientes desde el microcontrolador PIC.. La figura B.7. Muestra la pantalla de la herramienta UART/SCOPE. Barra de Identificacin del programa (1) Cuadro de recepcin de mensajes desde el microcontrolador (2) Selector del modo de trabajo (3) Configuracin de la conexin (4) Opciones de la UART (5) Opciones del SCOPE (6) Escala de tiempo del SCOPE (7) Cuadro de edicin de texto enviado al microcontrolador (8)

A continuacin se describen cada uno de ellos: Barra de identificacin de la herramienta (1)

Presenta el nombre de la herramienta: iLOADER Herramienta UART/SCOPE, junto con los controles para minimizar, maximizar y cerrar la aplicacin.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 107

Cuadro de recepcin 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 estndar (0 al 127). Permite el uso de los comandos de control mostrados en la tabla anexa figura B.8. Comando ASCII 0 7 8 9 13 Significado Clear. Borra la pantalla de textos. Bell. Emite un sonido por la campana del computador. Backspace. Borra un carcter. TAB. Agrega un tabulador para dar formato al texto. Carriage Return. Avance el texto a la siguiente lnea.

Botn Desconectar: Se utiliza para cerrar el puerto de comunicaciones del computador. Botn 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: Aade un carcter de fin de lnea a los datos enviados al microcontrolador. Limpiar: Borra el contenido del cuadro de recepcin de mensajes y realiza un reset al microcontrolador. Opciones del SCOPE (6) Este conjunto de opciones estar disponible slo cuando est activada la opcin 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 visualizacin o no de las grillas horizontales y verticales de la grfica SCOPE. La opcin Color Negro, hace que el fondo de la pantalla cambie de color negro a color blanco, a fin de, disminuir el costo de impresin de la grfica mostrada. Tracking: Establece el modo de visualizacin de los datos, pudiendo en ser forma deslizante o comprimido. En el modo deslizante, la grfica SCOPE slo mostrar los datos recibidos durante una ventana temporal. En modo comprimido, el eje del tiempo de la grfica 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 grfica cuando se trabaja en modo deslizante. Mediante este selector el usuario puede cambiar la escala de tiempo horizontal de la grfica desde un valor de 10 segundos a 10 minutos. Los valores posibles: 10 segundos, 30 segundos, 1 minuto y 10 minutos.

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. Configuracin de la conexin (4) Este grupo de controles est conformado por cuatro (04) elementos: Caja de seleccin de la velocidad de conexin: Establece la velocidad de la comunicacin 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 verificacin de paridad. Se pueden seleccionar velocidades de comunicacin estndar entre 2400 y 57600 baudios. La opcin Otro Valor, permite definir una velocidad personalizada comprendida entre estos mismos valores. Advertencia: El uso de velocidades no estndar al momento de comunicarse con el microcontrolador PIC debe hacerse cuidadosamente, ya que, algunos compiladores para PIC slo soportan velocidades normalizadas. Botn Conectar: Se utiliza para abrir el puerto de comunicaciones del computador. Para poder activarse; debe seleccionar primero la velocidad de comunicacin en Baudios.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 108

B.9. HERRAMIENTA SERVIDOR DE DATOS OPC Una de las caractersticas ms interesantes del iLOADER, la cual, la hace una aplicacin nica en su tipo; es la implementacin de la herramienta servidor de datos OPC. El OPC, (OLE para el Control de Procesos) es una especificacin tcnica no propietaria definida por la OPC Foundation (http://www.opcfoundation.org) y consiste bsicamente en un sistema de interfaces estndar basado en OLE/DCOM de Microsoft. Con OPC es posible nter-operar dispositivos industriales con sistemas de informacin. Un sistema de automatizacin industrial en un ambiente moderno basado en OPC, se caracteriza por la presencia de elementos heterogneos 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 ms dentro de este tipo de ambientes de una manera sumamente sencilla. Esto implica que el microcontrolador puede comenzar a actuar como un equipo de medicin o control abrindole 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 instrumentacin y control OPC disponible en la industria. Para disfrutar de todo estos beneficios, Ud. slo tendr que enviar y recibir sus datos de forma serial USB al computador y el software iLOADER se encargar del resto.

Figura B.9. Grfica de datos en modo deslizante (arriba) y modo comprimido (abajo).

Cuadro de edicin de texto enviado al microcontrolador (9) Este cuadro se compone de dos elementos, el primero es una caja de texto estndar, en la cual, podemos escribir mensajes en forma de texto o valores numricos que posteriormente se enviarn al microcontrolador PIC. El segundo elemento, en el botn Enviar, el cual, se utiliza para enviar los datos desde el computador hacia el microcontrolador PIC.

Figura B.10. Interconexin de elementos heterogneos en un ambiente de trabajo.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 109

Descripcin 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 Identificacin del programa (1) Informacin del Servidor de Datos OPC (2) Configuracin de la conexin al PIC (3) Configuracin de variables de entrada (4) Configuracin de variables de salida (5)

A continuacin se describen cada uno de ellos: Barra de identificacin 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 aplicacin. Informacin del Servidor de Datos OPC (2) Contiene la informacin 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 ejecutndose de manera correcta o si ha ocurrido un error. No. Clientes OPC conectados: Refleja la cantidad clientes que estn recibiendo datos desde el servidor OPC iLOADER. Una vez que se est ejecutando no puede cerrarse el servidor hasta que todos los clientes estn desconectados. No. Variables de entrada: Indica la cantidad de variables que son enviadas desde el PIC al PC. Estas variables slo deben ser ledas 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.

Configuracin de la conexin al PIC (3) Este grupo de controles est conformado por cuatro (04) elementos: Caja de seleccin de la velocidad de conexin: Establece la velocidad de la comunicacin 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 verificacin de paridad. Se pueden seleccionar velocidades de comunicacin estndar entre 2400 y 57600 baudios. La opcin Otro Valor, permite definir una velocidad personalizada comprendida entre estos mismos valores. Advertencia: El uso de velocidades no estndar al momento de comunicarse con el microcontrolador debe hacerse cuidadosamente, ya que, algunos compiladores para PIC slo soportan las velocidades normalizadas.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 110

Botn Iniciar Servidor: Al presionar este botn se crea el servidor de datos OPC, el cual, estar disponible de inmediato a los clientes OPC. Para su correcta activacin; debe seleccionarse primero: la velocidad de conexin en Baudios, la cantidad de variables de entrada o salida requeridas y el tipo cannico de las mismas. Botn Detener Servidor: Slo 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 configuracin de sus variables de entrada o salida. Botn Salir: Cierra la herramienta Servidor de Datos OPC.

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 carcter de terminacin 13 (CR) para poder establecer la comunicacin con el PC. Configuracin 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 aplicacin tipo cliente OPC, por ejemplo: el programa MatLAB, LABView, programas propietarios y/o aplicaciones genricas realizadas en VB6, *.net y otras plataformas, las cuales, hace uso del servidor para intercambiar informacin con el microcontrolador PIC. Mediante los botones Aadir 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 nmero 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 cannico de las variables entre las opciones: Boolean, Entero, Double y String. El mecanismo de funcionamiento de las variables de salida es el siguiente: 1. 2. El servidor OPC expone a los clientes OPC los nombres y tipos de las variables de salida disponibles. La aplicacin cliente enva el valor de la salida al servidor OPC del iLOADER. El servidor OPC actualiza internamente el valor de la variable. 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 El servidor procesa la solicitud de lectura y enva al PIC el ltimo valor disponible de la variable utilizando el siguiente formato: Nombre Variable , Valor , 13 6. El Microcontrolador PIC recibir la informacin (variable) enviada por el PC.

Configuracin 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 Aadir y Eliminar podemos modificar la cantidad de variables de entrada desde 0 hasta 19. En caso de alcanzar el mximo de variables permitidas, el software mostrar un mensaje de error.

Las variables de entrada se identifican mediante Ex, donde x es un nmero 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 cannica 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

3. 4.

5.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 111

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 seccin describiremos los pasos necesarios para lograr utilizar el iLOADER como programador ICSP boot-loader de microcontroladores. Paso No.1. Preparacin del Microcontrolador PIC como Boot-Loader Siga las instrucciones sealadas en la seccin B.5. para convertir un microcontrolador nuevo en boot-loader de manera que pueda ser utilizado con el programa iLOADER. Esta accin no es necesaria para los microcontroladores incluidos en los sistemas PT-40 y/o iBOARD III, los cuales, vienen pre-programados de fbrica. Paso No.2. Conecte el Hardware al puerto USB Antes de inicializar el software asegrese 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 algn error, aparecer el mensaje de la figura B.12. y el programa se cerrar automticamente.

Al encontrar un hardware vlido (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

Figura B.12. Mensaje de error del programa iLOADER al no detectar ningn hardware compatible.

Utilizando el cuadro de bsqueda 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 instalacin del iLOADER.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 112

Al cargar de forma exitosa el archivo, se mostrar en los cuadros Memoria de Programa y Datos en EEPROM el contenido del archivo .hex, . El cono de la parte inferior derecha de la pantalla indicar que la operacin ha sido exitosa (figura B.15). En la parte inferior podemos observar el directorio y nombre del archivo cargado.

En caso de ocurrir algn error, se indicar en forma de texto y mediante el cono grfico como se muestra en la figura B.16.

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

Paso No.4. Seleccione las opciones de programacin (opcional) Por defecto, las opciones de programacin activas son: Programar Flash, Programar EEPROM y Ejecutar Programa al Terminar. Usted puede habilitar la opcin Verificar al Terminar para comprobar la correcta grabacin del PIC de forma automtica. La opcin Ejecutar Programa al Terminar permite que el programa cargado al micro se ejecute inmediatamente despus de terminar la programacin del PIC. El contenido de la memoria Flash y Eeprom se pueden visualizar activando la opcin Ver Memo. Flash y Eeprom.

Figura B.15. Archivo *.hex cargado de forma exitosa. Sistema de desarrollo para microcontroladores PIC, iBOARD III. 113

Paso No.5. Escribir en el Microcontrolador Presione el botn Escribir para iniciar el proceso de grabacin. Una barra de progreso le indicar el desarrollo de la operacin y al finalizar de forma satisfactoria el cono de grabacin exitosa aparecer en parte inferior de la pantalla.

Paso No.1. Cargar el Programa Cargue el programa UART_01.hex al microcontrolador siguiendo las indicaciones dadas en la seccin anterior. Todos los programas utilizados en esta parte se encuentran se dentro del CD que acompaa al iLOADER en la carpeta de instalacin del software en su computador. Directorio: \16_Uart_Scope_OPC. Paso No.2. Iniciar Herramienta UART/SCOPE Haga clic en el men UART/SCOPE. Se desplegar la pantalla de la figura B.16.

Paso No.6. Verificar la programacin del Microcontrolador (opcional) Presione el botn Verificar para iniciar el proceso. Una barra de progreso le indicar el desarrollo de la operacin y al finalizar de forma satisfactoria el cono de verificacin exitosa aparecer en parte inferior de la pantalla.

Paso No.7. Ejecutar Programa (opcional) Si desea ejecutar el programa recin transmitido al microcontrolador PIC, haga clic sobre Ejecutar. El cono de programa en ejecucin le informar que el PIC se encuentra ejecutando su programa.
Figura B.16. Pantalla de la aplicacin UART/SCOPE

B.11. MANEJO DE LA UART/SCOPE La comunicacin con la herramienta UART/SCOPE se hace mediante el formato 8N1 a una velocidad ajustable entre 2400 y 57600 bps. En esta seccin describiremos los pasos necesarios para lograr utilizar la herramienta UART/SCOPE del iLOADER con los programas de ejemplo incluidos en el CD de instalacin.

Paso No.3. Conexin con el PIC Seleccione la velocidad de conexin en 19200 baudios y oprima conectar. La figura B.17 muestra la ejecucin del ejemplo UART_01.hex Veamos en detalle el cdigo fuente en lenguaje PROTON del programa UART_01.bas La instruccin DECLARE HSERIAL_BAUD 19200 define la velocidad de la comunicacin en el PIC en 19200 Baudios.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 114

La instruccin HRSOUT se utiliza para transmitir informacin serial por medio de la USART del PIC mientras que HRSIN recibe los datos provenientes del computador.

Main: ' El comando 0 har una limpieza de pantalla y colocar el cursor ' en la primera posicin 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 ' mostrarn los cdigos 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 ' Iteracin con el usuario, utilizacin de HRSIN HRSOut 13,"Iteracciones con el usuario a traves del HRSin ",13 HRSOut "-----------------------------------------------",13

Figura B.17. Ejecucin del programa UART_01.hex ' ' ' ' ' ' ' ' ' ' ' ------------------------------------------------------------------Programa: UART_01 Utilizacin de la herramienta UART del iLOADER, se practicarn los comandos: 0 ... Clear Screen (Limpiar pantalla) 7 ... Beep (Emite un Beep, Campana) 9 ... Tabulador (Cursor Tabulacin) 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 Dim ii As Byte Dim iii As Byte Declare HSERIAL_BAUD 19200 DelayMS 1000 ' ' ' ' ' Variable auxiliar Variable auxiliar Variable auxiliar Velocidad de conexin Micro <-> PC Retardo inicial requerido por el

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

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 115

El programa UART_01.bas muestra cmo utilizar todos los comandos de control admitidos por la herramienta UART/SCOPE. Tambin podemos observar la forma en que es recibida la informacin enviada desde el PC. Durante la ejecucin, 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 numricos sern enviados al microcontrolador PIC.

Declare HSERIAL_BAUD 19200 DelayMS 1000 Main:

' Velocidad de conexin al PC ' Retardo inicial requerido por el ' UART, es obligatorio su uso. '

' El comando 0 har una limpieza de pantalla y colocar el cursor ' en la primera posicin de la pantalla arriba y a la izquierda. ' Comando 0 (Clear) HRSOut HRSOut HRSOut HRSOut HRSOut HRSOut 0 "Este programa presenta los valores de i",13 "en formato Decimal, Hexadecimal y binario",13 "-----------------------------------------",13 9,"DEC i", 9, "HEX i", 9, "BIN i",13 "-----------------------------------------",13

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 comunicacin a 19200 baudios y oprima conectar. La figura B.18 muestra la ejecucin del programa UART_02.hex. Veamos en detalle el cdigo fuente del programa UART_02.bas en lenguaje Basic PROTON. En este programa vemos como desplegar datos en forma de texto, por ejemplo: la instruccin enva el texto encerrado entre comillas seguido del comando 13.

For i=0 To 255 HRSOut 9, DEC3 i, 9, HEX2 i, 9, BIN8 i,13 Next End

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


Tambin se puede observar el uso del comando 0 para borrar el contenido de la pantalla y de los modificadores de formato para presentar informacin numrica en diferentes formas. As la instruccin mostrada a continuacin, presenta en la pantalla del computador la variable i en tres formatos numricos diferentes: (a) decimal de 3 dgitos (DEC3), (b) Hexadecimal de 2 dgitos (HEX2) y binario de 8 dgitos (BIN8).

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


' ' ' ' ------------------------------------------------------------------Programa: UART_02 Visualizacin lineal de datos ... ------------------------------------------------------------------Device = 16F876 ' Microcontrolador Utilizado XTAL 20 ' Velocidad del Reloj (resonador) Dim i As Byte ' Variable auxiliar Sistema de desarrollo para microcontroladores PIC, iBOARD III. 116

Figura B.18. Ejecucin del programa UART_02.hex

B.12. OPERACIN EN MODO SCOPE Las recomendaciones generales para el manejo del SCOPE son las siguientes: 1. 2. El programa debe incluir un retardo al principio del mismo de 1000 ms, necesario para sincronizar correctamente los datos. Se pueden graficar datos tipo entero o flotante. Al trabajar con nmeros en flotante debe considerarse la configuracin regional del computador y ajustar el smbolo decimal en punto . mientras el smbolo de separacin de miles debe ser una coma ,. La herramienta permite trabajar con 8 canales, los cuales, se identifican como C0, C1, C2, C3, C4, C5, C6 y C7. El formato usado para enviar datos a un canal del SCOPE, es el siguiente: Cx, DEC Valor, 13 Paso No.1. Cargar el Programa Siga las indicaciones suministradas anteriormente y programe al microcontrolador PIC con el cdigo del programa denominado SCOPE_01.hex. El programa fuente en Basic PROTON puede cargarse a travs del archivo SCOPE1.bas, el cual, se encuentra en el CD de instalacin y es mostrado a continuacin:
' ' ' ' ------------------------------------------------------------------Programa: SCOPE_01 Visualizacin de datos Enteros a travs del canal "C0" del SCOPE .. ------------------------------------------------------------------Device = 16F876 ' Microcontrolador Utilizado XTAL 20 ' Velocidad del Reloj (resonador) Dim i As Word Declare HSERIAL_BAUD 19200 DelayMS 1000 Main: For i = 0 To 999 HRSOut "C0", DEC3 i ,13 Next i GoTo Main ' ' ' ' Variable auxiliar Velocidad de Conexin al PC Retardo inicial requerido por el SCOPE, es obligatorio su uso.

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 posicin SCOPE (a la derecha). Paso No.3. Conexin con el PIC Seleccione la velocidad de comunicacin a 19200 baudios y oprima conectar. La figura B.19, muestra la ejecucin del programa SCOPE_01.hex En la parte inferior de la pantalla, podemos observar tres indicadores numricos, los cuales, reflejan el ltimo valor graficado en los canales C0, C1 y C2, respectivamente.

3. 4.

con x = 1,2,3,4,5,6 y/o 7

Figura B.19. Programa SCOPE_01.hex. Graficando una seal diente de sierra. Sistema de desarrollo para microcontroladores PIC, iBOARD III. 117

En el ejemplo del programa SCOPE_04.bas, ver figura B.20, podemos observar como el SCOPE puede graficar datos con diferentes formas cannicas. 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 codificacin del programa SCOPE_04.bas en Basic PROTON se presenta a continuacin:
' ' ' ' ' ------------------------------------------------------------------Programa: SCOPE_04 Visualizacin de datos en punto flotante a travs 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 conexin al PC i = 0 j = 0 DelayMS 1000 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 Main:

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 simultnea. El resultado del programa podemos verlo en la figura B.21.
' ' ' ' ' -------------------------------------------------------------Programa: SCOPE_05 Visualizacin de datos en los 8 canales en forma simultnea "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 conexin al PC Main: For i = 0 To 99 HRSOut "C0", Dec HRSOut "C1", Dec HRSOut "C2", Dec HRSOut "C3", Dec HRSOut "C4", Dec HRSOut "C5", Dec HRSOut "C6", Dec HRSOut "C7", Dec Next GoTo Main i, 13 i+100, i+200, i+300, i+400, i+500, i+600, i+700,

13 13 13 13 13 13 13

Figura B.20. Programa SCOPE_04.bas graficando dos seales de diferentes tipo cannico.

Figura B.21. Programa SCOPE_05.bas graficando en los 8 canales en forma simultnea.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 118

B.13. MANEJO DEL SERVIDOR OPC En esta seccin, 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 travs del protocolo OPC, ya sea en la computadora local o en cualquier otra computadora instalada en red, local y/o extendida. Estos programas podrn 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 cdigo OPC_01.bas en el PIC. Seguidamente presione en el men principal del programa iLOADER la opcin Servidor OPC. Se mostrar la pantalla de configuracin/trabajo del Servidor OPC tal como se muestra en la figura B.22. Nota: La velocidad de conexin estar establecida por la velocidad de comunicacin serial utilizada por usted en el programa realizado, en los ejemplos aqu incluidos se utiliza una velocidad de 19200 Baudios. A continuacin se presenta el cdigo fuente del programa OPC_01.bas codificado en Basic PROTON.
' ' ' ' ------------------------------------------------------------------Programa: OPC_01 Envo 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 conexin 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 cdigo fuente, este programa utiliza 3 variables de entrada al servidor (E0, E1 y E2) siendo todas de ellas de tipo cannico entero. Estas variables son generadas por el microcontrolador PIC a travs del programa Basic PROTON. Utilizando el botn Eliminar, dejaremos en el cuadro de variables de entrada del men Servidor OPC, solamente a aquellas variables que se utilizarn, es decir E0, E1 y E2. Tambin debemos ajustar mediante la casilla de seleccin de tipo, el tipo de las variables siendo E0, E1 y E2, del tipo cannico entero. Utilizando el botn Eliminar, se eliminarn 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. Conexin con el PIC Seleccione la velocidad de comunicacin adecuada (en este ejemplo 19200 Baudios) y oprima Iniciar Servidor. Esta accin 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.

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

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 119

En este punto, es necesario el uso de un programa cliente OPC para visualizar los datos que exporta el microcontrolador PIC a travs del servidor OPC del programa iLOADER. Dentro del CD del iLOADER encontrar una aplicacin ejecutable llamada iLOADER_OPC_Cliente, la cual, nos servir para poder interactuar con el servidor OPC y microcontrolador PIC. Ejecute la aplicacin iLOADER_OPC_Cliente. Observe los valores graficados y los valores correspondientes a las entradas como se muestra en la figura B.25.

Figura B.23. Configuracin del servidor OPC para el ejemplo OPC_01.bas

Figura B.25. Visualizacin de la aplicacin Cliente_OPC_iLOADER.exe

OTRO EJEMPLO CON EL OPC. El ejemplo denominado OPC_02.bas es un programa que muestra las capacidades de exportacin e importacin de variables a travs del microcontrolador PIC y el uso del servidor OPC. Anexo se presenta su codificacin 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 Figura B.24. Servidor OPC ejecutando el programa OPC_01.bas Declare HSERIAL_BAUD 19200 HSERIAL_CLEAR = On ' Variables Auxiliares ' Velocidad de conexin al PC ' Limpia el Buffer antes de recibir

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 120

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

Si la ejecucin 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. Configuracin del servidor OPC para el programa OPC_02.bas

Explicacin del programa anterior Por medio de un ciclo for, el PIC enva un valor de 0 a 255 a la variable de entrada E0 del servidor, esto lo hace mediante la instruccin:

En la figura B.2., se observa el resultado de la ejecucin del programa. Las variables S0 y S1 escritas mediante su respectivo cuadro editable de la aplicacin cliente, se actualizan en el servidor, envan al PIC y luego re-escriben sus valores en la variables de entrada E1 y E2 mostrando el flujo de la informacin 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 pequeo proceso de control industrial.

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 contina en la etiqueta TIMEOUT.

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


Si el servidor enva 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-transmisin 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

Figura B.27. Estado de la aplicacin OPC. Estado del Servidor OPC.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 121

You might also like