Escolar Documentos
Profissional Documentos
Cultura Documentos
Autores:
José M. Rodríguez S.
Ángel L. Villegas
Editor:
Ángel L. Villegas
iBOARD III
Sistema de Desarrollo para
Microcontroladores PIC con interfaz USB
© El Editor
Depósito Legal
ISBN
José M. Rodríguez S.
ROSO Electric Supply, C.A. Calle 127 C/C Av. 90-A Edificio Cotoperí 10-6
La Trigaleña, Código Postal 2001, Valencia – Venezuela.
Teléfonos: +58 241 414 4266490
Email: jmrs@roso-control.com
Impreso en Venezuela
INDICE
PAG. PAG.
CAPITULO 01
1.0. Descripción del sistema 1 5.2. Lenguajes de programación más utilizados con microcontroladores 16
1.1. Requerimientos mínimos del computador 1 5.3. Microcontroladores “BootLoaders” 17
1.2. Contenido del CD-ROM 1 5.4. Características Principales del PIC 16F876 17
1.3. Características del sistema de desarrollo iBOARD III 1 5.5. Anatomía de un microcontrolador PIC16F876 18
1.4. Características del microcontrolador PIC16F876 1 5.6. Arquitectura del PIC16F876 19
1.5. Capacidades del Hardware 1 5.7. Organización de la memoria de programación del PIC16F876 19
1.6. Capacidades del Software. El Compilador Basic® PROTON® 2 5.8. Organización de la memoria de datos del PIC16F876 20
1.7. Características del Coprocesador ATMEL™ 2 5.9. El registro de Estatus 21
1.8. Descripción modular del sistema iBOARD III 3 5.10. El registro de Opciones 22
1.9. Diagrama electrónico del sistema iBOARD III 4 5.11. El registro de Interrupciones 23
5.12. Interrupciones en el microcontrolador PIC16F886/887 24
CAPITULO 02 5.13. Entrada – Salida Digital 25
2.0. Instalación de “Drivers” 6 5.14. Puertos de Entrada/Salida (E/S) 26
2.1. Optimizando la velocidad de transferencia de información entre 6 5.15. Comandos en alto nivel para el manejo de puertos de E/S 29
la iBOARD III y el computador ( PC ). 5.16. Comandos en alto nivel para el manejo de Interrupciones 31
CAPITULO 03 CAPITULO 06
3.0. Descripción del sistema 8 6.0. Conversión Analógica – Digital 33
3.1. Interfaz de programación y alimentación USB 8 6.1. Registros asociados al conversor A/D 33
3.2. El Microcontrolador 8 6.2. El Registro ADCON0 (detalle de sus bits) 34
3.3. La regleta de conexiones 9 6.3. El Registro ADCON1 (detalle de sus bits) 34
3.4. Periféricos de entrada y salida 9 6.4. Reloj para la conversión A/D 35
3.5. El Coprocesador ATMEL™ 9 6.5. Resumen de Registros utilizados por la conversión A/D 36
6.6. Otras Consideraciones importantes al realizar la conversión A/D 36
CAPITULO 04 6.7. Comandos en alto nivel para la conversión A/D 36
4.0. Primeros Pasos 10 6.8. Pasos a realizar para una conversión A/D con interrupciones 38
4.1. Paso No. 01. Instalación del compilador Basic® PROTON® IDE 10
4.2. Paso No. 02. Ejecución del entorno PROTON® IDE 10 CAPITULO 07
4.3. Paso No. 03. Configuración del cargador “Loader” 10 7.0. El USART / EUSART de un microcontrolador 39
4.4. Paso No. 04. Selección del puerto de comunicaciones serial 10 7.1. Transmisión Asincrónica 39
4.5. Paso No. 05. Carga del archivo iBOARD_III_DEMO.hex 11 7.2. Recepción Asincrónica 40
4.6. Paso No. 06. Grabar programa en el microcontrolador 12 7.3. Interconexión de microcontroladores PIC a través de EUSART 42
4.7. Referencias sobre el primer programa 13 7.4. Generador de Baud 42
4.8. Cargador “BootLOADER” 13 7.5. Resumen de pasos a seguir para realizar una transmisión serial 43
asincrónica a través de los registros del módulo EUSART.
CAPITULO 05 7.6. Resumen de pasos a seguir para realizar una transmisión serial 43
5.0. El Microcontrolador PIC® 16 asincrónica a través de los registros del módulo EUSART.
5.1. Clasificación de los microcontroladores según el bus de datos 16 7.7. Comandos en alto nivel para el manejo del USART / EUSART 43
7.8. Configuración de los registros del USART / EUSART en alto nivel 44
INDICE, continuación.
PAG. PAG.
CAPITULO 08
8.0. Temporizadores “TIMERS” 47 10.4. Conexión entre el PIC16F876 y los dispositivos esclavos 69
8.1. Interrupción por TMR0 48 10.5. Los iButton® 1-Wire® 70
8.2. Registros asociados al TMR0 48 10.6. Ejemplo de aplicación. Lectura del serial de un iButton® 70
8.3. Como trabaja la temporización del TMR0 48 10.7. Cálculo del CRC-8, identificación de errores en la RED 1-Wire® 71
8.4. Pasos a seguir para la utilización del TMR0 48 10.8. Ejemplo del cálculo del CRC8 72
8.5. Ejemplo de utilización del TMR0 48 10.9. Termómetro Digital modelo DS18B20 73
8.6. El timer TMR1 50 10.10. Ejemplo de lectura de temperatura con un DS18B20 74
8.7. El timer TMR1 trabajando como Temporizador 51 10.11. Algoritmo de Search ROM 76
8.8. El timer TMR1 trabajando como Contador 51
8.9. El timer 1 del PIC16F886 / 887 51 CAPITULO 11
8.10. Como trabaja la temporización del TMR1 51 11.0. El coprocesador ATMEL™ ATTiny13s 78
8.11. Pasos a seguir para la utilización del TMR1 52 11.1. El coprocesador utilizado como Salidas Digitales 79
8.12. Ejemplo de utilización del TMR1 52 11.2. El coprocesador utilizado como Entradas Digitales 81
8.13. El timer TMR2 55 11.3. El coprocesador utilizado como Salidas PWM 82
8.14. Como trabaja la temporización TMR2 55 11.4. El coprocesador utilizado como Contador Digital 83
8.15. Pasos a seguir para la utilización del TMR2 55 11.5. El coprocesador utilizado como Conversor A/D 84
8.16. Ejemplo de utilización del TMR2 55
8.17. Ejemplo del TMR0, TMR1 y TMR2 en forma simultánea 57 CAPITULO 12
12.0. MODULO CCP/PWM. Captura, Comparación y PWM 85
CAPITULO 09 12.1. Modo de Captura 85
9.0. Comunicación Serial sincrónica I2C 58 12.2. Modo de Comparación 86
9.1. Características del BUS I2C 58 12.3. Modo PWM 86
9.2. Detalle de la comunicación I2C 59 12.4. Registros asociados a la Captura, Comparación y TMR1 88
9.3. Direccionamiento y formato de transferencia de información 59 12.5. Registros asociados al módulo PWM y TMR2 88
9.4. Inicialización en modo maestro 59 12.6. Ejemplos de aplicación del módulo CCP1 en modo Captura 89
9.5. Transmisión en modo maestro 60 12.7. Comando en Alto nivel para HPWM por hardware 90
9.6. Recepción en modo maestro 60 12.8. Comando en Alto nivel para PWM por software 90
9.7. Dispositivos I2C en el sistema de desarrollo iBOARD III 61 12.9. Ejemplo de HPWM y configuración a través de registros 91
9.8. Comandos en alto nivel para el manejo del protocolo I2C 62 12.10. Ejemplo de HPWM y comandos en alto nivel 91
9.9. Memoria Eeprom 24LC16B 62
9.10. Ejemplo de utilización de una memoria Eeprom 24LC16B 63 Referencias Bibliográficas 92
9.11. Reloj en tiempo Real DS1307 64
9.12. Ejemplo práctico con reloj de tiempo real DS1307 64 Anexo A. Pantalla LCD 93
Anexo B. Software cargador iLOADER, Uart/Scope/OPC®. 101
CAPITULO 10
10.0. Protocolo de comunicaciones 1-Wire® 67
10.1. Descripción del protocolo de comunicaciones 1-Wire® 67
10.2. Implementación del maestro 1-Wire® con el PIC16F876 68
10.3. Topologías de conexión entre dispositivos en una RED 1-Wire® 69
INTRODUCCIÓN
El sistema de desarrollo para microcontroladores modelo iBOARD III, es una el compilador Basic® PROTON™, esto se hizo con la finalidad de estandarizar el
plataforma educativa de avanzada tecnología, con la cual, usted podrá configurar, método de enseñanza de los microcontroladores PIC®. A medida que se
programar, verificar e implementar diseños electrónicos digitales utilizando como desarrollan los capítulos, los ejemplos aumentarán el nivel de complejidad tanto de
base a los microcontroladores PIC® de las familias serie F modelos 16Fxxx y conexiones en hardware como de descriptores en software.
18Fxxx. Es un sistema completo que posee además de un microcontrolador, una
gran cantidad de dispositivos pasivos y activos generalmente de montaje superficial, El capítulo 1,2 y 3, son capítulos informativos. El primero de ellos describe al
los cuales, se complementan para conformar elementos de interfaz hombre – sistema de desarrollo, sus partes y capacidad del hardware incluido. El segundo
máquina, cálculo, procesamiento, visualización, medición y almacenamientos de capítulo explica en forma detallada como instalar los “Drivers” de la tarjeta iBOARD
información. III para trabajar con los sistemas operativos Windows™ tanto Xp® como Vista®,
mientras que en el capítulo tres, el usuario encontrará una explicación más
El software que acompaña al sistema iBOARD III, fue totalmente diseñado detallada de cada módulo funcional del sistema de desarrollo iBOARD III.
para explotar al máximo las prestaciones del sistema y cumplir con las exigencias
actuales en el diseño de sistemas digitales. Además del programa cargador tipo El capítulo 4, fue escrito con la finalidad de utilizar el sistema de desarrollo
“bootloader” denominado iLOADER, el usuario contará con una interfaz completa directamente con el compilador Basic® PROTON®, los primeros pasos que el
UART/SCOPE que le permitirán visualizar la información proveniente del usuario deberá seguir para la instalación del software y el desarrollo del primer
microcontrolador en forma de texto y en forma gráfica. Adicionalmente, se incluye programa de aplicación.
una herramienta de mayores prestaciones y tecnología denominada servidor de
datos OPC™, la cual, le permitirá exportar en tiempo real variables internas del En el capitulo 5, se desarrolla una breve introducción a la organización y
microcontrolador a cualquier aplicación compatible Microsoft™ con capacidad de arquitectura de los microcontroladores PIC®, haciendo especial énfasis en los
comunicación OPC™, como por ejemplo: Excel®, PowerPoint®, Visual Basic®, elementos de entrada y salida. Se incluyen ejemplos para el manejo de los puertos
Delphi® Borland, Visual Studio, etc. de entrada – salida del microcontrolador. El capitulo 6, versa sobre la conversión
A/D. El capítulo 7 sobre la comunicación serial asincrónica con el USART / EUSART
El sistema de desarrollo iBOARD III, se encuentra en continuo proceso de del microcontrolador. El capítulo 8, hace una explicación sobre los periféricos tipo
actualización por parte del fabricante. Tanto el software como el hardware incluyen “Timers” internos que posee el microcontrolador, su utilidad y ejercicios de
las últimas innovaciones electrónicas para proporcionar a usted una herramienta aplicación. En el capítulo 9 se aborda la comunicación serial sincrónica en especial el
poderosa, sólida y bien construida, pensada para resistir un trato duro y aún así protocolo de comunicaciones I2C. Se desarrollan ejemplos para el manejo del reloj
brindar un acabado profesional. de tiempo real DS1307 incluido en el sistema y la memoria EEprom serial modelo
24LC16B.
El sistema de desarrollo no necesita ser alimentado con una fuente de tensión
externa, por el contrario; toma el voltaje de alimentación directamente del puerto El capítulo 10, es una síntesis del protocolo de comunicaciones 1-Wire® de
USB del computador. Usted podrá entonces, alimentar a sus circuitos electrónicos Dallas Semiconductor, un protocolo de comunicaciones de avanzada tecnología muy
directamente de la salida de voltaje del programador hasta 400 ma de carga por utilizado en la actualidad. Por último en el capítulo 11, se detalla el funcionamiento
puerto USB sin inconvenientes. del microcontrolador ATMEL™ incluido en el sistema de desarrollo, ventajas y
aplicaciones del coprocesador.
El iBOARD III, puede ser utilizado con cualquier lenguaje de programación para
PIC®, ya sea, Basic®, C® y/o cualquier otro compilador que produzca la Mayor información teórico práctica sobre el uso y aplicación de los
compilación del programa en formato Intel *.Hex. Sin embargo, el sistema es microcontroladores PIC® está disponible para su consulta a través de la página web
acompañado del excelente compilador en Basic® modelo PROTON® y casi la www.roso-control.com.
totalidad de los ejemplos desarrollados en el manual, fueron realizados con
CAPÍTULO 1
DESCRIPCIÓN DEL SISTEMA
• Programación en alto nivel, estructurada y modular en lenguaje Basic®. El microcontrolador ATMEL™ viene totalmente preprogramado para realizar
• Facilidad para la definición y manejo de memoria RAM, EEprom y Flash, las siguientes configuraciones y tareas como coprocesador:
definición de variables y modificadores de formato.
• Funciones matemáticas, trigonométricas y lógicas incluidas. • Cuatro (4) puertos digitales programables como entradas y/o salidas.
• Funciones incluidas para facilitar el manejo de “string”. • Cuatro (4) puertos digitales prog. como contadores de freq. hasta 1 MHz.
• Manejo directo de pantallas LCD alfanuméricas y gráficas. • Dos (2) puertos como salidas programables PWM de 37.5 KHz.
• Generación de múltiples tonos y sonidos de alarma. • Dos puertos (2) como entradas analógicas 10 bits.
• Medición de pulsos, frecuencia y conteo de eventos. • Tres puertos (3) como comparadores analógicos.
• Manejo de pulsadores e interruptores de forma fácil y eliminando rebotes. • Referencia interna de 1.1 Volts para la conversión A/D y comparación.
• Manejo total de interrupciones para todos los periféricos incluidos. • 32 Bytes de memoria RAM disponibles al usuario para lectura / escritura.
• Aritmética en punto flotante para las variables así definidas.
• Manejo de motores servo y de paso mediante comandos especializados.
• Manejo de tablas y estructuras condicionales de repetición y decisión. En el capítulo No. 11 se detalla la operación completa del microcontrolador
• Acceso a los registros internos del microcontrolador para lectura y/o ATMEL™ como coprocesador. El fabricante está desarrollando el software
escritura. necesario para utilizar al coprocesador como elemento central en la conexión de
• Comunicación serial RS232 por hardware a través de los pines RC7/RC6 del sistemas de desarrollo a través de una red de comunicaciones, inicialmente, no
microcontrolador. USART directamente conectada al puerto USB del PC. Por todos los sistemas de desarrollo incorporarán el microcontrolador ATMEL™, el
software, puede generarse la PWM por cualquier pin del microcontrolador. fabricante se reserva el derecho de incluirlos en la medida de que el software
para su utilización ya esté disponible. Si usted recibió un sistema de desarrollo
• Manejo de los protocolos de comunicación serial: sin el microcontrolador ATMEL™, podrá adquirirlo como una opción a través del
fabricante.
9 1-Wire ® de Dallas Semiconductors.
9 I2C de Phillips Semiconductors. Igualmente, el programa iLOADER®, se podrá descargar en forma gratuita y
9 3-Wire de Dallas-Maxim. sin restricciones desde la página www.roso-control.com. Este programa es un
9 SPI de Motorola. extra y no es imprescindible para la puesta en funcionamiento del sistema de
desarrollo iBOARD III.
• Amigable IDE de programación.
RELOJ DE TIEMPO
REAL DS1307 LED BICOLOR VERDE /
ROJO
RESONADOR 20 MHz
CONECTOR MINI USB
CONECTOR EXTRAÍBLE
PARA LA LCD MEMORIA EEPROM
2K X 8 BITS
BORNERA DE
CONEXIÓN AL PULSADOR DE RESET
PROTOBOARD
Al igual que todos los accesorios USB actuales, la iBOARD III, requiere de la
instalación de los “Drivers” suplidos por el fabricante para su correcto funcionamiento. Los
“Drives” requeridos, se suministran en un CD entregado junto al equipo bajo el archivo
denominado: CDM 2.04.06.exe, el cual, es un archivo del tipo ejecutable.
Antes de conectar la iBOARD III al computador, usted deberá hacer doble clic
con su ratón en el archivo de instalación de los “Drivers”; ,
momentáneamente se ejecutará en forma automática la instalación de los “Drivers”, esto
se puede observar en la figura 2.1 anexa.
Figura 2.4. Menú Administrador de dispositivos del sistema operativo Windows™. Figura 2.6. Menú configuración avanzada del COM del sistema operativo Windows™.
Para describir funcionalmente al sistema iBOARD III vamos a dividirlo en cinco Los componentes que integran la interfaz de programación son:
bloques operativos bien definidos:
• Un circuito integrado convertidor USB / RS-232 TTL modelo FT232.
• Interfaz de programación y alimentación USB • Un conector USB tipo mini 5P que permite utilizar cualquier cable USB mini
• El microcontrolador PIC estándar (como los usados en cámaras, MP3 y muchos otros dispositivos
• La regleta de conexiones USB) para programar al microcontrolador.
• Los periféricos de entrada y salida • Un diodo LED de color verde que indica el voltaje de alimentación.
• Coprocesador ATMEL™ • Un diodo LED de color rojo que indica la actividad del puerto USB.
Se encarga de ajustar los niveles de tensión del puerto USB a los niveles El microcontrolador incluido en el sistema de desarrollo iBOARD III es el
aceptados por el microcontrolador (0 - 5 Vdc) y de tomar la alimentación de +5V PIC16F876, el cual, se presenta en un encapsulado de 28 pines tipo DIP 0.3”. Se le
necesaria para el funcionamiento del sistema de desarrollo. Los elementos que ubica en la parte superior izquierda del sistema y está acompañado de un pulsador
conforman a este bloque se muestran resaltados en color rojo en la Figura 3.1. de “RESET” y un resonador de 20 Mhz como se muestra en la Figura 3.2.
Figura 3.1. Interfaz de programación y alimentación del iBOARD III. Figura 3.2. Ubicación del microcontrolador, resonador y pulsador de RESET del iBOARD III .
Abarca toda la parte inferior del sistema y sirve de soporte al mismo. En ella se • Dip-Switch mini de cuatro (4) posiciones, los cuales, están conectados en
encuentran claramente identificados todos los pines del microcontrolador además serie con cada uno de los LED’s descritos en el punto anterior. La función
de los terminales de alimentación +5V y GND. +5V es una salida de 5 Vdc aunque de este interruptor es la de conectar y/o desconectar física y
puede utilizarse como una entrada de 5 Vdc si no se desea alimentar al iBOARD III eléctricamente los LED’s de los pines del microcontrolador. Referencia (2)
desde el puerto USB del PC. Nota Importante. Para poder alimentar con una en la Figura 3.3.
fuente externa regulada de +5Vdc por el pin +5V, deberá primero desconectar el
• Un banco de 4 pulsadores pre-conectados en los terminales RA0,RA1,RA2
cable de conexión USB al sistema iBOARD III, a fin de, evitar daños que pudiese
y RA3 del microcontrolador, puerto A, bits <3:0>, los cuales se utilizan
ocasionar sobre el puerto USB del PC. Referencia Figura 3.3.
como entradas digitales. Los pulsadores son ampliamente utilizados en los
dispositivos electrónicos, en funciones de ajuste y selección de
configuraciones. Referencia (3) en la Figura 3.3.
• Un conector para pantalla LCD. Las pantallas LCD son los periféricos de
salida más llamativos, permiten desplegar texto, números, mensajes y con
un poco de creatividad hasta gráficos. La pantalla LCD del iBOARD III se
encuentra cableada en los pines RB1 al RB7, puerto B, bits <7:1> del
microcontrolador. Referencia (4) en la Figura 3.3.
• Un reloj de tiempo real (RTC) modelo DS1307, con todos sus terminales de
comunicaciones y operación disponibles. Este RTC almacena y actualiza la
hora y fecha de una manera muy exacta, permitiéndole funcionar como
reloj/calendario. Además posee 56 bytes de memoria NVRAM totalmente
libres, un pin que genera una señal cuadrada de frecuencia programable
ideal para generar bases de tiempo exactas y construir temporizadores. Se
lpuede conectar una batería de respaldo para mantener la hora y fecha
actualizándose durante años sin estar el sistema iBOARD III. Referencia
(5) en la figura 3.3.
• Una memoria EEPROM de 2K x 8bits que puede ser re-escrita más de un
millón de veces y puede almacenar datos durante más de 50 años aún sin
Figura 3.3. Ubicación de la regleta de conexiones del iBOARD III .
estar alimentada. Este tipo de memorias son muy empleadas para
almacenar configuraciones y llevar un registro histórico de fallas o de
valores de una variable medida con el microcontrolador. La comunicación
3.4. Periféricos de entrada y salida con la memoria Eeprom 24LC16B y el RTC DS1307 se hace por medio de
un protocolo serial llamado I2C que sólo requiere de dos líneas para su
El iBOARD III, cuenta con un grupo de periféricos muy utilizados en aplicaciones funcionamiento. Referencia (6) en la Figura 3.3.
industriales, estos son:
3.5. El Coprocesador ATMEL™
• Un banco de 4 LEDs pre-conectados a los terminales RC2,RC3,RC4 y RC5
del microcontrolador, puerto C, bits <5:2>. Estos no pueden ser removidos Es un microcontrolador de 8 bit’s fabricado por la casa ATMEL™ muy eficiente y
del sistema y reflejan en todo momento el estado de los pines veloz, el cual, ha sido incluido para funcionar como coprocesador del
mencionados. Los LEDs son indicadores visuales muy llamativos utilizados microcontrolador PIC 16F876, “expansor” de puertos E/S, PWM, convertidor A/D y
en casi todos los equipos electrónicos. Referencia (1) en la Figura 3.3. funciones futuras de comunicación en RED. Referencia (7) en la Figura 3.3.
Figura 4.7. Pantalla del menú de programación del IDE PROTON®. Figura 4.9. Fotografía de la ejecución del programa CAP_04_Ejemplo_01.hex
Cargado en el PIC16F876 del sistema de desarrollo iBOARD III.
Entendemos que esta es la primera vez que usted está cargando un programa al
sistema de desarrollo iBOARD III, y quizás es su primera experiencia con los
microcontroladores, sin embargo, no se preocupe si no entiende el código o parte
de el, en los capítulos posteriores se explicará en detalle la teoría del
funcionamiento de los microcontroladores PIC®. Este sólo es un ejemplo para
mostrar la operatividad del sistema hardware – software sobre todo a aquellas
personas que tienen ya algo de experiencia en el mundo de los microcontroladores
y están ansiosos de programar aplicaciones.
Main:
Print $FE, 1 ' Comando para limpiar pantalla LCD
Print At 1,1, "Sist. Desarrollo" ' Lleva el cursos a posic. 1,1
Print At 2,4, "iBOARD III" ' Lleva el cursor a posic. 2,4
DelayMS 2000 ' Pausa de 2000 ms
En el Paso No. 5, usted cargó al microcontrolador el código compilado del Figura 4.11. Fotografía de la pantalla principal del programa MicroCode Loader.
programa CAP_04_Ejemplo_01.hex, éste archivo está compuesto de “Tokens” Bytes
binarios codificados en formato Intel *.hex Este formato es un estándar usado por
los microcontroladores PIC®. En contrapartida, el programa CAP_04_Ejemplo_01 Antes de utilizar el programa MicroCode Loador, es necesario que el microcontrolador
.bas con la extensión (.bas) está escrito en lenguaje de alto nivel Basic®. Para que a utilizar ya haya sido pre-programado con el código “boot loader”, esto se deberá
éste programa pueda ser ejecutado por el PIC® primero hay que compilarlo, lo realizar con un programador para PIC®, ya sea fuera de circuito y/o tipo ICSP. Nosotros
cual, genera el archivo compilado con el mismo nombre pero con la extensión .hex. recomendamos utilizar el programador de nuestra casa comercial modelo iPROG18. Por
El código escrito en Basic® lo denominaremos código fuente y el codificado (.hex) defecto, el microcontrolador PIC16F876 incluido en el iBOARD III, ya ha sido pre-
lo denominaremos de ahora en adelante código objeto. programado con el código “boot loader”.
StartOfProgram
; El programa de usuario comienza aquí
Read El puerto de conexión serial a utilizar debe coincidir con el que previamente se
Al presionar el botón de leer, el programa MicroCode Loader leerá tanto la seleccionó para la conexión del sistema iBOARD III. Como referencia puede ve la figuras
memoria de programación como los registros de la Eeprom del microcontrolador 2.4 de este manual.
utilizado.
Verify
Erase
Al presionar el botón de borrar (Erase) se borrará toda la información contenida
en el microcontrolador PIC, tanto en el área del código de Programa como en la
Memoria Eeprom.
Es un chip (Circuito integrado) que contiene un computador 5.1. Clasificación de los microcontroladores según el bus de datos (bits)
completo junto a diversos recursos auxiliares con prestaciones y
capacidades limitadas, de muy bajo costo y tamaño reducido. Microcontroladores de 4 bits:
Son los más sencillos en todos los aspectos técnicos y prestaciones asociadas, de muy
• Es un sistema digital cerrado bajo costo. Se fabrican en grandes volúmenes y sus aplicaciones típicas: pequeños
• RAM de poca capacidad interna (bytes ó Kb) automatismos y juguetería
• Memoria de programa pequeña (algunos Kb)
• No se requiere de decodificadores de E/S o de memoria Microcontroladores de 8 bits:
• Velocidad de operación de algunos MIPS
• Orientados a operaciones de E/S Son los más utilizados en la actualidad, gran diversidad y versatilidad. Los PIC® son
• Costo de desarrollo e implementación reducido los microcontroladores de 8 bits más usados por el mercado mundial, con más de 2000
• Muy fáciles y sencillos de utilizar millones de unidades vendidas/año. Se aplican generalmente en todos los automatismos
• Circuitos simples y tendencia a la modularidad modernos y sistemas simples de control, electrodomésticos, máquinas y herramientas y
• Por lo general dan cabida a un sólo programa y el soporte en las áreas de la instrumentación digital entre otras.
de tareas múltiples (de existir), es limitado
• Dos o tres modos de direccionamiento Microcontroladores de 16 bits:
• Casi todos son RISC Prestaciones superiores a los microcontroladores de 8 bits. Se aplican típicamente en
• Tiempo de aprendizaje/desarrollo reducido el procesamiento digital de señales. La casa microchip™ fábrica las series PIC24xx y los
• Para el Año 2002 se habían vendido 49.000 Millones de piezas. dsPIC33xxx.
• En el año 2008 la empresa Microchip™ fue líder mundial en Ventas
Microcontroladores de 32 bits:
Mas complejos y costosos. Algunas características similares a un microprocesador. Se
dedican a proyectos muy avanzados. Aplicaciones típicas: inteligencia artificial,
aplicaciones militares y almacenamiento masivo de datos.
• Ensamblador, “asembler”
• Lenguaje C, C++
• Basic®, MBASIC®, PBASIC®
• PASCAL
• JAVA
Figura 5.1. Familia de microcontroladores fabricados por Microchip™. Figura 5.2. Compiladores más utilizados en la actualidad.
Fuente: Tomado del “site” del fabricante www.microchips.com Fuente: Tomado de la páginas web de los fabricantes.
Una ventaja de la iBOARD III, es que el fabricante entrega, sin costo adicional, el
código “boot loador” para el PIC16F876 utilizado. Así, si usted llegara a cambiar el
PIC16F876 que viene incluido en la unidad por otro virgen, no necesitará pagar por éste
firmware, sin embargo, necesitará un programador para PIC® a fin de que pueda
programar inicialmente el firmware “boot loador” al nuevo PIC®. Para realizar ésta
actividad, el fabricante recomienda utilizar los programadores de la casa matriz tanto por
puerto serial iP3 ó iP3B como por puerto USB como el iPROG18. Figura 5.3. Fotografía del PIC16F876 28 pines Dip 0.3”.
Fuente: Tomado de www.microchip.com
En la figura 5.4., se muestra el diagrama funcional interno de un microcontrolador Dentro de los periféricos de un microcontrolador se encuentran:
PIC®. Básicamente el corazón del microcontrolador lo constituye la unidad central de
procesamiento CPU y el bloque de memorias tanto RAM como memoria de programa • Timers T0, T1 y T2
donde se almacena el código del programa a ejecutar. En el bloque de memoria, se • Convertidor analógico a digital (ADC)
encuentra un sub-bloque denominado SFR, el cual, representa a los registros internos • Módulo de captura y comparación (CCP)
del microcontrolador. Todo, absolutamente todo lo que queremos que el • Módulo de PWM
microcontrolador haga, se realiza a través de la modificación de los registros internos • Módulo de comunicación serial SPI, I2C y UART
SFR. El bloque de alimentación por su parte, se encarga de suplir la energía utilizada por
el sistema, mientras que el bloque de osciladores, se encarga de suplir la señal de reloj
sincrónica al CPU para la ejecución secuencial de las instrucciones contenidas en el
bloque de memoria de programa.
El bus de datos por su parte, es siempre de 8 bits (al menos en los PIC 16Fxx) y es el
bus representado en color rojo en la Figura 5.5. Todos los periféricos se conectan al CPU
sólo a través del bus de datos.
Memoria
Flash
Memoria
RAM
La Memoria RAM costa de cuatro bancos con 128 bytes cada uno. Para seleccionar el
banco que se desee acceder de la RAM, se emplean los Bits No. 6 y 5 del Registro de
Estatus, los cuales se denominan <RP1><RP0>. La selección del banco se realiza
según el código siguiente:
Cada bloque de memoria RAM posee una longitud fija de 128 registros de 8 bits cada
uno. Todos los registros especiales y periféricos tienen una localidad específica e
invariable dentro de la memoria RAM. En cada ciclo de ejecución estos registros se
actualizan de esta forma el usuario puede consultar en cada momento cual es el valor de
los mismos. Importante, como se ha mencionado anteriormente: TODO lo que se
realiza en el microcontrolador, todo sin excepción queda reflejado en estos registros. Al
mismo tiempo, cualquier cosa que el usuario desee hacer sobre el microcontrolador
tendrá que hacerlo leyendo o escribiendo en estos registros.
Figura 5.7. Representación de los cuatro bloques de la memoria RAM, cada bloque
contiene los registros SFR y existe un espacio de propósito general disponible
al usuario de 384 Bytes. Fuente: Manual técnico del PC16F876.
Contiene los bits de status de la ALU (Unidad Aritmética y Lógica), del RESET y los
bits de selección <RP1><RP0> de los bancos de memoria. Es el registro más utilizado
de todos y sus bits están destinados a controlar las funciones esenciales del
microcontrolador, por ello, se encuentra ubicado en las cuartas posiciones de cada banco
de memoria. (03h, 83h, 103h y 183h).
Es uno de los registros más utilizados, como su nombre lo indica, éste registro permite seleccionar una serie de opciones disponibles para la configuración del hardware en el
microcontrolador PIC®. Es un registro de 8 bits y cada bit controla una función en el microcontrolador. Por ejemplo:
Bit 7, RBPU: Habilita o no las resistencias de pull_up internas del puerto B del microcontrolador.
Bit 6, INTEDG: Selecciona el flanco para la ocurrencia de una interrupción.
Bit 5, T0CS: Selecciona la fuente de reloj para el TMR0 (interna y/o externa).
Bit 4, T0SE: Selecciona el flanco para el incremento del TMR0.
Bit 3, PSA: Selecciona si el pre-escalador será aplicado al TMR0 o al WDT.
Bit2 al Bit0: Selecciona la magnitud del pre-escalador.
INTCON: Es un registro de lectura y escritura, el cual, contiene varios bits de habilitación y bandera para el TMR0, cambios de estado en el puerto B e interrupciones
externas por el pin RB0/EXT. Se encuentra duplicado en los cuatro bancos de memoria, ocupando las direcciones: 0Bh, 8Bh, 10Bh y 18Bh.
Fuente: Fuente: Tomado de www.mikroe.com
INTERRUPCIÓN: Ante una interrupción, se guardará el valor del program counter
PC en el Stack o pila y se cargará el “PC” con el valor 0004h, que es el vector de
interrupción. La mayoría de los periféricos incluidos en el microcontrolador son
capaces de interrumpir al CPU, cuando ello ocurre, se desencadenan los siguientes
eventos:
De acuerdo a la naturaleza de una señal, esta puede ser analógica o discreta. El Señal digital
microcontrolador PIC16F876 es capaz de interpretar ambas, sin embargo, el estudio de
las señales analógicas se verá más adelante. Los microcontroladores PIC16F876 disponen Es aquella señal que puede tomar un número finito de
de tres (03) puertos de entrada/salida (A,B y C) todas las líneas de estos puertos realizan valores entre dos límites. Si utilizamos lógica booleana será
diversas funciones según estén programadas, sin embargo, todas ellos tienen la Cero (0) y el Uno (1).
capacidad de trabajar como entradas/salidas binarias.
Primer Paso:
Ubicar en que puerto está conectado el LED L0. Para ello hacemos referencia a la figura
1.3., donde se muestra el diagrama de conexiones electrónicas entre los LED’s y los Figura 5.18. Conexión de pulsadores del sistema de desarrollo iBOARD III.
puertos del microcontrolador. La figura 5.17. es una síntesis de la conexiones entre los
LED’s y el puerto C. Efectivamente el LED “L0” está conectado al puerto C bit2. Este tipo de conexión de los pulsadores se denomina Activa Alta, lo que significa que
Podemos entonces decir que el LED “L0” esta ubicado en PORTB<2>, en serie con una cuando se activa el pulsador, el nivel de tensión obtenido en el punto de conexión al
resistencia limitadora de corriente de 220 OHM y un mini switch normalmente abierto microcontrolador, es un voltaje con un nivel lógico alto.
(SW1-4), el cual, previamente tendremos que cerrar para conectar el cátodo del led a
tierra y de esta forma cerrar el circuito eléctricamente. Tercer Paso:
Crear un algoritmo. Por ejemplo:
Estas variables lingüísticas se pueden asociar a valores del puerto, por ejemplo:
End
LOW: Configura el puerto y/o pin especificado como salida y lo coloca a cero lógico. Pin: Es una variable ó constante que indica cual pin de E/S será utilizado, el mismo será
Es equivalente a hacer un TRIS del puerto y luego un PORT. convertido en entrada. Estado: (0,1) (Low/High) es el flanco requerido para empezar la
Sintaxis: LOW pin, donde pin es cualquier bit de los puertos A,B ó C. cuenta. Variable: Variable que almacena el resultado de la operación.
TOGGLE: Configura el pin especificado como salida y lo cambia de estado lógico. Nota: Para un resonador de 20 MHz, el conteo de PULSIN se realizará en intervalos de
Sintaxis: TOGGLE pin, donde pin es cualquier bit de los puertos A,B ó C. 2us. El rango de PULSIN será entre 1 y 65535.
No se acepta Toggle de un puerto completo, sólo de un Pin.
INPUT: Configura el puerto y/o pin especificado como entrada. PULSEOUT: Genera un pulso de una duración especificada en un terminal de E/S.
Es equivalente a hacer un TRIS del puerto. Sintaxis:
Sintaxis: INPUT pin, donde pin es cualquier bit de los puertos A,B ó C. PULSOUT Pin, Período, Estado Inicial
OUTPUT: Configura el puerto y/o pin especificado como salida. Pin: Es una variable ó constante que indica cual pin de E/S será utilizado, el mismo será
Es equivalente a hacer un TRIS del puerto. convertido en salida. Período: Es una variable, constante o expresión de (4 – 65535) us
Sintaxis: OUTPUT pin, donde pin es cualquier bits de los puertos A,B ó C. que especifica la cantidad de tiempo en micro-segundos que durará el pulso.
Pin: Variable, constante o expresión que indica cual pin de E/S será utilizado, el mismo
será convertido en entrada. Período: Variable, constante o expresión de (0-65535)ms
que especifica el tiempo durante el cual, se hará el conteo. Variable: Variable que
almacena el resultado de la cuenta.
Figura 5.21.
Representación gráfica del
comando COUNT.
Figura 5.22.
Representación gráfica del comando PULSOUT.
Figura 5.23. Esquema de conexiones de un filtro pasa bajos utilizado por el comando FREQOUT
para la generación de ondas sinusoidales.
Figura 5.24.
Esquema de conexiones utilizado con el comando RCIN.
SOUND: Genera uno tono o ruido blanco por el pin seleccionado. Sintaxis:
SOUND Pin, [Nota, Duración] RCIN, puede ser utilizado para medir el valor de resistencias y/o condensadores. Un uso
muy común es leer el valor de un potenciómetro resistivo. Cuando se desee utilizar este
Pin: Variable, constante o expresión que especifica el pin de E/S usado. Este será comando, se deberán realizar las siguientes acciones: (1) Colocar el pin de E/S como
configurado como salida. Nota: Un valor de 8 Bits (0..127) el (0) equivale a silencio, el salida y con un nivel lógico alto. (2) Esperar suficiente tiempo para que el condensador se
(1) Equivale a 78 Hz y el (127) Equivale a 10KHz y entre (128..255) se obtendrá ruido cargue, aprox. 4 constantes de tiempo = (4xRxC) seg. (3) Ejecutar el comando RCIN. El
blanco. Duración: Variable, constante o expresión de 8 bits que especifica la duración cual, configurará al pin seleccionado como una entrada y medirá el voltaje del
de la nota en intervalos de 10ms. condensador sobre el pin, el cual, se estará descargando a través de la resistencia. El
tiempo en que demora el pin de pasar de un estado lógico (1) al estado lógico (0) se
almacenará en la variable resultado, así conociendo este tiempo podemos decir:
RCIN (units) = 600 x R (Kohm) x C (uF)
Figura 5.25.
Mecanismo de activación ante la ocurrencia de
Figura 5.26. Fotografía de las conexiones necesarias para la colocación del pulsador
una interrupción. Fuente: Tomado de
NA, el cual, será utilizado como generador de una interrupción externa.
www.mikroe.com
' CAP_05_Ejemplo_04.bas
' Ejemplo básico de utilización del comando SOUND.......
' ........... Star Trek The Next Generation ..........
' Es necesario colocar un buzzer piezoeléctrico - entre
' el pin PORTB<3> y tierra a través de una resistencia
' de 220 ohm en serie con el buzzer ....................
' 220
' PORTB.3 -----/\/\/\-----(Buz)---+
' |
' GND ------------------------+
THEME:
Sound PIN, [50,60,70,20,85,120,83,40,70,20,50,20,70,20,90,120,90,_
20,98,160]
DelayMS 500
For LOOP = 128 To 255 ' Ruido blanco ascendente
Sound PIN, [LOOP,2]
Next
Sound PIN, [43,80,63,20,77,20,71,80,51,20,_ Figura 5.28. Fotografía de la iBOARD III ante la ejecución del programa
90,20,85,140,77,20,80,20,85,20,_ CAP_05_Ejemplo_04.bas Comando Sound. Se escuchará a través del buzzer
90,20,80,20,85,60,90,60,92,60,87,_ Un extracto de la canción: Star Trek The Next Generation.
60,96,70,0,10,96,10,0,10,96,10,0,_
10,96,30,0,10,92,30,0,10,87,30,0,_
10,96,40,0,20,63,10,0,10,63,10,0,_
10,63,10,0,10,63,20]
LOOP = 0
Repeat
Freq1 = LookUpL LOOP , [E,D,C,D,E,E,E,R,D,D,D,R,E,G,G,R,E,D,C,D,_
E,E,E,E,D,D,E,D,C]
If Freq1 = 0 Then Freq2 = 0 : Else Freq2 = Freq1 - 8
FreqOut PIN , 225 , Freq1 , Freq2
Inc LOOP
Until LOOP > 28
DelayMS 5000
GoTo THEME
La tensión de referencia puede implementarse con la tensión interna de alimentación Son dos los registros más importantes involucrados en la conversión A/D. el ADCON0
VDD, o bien, con una externa que se introduce a través de los pines RA3/AN3/Vref+ y /o y el ADCON1. Como se explicó en capítulos anteriores, si se desea realizar una
RA2/AN2/Vref- conversión analógica digital por un puerto del microcontrolador (generalmente el puerto
A en los PIC) ¿Cómo hacerlo?. La respuesta siempre será la misma. A través de la
6.1. Registros asociados al conversor A/D configuración de los registros internos del microcontrolador, en este caso, el ADCON0 y el
ADCON1.
• ADRESH : Registro alto del resultado de la conversión A/D.
• ADRESL : Registro bajo del resultado del la conversión A/D. Básicamente la idea de la conversión analógica – digital es la digitalizar una señal de
• ADCON0 : Controla la operación del conversor A/D. entrada al pin del microcontrolador, la señal puede ser AC, DC ó AC+DC pero de tensión
• ADCON1 : Configura los Pines de E/S del conversor A/D. sólo positiva, ya que, el convertidor A/D no tiene la capacidad de convertir señales de
valor negativa. Esta señal es muestreada y convertida a un valor digital equivalente.
Figura 6.5. Diferentes valores de conversión A/D en base a la Freq, del resonador.
Canal: variable o constante (0..3) que estable el pin analógico para uso como entrada al
Figura 6.6. Registros asociados a la conversión A/D y al puerto de entrada – salida A.
conversor. Existen cuatro pines de entrada analógica, son: AN0, AN1, AN2 y AN3.
Fuente: Manual técnico del PC16F876.
Otros ajustes necesarios por el convertidor A/D, se realizan a través de las declaraciones:
INTCON: Registro asociado a las interrupciones. GIE bit de habilitación de las
interrupciones globales. PEIE bit de habilitación de las interrupciones de los periféricos. DECLARE ADIN_TAD 2_FOSC, 8_FOSC, 32_FOSC …
PIR1: Registro asociado a las interrupciones. ADIF bandera de ocurrencia de una 2_FOSC: rápido (oscilador/2)
interrupción por conversión A/D. 8_FOSC: medio (oscilador/8)
32_FOSC: lento (oscilador/32)
PIE1: Registro asociado a las interrupciones. ADIE bit de habilitación de la interrupción
64_FOSC: basado en el oscilador interno,
por conversión A/D.
valor por defecto = 64_FOSC.
ADRESH, ADRESL: Registros donde se almacena el valor de la conversión A/D.
DECLARE ADIN_RES 8, 10, 12. Bits de resolución,
ADCON0, ADCN1: Registros de configuración general asociados a la conversión A/D. valor por defecto = 10
TRISA: Registro de configuración del puerto A como entrada ó salida digital. DECLARE ADIN_STIME (0 .. 65535) ms. Tiempo para la
carga y descarga del capacitor de HOLD. Valor
PORTA: Como Salida, Registro que configura el valor lógico de los pines del puerto A.
por defecto = 50
Como Entrada, Registro que almacena el valor de entrada al puerto A.
Nota: El voltaje máximo sobre cualquier pin del PIC® no deberá exceder
nunca los 5 Vdc.
6.6. Otras Consideraciones importantes al realizar una conversión A/D
El comando ADIN, convierte un voltaje (0 a 5 Vdc) aplicado a un pin, en un valor
1. La máxima impedancia de entrada recomendada de la fuente analógica, a fin digital entre (0 y 1023) aplicado a una variable. La entrada puede ser en todo momento
de no afectar la exactitud de la conversión, no deberá ser mayor de 10 KΩ. escalada si se utiliza un voltaje de referencia externo Vref sobre el pin AN3. Si el voltaje
2. Después de cada conversión de deberá esperar un mínimo de tiempo de referencia aplicado al pin es de 2.5 VDC, se obtendrá el doble de resolución para el
equivalente a 2 ٠TAD, durante este tiempo el condensador interno de “Hold” no mismo conteo de (0 a 1023). El rango permitido de voltajes de referencia deberá estar
estará conectado a la fuente analógica de entrada. entre (1 y 5) Vdc, el cual, siempre deberá ser aplicado sobre el pin AN3.
' CAP_06_Ejemplo_01.bas
' Ejemplo básico de utilización del convertidor A/D
' ------------------------------------------------------------------
Device = 16F876 ' Define el microcontrolador utilizado
XTAL = 20 ' Define la velocidad del resonador
Figura 6.7. Codificación del ejemplo básico de utilización del convertidor A/D.
7) Para una nueva conversión regresar al paso 1) y 2). ' SUB_RUTINA DE INTERRUPCIÓN
' -----------------------------------------------------------------
• El tiempo de conversión por bit está definido por TAD. Se exige esperar un ADC_INT:
mínimo de 2 ٠ TAD para reiniciar una nueva conversión. ADIE = 0 ' Deshabilita la interrupción por ADC
Valor.LowByte = ADRESL ' Carga el valor de la conversión en la
Valor.HighByte = ADRESH ' Variable valor, byte alto y bajo.
EL USART DE UN MICROCONTROLADOR PIC Al igual que en otros periféricos del microcontrolador, el USART tiene dos
registros de configuración, uno para la transmisión y otro para la recepción de
USART: Universal Synchronous Asynchronous Receiver Transmitter (EUSART). Es información. La figura 7.2., muestra los bits individuales que conforman el registro
un periférico de comunicación serial de entrada / salida también conocido como de transmisión TXSTA del EUSART de un PIC16F886.
interfaz SCI. Realiza la generación de señales de reloj, registros de desplazamiento
y ”buffer” de datos necesarios para la transferencia serial de datos entre el PIC® y
el computador. Es un periférico que trabaja en forma autónoma. En la Figura 7.1.,
se observa una representación gráfica de una señal en el USART, la cual, es
codificada con codificación NRZ. Se puede observar que una comunicación serial
comienza con 1 bit de arranque (Start), 8 ó 9 bits de datos (8 para los PIC® con
módulo USART y 9 para los PIC® con módulo EUSART), y un bit de parada (Stop).
El EUSART integrado en el PIC16F886 posee las siguientes características: Figura 7.2. Registro de transmisión del USART de un PIC16F886.
Fuente: Tomado de la página web: www.mikroe.com
• Comunicación asíncrona en modo Full Duplex
CSRC - Clock Source Select bit – Sólo en modo sincrónico. Determina el origen
• Comunicación síncrona Half Duplex en modo maestro y esclavo
del reloj.
• Largo de los caracteres programables de 8 – 9 bits.
1 – Modo Maestro. Reloj generado internamente por el “Baud Rate Generator”.
• Detección de errores en la comunicación
0 - Modo Esclavo. Reloj proveniente de una fuente externa.
MODO Asincrónico: Los datos se transmiten y reciben utilizando la codificación de TX9 - 9-bit Transmit Enable bit
no retorno por cero (NRZ), no se utiliza una señal de reloj y básicamente los datos 1 - 9-bit Largo en bits de la transmisión
son transferidos de la siguiente forma: 0 - 8-bit Largo en bits de la transmisión
TXEN - Transmit Enable bit
• En estado de reposo la línea de datos permanece en estado alto (1) 1 – Transmisión habilitada
• Cada transmisión de datos comienza con un bit de arranque (START), el 0 - Transmisión no habilitada
cual, siempre es cero (0)
• Los datos son transmitidos desde el bit menos significativo (LSB) al más SYNC - EUSART Mode Select bit
significativo (MSB) 1 - EUSART Operación en forma sincrónica
• Cada transmisión de datos culmina con un bit de parada (STOP), el cual, 0 - EUSART Operación en forma asincrónica
siempre es uno (1) SENDB - Send Break Character bit Sólo en modo asincrónico
1 – Habilitar el caracter de “Break “
0 - Transmisión de carácter “Break” se completo
BRGH - High Baud Rate Select bit determina la velocidad de la transmisión en
modo asincrónico
1 - EUSART Operación a alta velocidad
0 - EUSART Operación a baja velocidad
TRMT - Transmit Shift Register Status bit
1 – El registro TSR está vacío
0 – El registro TSR está lleno.
Figura 7.1. Representación gráfica de una señal en el USART de un PIC®. TX9D - Ninth bit of Transmit Data puede ser usado como dirección o bit de
paridad.
“Overrun Error” . El buffer del PIC es del tipo FIFO y puede almacenar sólo dos
(2) Bytes ó caracteres. Un error de “Overrun” ocurre cuando éste buffer recibe más
de dos caracteres, simplemente no hay espacio para almacenar más de dos
caracteres. El error se manifiesta colocando a uno (1) el bit OERR del registro
RCSTA. Cuando ocurre este error, los datos contenidos en el buffer se pueden
normalmente leer, pero no se recibirán más datos hasta que el bit OERR sea
colocado a cero (0). Para limpiar el error es necesario colocar a cero (0) el bit
CREN del registro RCSTA ó colocar en uno (1) al bit SPEN del Registro RCSTA.
Recepción de 9 bits: La recepción del noveno bit en el lado del receptor se realiza
si el Bit RX9 del registro RCSTA es uno (1), hay que tener cuidado en como leer
este bit. Primero se deberá leer el bit RX9D y luego los ocho (8) bits del registro
RCREG, de otra forma el bit será automáticamente puesto en cero (0) antes de su
lectura. Esto se puede observar a través de la Figura 7.5.
Figura 7.4. Diagrama de bloque del registro de recepción del USART de un PIC16F886.
Fuente: Tomado de la página web: www.mikroe.com
Para la generación de los Baud, se utilizan dos registros de ocho bits (SPBRGH
,SPBRG), el valor escrito en esos registros determinará la velocidad de
transmisión/recepción utilizada en bits x seg = Baud. Adicionalmente, los bits
BRGH del registro TXSTA y el bit BRGH16 del registro BAUDCTL, afectan la
frecuencia de reloj utilizada para el cálculo de los Baud. La figura 7.7a. muestra en
forma gráfica como se relacionan los diferentes registros para configurar la Figura 7.7. a) Registros relacionados con el módulo generador de Baud del EUSART,
velocidad de transmisión / recepción en el módulo EUSART, mientras que el la b) Formulación matemática para el cálculo de los Baud.
Fuente: Tomado de la página web: www.mikroe.com
• La velocidad deseada (Baud) debe ser justada a través del bits y registros:
Bit BRGH del registro TXSTA, el bit BRG16 del registro BAUDCTL y los
registros SPBRGH y SPBRG.
• El bit SYNC del registro TXSTA deberá ser colocado en cero (0) y el bit SPEN
del registro RCSTA deberá ser colocado en uno (1) a fin de habilitar el puerto
serial.
• Para una recepción de 9 bits, el bit RX9 del registro RCSTA deberá ser
colocado en uno (1)
• La recepción de datos es habilitada colocando en uno (1) el bit CREN del
registro RCSTA. Si se desea que la recepción del dato cause una
interrupción, los bits GIE, PEIE y RCIE del registro INTCON deberán ser
habilitados.
• El registro RCSTA deberá leerse para obtener información acerca de la
ocurrencia de errores “Framing” y “Overrun”.
• Ante una recepción de 9 bits, el valor del noveno bits será almacenado en el
bit RX9D del registro RCREG.
• Ante una recepción de 8 bits, el valor recibido será almacenado en el registro
RCREG, el cual, deberá leerse para obtener dicho dato.
Figura 7.8. Modificadores de Formato utilizados por el comando HRSout.
Fuente: Manual del Usuario compilador Basic® PROTON®.
' CAP_07_Ejemplo_01.bas
' Ejemplo básico de utilización del USART/EUSART
' -----------------------------------------------------------------
Device = 16F876 ' Define el microcontrolador utilizado
XTAL = 20 ' Define la velocidad del resonador
Repeat
Para facilitar la configuración de los registros asociados a la comunicación serial HRSOut "Introduzca su edad?",13
mediante el módulo USART / EUSART, el compilador Basic® PROTON® dispone de HRSin DEC2 Edad
la directiva “DECLARE”, Existen cinco (05) directivas asociadas al USART/EUSART Until Edad >= 10 And Edad <= 50
cuando se utiliza como transmisión - recepción asincrónica:
HRSOut "Muy bien ...", 13
HRSOut "Usted escribió: ", DEC2 Edad, " Años",13
DECLARE HSERIAL_BAUD Valor DelayMS 10000
Ajusta la velocidad del módulo generador de Baud del microcontrolador. GoTo Main
Por defecto su valor es de 2400 Baudios.
Figura 7.10. Listado de la codificación del programa CAP_07_Ejemplo_01.bas
Figura 7.12. Menú de selección del IDE Serial Comunicator. Figura 7.13. Visualización de la ejecución del programa CAP_07_Ejemplo_01.bas
A través del IDE Serial Comunicator.
Main:
For Index = 0 To 255 ' Se envía a través del USART una rampa
HRSOut DEC3 Index, 13 ' de valor cero a 255. Los datos se en_
DelayMS 10 ' vian con una pausa de 10 ms.
Next
GoTo Main
End
• OPTION_REG<5> T0CS = 0
• El registro TMR0 se incrementa en cada ciclo de instrucción
• La sincronización en la escritura toma dos ciclos de reloj
COMO “COUNTER”
• OPTION_REG<5> T0CS = 1
• El registro TMR0 se incrementa en cada flanco de subida o bajada sobre el
pin RA4/T0CKI OPTION_REG<4> T0SE
Una interrupción por TMR0 ocurrirá cuando el registro de 8 bits asociado a éste
timer llegue al desbordamiento “overflow” FF -> 00, cuando ocurre el overflow el Tint|MAX(p) = Pre-escalador * 4/20MHz*(255-Valor I)
bit del registro INTCON<2> denominado T0IF pasará a valer 1. Si el bit
INTCON<5> T0IE es uno (permiso de interrupción), entonces la interrupción Tint|MAX(256) = 256 * 4/20Mhz * (255-0) = 13.056 ms
ocurrirá y se ejecutará la rutina de servicio de interrupción por TMR0. Tint|MAX(128) = 128 * 4/20Mhz * (255-0) = 6.528 ms
-> El pre-escalador tendrá que ser de 256 para 10 ms
La interrupción por TMR0 no puede despertar al microcontrolador si éste se
encuentra en estado dormido “sleep”, ya que, el TMR0 es deshabilitado cuando se INCREM = Pre-escalador * 4/FOSC = 51.2 us
entra en modo de reposo o dormido.
Valor I = 255 – Tint/INCREM = 255 – 10 ms/51.2 us
8.2. Registros asociados al TMR0 Valor I = 255 – Tint/INCREM = 255 – 195
Valor I = 60 … Valor Inicial a cargar en el Reg. TMR0
Tiempo de interrupción
Tint = INCREM * (255- Valor I) 8.5. Ejemplo de utilización del TMR0
Ejemplo: Utilice al TMR0 para generar una interrupción cada 10 ms, utilizando el El siguiente ejemplo, muestra como hacer la configuración del TMR0 para que
PIC 16F876 del sistema de desarrollo iBOARD III. interrumpa al programa principal cada 10 ms. El resultado del programa se podrá
observar a través del PROTON® IDE Serial Comunicator, el cual, deberá
Tint = 10 ms configurarse para recibir información serial a 38400 Baud.
FOSC = 20 MHz
Loop:
Conteo = Conteo + 1 ' Programa principal, incrementa la
For Index = 0 To 1000 ' variable conteo cada 1 seg.
DelayMS 1
Next
Figura 8.4. Imagen de la ejecución del programa CAP_08_Ejemplo_01.bas
HSerOut ["Conteo = ", Dec Conteo, " ", "Conteo_T0 = ",_
Dec Conteo_T0, 13] Se observa que para cada conteo de 1 seg en la variable Conteo del programa
GoTo Loop principal, la variable Conteo_T0 se incrementa 100 veces,
End como era de esperarse.
Existen varios registros asociados al TRM1, el más importante es el registro de Figura 8.6. Descripción de los bits individuales del registro T1CON.
configuración denominado T1CON. La figura 8.6. contiene la descripción de los Manual técnico del PIC16F876.
bits individuales del registro TMR1.
• Ajustar el registro T1CON<5:4> Bit’s T1CKPS2 = 0 Symbol GIE = INTCON.7 ' Bit habilit. int. globales
T1CKPS1 = 0, lo que significa pre-escalador = 1:1 Symbol PEIE = INTCON.6 ' Bit habilit. int. perifer.
Symbol T1IE = PIE1.0 ' Bit habilit. int. por TMR1
• Ajustar el registro T1CON<3> Bit T1OSCEN = 1 Symbol T1IF = PIR1.0 ' Bit flag interrupciones por TMR1
para habilitar el TMR1. Symbol T1CKPS1 = OPTION_REG.5 ' Bit selección pre-escalador
Symbol T1CKPS0 = OPTION_REG.4 ' Bit selección pre-escalador
• Ajustar el registro T1CON<2> Bit T1SYNC = 0 Symbol T1OSCEN = T1CON.3 ' Bit habilit. Conteo TMR1
sincronización del TMR1 Symbol T1SYNC = T1CON.2 ' Bit habilit. sincronización
Symbol TMR1CS = T1CON.1 ' Bit selección del reloj
• Ajustar el registro T1CON<1> Bit TMR1CS = 0 Symbol TMR1ON = T1CON.0 ' Bit habilit. On/Off del TMR1
selección del reloj para el TMR1 (int. ó Ext.) Dim Conteo As Word ' Variable de uso general
Dim Conteo_T1 As Word ' Variable de uso general
• Ajustar el registro T1CON<0> Bit TMR1ON = 1 Dim Index As Word ' Variable de uso general
Bit de ON/OFF del TMR1 Dim TMR1A As Word ' Valor Inicial del Timer1
• Introducir en el TMR1H y TMR1L, el valor inicial del On Interrupt GoTo TMR1_INT ' Cuando ocurre una interrupción va a
conteo, TMR1(H,L) = 15535 ' la subrrutina "TMR1_INT"
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
• Es un temporizador de 8 bits
• Su valor se puede leer/escribir por medio del registro TMR2
• La fuente de reloj es sólo interna
• Pre-escalador de relación 1:1, 1:4 ,1:16
• Post-escalador de 4 bits 1:1 a 1:16
• No opera en modo Sleep
• Puede usarse como base de tiempo del modulo de comunicación serial
sincrónica o de los CCP
• La escritura del TMR2, TCON2 o cualquier reset hacen que el pre y post-
escalador se borren y tomen el valor 00h.
La señal de reloj es sólo interna FOSC/4 y pasa por un pre-escalador con rangos
1:1, 1:4 y 1:16. La Salida del TRM2 para por un post divisor de frecuencias con
rangos desde 1:1 a 1:16 con 16 valores posibles en el intervalo. Esto se puede
observar a través de la Figura 8.12., mientras que en la figura 8.11. se describe el
significado de cada bit en particular del registro T2CON.
PR2 = Tint/(INCREM * post) = 10ms/(3.2us * 13) Symbol GIE = INTCON.7 ' Bit habilit. interrupciones globales
Symbol PEIE = INTCON.6 ' Bit habilit. interrupciones perifer.
PR2 = 240 Symbol T2IE = PIE1.1 ' Bit habilit. interrupciones por TMR2
Symbol T2IF = PIR1.1 ' Bit flag interrupciones por TMR2
Symbol TOUTPS3 = T2CON.6 ' Selección del Post-Escalador
8.15. Pasos a seguir para la utilización del TMR2 Symbol TOUTPS2 = T2CON.5 ' "
Symbol TOUTPS1 = T2CON.4 ' "
Symbol TOUTPS0 = T2CON.3 ' "
• Ajustar el registro T2CON<6:3> Bit’s TOUTPS3 = 1 Symbol TMR2ON = T2CON.2 ' Bit habilit. On/Off del TMR2
TOUTPS2 = 1, TOUTPS1 = 0 y TOUTPS0 = 0, lo Symbol T2CKPS1 = T2CON.1 ' Selección del Pre-escalador
que significa post-escalador = 1:13 Symbol T2CKPS0 = T2CON.0 ' "
• Ajustar el registro T2CON<2> Bit TMR2ON = 1 Dim Conteo As Word ' Variable de uso general
para habilitar el TMR2. Dim Conteo_T2 As Word ' Variable de uso general
Dim Index As Word ' Variable de uso general
• Ajustar el registro T2CON<1:0> Bit’s T2CKPS1 = 1
T2CKPS0 = 1, lo que significa pre-escalador = 1:16 On Interrupt GoTo TMR2_INT ' Cuando ocurre una interrupción va a
' la subrrutina "TMR2_INT"
• Introducir en el TMR2, el valor inicial de 240
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
El siguiente ejemplo, muestra como hacer la configuración de los timers TMR0, Dim Conteo As Word ' Variable de uso general
TMR1 y TMR2 para que interrumpan al programa principal cada 10 ms. El resultado Dim Conteo_T0 As Word ' Variable de uso general
del programa se podrá observar a través del PROTON® IDE Serial Comunicator, el Dim Conteo_T1 As Word ' Variable de uso general
cual, deberá configurarse para recibir información serial a 38400 Baud. Dim Conteo_T2 As Word ' Variable de uso general
Dim Index As Word ' Variable de uso general
' CAP_08_Ejemplo_04.bas Dim TMR1A As Word ' Valor inicial del Timer1
' Utilización del TMR0,TMR1 y TMR2 en forma simultánea.
' En este programa se incrementará el valor de la variable Conteo On Interrupt GoTo TMR012_INT ' Cuando ocurre una interrupción va a
' cada 1000 ms y las variables Conteo_T0, Conteo_T1 y Conteo_T2 cada ' la subrrutina "TMR012_INT"
' 10ms, utilizando los tres timers para que se interrumpa al progra_ ' PROGRAMA PRINCIPAL.
' ma principal cada 10 ms. ' -----------------------------------------------------------------
Main:
Device = 16F876 T0IF = 0 ' Limpia el flag de int. del TMR0
XTAL = 20 T0CS = 0 ' Define al TMR0 se utiliza como timer
PSA = 0 ' Asigna el pre-escalador al TMR0
' DEFINICIÓN DE SIMBOLOS, VARIABLES Y CONSTANTES PS2 = 1 ' Asigna al pre-escalador 256
' ----------------------------------------------------------------- PS1 = 1 "
Declare HSERIAL_BAUD 38400 ' Velocidad conexión serial en baud PS0 = 1 "
TMR0 = 60 ' Carga inicialmente al registro TMR0
Symbol GIE = INTCON.7 ' Bit habilit. interrupciones globales GIE = 1 ' Habilita interrupciones globales
Symbol PEIE = INTCON.6 ' Bit habilit. interrupciones perifer. PEIE = 1 ' Habilita las int. de periféricos
Symbol T0IE = INTCON.5 ' Bit habilit. interrupciones por TMR0 T0IE = 1 ' Habilita la interrupción por TMR0
Symbol T0IF = INTCON.2 ' Bit flag interrupciones por TMR0 Conteo = 0 ' Limpia la variable Conteo
Symbol T0CS = OPTION_REG.5 ' Bit selección fuente de Reloj TMR0 Conteo_T0 = 0 ' Limpia la variable Conteo_T0
Symbol PSA = OPTION_REG.3 ' Bit de selección para el prescalador
Symbol PS2 = OPTION_REG.2 ' Bit de selección para el prescalador T1IF = 0 ' Limpia el flag de int. del TMR1
Symbol PS1 = OPTION_REG.1 ' Bit de selección para el prescalador T1CKPS1 = 0 ' Asigna al pre-escalador valor 1:1
Symbol PS0 = OPTION_REG.0 ' Bit de selección para el prescalador T1CKPS0 = 0 "
T1OSCEN = 1 ' Habilit. del TMR1
Symbol T1IE = PIE1.0 ' Bit habilit. int. por TMR1 T1SYNC = 0 ' Sincronización TMR1
Symbol T1IF = PIR1.0 ' Bit flag interrupciones por TMR1 TMR1ON = 1 ' Bit de ON/OFF del TMR1
Symbol T1CKPS1 = OPTION_REG.5 ' Bit selección pre-escalador TMR1A = 50000 ' Valor inicial del TMR1
Symbol T1CKPS0 = OPTION_REG.4 ' Bit selección pre-escalador TMR1H = TMR1A.HighByte ' Valor inicial del TMR1 Byte Alto
Symbol T1OSCEN = T1CON.3 ' Bit habilit. Conteo TMR1 TMR1L = TMR1A.LowByte ' Valor inicial del TMR1 Byte Bajo
Symbol T1SYNC = T1CON.2 ' Bit habilit. sincronización GIE = 1 ' Habilita interrupciones globales
Symbol TMR1CS = T1CON.1 ' Bit selección del reloj PEIE = 1 ' Habilita las int. de periféricos
Symbol TMR1ON = T1CON.0 ' Bit habilit. On/Off del TMR1 T1IE = 1 ' Habilita la interrupción por TMR1
Conteo = 0 ' Limpia la variable Conteo
Symbol T2IE = PIE1.1 ' Bit habilit. int. por TMR2 Conteo_T1 = 0 ' Limpia la variable Conteo_T1
Symbol T2IF = PIR1.1 ' Bit flag interrupciones por TMR2
Symbol TOUTPS3 = T2CON.6 ' Selección del Post-Escalador T2IF = 0 ' Limpia el flag de int. del TMR2
Symbol TOUTPS2 = T2CON.5 ' " TOUTPS3 = 1 ' Selección del Post-Escalador 1:13
Symbol TOUTPS1 = T2CON.4 ' " TOUTPS2 = 1 ' "
Symbol TOUTPS0 = T2CON.3 ' " TOUTPS1 = 0 ' "
Symbol TMR2ON = T2CON.2 ' Bit habilit. On/Off del TMR2 TOUTPS0 = 0 ' "
Symbol T2CKPS1 = T2CON.1 ' Selección del Pre-escalador TMR2ON = 1 ' Habilit. del TMR2
Symbol T2CKPS0 = T2CON.0 ' " T2CKPS1 = 1 ' Asigna al pre-escalador valor 1:16
T2CKPS0 = 1 "
TMR2 = 240 ' Valor inicial del TMR2
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
If T1IF = 1 Then
T1IE = 0 ' Deshabilita la int. por TMR1
Conteo_T1 = Conteo_T1 + 1 ' Incrementa la variable Conteo_T1
TMR1A = 15535
TMR1H = TMR1A.HighByte ' Valor inicial del TMR1 Byte Alto
TMR1L = TMR1A.LowByte ' Valor inicial del TMR1 Byte Bajo Figura 8.15. Imagen de la ejecución del programa CAP_08_Ejemplo_04.bas
T1IF = 0 ' Limpia el flag de int. del TMR1 Se observa que pos cada conteo de 1 seg en la variable Conteo del programa
T1IE = 1 ' Habilita la interrupción por TMR1 Principal, las variables: Conteo_T0, Conteo_T1 y Conteo_T2 se incrementan
EndIf 100 veces, como era de esperarse.
If T2IF = 1 Then
T2IE = 0 ' Deshabilita la int. por TMR2
Conteo_T2 = Conteo_T2 + 1 ' Incrementa la variable Conteo_T2
TMR2 = 240 ' Valor inicial del TMR2
T2IF = 0 ' Limpia el flag de int. del TMR2
T2IE = 1 ' Habilita la interrupción por TMR2
EndIf
Resume
Introducción. I2C es un bus de comunicación serial, sobre el cual, se implementa • Utiliza dos líneas para la comunicación, una para datos llamada (SDA) y otra
un protocolo de comunicaciones desarrollado por Phillips Semiconductors™ a para el reloj (SCL).
principios de los años 80’s. Este bus se creó con la finalidad de reducir la • Cada dispositivo conectado al bus es identificado por una única dirección
complejidad del cableado interno encontrado en las tarjetas electrónicas de equipos (dentro del bus), la cual, queda establecida a través de una combinación de
digitales de radio y TV. Actualmente, su uso se ha extendido a innumerables Hardware/Software.
aplicaciones en el área digital, hecho que lo convierte, en uno de los más populares • Bus I2C es multi-master y aún cuando ésta característica es poco utilizada,
estándares de comunicación serial sincrónica. Una de las principales razones para se define un mecanismo para la detección de las colisiones y arbitraje que
que el estudio del bus I2C sea un punto obligatorio en la capacitación de un busca prevenir la pérdida de información si dos o más maestros inicializan
estudiante en el desarrollo de aplicaciones con microcontroladores, es la gran comunicaciones en forma simultánea.
variedad de productos y fabricantes que producen circuitos integrados con ésta • Las transferencias de información se realizan en paquetes de 8 bits, en forma
tecnología, entre los que se pueden citar: Phillips, National, Xicor, Siemens y Dallas- bi-direccional y pueden ser efectuadas a tres velocidades: Normal (Standard )
Maxim Semiconductors™. El térmico I2C es una simplificación comercial y práctica, a unos 100 kbit/s (definición original), a 400 kbit/s (implementado a partir
su nombre real es Inter-Integrated Circuit bus, es decir, bus de interconexión de de la versión 1.1 del año 1992) en el modo rápido (Fast) a 3.4 Mbit/s en el
circuitos integrados. modo de alta velocidad (High- speed) disponible desde la versión 2.0 del año
1998).
La Figura 9.1., muestra la conexión entre un dispositivo maestro y varios
esclavos utilizando el bus I2C. En general los dispositivos esclavos pueden ser entre La generación de los pulsos de reloj es siempre responsabilidad del maestro que
otros: manejadores de puertos E/S, convertidores A/D, medidores de temperatura, controla el bus. El maestro comienza y termina todas las transferencias de datos y
memorias Eeprom, relojes en tiempo real, sincronizadores, convertidores de para ello hace uso de dos condiciones especiales denominadas INICIO y PARADA
protocolos, etc. (START y STOP) que pueden ser únicamente generadas por él.
En un bus I2C, los dispositivos se identifican por medio de una dirección única
que forma parte de un byte de control enviado por el dispositivo maestro al iniciar
la comunicación. La definición inicial del I2C preveía la existencia de 7 bits para
direccionar al esclavo, de esta forma, se pueden conectar hasta 128 dispositivos en
el bus.
Una vez inicializada la comunicación I2C condición de “Start”, comienza el Figura 9.4. Formato de la transferencia de bytes en un Bus I2C.
proceso de transmisión/recepción de la información “Bytes” entre el dispositivo Fuente: Tomado de la web: www.Philip.com
maestro y el dispositivo esclavo como se puede apreciar en la Figura 9.3.
A partir de la versión 1.0 del año 1992, existe un formato de direccionamiento
Todos los bytes de información colocados sobre la línea SDA deben tener 8 bits. de 10 bits y se ha incrementado significativamente el número de dispositivos que
El número máximo de bytes que pueden ser enviados en una transmisión no está pueden conectarse simultáneamente al bus. El compilador Basic® no da soporte
restringido, siendo el esclavo quien fija esta cantidad de acuerdo a sus para dispositivos con direcciones de 10 bits por lo cual, no se hará un estudio
características. exhaustivo del direccionamiento del bus en estos casos.
El envío de los bits se efectúa siempre desde el bit más significativo MSB hacia
el menos significativo LSB. Aún cuando el maestro es quien siempre controla el 9.4. Inicialización en modo maestro
estado de la línea del reloj; un esclavo de baja velocidad o que deba detener la
transferencia de datos mientras efectúa otra función, puede forzar la línea SCL a La forma común de comunicación I2C, es utilizar al PIC® como único maestro y
nivel bajo. Esto hace que el maestro entre en un estado de espera, durante el cual, los periféricos como esclavos, bajo está configuración, la habilitación de las
no transmite información esperando a que el esclavo esté listo para continuar la comunicaciones se logra a través de la configuración de los siguientes registros:
transferencia en el punto donde había sido detenida.
• Esperar que el Flag bit SSPIF del registro PIR1 esté en uno indicando que todo
está listo para iniciar la comunicación.
• La recepción de los datos termina cuando se coloca el bit SEN = 0 del registro
SSPCON2, de esta forma ocurrirá una condición de parada “STOP”
habilitándose al pin SDA de nuevo a recibir una nueva trama de comunicación:
“Arranque … Dirección … Reconocimiento …Datos … Reconocimiento …
{Datos … Reconocimiento} …. Parada”
La figura 9.8., muestra una fotografía del sistema de desarrollo iBOARD III, en
la cual, los circuitos integrados con tecnología I2C se han encerrado en un recuadro
de color rojo. El primero dispositivo incluido es un reloj de tiempo real fabricado por Figura 9.8. Dispositivos con capacidad de comunicación I2C incluidos
la empresa Dallas Semiconductor™ modelo DS1307. Este dispositivo es un en el sistema de desarrollo iBOARD III.
BUSIN
Comando para recibir datos desde un dispositivo con protocolo I2C.
Sintaxis:
BUSIN Control, {Dirección}, [DatosEntrada {, DatosEntrada…}]
BUSOUT
Comando para transmitir datos desde un dispositivo con protocolo I2C.
Sintaxis:
BUSOUT Control, {Dirección}, [DatosSalida]
El sistema de desarrollo iBOARD III, incluye una memoria Eeprom modelo 24LC16B
Control. :Es una variable o constante (byte) que contiene los bits de identificación - de 16 Kbits, dispuestos en arreglos de 2K x 8 bits para ser utilizada con un bus de
2
dirección del dispositivo I C. comunicación I2C a un voltaje de operación entre
2.5 y 5.5 Vdc. En la figura anexa, se muestra la
Dirección : Es una variable o constante adicional (tipo byte o word) que especifica la
distribución de los pines de conexión. Los Pines 1, 2,
dirección de comienzo de lectura del dispositivo I2C, si no se especifica se tomará
y 3 se utilizan para determinar parte de la palabra
por defecto la dirección cero.
de identificación del dispositivo (dirección por
DatosEntrada : Es una lista de variables con modificadores de formato que se hardware). Los pines 4 y 8 se utilizan para la
reciben como datos de entrada. alimentación de tensión, los pines 5 y 6 son
utilizados para la conexión al bus I2C, mientras que
DatosSalida : Es una lista de variables con modificadores de formato que se el pin 7 es la habilitación de la protección a la escritura de la memoria Eeprom.
transmiten como datos de salida. La identificación del dispositivo queda definida tanto por el fabricante como por
los bits de dirección por hardware. Para realizar una lectura y/o escritura en los
La declaración de pines para la comunicación I2C, se realiza a través de las
registros de la memoria 24LC16B se debe enviar un byte de control y otro de
directivas:
dirección como se muestra indicado en la Figura 9.9.
Selección del Pin SDA
DECLARE SDA_PIN PORT . PIN
Puerto.pin por defecto PORTA.0
Utilizando el sistema de
desarrollo iBOARD III, haga un
programa que permita escribir y
leer las primeras 256 localidades
de la memoria Eeprom. Deberá
conectar el Bus I2C al
microcontrolador de la siguiente
forma: PORTB<0> con SDA y
PORTB<1> con SCL. También
se deberá mostrar el resultado a
través de IDE Serial comunicator
a una velocidad de conexión de
2400 Baud.
' CAP_09_Ejemplo_01.bas
' Leer y escribir el contenido de una memoria Eeprom modelo 24LC16B.
' Escribe las primeras 256 localizaciones de la memoria eeprom y
' muestra su contenido por el terminal .... Figura 9.10. Fotografía de las conexiones entre el PIC16F876
' ----------------------------------------------------------------- y el Bus I2C del sistema de desarrollo iBOARD III.
Device = 16F876
XTAL 20
Main:
For Index = 0 To 255
BusOut $A0,Index,[Index] ' $A0 = dirección memoria eeprom
DelayMS 5 ' Retardo escritura por fabricante
Next
Declare SDA_PIN PORTB.0 ' Asignación pin SDA HRSOut "Fecha = ", DEC2 RTC[Dia], "/", DEC2 RTC[Mes],_
Declare SCL_PIN PORTB.1 ' Asignación pin SCL "/", DEC2 RTC[Ano],13,13
Return
Symbol Seg = 0 ' Registro de Seg.
Symbol Minu = 1 ' Registro de Min. BCD2BIN:
Symbol Hora = 2 ' Registro de Horas For Index = 0 To 6
Symbol Dia = 4 ' Registro de Día RTC[Index] = (RTC[Index]/16)*10 + RTC[Index] & $0F
Symbol Mes = 5 ' Registro de Mes Next
Symbol Ano = 6 ' Registro de Año Return
Main:
GoSub RTC_INI ' Inicilizar el RTC
GoSub FECHA_INI ' Cargar Fecha inicial
DelayMS 500 ' Retardo 500ms
Loop:
GoSub LEER_RTC ' Leer registros RTC
GoSub MOSTRAR_RTC ' Mostrat registros RTC
DelayMS 1000
GoTo Loop
End
RTC_INI:
BusIn $D1,0,[RTC[Seg]] ' Lee byte 0, RTC
BusOut $D0,0,[RTC[Seg] & $7F] ' Pone 0 en bit CH
Return ' Para Activar RTC
FECHA_INI:
RTC[Seg] = $50 ' Ajusta los Seg. iniciales
RTC[Minu] = $59 ' Ajusta los Min. iniciales
RTC[Hora] = $23 ' Ajusta la Hora inicial
RTC[Dia] = $28 ' Ajusta el Día inicial
RTC[Mes] = $02 ' Ajusta el Mes inicial
RTC[Ano] = $08 ' Ajusta el Año inicial
BusOut $D0,0,[Str RTC\7] ' Escribe registros RTC
Return
LEER_RTC:
For Index = 0 To 6
BusIn $D1,Index,[RTC[Index]] ' Lee registros Figura 9.15. Resultado de la ejecución del programa CAP_09_Ejemplo_02.bas
Next ' del RTC 0..6 Utilizando el IDE Serial Comunicator.
GoSub BCD2BIN
Return
• Utiliza niveles de alimentación CMOS/TTL con un rango de operación que Podemos describir al protocolo 1-Wire® como una secuencia de transacciones
abarca desde 2.8V hasta 6V. de información, la cual, se desarrolla según los siguientes pasos: (1) La
• Tanto el maestro como los esclavos transmiten información de forma bi- Inicialización, (2) Comandos y funciones de ROM, (3) Comandos y funciones de
direccional, pero, sólo en una dirección a la vez, de ésta manera la control y memoria, (4) Transferencia de bytes ó datos.
comunicación es realizada en forma “half duplex”.
• Toda la información es leída o escrita comenzando por el bit menos significativo INICIALIZACIÓN
(LSB). Todas las comunicaciones en el bus 1-Wire® comienzan con una secuencia de
• No se requiere del uso de una señal de reloj, ya que, cada dispositivo 1-Wire® un pulso de Reset y Presencia. El pulso de reset provee una forma limpia de iniciar
posee un oscilador interno que se sincroniza con el del maestro cada vez que las comunicaciones, ya que, con él se sincronizan todos los dispositivos esclavos
en la línea de datos aparezca un flanco de bajada (Beta). presentes en el bus. Un Reset es un pulso que genera el maestro al colocar la línea
• La alimentación de los esclavos se puede hacer utilizando el voltaje propio del de datos en estado lógico bajo por unos 480 µs. Esto se puede observar a través de
BUS. Para ello, cada circuito esclavo posee un rectificador de media onda y un la Figura 10.2.
capacitor, durante los períodos en los cuales no se efectúa ninguna
comunicación, la línea de datos se encuentra en estado alto debido a la
resistencia de “Pull Up”; en esa condición, el diodo entra en conducción y
carga al capacitor. Cuando el voltaje de la RED cae por debajo de la tensión del
capacitor, el diodo se polariza en inverso evitando que el capacitor se
descargue. La carga almacenada en el capacitor alimentará al circuito esclavo.
• Las redes de dispositivos 1-Wire® pueden tener fácilmente una longitud desde
200 m y contener unos 100 dispositivos.
• Todas las tensiones mayores que 2,2 Voltios son consideradas un (1) lógico
mientras que como un (0) lógico se interpreta cualquier voltaje menor o igual a
0,8 V.
• La transferencia de información es a 16.3 Kbps en modo “Standard” y hasta a
142 Kbps en modo “overdrive”. Figura 10.2. Inicialización de la red 1-Wire®. Pulso de reset y presencia.
Figura 10.3. Comandos de ROM utilizados por los dispositivos 1-Wire®. 10.2. Implementación del maestro 1-Wire® con el PIC16F876
COMANDOS Y FUNCIONES DE CONTROL Y MEMORIA Para el manejo del protocolo 1-Wire®, el Basic® PROTON® incluye dos
comandos que permiten realizar la lectura y la escritura de información en el bus.
Son funciones propias del dispositivo 1-Wire®. Incluyen comandos para La implementación hecha por éstas funciones, tiene las siguientes características:
leer/escribir en localidades de memoria, leer memorias de “scratchpad”, controlar el La velocidad de transmisión de datos es aproximadamente de 20 Kbps en modo
inicio de la conversión de un ADC, iniciar la medición de una temperatura o normal, El PIC16F876 sólo puede trabajar como dispositivo maestro y se permite el
manipular el estado de un bit de salida, entre otros. Cada dispositivo define su uso de todos los modificadores de formato.
propio conjunto de comandos.
Para efectuar una lectura del Bus 1-Wire®, se utiliza el comando:
TRANSFERENCIA DE DATOS
ORead Pin, Modo, [DatoEntrada]
La lectura y escritura de datos en el bus 1-Wire® se hace por medio de “Slots”,
la generación de estos es responsabilidad del maestro, en este caso, el PIC16F876. Para efectuar una escritura en el Bus 1-Wire®, se utiliza el comando:
Cuando el maestro lee información del bus, debe forzar la línea de datos a estado
OWrite Pin, Modo, [DatoSalida]
bajo durante al menos 1 µs y esperar unos 15 µs para entonces leer el estado de la
misma. El estado lógico de la línea en ese momento, estará determinado por el
• Pin : Variable, constante o expresión que especifica cual pin de E/S será usado
dispositivo esclavo. La figura 10.4., muestra el proceso de lectura de un “Slot”
para la comunicación 1-Wire®.
típico que produce un microcontrolador PIC16F876 actuando como maestro 1-
Wire®.
• Modo: Variable, constante o expresión que indica el tipo de transferencia de
información. Este parámetro controla la ubicación de los pulsos de reset,
Al momento de efectuar la escritura de un bit en el bus ocurre algo similar, el
selecciona el modo de transferencia en bytes ó bits y define la velocidad de
maestro produce un pulso de entre 1 µs y 15 µs de duración, para luego colocar en
comunicación a utilizar, modo normal o modo de alta velocidad.
el bus al bit que se desea transmitir. Este bit deberá permanecer en el bus al menos
60 µs.
Figura 10.6. Diferentes topologías de interconexión entre dispositivos en una RED 1-Wire®.
Un iButton es un circuito integrado encerrado en un envoltorio de acero Symbol DQ = PORTB.1 ' Pin de conexión 1-Wire®
inoxidable de 16 mm de diámetro más parecido a una batería que a un micro chip. Dim Index As Byte ' Variable de uso general
La interfaz de comunicaciones utilizada en los iButtons® es el protocolo 1-Wire® de Dim SERIAL[8] As Byte ' Arreglo almacena serial
Dallas Semiconductor™, es por ello, que sólo necesitan dos terminales de conexión, Main:
uno para datos y otro para la referencia o tierra. GoSub Leer_Serial ' Rutina para leer el serial
GoSub Mostrar ' Rutina para mostrar serial
La energía requerida para el DelayMS 1000
funcionamiento del microcircuito GoTo Main
End
es tomada del propio conductor
de datos en forma parásita. Leer_Serial:
Existen iButtons® que contienen OWrite DQ,1,[$33] ' Read ROM, leer Serial
únicamente un número de For Index = 0 To 7
identificación, memorias (EPROM, ORead DQ,0,[SERIAL[Index]]
Next
EEPROM, NVRAM), relojes de Return
tiempo real, sensores y
registradores (loggers) de Mostrar:
temperatura, encriptadores de HRSOut "SERIAL DEL DISP.1-Wire® ENCONTRADO..",13
información, convertidores HRSOut "------------------------------------",13
For Index = 7 To 0 Step -1
analógico/digital, etc. En la figura HRSOut HEX2 SERIAL[Index]
anexa, se observan dos tipos Next
diferentes de iButton®. HRSOut 13,13
Return
' CAP_10_Ejemplo_02.bas
' Cálculo del CRC8 de un iButton 1-Wire
' ---------------------------------------------------------
Device = 16F876
XTAL 20
' CAP_10_Ejemplo_03.bas
' Lectura de la temperatura de un termómetro DS18B20.
' -------------------------------------------------------
Device = 16F876
XTAL 20
Mostrar:
FL_TEMP = TEMPERATURA /16
HRSOut "Temp oC = ", DEC2 FL_TEMP,13
Return
Cuando existe un sólo dispositivo conectado al bus 1-Wire® puede omitirse el A continuación, el maestro escribirá un bit en el bus y cada esclavo comparará
direccionamiento mediante el uso del comando SKIP ROM. También puede utilizarse este bit con el que él previamente había transmitido. En caso de que los bits sean
el comando READ ROM para leer la identificación del esclavo y direccionarlo. Pero, diferentes, el esclavo entrará en estado de espera, del cual, sólo saldrá al
¿Qué hacer cuando existe más de un dispositivo en la RED 1-Wire® al producirse un nuevo reset. Si ambos bits coinciden, el esclavo trasmitirá el siguiente
mismo tiempo?. Quizás, podríamos leer manualmente los seriales de identificación bit de su ID seguido de su complemento. El proceso se repetirá hasta que se
de todos los esclavos a conectar en el bus. Para ello, se tendría que colocar cada completen los 64 bits de identificación en cada dispositivo esclavo.
dispositivo sólo en el bus y aplicar los conceptos aprendidos con los ejemplos de
aplicación vistos. Con el comando READ ROM, leeríamos su identificación (serial) Pero, ¿Qué bit transmitió el maestro?. En el caso de las dos combinaciones
para luego almacenarla en una memoria EEprom externa o en la memoria EEprom centrales de la tabla mostrada en la figura 10.20 (01 y 10) el maestro tomará el bit
del PIC16F876. Posteriormente, se deberá repetir el procedimiento con todos los recibido (ID Bit), lo almacenará en una variable temporal donde al final del proceso
demás dispositivos hasta llegar al último. Una vez identificado cada dispositivo y su se obtendrán los 64 bits de la ID de uno de los dispositivos
serial, El maestro PIC16F876 podrá enviar a la RED 1-Wire® el comando Match
ROM ($55) seguido del serial de identificación del dispositivo en particular con el Cuando se produce una primera discrepancia (se reciben dos ceros
cual desee comunicarse, de esta forma, el dispositivo esclavo elegido quedará consecutivos), el maestro colocará un 0 en el bus y almacenará el bit, en el cual, se
activo y los demás dispositivos 1-Wire® en la RED quedarán fuera de línea hasta produjo la colisión. Esto hará que los dispositivos cuya ID fuese 1 en la posición
que se produzca en la RED una condición de RESET. donde se presentó la colisión, dejen de participar en la búsqueda. El bit que se
envía al bus se almacena en la variable temporal de la ID. Ahora bien, el proceso
Previendo esta situación, todos los dispositivos que emplean la tecnología 1- de búsqueda continúa y al momento de presentarse otra colisión se compara el bit
Wire®, soportan un comando de ROM llamado Search ROM, el cual, permite al en el que ésta ocurre con la posición del cero del párrafo anterior; si coinciden,
maestro identificar los seriales independientes de cada dispositivo conectado a la entonces se enviará un 1 por el bus (ID bit se toma igual a 1). Si la posición de la
RED en forma automática. colisión actual es mayor que la anterior deberá escogerse un cero, mientras que, si
es menor debe repetirse el camino tomado en la búsqueda pasada para ese mismo
Buscando dispositivos en el Bus 1-Wire® bit.
La búsqueda de dispositivos en una red 1-Wire® deberá comenzar un “RESET” La figura 10.21., muestra el diagrama de bloques del algoritmo Search ROM. Si
realizado por el maestro, quien luego deberá enviar un comando Search ROM. En desea mayor información sobre este algoritmo podrá consultar la nota de aplicación
ese momento, cada dispositivo esclavo enviará al bus el primer bit de su del fabricante Dallas Semiconductor™ AN187, “1-Wire Search Algorithm”, Mar
identificación, seguido del complemento del mismo. El maestro, deberá leer estos 28, 2002. Esta nota de aplicación también se encuentra en el CD entregado a usted
dos bits. Las combinaciones posibles de estos dos bits, se muestran en la tabla de la en el directorio \10 Manuales\AN187.pdf
figura 10.20.
Ejemplo de Aplicación
• Entradas digitales para cada uno de los cuatro pines de E/S disponibles
• Salidas digitales para cada uno de los cuatro pines de E/S disponibles
• Contador de frecuencia hasta 1 MHz para cada uno de los cuatro pines de
entrada - salida disponibles
• Generación de señales PWM de hasta 37.5 KHz por dos pines de entrada –
salida disponibles. El tipo de PWM y la frecuencia pueden ser configuradas Figura 11.1. Diagrama esquemático de conexiones del coprocesador
a tiempo de ejecución en el sistema de desarrollo iBOARD III.
• Conversión Analógica a Digital ADC de 10 bits de resolución por dos pines
de entrada – salida disponibles Acceder al coprocesador, se puede hacer a través del microcontrolador
• Comparador analógico de tensión por tres pines de entrada – salida PIC16F876 PORTB<0> y el multiplexor 1-Wire® DS2409 (U6). También se puede
disponibles acceder utilizando el terminal en bornera o punto de conexión en regleta OWI y el
• Memoria RAM de 32 registros de 8 bits, la cual, puede ser escrita y leída multiplexor 1-Wire® DS2409 (U7). Este último integrado, probablemente sea una
opción que no esté incluida en el sistema de desarrollo iBOARD III, hasta que el
En la Figura 11.1. se muestra el diagrama de conexiones electrónicas asociadas fabricante termine el software de comunicación que permitirá implementar, a través
al coprocesador, en la misma se observa la existencia de otros componentes 1- del computador, una RED de sistemas de desarrollo iBOARD III. A la fecha de
Wire® tales como multiplexores, los cuales, explicaremos en detalle más adelante, escritura de este manual, el fabricante ha adelantado en un 60% el software de
por ahora, nos concentraremos en el coprocesador. comunicación en RED denominado OPC™ View.exe.
CAP_11_Ejemplo_01.bas
' Programa para identificar el coprocesador ATMEL del sistema
' de desarrollo iBOARD III.
' --------------------------------------------------------------
Device 16F876
XTAL 20
OWrite OWP,1,[$CC, $CC, $FF] ' Skip ROM, Seleccionar Aux (U6) 11.1. El coprocesador utilizado como Salidas Digitales
ORead OWP,0,[RESP, FED] ' Respuesta, feedback
' De Aquí en adelante ya se trabajará directamente con el El proceso para configurar y activar los pines de salida del coprocesador es
' coprocesador ATMEL. Primero se envía el comando $DD para sencillo. Se realiza la configuración a través del envío de un byte que contiene la
' indicarle que queremos conocer su identificación. El co_ información de los pines que se activarán como salidas digitales y además el valor
' procesador devolverá tres (3) bytes de información: que tomarán estos pines de salida cero (0) lógico ó uno (1) lógico.
' I,J se refieren al tipo de dispositivo, K se ref. versión
79
El formato es el siguiente:
0 0 A1 A0 0 1 0 N
' CAP_11_Ejemplo_02.bas
' Programa para configurar al coprocesador como salida digital y en_
' cender - apagar un led conectado al pin CP0 del coprocesador. Pa_
' ra ello habrá que conectar un diodo led entre el pin CP0 de la
' iBOARD III en serie con una resistencia de 220 ohm a tierra.
' ------------------------------------------------------------------
Device 16F876
XTAL 20
Dim RESP As Byte ' Var. uso general (Obligatoria)
Dim FED As Byte ' Var. uso general (Obligatoria)
Symbol OWP = PORTB.0 ' Puerto.pin conexión a la iBOARD III
DelayMS 10 ' Retardo inicial requerido por el
' coprocesador ATMEL.
Main:
' Instrucciones requeridas para configurar el multiplexor 1-Wire
' del sistema iBOARD III. Integrado (U6). (Obligatorio) ........
OWrite OWP,1,[$CC, $CC, $FF] ' Skip ROM, Seleccionar Aux (U6)
ORead OWP,0,[RESP, FED] ' Respuesta, feedback
Figura 11.3. Resultado de la ejecución del programa CAP_11_Ejemplo_02.bas.
' De Aquí en adelante ya se trabajará directamente con el coproce_
' sador ATMEL. Primero se envía el comando $04 para colocar un
' cero lógico (0 Vdc) en el pin CP0, esto apagará el LED conectado Nota: Los 4 pines disponibles del coprocesador (CP0, CP1, CP2 y CP3) se pueden
' en este pin. Después de una pausa de 250 ms. Se enviará el coman configurar como salidas y tomar valores arbitrarios 0 ó 1. Si se desea que todas las
' do $05 para colocar un lógico (5Vdc) en el pin CP0,esto encederá salidas sean de valor cero lógico (0Vdc), se le debe enviar al coprocesador los bytes
' el LED conectado en este pin. Luego de otro retardo de 250 ms,el
' programa volverá a ejecutarse en forma cíclica.
de configuración:
Loop: 0 0 A1 A0 0 1 0 N
OWrite OWP,0,[$04]
DelayMS 250 $04; para activar y poner a cero la salida al pin CP0
OWrite OWP,0,[$05] $14; para activar y poner a cero la salida al pin CP1
DelayMS 250 $24; para activar y poner a cero la salida al pin CP2
GoTo Loop $34; para activar y poner a cero la salida al pin CP3
End
80
Por el contrario, si se desea que todas las salidas tengan el valor uno lógico ' De Aquí en adelante ya se trabajará directamente con el coproce_
(5Vdc), se le debe enviar al coprocesador los bytes de configuración: ' sador ATMEL. Primero se envía el comando $10 para configurar
' al pin CP1 como entrada analógica. Luego se lee el valor de ésta
' entrada y se almacena en la variable EstadoPin. Luego se pre_
0 0 A1 A0 0 1 0 N ' gunta por el valor de la variable EstadoPin si es:
' . cero (0) se activa al pin CP0 como salida y se coloca a 0Vdc
$05; para activar y poner a cero la salida al pin CP0 ' . uno (1) se activa al Pin CP0 como salida y se coloca a 5Vdc
' Luego de un retardo de 50 ms, el programa volverá a ejecutarse
$15; para activar y poner a cero la salida al pin CP1 ' en forma cíclica.
$25; para activar y poner a cero la salida al pin CP2
$35; para activar y poner a cero la salida al pin CP3 Loop:
OWrite OWP,0,[$10] ' Se configura CP1 como entrada
ORead OWP,4,[EstadoPin] ' Se lee el valor del pin CP1 y su
' valor se almacena en EstadoPin.
11.2. El coprocesador utilizado como Entradas Digitales
If EstadoPin = 0 Then
El proceso para configurar y activar los pines de entrada del coprocesador, se OWrite OWP,0,[$04] ' Si EstadoPin = 0 se apaga el LED
realiza con el envío de un byte que contiene la información de los pines que se Else
activarán como entradas digitales. OWrite OWP,0,[$05] ' Si EstadoPin = 1 se enciende LED
EndIf
DelayMS 50 ' Retardo 50 ms
El formato es el siguiente: GoTo Loop
End
0 0 A1 A0 0 0 0 0
' CAP_11_Ejemplo_03.bas
' Programa para configurar los pines del coprocesador. Pin CP0 como
' salida digital y el pin CP1 como entrada digital. El programa de_
' berá funcionar de la siguiente forma. El pin CP0 deberá tomar el
' valor del pin de entrada CP1. Así, si conectamos un pulsador en el
' pin CP1 en configuración activa - alto, cada vez que este sea pre_
' sionado deberá encender el LED conectado al pin CP0.
' ------------------------------------------------------------------
Device 16F876
XTAL 20
Dim RESP As Byte ' Var. uso general (Obligatoria)
Dim FED As Byte ' Var. uso general (Obligatoria)
Dim EstadoPin As Bit ' Var. uso general estado del pin
Symbol OWP = PORTB.0 ' Puerto.pin conexión a la iBOARD III
OWrite OWP,1,[$CC, $CC, $FF] ' Skip ROM, Seleccionar Aux (U6)
ORead OWP,0,[RESP, FED] ' Respuesta, feedback Figura 11.4. Resultado de la ejecución del programa CAP_11_Ejemplo_03.bas.
81
En ocasiones es necesario colocar a un pin de entrada simplemente en tres
estados (Alta impedancia). Esto lo podrá hacer enviando el mismo byte de A3..A0 Frecuencia (Hz) Codificación
configuración como si el pin fuera una entrada, pero con la diferencia de usar el 0000 37500,oo OWrite OWP,0,[$F0]
modo de comunicación 1-Wire® (2). Por ejemplo, si se desea configurar el pin CP1
como tres estados, se deberá enviar la siguiente instrucción: 0001 18823,53 OWrite OWP,0,[$F1]
0010 4687,50 OWrite OWP,0,[$F2]
OWrite OWP,2,[$10] ' Se configura CP1 como tres estados
0011 2352,94 OWrite OWP,0,[$F3]
0100 585,94 OWrite OWP,0,[$F4]
11.3. El coprocesador utilizado como Salidas PWM 0101 294,12 OWrite OWP,0,[$F5]
0110 146,48 OWrite OWP,0,[$F6]
Los pines del coprocesador CP2 y CP3 se pueden configurar como salidas de
una señal PWM (Modulación del ancho del pulso) con un ciclo útil programable (0- 0111 73,52 OWrite OWP,0,[$F7]
100)% en 255 pasos independientes. Si a la salida del pin que está generando una 1000 36,62 OWrite OWP,0,[$F8]
señal PWM se coloca un filtro pasa bajos, se podrá implementar un convertidor 1001 18,38 OWrite OWP,0,[$F9]
digital – analógico; por supuesto de poca precisión. La salida PWM puede ser
utilizada para manejar, con un apropiado circuito “driver”, cargas inductivas y
Figura 11.5. Diferentes frecuencias de salida para la señal PWM.
elementos de electrónica de potencia. La frecuencia máxima a la cual se puede
generar la PWM es de 37.5 KHz. El comando requerido para la generación de la Nota: El fabricante diseñó el coprocesador para que la selección de las frecuencias
PWM utiliza dos bytes. El primer byte configura cual(es) pin(es) de salida(s) serán arriba indicadas bajo números impares (1,3,5,7,9) produzcan una señal PWM con
salidas PWM y el segundo byte es un número entre $00 y $FF que especifica el ciclo pulsos corregidos en fase, es decir, cuando el valor del ciclo útil cambia, el cambio
útil de la señal PWM a generar. Ambos pines CP2 y CP3 se pueden configurar en es hecho en forma simétrica sobre el centro del pulso. Esto es muy utilizado en
forma arbitraria y con valores diferentes de ciclo útil. aplicaciones para controlar la velocidad de los motores DC, donde un corrimiento de
fase del pulso no es deseado.
0 0 A1 A0 0 1 1 Inv
' CAP_11_Ejemplo_04.bas
' Programa para configurar los pines del coprocesador Pin CP2 como
Segundo Byte: de $00 a $FF ' salida digital PWM con un ciclo útil que variará entre (0-100)% en
' 10 pasos generados en un intervalo de 10 seg. La frecuencia de la
Si A1 A0 = 10; entonces se activa como salida PWM al pin CP2 ' PWM generada será de aprox. 4.687 KHz. El pin de salida CP2 se de_
Si A1 A0 = 11; entonces se activa como salida PWM al pin CP3 ' berá conectar a un diodo LED en serie con una resistencia de 220
' Ohm de esta forma el LED cambiará cada segundo su brillo en forma
' ascendente. Esto será repetido en forma cíclica.
Si Inv = 0; Los pulsos PWM serán ascendentes (Alfa) ' ------------------------------------------------------------------
Si Inv = 1; Los pulsos PWM serán descendentes (Beta) Device 16F876
XTAL 20
La frecuencia a la cual se generará(n) la(s) señal(es) PWM es la misma para los Dim RESP As Byte ' Var. uso general (Obligatoria)
dos pines CP2 y CP3 y se puede configurar a través del envío de un comando con el Dim FED As Byte ' Var. uso general (Obligatoria)
Dim I As Byte ' Var. uso general como contador
siguiente formato: Symbol OWP = PORTB.0 ' Puerto.pin conexión a la iBOARD III
82
' De Aquí en adelante ya se trabajará directamente con el ATMEL Main:
' ------------------------------------------------------------- ' Instrucciones requeridas para configurar el multiplexor 1-Wire
OWrite OWP,0,[$F2] ' Configura Freq. Salida PWM = 4687.5 KHz ' del sistema iBOARD III. Integrado (U6). (Obligatorio) ........
Loop: OWrite OWP,1,[$CC, $CC, $FF] ' Skip ROM, Seleccionar Aux (U6)
For I = 0 To 255 Step 25 ORead OWP,0,[RESP, FED] ' Respuesta, feedback
OWrite OWP,0,[$26, I] ' Configura Salida PWM = CP2,
' ciclo útil = I ' De Aquí en adelante ya se trabajará directamente con el ATMEL
DelayMS 1000 ' -------------------------------------------------------------
Next OWrite OWP,0,[$F2] ' Configura Freq. Salida PWM = 4687.5 KHz
GoTo Loop
End Loop:
OWrite OWP,0,[$26, 127] ' Configura Salida PWM = CP0, CU=50%
Conteo = 0 ' Configura Entrada CP1 "counter" y
11.4. El coprocesador utilizado como Contador Digital OWrite OWP,0,[$13] ' comienza a medir los pulsos de CP2
DelayMS 1000 ' Retardo de 1000 ms = 1 seg
El proceso para configurar y activar los pines del coprocesador como entradas ORead OWP,1,[Conteo.HighByte, Conteo.LowByte]
de conteo “counter” se realiza a través del envío de un byte que contiene la HRSOut "Frec. Leída en CP1 = ", Dec Conteo*2, 13
información de los pines que se activarán como entradas de conteo de pulsos. El
formato del byte de control es el siguiente: DelayMS 500
GoTo Loop
End
0 0 A1 A0 0 0 1 1
' CAP_11_Ejemplo_05.bas
' Programa para configurar los pines del coprocesador: Pin CP2 como
' salida digital PWM con un ciclo útil del 50% a una frecuencia de
' 4.687 KHz El pin de entrada CP1 se configurará como "counter" y se
' deberá conectar al pin CP2 a fin de medir la frecuencia de salida
' de la señal PWM generada en ese pin. El conteo de los pulsos se
' hará en un intervalo de 1 seg. a fin de determinar la frecuencia
' de entrada que deberá ser igual al No. de pulsos/2 contados en 1 s
' El resultado se presentará a través del IDE Serial Comunicator ...
' ------------------------------------------------------------------
Device 16F876
XTAL 20
Dim RESP As Byte ' Var. uso general (Obligatoria)
Dim FED As Byte ' Var. uso general (Obligatoria)
Dim Conteo As Word ' Var. uso general como contador
Symbol OWP = PORTB.0 ' Puerto.pin conexión a la iBOARD III
83
CAPÍTULO 12
MODULO CCP/PWM. Captura, Comparación y PWM
Introducción. El PIC16F876 posee dos módulos CCP (CCP1 y CCP2) Captura, bit 3-0: CCPxM3:CCPxM0: Bits de selección
Comparación y PWM, los cuales, realiza tres funciones diferentes según su nombre
0000 =
Reset del módulo CCPx. Captura/Comparación/PWM = OFF
lo indica. El módulo CCP1 tiene asignado el pin PORTC<2> y el CCP2 tiene asignado
0100 =
Modo Captura, cada transición beta 1-> 0
el pin PORTC<1>. Ambos módulos pueden ser configurados a través de sus
0101 =
Modo Captura, cada transición alfa 0-> 1
registros asociados CCP1CON y CCP2CON.
0110 =
Modo Captura, a la cuarta transición alfa 0 -> 1
0111 =
Modo Captura, a la 16va. transición alfa 0-> 1
12.1. Modo de Captura
1000 =
Modo Comparación, coloca a uno (1) lógico el pin de salida
Modo Captura: Esta función se utiliza para la determinación de la duración de un PORTC<2:1>, cuando se activa la bandera de int. CCPxIF
pulso aplicado a los pines PORTC<2:1>. La Captura de una señal comienza cuando 1001 = Modo Comparación, coloca a cero (0) lógico el pin de salida
cambia el valor de entrada del pin PORTC<2> ó PORTC<1>, lo cual, desencadena PORTC<2:1>, cuando se active la bandera de int. CCPxIF
una serie de eventos como la copia el contenido del Timer1 (TMR1H, TMR1L) en los 1010 = Modo Comparación, genera interrupción CCPxIF, el valor lógico
registros (CCPR1H, CCPR1L) y la activación de la bandera de interrupción. Los del pin de salida PORTC<2:1> no cambia.
posibles cambios en los pines PORTC<2:1> que pueden desencadenar una captura 1011 = Modo Comparación, genera interrupción CCPxIF, el valor lógico
son: del pin de salida PORTC<2:1> no cambia. Si está utilizando el
• Una (01) transición de nivel Alto a nivel Bajo en el pin PORTC<2:1> CCP1, el valor del registro TMR1 es colocado a cero (0). Si está
• Una (01) transición de nivel Bajo a nivel Alto en el pin PORTC<2:1> utilizando el CCP2, el valor del TMR1 es colocado a cero (0) y se
• Cuatro (04) transiciones de nivel Bajo a nivel Alto en el pin PORTC<2:1> produce la habilitación del módulo de conversión A/D.
• Dieciséis (16) transiciones de nivel Bajo a nivel Alto en el pin PORTC<2:1> 11xx = Modo PWM.
Los registros de configuración tanto para el CCP1 y CCP2 son los encargados de En la Figura 12.2., se observa el diagrama de bloques funcionales del módulo
la selección y/o configuración de las diferentes funciones y bits asociadas a los CCP1. Cuando el evento preprogramado a través de los bits CCP1M3 al CCP1M0
módulos CCP. En la figura 12.1. se observan los bits que conforman cada uno de los dispara, la captura del valor del TMR1 se copia al registro CCPR1 y al mismo tiempo
registros de configuración CCP1CON y CCP2CON. la bandera de interrupción bit CCPR1IF se activa.
Modo Comparación: Esta función se utiliza en general, para disparar un evento Modo PWM: Se utiliza para generar señales con el algoritmo de la modulación del
externo a través del pin PORTC<2:1> del microcontrolador, evento es dependiente ancho del pulso, lo que significa, que las señales pueden variar en forma
de la comparación de dos registros internos del microcontrolador, asociados al independiente la frecuencia y el ciclo útil. Para entender que significado tiene la
módulo CCP. La Comparación literalmente significa: El valor del registro del Timer1 frecuencia y el ciclo útil, podemos observar la figura 12.4. Si un cero (0) lógico por
es continuamente comparado con un valor prefijado en el registro CCPR1 ó CCPR2, analogía representa la conexión abierta de un interruptor que alimenta a una
cuando los registros alcancen el mismo valor, uno de los cuatro posibles eventos bombilla y un uno (1) lógico representa la conexión cerrada de un interruptor,
ocurrirán: entonces, la potencia en la bombilla será directamente proporcional a la duración
del pulso. Esta relación se denomina ciclo útil.
Para el módulo CCP1
86
Figura 12.6. Período y ciclo útil de una señal relacionada a los registros del Timer2.
Fuente: Manual técnico del PIC16F876.
Figura 12.7. Frecuencia de una señal obtenida a partir el valor de los registros Figura 12.9. Resolución obtenida a partir de la frecuencia y el valor del registro PR2.
TMR2 y PR2. Fuente: Tomado de www.mikroe.com Fuente: Tomado de www.mikroe.com
87
12.4. Registros asociados a la Captura, Comparación y TMR1 12.5. Registros asociados al módulo PWM y TMR2
Figura 12.10. Registros asociados al módulo de Captura, Comparación y al TMR1. Banderas de interrupción: CCP2IF, TMR2IF
Fuente: Manual técnico del PIC16F876. Habilitación de interrupciones: CCP2IE, TMR2IE
Configuración del módulo PWMx: CCPxCON<5:0>, CCPxCON<5:0>
Banderas de interrupción: CCP1IF, CCP2IF, TMR1IF Configuración Timer2: T2CON<6:0>
Habilitación de interrupciones: CCP1IE, CCP2IE, TMR1IE
Configuración del módulo CCPx: CCPxM<3:0>
Configuración Timer1: T1CON<5:0> El compilador Basic® PROTON® no posee comandos en alto nivel para el
manejo de los módulos de Captura y Comparación. Si se desea utilizar estos
módulos, el usuario tendrá que configurar los registros asociados al módulo CCP en
forma manual y/o habilitar las interrupciones. El siguiente ejemplo, muestra como
trabajar con el módulo CCP para realizar la captura de una señal introducida a
través el módulo CCP1 y de esta forma determinar el período y la frecuencia de la
misma. El resultado se presentará en la pantalla LCD.
88
12.6. Ejemplos de aplicación del módulo CCP1 en modo Captura
' CAP_12_Ejemplo_01.bas
' Ejemplo básico de utilización del módulo de Captura / Comparación
' CCP1 para la medición del período y la frecuencia de una señal CAPTURE = 0 ' Se limpia la bandera de Captura
' introducida por el pin PORTC<2>. El resultado deberá ser mostrado While CAPTURE = 0 : Wend ' Espera para el prox. Captura
' en la pantalla LCD. Nota: para la generación de la señal se Clear TIMER1 ' Se inicializa el Timer 1
' utilizará el microcontrolador coprocesador ATMEL, generando una CAPTURE = 0 ' Se inicializa bandera Captura
' una señal PWM de 50% Ciclo útil a 4687,50 KHz. OVERFLOW = 0 ' Se inicializa bandera overflow T1
' ----------------------------------------------------------------- GoTo Main
Device = 16F876 End
XTAL 20
Coprocesador:
' Declaraciones para el manejo y utilización de la LCD ' Instrucciones requeridas para configurar el multiplexor 1-Wire
'----------------------------------------------------------------- ' del sistema iBOARD III. Integrado (U6). (Obligatorio) ........
Declare LCD_DTPIN PORTB.4 ' Pin de Datos LCD conec. al PORTB.4
Declare LCD_ENPIN PORTB.3 ' Pin de Enable LCD conec. al PORTB.3 OWrite PORTB.0,1,[$CC, $CC, $FF] ' Skip ROM, Seleccionar Aux (U6)
Declare LCD_RSPIN PORTB.1 ' Pin de RS LCD conec. al PORTB.1 ORead PORTB.0,0,[RESP, FED] ' Respuesta, feedback
Low PORTB.2 ' Pin de RW LCD conec. al PORTB.2
' De Aquí en adelante ya se trabajará directamente con el ATMEL
' Variables requeridas por el coprocesador ATMEL ' ---------------------------------------------------------------
' ---------------------------------------------------------------- OWrite PORTB.0,0,[$F2] ' Conf.Freq. Salida PWM = 4687.5 KHz
Dim RESP As Byte ' Var. uso general (Obligatoria) OWrite PORTB.0,0,[$26, 127] ' Configura Salida PWM = CP2, CU=50%
Dim FED As Byte ' Var. uso general (Obligatoria) Return
Main:
While CAPTURE = 0 : Wend ' Espera la bandera de Captura
PERIOD = CCPR1 ' Almacena valor capturado en PERIOD
89
12.7. Comando en Alto nivel para HPWM por hardware 12.8. Comando en Alto nivel para PWM por software
El compilador Basic® PROTON® posee un comando denominado HPWM, el El compilador Basic® PROTON® también puede generar señales PSEUDOS
cual, fue creado para manejar en alto nivel módulos CCPx del PIC16F876 y generar PWM, significa señales PWM generadas por algoritmos en software, ejecutadas por
señales utilizando algoritmo de la modulación del ancho del pulso PWM. Esto sin el CPU del microcontrolador y no ejecutadas en forma independiente por el
necesidad de que usted tenga que configurar los registros asociados en el hardware periférico módulo CCPx. La ventaja de la PWM por software, es que se
microcontrolador. Esto no significa que no podamos generar una señal PWM a puede ejecutar sobre cualquier pin del microcontrolador. La desventaja es que
través de la configuración de los registros, de echo, se hará un ejercicio práctico consume ciclos de reloj del CPU y por ello no es una tarea que se pueda realizar en
para llevar a cabo la generación de una señal PWM a través de la configuración de al mismo tiempo de ejecución de otras instrucciones en el microcontrolador. La
los registros del modulo CCP1 y otro ejercicio utilizando el comando en alto nivel sintaxis para este tipo de comando es:
HPWM. La sintaxis del comando es:
PWM Pin , Ciclo útil, Ciclos
HPWM Canal , Ciclo útil , Frecuencia
• Pin – Un valor constante que especifica cual pin del microcontrolador se
• Canal – Un valor constante que especifica cual módulo CCPx se utilizará, las utilizará. PORT.pin
opciones son CCP1 ó CCP2. En el PIC16F876 la frecuencia para la generación
PWM en ambos canales deberá ser la misma, mientras que el ciclo útil es • Ciclo útil – Una variable, constante (0-255), o expresión que especifica la
ajustable e independiente para cada canal. Los pines del microcontrolador relación entre los estados lógicos altos y bajos de la señal.
asociados a cada módulo CCPx son: Para el CCP1 -> PORTC<2> y para el • Ciclos – Una Variable ó constante (0-255) que especifica el número de ciclos de
CCP2 -> PORTC<1>. salida de la señal a generar. El valor de los ciclos es dependiente del oscilador
• Ciclo útil – Una variable, constante (0-255), o expresión que especifica la utilizado, para un oscilador de 20 MHz la duración de cada ciclo será aprox. 1
relación entre los estados lógicos altos y bajos de la señal. ms.
PWM colocará un cero(0) ó un uno (1) en la salida del pin a una rata controlada
por el ciclo útil escogido. Si el ciclo útil es uno (1) el pin estará alimentado
constantemente con un voltaje cercano al de alimentación Vdd = 5 Vdc. Por el
contrario, si el ciclo útil es cero (0) el pin tendrá un voltaje cercano a 0 Vdc. Para
valores entre 0 y 255 la proporción será: Ciclo útil /255. por ejemplo, si el ciclo útil
es igual a 127 voltaje del pin aprox = 127/255 * 5Vdc = 2.49 Vdc.
90
12.9. Ejemplo de HPWM y configuración a través de registros
' CAP_12_Ejemplo_02.bas
' Ejemplo básico de utilización del módulo de CCP1 a través de los
' registros. Se generará una señal HPWM de frecuencia aprox. 5 KHz
' que varia su ciclo útil entre 20% y 80% en 3 segundos. CCP1 se_
' ra el módulo a utilizar PORTC<2> al mismo se le colocará un LED
' en serie con una resistencia de 220 Ohm para poder observar los
' cambios en el brillo del LED.
' -----------------------------------------------------------------
Device = 16F876
XTAL 20
Loop:
CCP1CON.4 = Duty.0 ' Almacena el ciclo útil como una
CCP1CON.5 = Duty.1 ' palabra de 10-bit
CCPR1L = Duty >> 2
Duty = Duty + 10 ' Incrementa el ciclo útil
DelayMS 50 ' Retardo de 50 ms seg.
If Duty < 800 Then Loop ' Incrementa hasta el 80%
Duty = 200 ' Se regresa a 20%
GoTo Loop
Loop:
For Duty = 50 To 200 Step 15
HPWM 1,Duty,5000 ' HPWM pin PORTC<2> ciclo útil
DelayMS 250 ' y freq. 5000 Hz.
Next
GoTo Loop
End
91
11.5. El coprocesador utilizado como Conversor A/D
El coprocesador dispone de dos pines (CP0 y CP1) que pueden ser OWrite OWP,1,[$CC, $CC, $FF] ' Skip ROM, Seleccionar Aux (U6)
configurados como entradas analógicas a fin de realizar la conversión A/D de 10 ORead OWP,0,[RESP, FED] ' Respuesta, feedback
bits de resolución. La conversión A/D se puede realizar utilizando como referencia el
voltaje de alimentación al chip (Vdd) ó a través de una referencia interna de 1.1 ' De Aquí en adelante ya se trabajará directamente con el ATMEL
' -------------------------------------------------------------
Volt. La configuración se realiza con el envío de un byte que contiene la información Loop:
de los pines que se activarán como entradas para la conversión A/D. El formato del OWrite OWP,0,[%00001011] 'Conf. CP0 conv. A/D con Ref. = Vdd
byte de control es el siguiente: Repeat
ORead OWP,4,[Busy]
Until Busy <> 1
0 0 A1 A0 1 Ref 1 1
ORead OWP,0,[ValorAD.HighByte, ValorAD.LowByte]
Voltaje = ValorAD * (5/1023) ' Factor de conversión A/D
Si A1 A0 = 00; entonces se activa como entrada A/D el pin CP0
Si A1 A0 = 01; entonces se activa como entrada A/D el pin CP1 HRSOut "Volt. LED(On) = ", DEC2 Voltaje," Vdc", 13
DelayMS 1000
Si Ref = 0; El voltaje de ref. utilizado para la CAD será Vdd GoTo Loop
Si Ref =1; El voltaje de ref. utilizado para la CAD será 1.1 Volt End
' CAP_11_Ejemplo_06.bas
' Programa para configurar los pines del coprocesador: Pin CP0 como
' entrada para realizar una conversión A/D y de esta forma determinar
' la tensión en directo (ON) de un diodo LED conectado a Vdd a través
' de una resistencia en serie de 220 Ohm. Se deberá conectar el Pin
' CP0 al ánodo del diodo LED. El resultado se presentará a través del
' IDE Serial Comunicator ...
------------------------------------------------------------------
Device 16F876
XTAL 20
Dim RESP As Byte ' Var. uso general (Obligatoria)
Dim FED As Byte ' Var. uso general (Obligatoria)
Dim ValorAD As Word ' Var. uso general para la CAD
Dim Voltaje As Float ' Var. uso general para la CAD
Dim Busy As Bit ' Var. uso general para la CAD
Symbol OWP = PORTB.0 ' Puerto.pin conexión a la iBOARD III
Figura 11.7. Resultado de la ejecución del programa CAP_11_Ejemplo_06.bas.
DelayMS 10 ' Retardo inicial requerido por el
' coprocesador ATMEL. En el manual AVR Firmware: GPIO-3 (2006.08.27) www.parallax.com, puede
encontrar más información sobre los comandos implementados por el coprocesador,
Main:
' Instrucciones requeridas para configurar el multiplexor 1-Wire
algunos comandos no fueron incluidos en este trabajo.
' del sistema iBOARD III. Integrado (U6). (Obligatorio) ........
84
REFERENCIAS BIBLIOGRÁFICAS
ATMEL™ Corporation. 8-bit Microcontroller with 1K Bytes In-System Future Technology Devices International Ltd. FT232R USB UART IC. (2008).
Programmable Flash ATtiny13. (Enero, 2007). 2535G–AVR–01/07. Hoja de Document No.: FT_000053. Hoja de especificaciones técnicas. FTDI# 38.
especificaciones técnicas. Disponible a través de http://www.atmel.com/dyn/ Disponible a través de http://www.ftdichip.com/Documents/DataSheets/DS
resources/prod_documents/doc2535.pdf _FT232R.pdf
Crowhill Associates Limited. Development suite Proton, Integrated Himpe, Vicent. Visual Basic 5.0, 6.0, VBA, .NET, 2005. Editorial Elector-
development environmnet compiler user manual (2004). Cambridge Elektroniccs. 3ra. Edición Mayo 2007. ISBN: 978-0-905705-68-2.
England.
Microchip Technologies, Inc. 24LC16B 16K I2C™ Serial EEPROM. (Enero 1,
Chicala, C. Adquisición de datos, medir para conocer y controlar. Soluciones 2007) DS21703G. Hoja de especificaciones técnicas. Disponible a través de
en Control SRL. México. (Agosto 1, 2004). ISBN 987-20960-1-5. http://ww1.microchip.com/downloads/en/DeviceDoc/21703H.pdf
Dallas Semiconductor Corp. Division of Maxim Integrated Products, Inc., App Note Milan Verle, “PIC Microcontrollers” mikroElektronika; 1st edition (2008). Material
27: Understanding and Using Cyclic Redundancy Checks with Maxim didáctico de consulta gratuita a través de Internet. ISBN 13- 978-86-84417-15-4
iButton Products. (Junio 19, 2007). Hoja de especificaciones técnicas. Disponible http://www.mikroe.com/en/books/picbook/picbook.htm
a través de http://pdfserv.maxim-ic.com/en/an/AN27.pdf
Microchip Technologies, Inc. PIC16F876 28/40-pin 8-Bit CMOS FLASH
Dallas Semiconductor Corp. Division of Maxim Integrated Products, Inc. Microcontrollers 1999. DS30292B. Hoja de especificaciones técnicas. Disponible a
Application Note 155: 1-Wire® Software Resource Guide Device través de http://ww1.microchip.com/downloads/en/DeviceDoc/30292c.pdf
Description. (Octubre 11, 2005). Disponible a través de http://pdfserv.maxim-
ic.com/en/an/AN155.pdf Parallax, Inc. AVR Firmware: GPIO, Version 3. (Agosto 8, 2007). Hoja de
especificaciones técnicas. Disponible a través de http://www.parallax.com/detail
Dallas Semiconductor Corp. Division of Maxim Integrated Products, Inc., App Note .asp?product_id=28300.
187: 1-Wire® Search Algorithm. (Marzo 28, 2002). Disponible a través de
http://pdfserv.maxim-ic.com/en/an/AN187.pdf Parallax, Inc. MoBoStamp-pe BS2pe Motherboard (#28300). (Septiembre 13,
2006). Hoja de especificaciones técnicas. Disponible a través de
Dallas Semiconductor Corp. Division of Maxim Integrated Products, Inc., App Note http://www.parallax.com/Portals/0/Downloads/docs/prod/boards/28300-MoBo-
937: Book of iButton Standards. (Agosto 12, 1997). Disponible a través de 0906.PDF
http://pdfserv.maxim-ic.com/en/an/appibstd.pdf
Rodríguez, J. Comunicación 1-Wire®. En Sistema de Desarrollo MDK-B28
Dallas Semiconductor Corp. Division of Maxim Integrated Products, Inc., DS1307 (pág. 415-417). Enero, 2006. Valencia, Venezuela. Disponible a través de
64 x 8 Serial Real-Time Clock, (Mayo 4, 2004). Hoja de especificaciones http://www.roso-control.com/WEB_ROSO/_Download/Cursos/MDK_B28_Manual_
técnicas. Disponible a través de http://www.maxim-ic.com/getds.cfm?qv_pk=2688 Full.pdf
Dallas Semiconductor Corp. Division of Maxim Integrated Products, Inc., DS18B20 Smith, Jack R. (2005). Programming the PIC Microcontroller with MBasic.
Programmable Resolution 1-Wire® Digital Thermometer. (Enero 5, 2002). Editorial ELSEVIER, Burlington USA. (2005). ISBN: 0-7506-7946-8.
Hoja de especificaciones técnicas. Disponible a través de http://datasheets.maxim-
ic.com/en/ds/DS18B20.pdf
Figura A.2. Distribución de pines de conexión de la pantalla LCD 2x16 del iBOARD III.
COMANDOS UTILIZADOS
La información que se envía a la pantalla LCD puede interpretarse de dos
formas: como un comando, cuando se coloca al (pin) denominado RS en nivel
bajo y como un carácter, cuando el (pin) RS está en nivel alto. Un comando es un
dato numérico de 8 bits que le indica al controlador HITACHI 44780 ó compatible,
que deber realizar una operación; entre las cuales, se encuentran las mostradas en
la figura A.3.
Figura A.1. Conexiones de la pantalla LCD 2x16 al sistema de desarrollo iBOARD III.
CONJUNTO (SET) DE CARACTERES
La pantalla LCD deL iBOARD III, incluye un microcontrolador interno como el Aún cuando los comandos mostrados en la tabla de la figura A.3. son suficientes
HITACHI 44780 ó compatible y puede entre otras cosas: para manejar la pantalla LCD, en la mayoría de las aplicaciones, un usuario puede
crear sus propios comandos de control para el manejo de la LCD. Para ello deberá
· Presentar caracteres ASCII y griegos utilizar las especificaciones que suministra fabricante. La totalidad de las pantallas
· Recibir y mostrar caracteres personalizados LCD compatibles con la Hitachi 44780, incluyen un conjunto de caracteres
· Desplazamiento de caracteres (Scroll) tanto a la derecha como a la izquierda precargados en la memoria RAM. Este conjunto de caracteres lo podemos observar
· Cambiar el aspecto y el movimiento del cursor a través de la figura A.4.
· Direccionar de manera simple la posición de visualización de los caracteres
CARACTERES PERSONALIZADOS
La figura A.7. muestra una fotografía del sistema de desarrollo iBOARD III,
ejecutando el programa de demostración de la pantalla LCD. Este ejemplo se
encuentra en el CD entregado a usted, en la carpeta Ejemplos/
CAP_04/iBOARD_III_DEMO.bas. Ya en el capítulo 04, se había descrito como cargar
y ejecutar el programa de demostración. En esta sección explicaremos su
funcionamiento, sin embargo, antes se describirán los comandos en alto nivel que
posee en compilador Basic® PROTON® para el manejo de una pantalla LCD.
El compilador Basic® PROTON® dispone de un comando para el manejo de las DECLARE LCD_ENPIN PORT . PIN
pantallas LCD.
Asigna el Puerto y el pin de conexión que se utilizarán para la conexión de la línea
PRINT Item { , Item... }
de habilitación (EN) de la pantalla LCD. Por defecto se utiliza el pin PORTB<2>.
Item - Es una constante, variable, expresión, modificador de formato y/o un(a)
DECLARE LCD_RSPIN PORT . PIN
string.
Asigna el Puerto y el pin de conexión que se utilizarán para la conexión de la línea
También el comando PRINT acepta modificadores de formato como los de selección (RS) de la pantalla LCD. Por defecto se utiliza el pin PORTB<3>.
mostrados en la siguiente tabla.
DECLARE LCD_INTERFACE 4 or 8
Informa al compilador si la pantalla LCD trabajará en modo 4 bits ó 8 bits. Por
defecto se utiliza el modo 4 bits.
AT ypos,xpos Posiciona el cursor de una pantalla al valor x,y de la LCD
CLS Limpia la Pantalla LCD y crea un retardo de 30ms
BIN{1..32} Envía dígitos en formato binario
DECLARE LCD_LINES 1 , 2 , or 4
DEC{1..10} Envía dígitos en formato decimal Informa al compilador el número de líneas de la pantalla LCD. Por defecto se utiliza
HEX{1..8} Envía dígitos en formato hexadecimal el valor de dos (2) líneas.
SBIN{1..32} Envía dígitos en formato binario con signo
SDEC{1..10} Envía dígitos en formato decimal con signo
SHEX{1..8} Envía dígitos en formato hexadecimal con signo
Ejemplos de utilización pantalla LCD.
IBIN{1..32} Envía dígitos en formato binario precedidos de '%'
IDEC{1..10} Envía dígitos en formato decimal precedidos de '#'
IHEX{1..8} Envía dígitos en formato hexadecimal precedidos de '$' Ya en el capítulo 4, se había cargado y ejecutado el programa
ISBIN{1..32} Envía dígitos en formato binario con signo precedidos de '%' CAP_04_Ejemplo_01.bas, el cual, hace uso de la pantalla LCD para mostrar un
ISDEC{1..10} Envía dígitos en formato decimal con signo precedidos de '#’ mensaje inicial y luego el valor incremental de una variable. La codificación del
ISHEX{1..8} Envía dígitos en formato hexadecimal con signo prec. de '$' programa es mostrada a continuación:
REP c\n Envía el carácter “c” repetido “n” veces
STR array\n Envía todo ó parte de un arreglo ' CAP_04_Ejemplo_01.bas
CSTR cdata Envía datos tipo “string” definidos por el comando CData ' Ejemplo básico de utilización del sistema iBOARD III con LCD
' -------------------------------------------------------------------
Device = 16F876 ' Define el microcontrolador utilizado
ALL_DIGITAL = True ' Config. todos los puertos como dig.
A fin de utilizar la pantalla LCD de caracteres con el sistema de desarrollo XTAL = 20 ' Define la velocidad del resonador
iBOARD III, primero hay que configurarla a través de las directivas del compilador.
Estas directivas son las denominadas “Declares”. Existen seis declaraciones ' Pines de conexión a la pantalla LCD
Declare LCD_DTPIN PORTB.4 ' Pin de Datos LCD conec. al PORTB.4
diferentes para la configuración de una LCD.
Declare LCD_ENPIN PORTB.3 ' Pin de Enable LCD conec. al PORTB.3
Declare LCD_RSPIN PORTB.1 ' Pin de RS LCD conec. al PORTB.1
DECLARE LCD_TYPE 1 or 0 , GRAPHIC or ALPHA TRISB.2 = 0 ' Declara a PORTB.2 como Salida Dig.
Informa al compilador el tipo de pantalla LCD a utilizar. (1) selecciona una pantalla PORTB.2 = 0 ' Coloca en PORTB.2 un cero (0) Lógico
LCD del tipo gráfica. (0) selecciona una pantalla LCD del tipo carácter. Por defecto
Dim Contador As Byte ' Declaración de var. de uso general
se escoge el uso de una pantalla de caracteres. Dim ValorF As Float ' Declaracion de var. de uso general
ValorF = 0 ' Inicializa la variable en cero
DECLARE LCD_DTPIN PORT . PIN TRISA = $FF ' Declara el Puerto A como entrada dig.
Asigna el Puerto y el pin de conexión que se utilizarán para la conexión de la línea TRISC = $00 ' Declara el Puerto C como salida dig.
data de la pantalla LCD. Por defecto se utiliza el pin PORTB<4>.
Declare LCD_DTPIN PORTB.4 ' Pin de Datos LCD conec. al PORTB.4 ' Anexo_A_Ejemplo_02.bas
Declare LCD_ENPIN PORTB.3 ' Pin de Enable LCD conec. al PORTB.3 ' Creación y visualización de un caracter especial en LCD
Declare LCD_RSPIN PORTB.1 ' Pin de RS LCD conec. al PORTB.1 ' -------------------------------------------------------------------
TRISB.2 = 0 ' Declara a PORTB.2 como Salida Dig. Device = 16F876
PORTB.2 = 0 ' Coloca en PORTB.2 un cero (0) Lógico ALL_DIGITAL = True
XTAL = 20
Las primeras tres instrucciones se utilizan para indicarle al compilador cual pin
Declare LCD_DTPIN PORTB.4 ' Pin de Datos LCD conect. al PORTB.4
del microcontrolador será utilizado para manejar las líneas de datos, habilitación y Declare LCD_ENPIN PORTB.3 ' Pin de Enable LCD conect. al PORTB.3
selección de la pantalla LCD. La cuarta línea TRISB.2 = 0, configura al pin Declare LCD_RSPIN PORTB.1 ' Pin de RS LCD conect. al PORTB.1
PORTB<2> como una salida digital. La instrucción cinco: PORTB.2 = 0, coloca un
cero (0) lógico 0 Vdc en el pin PORTB<2>. Este pin está conectado al pin RW de la TRISB.2 = 0 ' Declara a PORTB.2 como Salida Digital
PORTB.2 = 0 ' Coloca en PORTB.2 un Edo. Bajo 0 VDC
pantalla LCD, el cual, deberá estar conectado a tierra para que la pantalla reciba los
datos del microcontrolador. Como el compilador Basic® PROTON® sólo da soporte Symbol CGRAM = $64 ' Apuntador a la Memoria CGRAM del LCD
para la escritura de la LCD y no la lectura, no incluye la definición de este pin Dim I As Byte
dentro de las directivas del compilador. Si RW en la pantalla LCD se coloca a cero
(0) lógico 0 Vdc, la pantalla LCD se habilitara en modo de escritura y estará lista Main:
'CARGANDO EL 1ER. CARACTER PERSONALIZADO EN LA CGRAM
para visualizar la información enviada desde el microcontrolador. Esto es
Print 254,64, 31,04,14,10,10,14,04,31
justamente lo que hace la instrucción cinco: PORTB.2 = 0. Coloca al pin RW de la Print Cls ' Limpia la pantalla LCD
LCD a cero. ' Muestra texto en línea1
Print At 1,1, "CaracterEspecial" ' CaracterEspecial
Las instrucción: Print At 2,7, 0 ' muestra caracter especial
DelayMS 1000 ' segunda línea
Print $FE, 1 ' Comando para limpiar pantalla LCD GoTo Main
End
GoTo Main
Figura A.8. Fotografía de la ejecución del programa Anexo_A_Ejemplo_02.bas End
Creación de un carácter especial en CGRAM de la LCD.
' Anexo_A_Ejemplo_03.bas
' Creación y visualización de 8 caracteres especiales en LCD
' -------------------------------------------------------------------
Device = 16F876
ALL_DIGITAL = True
XTAL = 20
Main:
'CARGANDO EL 1ER. CARACTER PERSONALIZADO EN LA CGRAM
Print 254,64, 31,04,14,10,10,14,04,31
'CARGANDO EL 2DO. CARACTER PERSONALIZADO EN LA CGRAM
Print 254,72, 31,31,31,31,31,31,31,31 Figura A.9. Fotografía de la ejecución del programa Anexo_A_Ejemplo_03.bas
'CARGANDO EL 3RO. CARACTER PERSONALIZADO EN LA CGRAM Creación de ocho caracteres especiales en CGRAM de la LCD.
' Anexo_A_Ejemplo_04.bas
' Efectos especiales con una pantalla LCD
' -------------------------------------------------------------------
Device = 16F876
ALL_DIGITAL = True
XTAL = 20
Main:
Print $FE, 1 ' Limpia la pantalla LCD
Print At 1,1, " Pantalla LCD " ' Visualiza mensaje en la
Print At 2,1, " iBOARD III " ' Línea 1 y Línea 2
DelayMS 2000 Figura A.10. Fotografía de la ejecución del programa Anexo_A_Ejemplo_04.bas
Efectos especiales con una pantalla LCD.
GoSub Scroll_Izquierda 'Desplaza todo el texto a la izquierda
GoSub Scroll_Derecha 'Desplaza todo el texto a la derecha
DelayMS 1000
GoTo Main
'SUB-RUTINAS
'--------------------------------------------------------------------
Scroll_Izquierda:
For Index = 0 To 15
Print $FE, SCRLEFT
DelayMS 300
Next
Return
Scroll_Derecha:
For Index = 0 To 15
Print $FE, SCRRIGHT
DelayMS 300
Next
Return
Dentro del directorio de instalación del programa, encontrará una carpeta con el
nombre “12_PIC_Boot.hex”, la cual, contiene los archivos *.hex de todos los
dispositivos soportados y listos para trabajar con dos diferentes tipo de reloj ó
resonador en 4Mhz y 20Mhz. Programador USB
Presenta el nombre del programa, junto con los controles para minimizar y cerrar el
programa iLOADER.
iLOADER. Ofrece un acceso por medio del menú a las funciones básicas de
programación.
Este conjunto de botones, llevan asociadas las mismas funciones que el menú
iLOADER descrito en la sección anterior. El botón “Ejecutar” efectúa un reset del
microcontrolador y comienza la ejecución del programa grabado en el PIC®.
UART/SCOPE. Despliega la herramienta UART/SCOPE, la cual se compone de un
terminal bi-direccional de comunicaciones seriales ASCII y de un gráfico de
visualización de señales de múltiples canales. El terminal de datos puede ser
utilizado para depurar los programas escritos para el microcontrolador funcionando
como un visualizador de texto. El componente gráfico tiene un gran campo de
aplicación, permitiendo efectuar el registro de valores de forma visual en tiempo
real de hasta 8 canales independientes de información. Los datos graficados pueden
ser impresos como parte de reportes o para analizar el comportamiento de las
variables capturadas por el microcontrolador.
Contenido de la memoria de programa (5)
Constituyen una ayuda gráfica que facilita el uso del programa iLOADER y
advierte sobre el funcionamiento y las operaciones realizadas de forma exitosa o
fallida. Algunos de los íconos presentados durante el uso normal del programa se
muestran a continuación:
Cuando trabajamos con el modo gráfico (SCOPE) disponemos de un Barra de identificación de la herramienta (1)
componente que permite graficar de forma simultánea hasta 8 canales de
información digital o analógica. De ésta forma podemos transformar en segundos al
iLOADER en un registrador gráfico en tiempo real de los datos provenientes desde
el microcontrolador PIC®..
Presenta el nombre de la herramienta: “iLOADER Herramienta UART/SCOPE”,
La figura B.7. Muestra la pantalla de la herramienta UART/SCOPE. junto con los controles para minimizar, maximizar y cerrar la aplicación.
Una de las características más interesantes del iLOADER, la cual, la hace una
aplicación única en su tipo; es la implementación de la herramienta servidor de
datos OPC®.
Para disfrutar de todo estos beneficios, Ud. sólo tendrá que enviar y recibir sus
datos de forma serial – USB al computador y el software iLOADER se encargará del
resto.
Figura B.9. Gráfica de datos en modo deslizante (arriba) y modo comprimido (abajo).
Haciendo clic sobre la celda “Tipo de Dato” se puede seleccionar el tipo canónico
de las variables entre las opciones: Boolean, Entero, Double y String. El mecanismo
de funcionamiento de las variables de salida es el siguiente:
1. El servidor OPC expone a los clientes OPC los nombres y tipos de las
variables de salida disponibles.
2. La aplicación “cliente” envía el valor de la salida al servidor OPC del
iLOADER.
Las variables de entrada se identifican mediante “Ex”, donde x es un número 3. El servidor OPC actualiza internamente el valor de la variable.
entero en el rango de 0 al 19. El nombre de cada variable es visible para los clientes
OPC® que hagan uso del servidor dentro de una carpeta llamada “Entradas”. 4. El microcontrolador PIC® debe enviar una solicitud de lectura de la
variable de salida que requiere. Por ejemplo, para leer la variable “S0” el
Haciendo clic sobre la celda “Tipo de Dato” se puede escoger la forma canónica PIC® debe enviar al iLOADER: “S0”, 13
de las variables, por ejemplo: Boolean, Entero, Double y String. La celda “Valor” 5. El servidor procesa la solicitud de lectura y envía al PIC® el último valor
puede ser editada de forma manual. Al recibir el valor de la variable enviada por el disponible de la variable utilizando el siguiente formato:
microcontrolador PIC®, éste se actualizará en forma inmediata en la celda
denominada “Valor”. Nombre Variable , Valor , 13
Para enviar un dato desde el microcontrolador PIC® al servidor OPC, de utiliza 6. El Microcontrolador PIC® recibirá la información (variable) enviada por el
el siguiente formato: PC.
Nombre Variable , Valor , 13
Presione el botón “Escribir” para iniciar el proceso de grabación. Una barra de Cargue el programa UART_01.hex al microcontrolador siguiendo las indicaciones
progreso le indicará el desarrollo de la operación y al finalizar de forma satisfactoria dadas en la sección anterior. Todos los programas utilizados en esta parte se
el ícono de grabación exitosa aparecerá en parte inferior de la pantalla. encuentran se dentro del CD que acompaña al iLOADER en la carpeta de instalación
del software en su computador. Directorio: “\16_Uart_Scope_OPC”.
Durante la ejecución, se le solicita al usuario que introduzca valores por medio ' El comando 0 hará una limpieza de pantalla y colocará el cursor
del teclado. Para ello escriba el valor en la casilla “Enviar String” y presione ' en la primera posición de la pantalla arriba y a la izquierda.
“Enviar”. Al hacer esto, los valores escritos por usted ya sean del tipo texto (String) ' Comando 0 (Clear)
o numéricos serán enviados al microcontrolador PIC®. HRSOut 0
HRSOut "Este programa presenta los valores de i",13
HRSOut "en formato Decimal, Hexadecimal y binario",13
HRSOut "-----------------------------------------",13
HRSOut 9,"DEC i", 9, "HEX i", 9, "BIN i",13
HRSOut "-----------------------------------------",13
En este programa vemos como desplegar datos en forma de texto, por ejemplo:
la instrucción envía el texto encerrado entre comillas seguido del comando 13.
' -------------------------------------------------------------------
' Programa: UART_02
' Visualización lineal de datos ...
' -------------------------------------------------------------------
Device = 16F876 ' Microcontrolador Utilizado
XTAL 20 ' Velocidad del Reloj (resonador) Figura B.18. Ejecución del programa UART_02.hex
Dim i As Byte ' Variable auxiliar
Las recomendaciones generales para el manejo del SCOPE son las siguientes: Paso No.2. Iniciar Herramienta UART/SCOPE
1. El programa debe incluir un retardo al principio del mismo de 1000 ms, Haga clic en el menú UART/SCOPE. Se desplegará una pantalla como la
necesario para sincronizar correctamente los datos. mostrada de la figura B.19. Coloque el selector de modo de trabajo en la posición
“SCOPE” (a la derecha).
2. Se pueden graficar datos tipo entero o flotante. Al trabajar con números en
flotante debe considerarse la configuración regional del computador y ajustar Paso No.3. Conexión con el PIC®
el símbolo decimal en punto “.” mientras el símbolo de separación de miles
debe ser una coma “,”. Seleccione la velocidad de comunicación a 19200 baudios y oprima conectar. La
figura B.19, muestra la ejecución del programa SCOPE_01.hex
3. La herramienta permite trabajar con 8 canales, los cuales, se identifican como
“C0”, “C1”, “C2”, “C3”, “C4”, “C5”, “C6” y “C7”.
En la parte inferior de la pantalla, podemos observar tres indicadores numéricos,
4. El formato usado para enviar datos a un canal del SCOPE, es el siguiente: los cuales, reflejan el último valor graficado en los canales C0, C1 y C2,
respectivamente.
“Cx”, DEC Valor, 13 con x = 1,2,3,4,5,6 y/o 7
' -------------------------------------------------------------------
' Programa: SCOPE_01
' Visualización de datos Enteros a través del canal "C0" del SCOPE ..
' -------------------------------------------------------------------
Device = 16F876 ' Microcontrolador Utilizado
XTAL 20 ' Velocidad del Reloj (resonador)
Main:
For i = 0 To 999
HRSOut "C0", DEC3 i ,13
Next i
GoTo Main
Figura B.20. Programa SCOPE_04.bas graficando dos señales de diferentes tipo canónico. Figura B.21. Programa SCOPE_05.bas graficando en los 8 canales en forma simultánea.
En esta sección, describiremos el manejo y uso del servidor de datos OPC incluido Nota: La velocidad de conexión estará establecida por la velocidad de comunicación
en el iLOADER. Con el servidor de datos OPC usted podrá exportar – importar serial utilizada por usted en el programa realizado, en los ejemplos aquí incluidos se
variables desde su microcontrolador a cualquier programa con capacidad de manejo utiliza una velocidad de 19200 Baudios. A continuación se presenta el código fuente
de datos a través del protocolo OPC®, ya sea en la computadora local o en del programa OPC_01.bas codificado en Basic PROTON®.
cualquier otra computadora instalada en red, local y/o extendida. Estos programas
podrán ser, entre otros: MatLAB®, LabView® y aplicaciones realizadas en VB6®, ' -------------------------------------------------------------------
Excel®, .NET. ' Programa: OPC_01
' Envío de datos a las variables "E0", E1" y "E2" del Servidor OPC
' -------------------------------------------------------------------
Paso No.1. Cargar el Programa e inicializar el servidor Device = 16F876 ' Micro Utilizado
XTAL 20 ' Velocidad del Reloj
Siguiendo las instrucciones previas programe el código OPC_01.bas en el PIC®. Dim i As Byte ' Variables auxiliar
Seguidamente presione en el menú principal del programa iLOADER la opción Dim a As Byte
“Servidor OPC”. Se mostrará la pantalla de configuración/trabajo del Servidor OPC Declare HSERIAL_BAUD 19200 ' Velocidad de conexión al PC
tal como se muestra en la figura B.22.
Main:
For i = 0 To 127
a = Sin i
HRSOut "E0", Dec (i+127), 13
HRSOut "E1", Dec a, 13
HRSOut "E2", Dec ((i/64*127)+256), 13
Next
GoTo Main
' -------------------------------------------------------------------
' Programa: OPC_02.bas
' Porgrama para probar el servidor OPC
' -------------------------------------------------------------------
Device = 16F876 ' Micro Utilizado
XTAL 20 ' Velocidad del Reloj
Dim i As Byte
Dim J As DWord ' Variables Auxiliares
HRSOut "E0", Dec i, 13 En total el servidor OPC puede procesar hasta veinte (20) variables de entrada y
(20) variables de salida, cantidad suficiente como para manejar un pequeño
El PIC® solicita al servidor OPC el valor de la variable de salida S0 y espera la proceso de control industrial.
respuesta durante 100 ms. En caso de no existir respuesta del servidor, el programa
continúa en la etiqueta TIMEOUT.
HRSOut "S0", 13
HSerIn 100 , TIMEOUT,[Wait("S0") , Dec J]
HRSOut "S1", 13
HSerIn 100 , TIMEOUT1,[Wait("S1") , Dec J] Figura B.27. Estado de la aplicación OPC®. Estado del Servidor OPC®.
HRSOut "E2", Dec J, 13