1,088 113 8MB
Spanish; Castilian Pages 454 [452]
El presente libro tiene como objetivo brindar a sus lectores un punto de partida en la realización de proyectos con microcontroladores PIC usando un lenguaje de programación sencillo, el PIC Basic Pro. Para lograr este objetivo, el libro presenta circuitos basados en los microcontroladores PIC16F84A, el PIC16F877A y los PIC con interfaz USB PIC18F2550 y PIC18F4550 con su respectiva programación. El libro está dividido en 18 capítulos, donde se abordan diferentes temas como la descripción de los microcontroladores PIC, periféricos diversos de entrada y salida como visualizadores de 7 segmentos, pantallas de cristal líquido, conversores A/D y D/A, memorias seriales, teclados, transmisores y receptores de RF, GPS, motores de corriente continua, motores paso a paso bipolares y unipolares, servomotores, etapas de potencia, acondicionamiento de señal, además de interfaces de comunicación seriales con el computador como la popular RS232 y la USB usando el software Visual Basic de Microsoft.
Microcontroladores PIC con programación PBP
Omar Enrique Barra Zapata Franklin Barra Zapata
El libro contiene material adicional que podrá descargarse accediendo a la ficha del libro en www.ra-ma.es. Este material incluye todos los códigos de programa, tanto en Pic Basic Pro como en Visual Basic, archivos de simulación en Proteus y las hojas técnicas de cada uno de los dispositivos usados en este manual.
Microcontroladores PIC con programación PBP
Microcontroladores PIC con programación PBP
Omar Enrique Barra Zapata Franklin Barra Zapata
9 788499 640426
Desde www.ra-ma.es podrá descargarse material adicional.
9 788499 640426
Microcontroladores PIC con programación PBP
Microcontroladores PIC con programación PBP Ing. Omar Enrique Barra Zapata Ing. Franklin Barra Zapata
La ley prohíbe Copiar o Imprimir este libro
Microcontroladores PIC con programación PBP © Omar Enrique Barra Zapata, Franklin Barra Zapata © De la Edición Original en papel publicada por Editorial RA-MA ISBN de Edición en Papel: 978-84-9964-042-6 Todos los derechos reservados © RA-MA, S.A. Editorial y Publicaciones, Madrid, España. MARCAS COMERCIALES. Las designaciones utilizadas por las empresas para distinguir sus productos (hardware, software, sistemas operativos, etc.) suelen ser marcas registradas. RA-MA ha intentado a lo largo de este libro distinguir las marcas comerciales de los términos descriptivos, siguiendo el estilo que utiliza el fabricante, sin intención de infringir la marca y solo en beneficio del propietario de la misma. Los datos de los ejemplos y pantallas son ficticios a no ser que se especifique lo contrario. RA-MA es una marca comercial registrada. Se ha puesto el máximo empeño en ofrecer al lector una información completa y precisa. Sin embargo, RA-MA Editorial no asume ninguna responsabilidad derivada de su uso ni tampoco de cualquier violación de patentes ni otros derechos de terceras partes que pudieran ocurrir. Esta publicación tiene por objeto proporcionar unos conocimientos precisos y acreditados sobre el tema tratado. Su venta no supone para el editor ninguna forma de asistencia legal, administrativa o de ningún otro tipo. En caso de precisarse asesoría legal u otra forma de ayuda experta, deben buscarse los servicios de un profesional competente. Reservados todos los derechos de publicación en cualquier idioma. Según lo dispuesto en el Código Penal vigente ninguna parte de este libro puede ser reproducida, grabada en sistema de almacenamiento o transmitida en forma alguna ni por cualquier procedimiento, ya sea electrónico, mecánico, reprográfico, magnético o cualquier otro sin autorización previa y por escrito de RA-MA; su contenido está protegido por la Ley vigente que establece penas de prisión y/o multas a quienes, intencionadamente, reprodujeren o plagiaren, en todo o en parte, una obra literaria, artística o científica. Editado por: RA-MA, S.A. Editorial y Publicaciones Calle Jarama, 33, Polígono Industrial IGARSA 28860 PARACUELLOS DE JARAMA, Madrid Teléfono: 91 658 42 80 Fax: 91 662 81 39 Correo electrónico: [email protected] Internet: www.ra-ma.es y www.ra-ma.com Maquetación y diseño portada: Antonio García Tomé ISBN: 978-84-9964-636-7 E-Book desarrollado en España en Noviembre de 2015
Descarga de Material Adicional Este E-book tiene disponible un material adicional que complementa el contenido del mismo. Este material se encuentra disponible en nuestra página Web www.ra-ma.com. Para descargarlo debe dirigirse a la ficha del libro de papel que se corresponde con el libro electrónico que Ud. ha adquirido. Para localizar la ficha del libro de papel puede utilizar el buscador de la Web. Una vez en la ficha del libro encontrará un enlace con un texto similar a este: “Descarga del material adicional del libro” Pulsando sobre este enlace, el fichero comenzará a descargarse. Una vez concluida la descarga dispondrá de un archivo comprimido. Debe utilizar un software descompresor adecuado para completar la operación. En el proceso de descompresión se le solicitará una contraseña, dicha contraseña coincide con los 13 dígitos del ISBN del libro de papel (incluidos los guiones). Encontrará este dato en la misma ficha del libro donde descargó el material adicional. Si tiene cualquier pregunta no dude en ponerse en contacto con nosotros en la siguiente dirección de correo: [email protected]
A nuestros padres celestiales y nuestro hermano Jesús, que iluminan cada uno de los momentos de nuestra vida junto a nuestros amados padres en la Tierra, Sara y Francisco, que nos brindan todo su amor, cariño y apoyo.
ÍNDICE INTRODUCCIÓN .............................................................................................................. 17 CAPÍTULO 1. MICROCONTROLADORES ................................................................. 19 1.1 MICROCONTROLADOR ......................................................................................... 19 1.1.1 Controlador y microcontrolador.......................................................................... 19 1.1.2 Diferencia entre microprocesador y microcontrolador ....................................... 21 1.1.3 Aplicaciones de los microcontroladores ............................................................. 22 1.1.4 El mercado de los microcontroladores ................................................................ 22 1.1.5 ¿Qué microcontrolador emplear?........................................................................ 24 1.2 RECURSOS COMUNES A TODOS LOS MICROCONTROLADORES ................ 26 1.2.1 Arquitectura básica.............................................................................................. 26 1.2.2 El procesador o UCP ........................................................................................... 27 1.2.3 Memoria .............................................................................................................. 28 1.2.4 Puertas de entrada y salida .................................................................................. 30 1.2.5 Reloj principal ..................................................................................................... 30 1.3 RECURSOS ESPECIALES........................................................................................ 31 1.3.1 Temporizadores o Timers.................................................................................... 32 1.3.2 Perro guardián o Watchdog ................................................................................. 32 1.3.3 Protección ante fallo de alimentación o Brownout ............................................. 32 1.3.4 Estado de reposo o de bajo consumo .................................................................. 32 1.3.5 Conversor de analógico a digital (A/D) .............................................................. 33 1.3.6 Conversor de digital a analógico (D/A) .............................................................. 33 1.3.7 Comparador analógico ........................................................................................ 33 1.3.8 Modulador de anchura de impulsos o PWM....................................................... 33
8 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
1.3.9 Puertas de Entrada/Salida (E/S) digitales............................................................ 33 1.3.10 Puertas de comunicación................................................................................... 34 1.4 HERRAMIENTAS PARA EL DESARROLLO DE APLICACIONES..................... 34 1.4.1 Desarrollo del software ....................................................................................... 35 1.4.2 Depuración .......................................................................................................... 35 1.4.3 Grabación ............................................................................................................ 36 CAPÍTULO 2. MICROCONTROLADORES PIC ......................................................... 39 2.1 MICROCONTROLADORES PIC ............................................................................. 39 2.2 CARACTERÍSTICAS COMUNES............................................................................ 40 2.2.1 Arquitectura......................................................................................................... 40 2.2.2 Segmentación ...................................................................................................... 40 2.2.3 Formato de las instrucciones ............................................................................... 41 2.2.4 Juego de instrucciones......................................................................................... 41 2.2.5 Todas las instrucciones son ortogonales ............................................................. 41 2.2.6 Arquitectura basada en un “banco de registros” ................................................. 41 2.2.7 Diversidad de modelos de microcontroladores con prestaciones y recursos diferentes ............................................................................................................. 41 2.2.8 Herramientas de soporte potentes y económicas ................................................ 41 2.3 LAS GAMAS DE PIC................................................................................................. 42 2.3.1 La gama enana: PIC12C(F)XXX de 8 patitas..................................................... 42 2.3.2 Gama baja o básica: PIC16C5X con instrucciones de 12 bits ............................ 43 2.3.3 Gama media: PIC16CXXX con instrucciones de 14 bits ................................... 45 2.3.4 Gama alta: PIC17CXXX con instrucciones de 16 bits ....................................... 47 2.3.5 Gama alta: PIC18CXXXX con instrucciones de 16 bits .................................... 48 2.4 MICROCONTROLADOR PIC16F84........................................................................ 48 2.4.1 Arquitectura interna............................................................................................. 48 2.4.2 Pines y funciones................................................................................................. 50 2.4.2.1 Puerto A..................................................................................................................... 50 2.4.2.2 Puerto B ..................................................................................................................... 51 2.4.2.3 Pines adicionales........................................................................................................ 51
2.5 MICROCONTROLADOR PIC16F877A ................................................................... 52 2.5.1 Arquitectura interna............................................................................................. 52 2.5.2 Pines y funciones................................................................................................. 53 2.5.2.1 Puerto A..................................................................................................................... 54 2.5.2.2 Puerto B ..................................................................................................................... 55 2.5.2.3 Puerto C ..................................................................................................................... 55 2.5.2.4 Puerto D..................................................................................................................... 56 2.5.2.5 Puerto E ..................................................................................................................... 56
RA-MA
ÍNDICE 9
2.5.2.6 Pines adicionales........................................................................................................ 57
2.6 MICROCONTROLADOR PIC18F2550.................................................................... 57 2.6.1 Arquitectura interna............................................................................................. 57 2.6.2 Pines y funciones................................................................................................. 58 2.6.2.1 Puerto A..................................................................................................................... 59 2.6.2.2 Puerto B ..................................................................................................................... 60 2.6.2.3 Puerto C ..................................................................................................................... 60 2.6.2.4 Puerto E ..................................................................................................................... 61 2.6.2.5 Pines adicionales........................................................................................................ 61
2.7 MICROCONTROLADOR PIC18F4550.................................................................... 61 2.7.1 Arquitectura Interna ............................................................................................ 61 2.7.2 Pines y funciones................................................................................................. 62 2.7.2.1 Puerto A..................................................................................................................... 63 2.7.2.2 Puerto B ..................................................................................................................... 64 2.7.2.3 Puerto C ..................................................................................................................... 65 2.7.2.4 Puerto D..................................................................................................................... 65 2.7.2.5 Puerto E ..................................................................................................................... 66 2.7.2.6 Pines adicionales........................................................................................................ 66
CAPÍTULO 3. COMANDOS PIC BASIC PRO .............................................................. 67 3.1 @................................................................................................................................. 67 3.2 ADCIN........................................................................................................................ 68 3.3 BRANCH.................................................................................................................... 68 3.4 BUTTON .................................................................................................................... 69 3.5 CALL .......................................................................................................................... 71 3.6 CLEAR ....................................................................................................................... 71 3.7 CLEARWDT .............................................................................................................. 72 3.8 COUNT....................................................................................................................... 72 3.9 DATA ......................................................................................................................... 72 3.10 DTMFOUT ............................................................................................................... 73 3.11 EEPROM .................................................................................................................. 75 3.12 END .......................................................................................................................... 75 3.13 FOR… NEXT ........................................................................................................... 75 3.14 FREQOUT ................................................................................................................ 76 3.15 GOSUB ..................................................................................................................... 77 3.16 GOTO ....................................................................................................................... 77 3.17 HIGH......................................................................................................................... 78 3.18 I2CREAD.................................................................................................................. 78 3.19 I2CWRITE................................................................................................................ 79
10 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
3.20 IF… THEN ............................................................................................................... 80 3.21 INPUT....................................................................................................................... 81 3.22 LCDIN ...................................................................................................................... 81 3.23 LCDOUT .................................................................................................................. 82 3.24 LOW ......................................................................................................................... 83 3.25 NAP........................................................................................................................... 83 3.26 ON INTERRUPT ...................................................................................................... 84 3.27 OUTPUT................................................................................................................... 85 3.28 PAUSE...................................................................................................................... 85 3.29 PAUSEUS................................................................................................................. 86 3.30 POT ........................................................................................................................... 86 3.31 PULSIN..................................................................................................................... 87 3.32 PULSOUT................................................................................................................. 87 3.33 PWM ......................................................................................................................... 88 3.34 RANDOM................................................................................................................. 89 3.35 READ........................................................................................................................ 89 3.36 RETURN................................................................................................................... 89 3.37 REVERSE................................................................................................................. 90 3.38 SELECT CASE......................................................................................................... 90 3.39 SERIN2 ..................................................................................................................... 91 3.40 SEROUT2 ................................................................................................................. 93 3.41 SHIFTIN ................................................................................................................... 94 3.42 SHIFTOUT ............................................................................................................... 96 3.43 SLEEP....................................................................................................................... 97 3.44 SWAP ....................................................................................................................... 98 3.45 TOOGLE................................................................................................................... 98 3.46 TRIS.......................................................................................................................... 98 3.47 WHILE…WEND...................................................................................................... 99 3.48 WRITE.................................................................................................................... 100 CAPÍTULO 4. INSTALACIÓN DE SOFTWARE........................................................ 101 4.1 DESCRIPCIÓN DE LAS HERRAMIENTAS DE DESARROLLO ........................ 101 4.1.1 El Editor CodeDesigner Lite ............................................................................. 101 4.1.2 El Compilador PicBasic Pro.............................................................................. 101 4.1.3 El Programador EPIC........................................................................................ 102 4.2 INSTALACIÓN Y CONFIGURACIÓN DE LAS HERRAMIENTAS DE DESARROLLO ....................................................................................................... 103 4.2.1 Paso 1: instalación de las herramientas de desarrollo ....................................... 103
RA-MA
ÍNDICE 11
4.2.2 Paso 2: configuración de las herramientas de desarrollo .................................. 122 4.3 EMPLEO DE LAS HERRAMIENTAS PARA EL DESARROLLO DE UNA APLICACIÓN .......................................................................................................... 124 4.3.1 Paso 1: idea clara de lo que se va a desarrollar ................................................. 124 4.3.2 Paso 2: edición del programa ............................................................................ 125 4.3.3 Paso 3: compilación del programa .................................................................... 126 4.3.4 Paso 4: grabación del microcontrolador............................................................ 127 4.3.5 Paso 5: prueba de la aplicación ......................................................................... 128 CAPÍTULO 5. CONEXIÓN DEL PUERTO SERIE CON VISUAL BASIC ............. 129 5.1 EL PUERTO SERIE RS-232C.................................................................................. 129 5.2 MICROSOFT VISUAL BASIC 6.0.......................................................................... 131 5.3 PRUEBAS CON CABLE PARA PUERTO SERIE ................................................. 132 5.3.1 Construcción del cable para puerto serie .......................................................... 132 5.3.2 Primera prueba .................................................................................................. 133 5.3.3 Segunda prueba ................................................................................................. 137 5.3.4 Tercera Prueba................................................................................................... 140 5.4 PRUEBAS DE CONEXIÓN ENTRE COMPUTADOR Y MICROCONTROLADOR ....................................................................................... 143 5.4.1 Transmisión de datos al computador desde el microcontrolador (PIC-PC)...... 145 5.4.1.1 Primera prueba......................................................................................................... 145 5.4.1.1.1 Utilizando el Hyper Terminal......................................................................146 5.4.1.1.2 Utilizando Visual Basic...............................................................................151 5.4.1.2 Segunda prueba........................................................................................................ 152 5.4.1.2.1 Prueba con HyperTerminal..........................................................................152 5.4.1.2.2 Prueba con Visual Basic..............................................................................156 5.4.1.3 Tercera prueba ......................................................................................................... 158 5.4.1.3.1 Prueba con HyperTerminal..........................................................................159 5.4.1.3.2 Prueba con Visual Basic..............................................................................160
5.4.2 Transmisión de datos al microcontrolador desde el computador (PC-PIC)...... 161 5.4.2.1 Prueba con Visual Basic .......................................................................................... 163
CAPÍTULO 6. VISUALIZACIÓN DE DATOS ............................................................ 167 6.1 VISUALIZADOR DE 7 SEGMENTOS ................................................................... 167 6.1.1 Funcionamiento del visualizador de 7 segmentos............................................. 167 6.1.2 Interfaz con el microcontrolador ....................................................................... 169 6.2 DECODIFICADOR 7447 ......................................................................................... 171 6.2.1 Funcionamiento del decodificador 7447........................................................... 172 6.2.2 Interfaz con el microcontrolador ....................................................................... 173 6.3 PANTALLA DE CRISTAL LÍQUIDO (LCD)......................................................... 176 6.3.1 Funcionamiento de la pantalla de cristal líquido............................................... 177
12 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
6.3.2 Interfaz con el microcontrolador ....................................................................... 178 CAPÍTULO 7. ENTRADAS Y SALIDAS DIGITALES ............................................... 183 7.1 ENTRADAS DIGITALES ....................................................................................... 183 7.1.1 Acondicionamiento de señal: interfaz electrónica ............................................ 187 7.1.2 Interruptor electrónico....................................................................................... 189 7.1.3 Entradas digitales de 8 bits................................................................................ 193 7.1.4 Usando el 74151................................................................................................ 195 7.2 SALIDAS DIGITALES............................................................................................ 198 7.2.1 Acondicionamiento de señal: interfaz electrónica ............................................ 198 7.2.2 Salidas digitales de 8 bits .................................................................................. 202 7.2.3 Usando el 74164................................................................................................ 205 CAPÍTULO 8. CONVERSOR A/D ................................................................................. 211 8.1 CONVERSOR ADC0804 ......................................................................................... 211 8.1.1 Funcionamiento del ADC0804 ......................................................................... 212 8.1.2 Interfaz con el microcontrolador ....................................................................... 213 8.1.3 Traducir a voltios .............................................................................................. 215 8.2 CONVERSOR ADC08031 ....................................................................................... 218 8.2.1 Funcionamiento del ADC08031 ....................................................................... 219 8.2.2 ¿Cómo programar de acuerdo con el diagrama de tiempo?.............................. 219 8.2.3 Interfaz con el microcontrolador ....................................................................... 220 8.2.4 Traducir a voltios .............................................................................................. 222 8.3 CONVERSOR ADC08032 ....................................................................................... 223 8.3.1 Funcionamiento del ADC08032 ....................................................................... 223 8.3.2 ¿Cómo programar de acuerdo con el diagrama de tiempo?.............................. 225 8.3.3 Interfaz con el microcontrolador ....................................................................... 225 8.3.4 Traducir a voltios .............................................................................................. 230 8.4 MULTIPLEXOR ANALÓGICO 4051..................................................................... 232 8.4.1 Lectura de 4 canales analógicos ........................................................................ 233 8.4.2 Lectura de 8 canales analógicos ........................................................................ 236 8.5 CONVERSOR A/D INTERNO ................................................................................ 237 8.5.1 Funcionamiento del conversor interno del PIC16F877A ................................. 238 8.5.2 Programación del A/D interno para la lectura de un canal ............................... 239 8.5.3 Programación del A/D interno para la lectura de tres canales .......................... 241 8.5.4 Programación del A/D interno para la lectura de ocho canales ........................ 246 CAPÍTULO 9. CONVERSOR D/A ................................................................................. 249 9.1 COMBINACIÓN R-2R ............................................................................................ 249
RA-MA
ÍNDICE 13
9.2 CONVERSOR DAC0808 ......................................................................................... 251 9.2.1 Funcionamiento del DAC0808 ......................................................................... 251 9.2.2 Interfaz con el microcontrolador ....................................................................... 252 9.2.3 Traducir a voltios .............................................................................................. 253 9.3 CONVERSOR DAC0800 ......................................................................................... 256 9.3.1 Funcionamiento del DAC0800 ......................................................................... 257 9.3.2 Interfaz con el microcontrolador ....................................................................... 257 9.3.3 Traducir a voltios .............................................................................................. 258 9.4 POTENCIÓMETRO DIGITAL DS1267.................................................................. 261 9.4.1 Funcionamiento del DS1267............................................................................. 261 9.4.2 Interfaz con el microcontrolador ....................................................................... 262 9.4.3 Traducir a voltios .............................................................................................. 264 9.5 MODULACIÓN POR ANCHO DE PULSO: PWM ................................................ 268 CAPÍTULO 10. MEMORIAS SERIALES Y PROTOCOLO I2C .............................. 275 10.1 MEMORIAS SERIALES ....................................................................................... 275 10.1.1 Características de las memorias seriales ......................................................... 275 10.1.2 Aplicaciones .................................................................................................... 276 10.2 MEMORIA SERIAL 24LC256 .............................................................................. 277 10.2.1 Características del bus..................................................................................... 278 10.2.2 Direccionamiento y operación de la memoria ................................................ 279 10.2.3 Operación de escritura..................................................................................... 279 10.2.4 Operación de lectura........................................................................................ 280 10.2.5 Descripción de pines ....................................................................................... 281 10.3 INTERFAZ CON EL MICROCONTROLADOR .................................................. 282 10.3.1 Lectura de la memoria 24LC256..................................................................... 282 10.3.2 Escritura de la memoria 24LC256 .................................................................. 284 10.4 APLICACIÓN CON EL MICROCONTROLADOR ............................................. 284 CAPÍTULO 11. COMUNICACIÓN INALÁMBRICA................................................. 287 11.1 SISTEMA ELECTRÓNICO DE COMUNICACIÓN ............................................ 287 11.2 TRANSMISIÓN DE DATOS................................................................................. 288 11.3 TRANSMISOR DE RF TWS-434 .......................................................................... 289 11.3.1 Diagrama de pines del transmisor TWS-434 .................................................. 290 11.4 RECEPTOR DE RF RWS-434 ............................................................................... 290 11.4.1 Diagrama de pines del receptor RWS-434...................................................... 291 11.5 ANTENAS PARA EL TRANSMISOR Y EL RECEPTOR ................................... 291 11.6 CODIFICADOR Y DECODIFICADOR DE 4 BITS ............................................. 292
14 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
11.6.1 Codificador HT-12E y decodificador HT-12D ............................................... 292 11.6.2 Diagrama de pines del codificador HT-12E.................................................... 292 11.6.3 Diagrama de pines del codificador HT-12D ................................................... 293 11.7 CODIFICADOR Y DECODIFICADOR DE 8 BITS ............................................. 293 11.7.1 Codificador HT-640 y decodificador HT-648L.............................................. 293 11.7.2 Diagrama de pines del codificador HT-640 .................................................... 294 11.7.3 Diagrama de pines del codificador HT-648L.................................................. 294 11.8 CIRCUITOS DE PRUEBA DE TRANSMISIÓN Y RECEPCIÓN PARALELA.. 295 11.9 CIRCUITOS DE PRUEBA DE TRANSMISIÓN Y RECEPCIÓN SERIE............ 297 11.9.1 Prueba con Visual Basic.................................................................................. 300 CAPÍTULO 12. MOTOR DE CORRIENTE CONTINUA .......................................... 301 12.1 MOTOR DE CORRIENTE CONTINUA ............................................................... 301 12.2 CIRCUITOS DE CAMBIO DE GIRO.................................................................... 302 12.2.1 Circuito puente en H ....................................................................................... 302 12.2.2 Circuito basado en relé.................................................................................... 304 12.2.3 Conexión de motores de c.c. y microcontrolador para un cambio de giro ..... 306 12.3 CONTROL DE VELOCIDAD ............................................................................... 310 12.3.1 Conexión de motores de c.c. y microcontrolador para variar la velocidad..... 311 CAPÍTULO 13. MOTORES PASO A PASO................................................................. 317 13.1 MOTOR PASO A PASO ........................................................................................ 317 13.2 MOTOR PASO A PASO BIPOLAR ...................................................................... 318 13.2.1 Circuito integrado L293D ............................................................................... 319 13.2.2 Circuito de control de motor PaP bipolar con L293D .................................... 320 13.2.3 Control del motor PaP bipolar con el microcontrolador ................................. 321 13.3 MOTOR PASO A PASO UNIPOLAR ................................................................... 332 13.3.1 Circuito integrado ULN2803 .......................................................................... 332 13.3.2 Circuito de control de motor PaP unipolar con ULN2803.............................. 333 13.3.3 Configuración con transistores y diodos ......................................................... 335 13.3.4 Control del motor PaP unipolar con el microcontrolador ............................... 335 CAPÍTULO 14. SERVOMOTOR ................................................................................... 347 14.1 SERVOMOTOR ..................................................................................................... 347 14.2 ESTRUCTURA INTERNA Y FUNCIONAMIENTO ........................................... 348 14.2.1 Control de posición ......................................................................................... 349 14.2.2 Utilización ....................................................................................................... 350 14.2.3 Terminales....................................................................................................... 351 14.2.4 Control del servomotor con el microcontrolador ............................................ 351
RA-MA
ÍNDICE 15
CAPÍTULO 15. RELOJ DE TIEMPO REAL ............................................................... 363 15.1 CIRCUITO INTEGRADO DS1302 ....................................................................... 363 15.1.1 Funcionamiento del DS1302........................................................................... 364 15.1.2 Resumen de comandos del DS1302................................................................ 365 15.1.3 Interfaz con el microcontrolador ..................................................................... 368 CAPÍTULO 16. TECLADOS........................................................................................... 371 16.1 EL TECLADO MATRICIAL ................................................................................. 371 16.1.1 Funcionamiento del teclado matricial ............................................................. 372 16.1.2 Interfaz con el microcontrolador ..................................................................... 373 16.2 CIRCUITO INTEGRADO 74C922 ........................................................................ 376 16.2.1 Conexión del teclado matricial 4x4................................................................. 377 16.2.1 Interfaz con el microcontrolador ..................................................................... 378 CAPÍTULO 17. GPS......................................................................................................... 381 17.1 SISTEMA DE POSICIONAMIENTO GLOBAL .................................................. 381 17.2 PARTES DEL SISTEMA DE POSICIONAMIENTO GLOBAL .......................... 382 17.3 FUNCIONAMIENTO DEL GPS ........................................................................... 383 17.4 APLICACIONES DEL GPS................................................................................... 384 17.5 MÓDULO RECEPTOR DE GPS DE PARALLAX ............................................... 385 17.5.1 Diagrama de pines del GPS de Parallax.......................................................... 386 17.5.2 Lista de comandos del GPS de Parallax.......................................................... 386 17.5.3 Interfaz con el microcontrolador ..................................................................... 387 17.6 MANIPULANDO EL GOOGLE MAPS ................................................................ 394 CAPÍTULO 18. USB......................................................................................................... 399 18.1 BUS UNIVERSAL EN SERIE (USB) .................................................................... 399 18.1.1 Características de transmisión......................................................................... 401 18.1.2 Diagrama de pines del conector USB A ......................................................... 401 18.1.3 Conectores y especificaciones......................................................................... 402 18.2 HERRAMIENTAS DE DESARROLLO PARA APLICACIÓN USB................... 403 18.2.1 MPLAB IDE ................................................................................................... 403 18.2.2 MicroCode Studio ........................................................................................... 412 18.3 CREACIÓN DE APLICACIÓN USB .................................................................... 426 18.3.1 Generación del proyecto.................................................................................. 426 18.3.2 Circuito básico de comunicación por USB por medio del PIC18F4550 ........ 431 18.3.3 Apertura del proyecto...................................................................................... 432 18.3.4 Desarrollo de aplicación: entrada y salida de 8 bits........................................ 437
16 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
BIBLIOGRAFÍA............................................................................................................... 445 MATERIAL ADICIONAL .............................................................................................. 447 ÍNDICE ALFABÉTICO................................................................................................... 449
INTRODUCCIÓN Hace ya algunos años, la idea de construir un libro sobre el mundo de los microcontroladores estaba rondando por mi cabeza, y nos preguntamos mi hermano Franklin y yo: ¿por qué no comenzar a ordenar y recopilar lo que hacemos en clase y plasmarlo en un libro? La respuesta fue construir un libro sobre microcontroladores, un tema de la Electrónica Digital, en la cual estamos inmersos, y empezamos con la tarea de reordenar la información que dictamos en clase y clasificarla en capítulos, que además iban creciendo de acuerdo con el avance de la tecnología, de tal modo que inicialmente pensábamos sólo llegar hasta los primeros 14 capítulos, pero luego se tuvieron que agregar 4 capítulos más debido al conocimiento de nuevos circuitos integrados y microcontroladores con nuevas interfaces como los PIC18F4550 y PIC18F2550. La tarea fue muy difícil y ardua, varias noches en vela y tomando bastante café hasta que, después de unos años, se culminó la última página y se dio inicio a la edición y posterior publicación del libro, cuya finalidad es brindarle al lector una guía para que diseñe y construya aplicaciones con microcontroladores, es decir, para que el lector pueda relacionar el microcontrolador con los diferentes dispositivos del mundo real, como señales físicas provenientes de sensores, motores de distintos tipos, sistemas de posicionamiento global o GPS, actuadores, pulsadores, e incluso interfaces con el computador como la serial clásica RS-232, o la que está de moda últimamente USB. Para una mejor explicación, el libro lo hemos divido en 18 capítulos, especificados en el índice, cada uno de ellos con temas específicos y con ejemplos prácticos fácilmente simulables en ISIS de PROTEUS, es más, usted puede recurrir al blog oficial del libro http://microcontroladores-pic-pbp.blogspot.com y desde allí descargar algunas simulaciones sin costo adicional, y desde luego comunicarse por
18 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
correo electrónico con los autores, donde podrá hacer consultas y dar sugerencias. Nuestros correos electrónicos son [email protected] u [email protected].
Agradecimientos Nos gustaría dar las gracias de manera especial a la Editorial RA-MA por confiar en nosotros y darnos la oportunidad de publicar nuestro primer libro. Nuestro especial agradecimiento a cada uno de los miembros de nuestra familia, por alentarnos a seguir y cumplir con nuestras metas, especialmente a nuestro hermano Javier, que nos incentivó a publicar el libro a nivel internacional, desde luego a nuestros colegas de la Escuela Profesional de Ingeniería Electrónica y Telecomunicaciones de nuestra querida Universidad Nacional de Piura, especialmente a los señores: Dr. Antenor Aliaga Zegarra, MSc. Juan Jacinto Sandoval, Ing. Edwin Ocas Infante, que nos brindaron sus aportes académicos. Nuestro agradecimiento a nuestros alumnos de los cursos de Microcontroladores y Proyecto y Diseño Electrónico de nuestra Escuela Profesional de Ingeniería Electrónica y Telecomunicaciones, que nos brindaron sus aportes. Por último, nos gustaría dar las gracias de forma muy especial y sincera a nuestros amados padres, Sara y Francisco, y a nuestras compañeras de toda la vida, Yaquilin y Guiliana, que siempre han estado en los momentos más difíciles y alegres de nuestra vida, dándonos su constante apoyo, amor, cariño y comprensión.
Ing. Omar Enrique Barra Zapata Ing. Franklin Barra Zapata
1Capítulo 1
MICROCONTROLADORES En el presente capítulo se darán las nociones básicas correspondientes a microcontroladores, y así conocer más sobre este componente que le servirá a usted para múltiples aplicaciones.
1.1 MICROCONTROLADOR 1.1.1 Controlador y microcontrolador Recibe el nombre de controlador el dispositivo que se emplea para el gobierno de uno o varios procesos. Por ejemplo, el controlador que regula el funcionamiento de un horno dispone de un sensor que mide constantemente su temperatura interna y, cuando traspasa los límites prefijados, genera las señales adecuadas que accionan los actuadores que intentan llevar el valor de la temperatura dentro del rango estipulado. Aunque el concepto de controlador ha permanecido invariable a través del tiempo, su implementación física ha variado frecuentemente. Hace tres décadas, los controladores se construían exclusivamente con componentes de lógica discreta, posteriormente se emplearon los microprocesadores, que se rodeaban de chips de memoria y dispositivos de E/S sobre una tarjeta de circuito impreso. En la actualidad, todos los elementos del controlador se han podido incluir en un chip, el cual recibe el nombre de microcontrolador. Realmente, el microcontrolador consiste en un sencillo pero completo computador contenido en el corazón de un circuito integrado (chip).
20 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
Un microcontrolador es un circuito integrado de alta escala de integración que incorpora la mayor parte de los elementos que configuran un controlador. Un microcontrolador dispone normalmente de los siguientes componentes: •
Procesador o UCP (Unidad Central de Proceso).
•
Memoria RAM para contener los datos.
•
Memoria para el programa tipo ROM/PROM/EPROM.
•
Líneas de E/S para comunicarse con el exterior.
•
Diversos módulos para el control de periféricos (temporizadores, puertas serie y paralelo, ADC o conversores analógico / digital, DAC o conversores digital / analógico, etc.).
•
Generador de impulso de reloj que sincronizan el funcionamiento de todo el sistema.
Los productos que para su regulación incorporan un microcontrolador disponen de las siguientes ventajas: •
Aumento de prestaciones: un mayor control sobre un determinado elemento representa una mejora considerable en el mismo.
•
Aumento de la fiabilidad: al reemplazar el microcontrolador por un elevado número de elementos disminuye el riesgo de averías y se precisan menos ajustes.
•
Reducción del tamaño en el producto acabado: la integración del microcontrolador en un chip disminuye el volumen, la mano de obra y los stocks.
•
Mayor flexibilidad: las características de control están programadas, por lo que su modificación sólo necesita cambios en el programa de instrucciones.
El microcontrolador es en definitiva un circuito integrado que incluye todos los componentes de un computador. Debido a su reducido tamaño, es posible montar el controlador en el propio dispositivo al que gobierna. En este caso el controlador recibe el nombre de “controlador empotrado” (embedded controller).
© RA-MA
CAPÍTULO 1. MICROCONTROLADORES 21
1.1.2 Diferencia entre microprocesador y microcontrolador El microprocesador es un circuito integrado que contiene la Unidad Central de Proceso (UCP), también llamada procesador, de un computador. La UCP está formada por la Unidad de Control, que interpreta las instrucciones, y el Camino de Datos, que las ejecuta. Los pines de un microprocesador sacan al exterior las líneas de sus buses de direcciones, datos y control, para permitir la conexión con la memoria y los módulos de Entrada/Salida y configurar un computador implementado por varios circuitos integrados. Se dice que un microprocesador es un sistema abierto porque su configuración es variable de acuerdo con la aplicación a la que se destine, en contraste con el microcontrolador. (Figura 1.1 y 1.2.).
Figura 1.1. Estructura de un sistema abierto basado en un microprocesador. La disponibilidad de los buses en el exterior permite que se configure a la medida de la aplicación
Si sólo se dispusiese de un modelo de microcontrolador, éste debería tener muy potenciados todos sus recursos para poder adaptarse a las exigencias de las diferentes aplicaciones. Esta potenciación supondría en muchos casos un despilfarro. En la práctica cada fabricante de microcontroladores oferta un elevado número de modelos diferentes, desde los más sencillos hasta los más poderosos. Es posible seleccionar la capacidad de las memorias, el número de líneas de Entrada/Salida, la cantidad y potencia de los elementos auxiliares, la velocidad de
22 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
funcionamiento, etc. Por todo ello, un aspecto muy destacado del diseño es la selección del microcontrolador que hay que utilizar.
Figura 1.2. El microcontrolador es un sistema cerrado. Todas las partes del computador están contenidas en su interior y sólo salen al exterior las líneas que gobiernan los periféricos
1.1.3 Aplicaciones de los microcontroladores Cada vez existen más productos que incorporan un microcontrolador con el fin de aumentar sustancialmente sus prestaciones, reducir su tamaño y coste, mejorar su fiabilidad y disminuir el consumo. Algunos fabricantes de microcontroladores superan el millón de unidades de un modelo determinado producidas en una semana. Este dato puede dar una idea de la masiva utilización de estos componentes. Los microcontroladores están siendo empleados en multitud de sistemas presentes en nuestra vida diaria, como pueden ser juguetes, horno microondas, frigoríficos, televisores, computadoras, impresoras, módems, el sistema de arranque del automóvil, instrumentación electrónica, control de sistemas en una nave espacial, etc. Una aplicación típica podría emplear varios microcontroladores para controlar pequeñas partes del sistema. Estos pequeños controladores podrían comunicarse entre ellos y con un procesador central, probablemente más potente, para compartir la información y coordinar sus acciones, como, de hecho, ocurre ya habitualmente en cualquier computador personal.
1.1.4 El mercado de los microcontroladores Aunque en el mercado de la microinformática la mayor atención la acaparan los desarrollos de los microprocesadores, lo cierto es que se venden cientos de microcontroladores por cada microprocesador.
© RA-MA
CAPÍTULO 1. MICROCONTROLADORES 23
Existe una gran diversidad de microcontroladores. Quizá la clasificación más importante sea entre microcontroladores de 4, 8, 16 ó 32 bits. Aunque las prestaciones de los microcontroladores de 16 y 32 bits son superiores a los de 4 y 8 bits, la realidad es que los microcontroladores de 8 bits dominan el mercado y los de 4 bits se resisten a desaparecer. La razón de esta tendencia es que los microcontroladores de 4 y 8 bits son apropiados para la gran mayoría de las aplicaciones, lo que hace absurdo emplear microcontroladores más potentes y consecuentemente más caros. Uno de los sectores que más tira del mercado del microcontrolador es el mercado automovilístico. De hecho, algunas de las familias de microcontroladores actuales se desarrollaron pensando en este sector, y son modificadas posteriormente para adaptarse a sistemas más genéricos. El mercado del automóvil es además uno de los más exigentes: los componentes electrónicos deben operar bajo condiciones extremas de vibraciones, choques, ruido, etc. y seguir siendo fiables. El fallo de cualquier componente en un automóvil puede ser el origen de un accidente. En cuanto a las técnicas de fabricación, cabe decir que prácticamente la totalidad de los microcontroladores actuales se fabrican con tecnología CMOS (Complementary Metal Oxide Semiconductor). Esta tecnología supera a las técnicas anteriores por su bajo consumo y alta inmunidad al ruido. La distribución de las ventas según su aplicación es la siguiente: •
Una tercera parte se absorbe en las aplicaciones relacionadas con los computadores y sus periféricos.
•
La cuarta parte se utiliza en las aplicaciones de consumo (juegos, TV, vídeo, electrodomésticos, etc.).
•
El 16% de las ventas mundiales se destinó al área de las comunicaciones.
•
Otro 16% fue empleado en aplicaciones industriales.
•
El resto de los microcontroladores vendidos en el mundo, aproximadamente un 10%, fueron adquiridos por las industrias de automoción.
También los modernos microcontroladores de 32 bits van afianzando sus posiciones en el mercado, siendo las áreas de más interés el procesamiento de imágenes, las comunicaciones, las aplicaciones militares, los procesos industriales y el control de los dispositivos de almacenamiento masivo de datos.
24 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
1.1.5 ¿Qué microcontrolador emplear? A la hora de escoger el microcontrolador que hay que emplear en un diseño concreto hay que tener en cuenta multitud de factores, como la documentación y herramientas de desarrollo disponibles y su precio, la cantidad de fabricantes que lo producen y por supuesto las características del microcontrolador (tipo de memoria de programa, número de temporizadores, interrupciones, etc.). Costes. Como es lógico, los fabricantes de microcontroladores compiten duramente para vender sus productos. Y no les va demasiado mal ya que sin hacer demasiado ruido venden 10 veces más microcontroladores que microprocesadores. Para que nos hagamos una idea, para el fabricante que usa el microcontrolador en su producto una diferencia de precio en el microcontrolador de algunos soles o dólares es importante (el consumidor deberá pagar además el coste del empaquetado, el de los otros componentes, el diseño del hardware y el desarrollo del software). Si el fabricante desea reducir costes debe tener en cuenta las herramientas de apoyo con que va a contar: emuladores, simuladores, ensambladores, compiladores, etc. Es habitual que muchos de ellos siempre se decanten por microcontroladores pertenecientes a una única familia. Aplicación. Antes de seleccionar un microcontrolador es imprescindible analizar los requisitos de la aplicación: •
Procesamiento de datos: puede ser necesario que el microcontrolador realice cálculos críticos en un tiempo limitado. En ese caso debemos asegurarnos de seleccionar un dispositivo suficientemente rápido para ello. Por otro lado, habrá que tener en cuenta la precisión de los datos a manejar: si no es suficiente con un microcontrolador de 8 bits, puede ser necesario acudir a microcontroladores de 16 ó 32 bits, o incluso a hardware de coma flotante. Una alternativa más barata y quizá suficiente es usar librerías para manejar los datos de alta precisión.
•
Entrada/Salida: para determinar las necesidades de Entrada/Salida del sistema es conveniente dibujar un diagrama de bloques del mismo, de tal forma que sea sencillo identificar la cantidad y tipo de señales que hay que controlar. Una vez realizado este análisis puede ser necesario añadir periféricos hardware externos o cambiar a otro microcontrolador más adecuado a ese sistema.
•
Consumo: algunos productos que incorporan microcontroladores están alimentados con baterías y su funcionamiento puede ser tan vital como activar una alarma antirrobo. Lo más conveniente en un caso como éste
© RA-MA
CAPÍTULO 1. MICROCONTROLADORES 25
puede ser que el microcontrolador esté en estado de bajo consumo pero que despierte ante la activación de una señal (una interrupción) y ejecute el programa adecuado para procesarla. •
Memoria: para detectar las necesidades de memoria de nuestra aplicación debemos separarla en memoria volátil (RAM), memoria no volátil (ROM, EPROM, etc.) y memoria no volátil modificable (EEPROM). Este último tipo de memoria puede ser útil para incluir información específica de la aplicación como un número de serie o parámetros de calibración.
El tipo de memoria que hay que emplear vendrá determinado por el volumen de ventas previsto del producto: de menor a mayor volumen será conveniente emplear EPROM, OTP y ROM. En cuanto a la cantidad de memoria necesaria puede ser imprescindible realizar una versión preliminar, aunque sea en seudocódigo, de la aplicación y a partir de ella hacer una estimación de cuánta memoria volátil y no volátil es necesaria y si es conveniente disponer de memoria no volátil modificable. •
Ancho de palabra: el criterio de diseño debe ser seleccionar el microcontrolador de menor ancho de palabra que satisfaga los requerimientos de la aplicación. Usar un microcontrolador de 4 bits supondrá una reducción en los costes importante, mientras que uno de 8 bits puede ser el más adecuado si el ancho de los datos es de un byte. Los microcontroladores de 16 y 32 bits, debido a su elevado coste, deben reservarse para aplicaciones que requieran sus altas prestaciones (Entrada/Salida potente o espacio de direccionamiento muy elevado).
•
Diseño de la placa: la selección de un microcontrolador concreto condicionará el diseño de la placa de circuitos. Debe tenerse en cuenta que quizá usar un microcontrolador barato encarezca el resto de componentes del diseño.
Los microcontroladores más populares se encuentran, sin duda, entre las mejores elecciones: •
8048 (Intel). Es el padre de los microcontroladores actuales, el primero de todos. Su precio, disponibilidad y herramientas de desarrollo hacen que todavía sea muy popular.
•
8051 (Intel y otros). Es sin duda el microcontrolador más popular. Fácil de programar, pero potente. Está bien documentado y posee cientos de variantes e incontables herramientas de desarrollo.
26 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
•
80186, 80188 y 80386 EX (Intel). Versiones en microcontrolador de los populares microprocesadores 8086 y 8088. Su principal ventaja es que permiten aprovechar las herramientas de desarrollo para PC.
•
68HC11 (Motorola y Toshiba). Es un microcontrolador de 8 bits potente y popular con gran cantidad de variantes.
•
683xx (Motorola). Surgido a partir de la popular familia 68k, a la que se incorporan algunos periféricos. Son microcontroladores de altísimas prestaciones.
•
PIC (MicroChip). Familia de microcontroladores que gana popularidad día a día. Fueron los primeros microcontroladores RISC.
Es preciso resaltar en este punto que existen innumerables familias de microcontroladores, cada una de las cuales posee un gran número de variantes.
1.2 RECURSOS COMUNES A TODOS LOS MICROCONTROLADORES Al estar todos los microcontroladores integrados en un chip, su estructura fundamental y sus características básicas son muy parecidas. Todos deben disponer de los bloques esenciales: procesador, memoria de datos y de instrucciones, líneas de E/S, oscilador de reloj y módulos controladores de periféricos. Sin embargo, cada fabricante intenta enfatizar los recursos más idóneos para las aplicaciones a las que se destinan preferentemente. En este apartado se hace un recorrido de todos los recursos que se hallan en todos los microcontroladores, describiendo las diversas alternativas y opciones que pueden encontrarse según el modelo seleccionado.
1.2.1 Arquitectura básica Aunque inicialmente todos los microcontroladores adoptaron la arquitectura clásica de Von Neumann, en el momento presente se impone la arquitectura Harvard. La arquitectura de Von Neumann se caracteriza por disponer de una sola memoria principal donde se almacenan datos e instrucciones de forma indistinta. A dicha memoria se accede a través de un sistema de buses único (direcciones, datos y control).
© RA-MA
CAPÍTULO 1. MICROCONTROLADORES 27
Figura 1.3. La arquitectura Harvard dispone de dos memorias independientes para datos y para instrucciones, permitiendo accesos simultáneos
La arquitectura Harvard dispone de dos memorias independientes: una que contiene sólo instrucciones; y otra, sólo datos. Ambas disponen de sus respectivos sistemas de buses de acceso y es posible realizar operaciones de acceso (lectura o escritura) simultáneamente en ambas memorias. Figura 1.3. Los microcontroladores PIC responden a la arquitectura Harvard. Aunque inicialmente todos los microcontroladores adoptaron la arquitectura clásica de Von Neumann, en el momento presente se impone la arquitectura Harvard. La arquitectura de Von Neumann se caracteriza por disponer de una sola memoria principal donde se almacenan datos e instrucciones de forma indistinta. A dicha memoria se accede a través de un sistema de buses único (direcciones, datos y control).
1.2.2 El procesador o UCP Es el elemento más importante del microcontrolador y determina sus principales características, tanto a nivel hardware como software. Se encarga de direccionar la memoria de instrucciones, recibir el código de la instrucción en curso, su decodificación y la ejecución de la operación que implica la instrucción, así como la búsqueda de los operandos y el almacenamiento del resultado. Existen tres orientaciones en cuanto a la arquitectura y funcionalidad de los procesadores actuales. •
CISC. Un gran número de procesadores usados en los microcontroladores están basados en la filosofía CISC (Computadores de Juego de Instrucciones Complejo). Disponen de más de 80 instrucciones máquina en su repertorio, algunas de las cuales son muy sofisticadas y potentes, requiriendo muchos ciclos para su ejecución. Una ventaja de los
28 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
procesadores CISC es que ofrecen al programador instrucciones complejas que actúan como macros. •
RISC. Tanto la industria de los computadores comerciales como la de los microcontroladores están avanzando hacia la filosofía RISC (Computadores de Juego de Instrucciones Reducido). En estos procesadores el repertorio de instrucciones máquina es muy reducido y las instrucciones son simples y, generalmente, se ejecutan en un ciclo. La sencillez y rapidez de las instrucciones permiten optimizar el hardware y el software del procesador.
•
SISC. En los microcontroladores destinados a aplicaciones muy concretas, el juego de instrucciones, además de ser reducido, es “específico”, o sea, las instrucciones se adaptan a las necesidades de la aplicación prevista. Esta filosofía se ha bautizado con el nombre de SISC (Computadores de Juego de Instrucciones Específico).
1.2.3 Memoria En los microcontroladores la memoria de instrucciones y datos está integrada en el propio chip. Una parte debe ser no volátil, tipo ROM, y se destina a contener el programa de instrucciones que gobierna la aplicación. Otra parte de memoria será tipo RAM, volátil, y se destina a guardar las variables y los datos. Hay dos peculiaridades que diferencian a los microcontroladores de los computadores personales: •
No existen sistemas de almacenamiento masivo como disco duro o disquetes.
•
Como el microcontrolador sólo se destina a una tarea en la memoria ROM, sólo hay que almacenar un único programa de trabajo.
La RAM en estos dispositivos es de poca capacidad pues sólo debe contener las variables y los cambios de información que se produzcan en el transcurso del programa. Por otra parte, como sólo existe un programa activo, no se requiere guardar una copia del mismo en la RAM pues se ejecuta directamente desde la ROM. Los usuarios de computadores personales están habituados a manejar mega-bytes de memoria, pero los diseñadores con microcontroladores trabajan con
© RA-MA
CAPÍTULO 1. MICROCONTROLADORES 29
capacidades de ROM comprendidas entre 512 bytes y 8k bytes y de RAM comprendidas entre 20 y más bytes. Según el tipo de memoria ROM del que dispongan los microcontroladores, la aplicación y utilización de los mismos es diferente. Se describen las cinco versiones de memoria no volátil que se pueden encontrar en los microcontroladores del mercado. •
ROM con máscara: es una memoria no volátil de sólo lectura cuyo contenido se graba durante la fabricación del chip. El elevado coste del diseño de la máscara sólo hace aconsejable el empleo de los microcontroladores con este tipo de memoria cuando se precisan cantidades superiores a varios miles de unidades.
•
OTP: el microcontrolador contiene una memoria no volátil de sólo lectura “programable una sola vez” por el usuario. OTP (One Time Programmable). Es el usuario quien puede escribir el programa en el chip mediante un sencillo grabador controlado por un programa desde un PC. La versión OTP es recomendable cuando es muy corto el ciclo de diseño del producto, o bien en la construcción de prototipos y series muy pequeñas. Tanto en este tipo de memoria como en la EPROM, se suele usar la encriptación mediante fusibles para proteger el código contenido.
•
EPROM: los microcontroladores que disponen de memoria EPROM (Erasable Programmable Read OnIy Memory) pueden borrarse y grabarse muchas veces. La grabación se realiza, como en el caso de los OTP, con un grabador gobernado desde un PC. Si, posteriormente, se desea borrar el contenido, disponen de una ventana de cristal en su superficie por la que se somete a la EPROM a rayos ultravioleta durante varios minutos. Las cápsulas son de material cerámico y son más caros que los microcontroladores con memoria OTP que están hechos con material plástico.
•
EEPROM: se trata de memorias de sólo lectura, programables y borrables eléctricamente EEPROM (Electrical Erasable Programmable Read OnIy Memory). Tanto la programación como el borrado, se realizan eléctricamente desde el propio grabador y bajo el control programado de un computador personal. Es muy cómoda y rápida la operación de grabado y la de borrado. No disponen de ventana de cristal en la superficie. Los microcontroladores dotados de memoria EEPROM una vez instalados en el circuito, pueden grabarse y borrarse cuantas veces se quiera sin ser retirados de dicho circuito. Para ello se usan “grabadores en circuito” que confieren una gran flexibilidad y rapidez a la hora de realizar
30 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
modificaciones en el programa de trabajo. El número de veces que puede grabarse y borrarse una memoria EEPROM es finito, por lo que no es recomendable una reprogramación continua. Son muy idóneos para la enseñanza y la ingeniería de diseño. Se va extendiendo en los fabricantes la tendencia de incluir una pequeña zona de memoria EEPROM en los circuitos programables para guardar y modificar cómodamente una serie de parámetros que adecuan el dispositivo a las condiciones del entorno. Este tipo de memoria es relativamente lenta. •
FLASH: se trata de una memoria no volátil, de bajo consumo, que se puede escribir y borrar. Funciona como una ROM y una RAM pero consume menos y es más pequeña. A diferencia de la ROM, la memoria FLASH es programable en el circuito. Es más rápida y de mayor densidad que la EEPROM. La alternativa FLASH está recomendada frente a la EEPROM cuando se precisa gran cantidad de memoria de programa no volátil. Es más veloz y tolera más ciclos de escritura/borrado. Las memorias EEPROM y FLASH son muy útiles al permitir que los microcontroladores que las incorporan puedan ser reprogramados “en circuito”, es decir, sin tener que sacar el circuito integrado de la tarjeta. Así, un dispositivo con este tipo de memoria incorporado al control del motor de un automóvil permite que pueda modificarse el programa durante la rutina de mantenimiento periódico, compensando los desgastes y otros factores tales como la compresión, la instalación de nuevas piezas, etc. La reprogramación del microcontrolador puede convertirse en una labor rutinaria dentro de la puesta a punto.
1.2.4 Puertas de entrada y salida La principal utilidad de las patitas que posee la cápsula que contiene un microcontrolador es soportar las líneas de Entrada/Salida que comunican el computador interno con los periféricos exteriores. Según los controladores de periféricos que posea cada modelo de microcontrolador, las líneas de Entrada/Salida se destinan a proporcionar el soporte a las señales de entrada, salida y control.
1.2.5 Reloj principal Todos los microcontroladores disponen de un circuito oscilador que genera una onda cuadrada de alta frecuencia, que configura los impulsos de reloj usados en la sincronización de todas las operaciones del sistema.
© RA-MA
CAPÍTULO 1. MICROCONTROLADORES 31
Generalmente, el circuito de reloj está incorporado en el microcontrolador y sólo se necesitan unos pocos componentes exteriores para seleccionar y estabilizar la frecuencia de trabajo. Dichos componentes suelen consistir en un cristal de cuarzo junto a elementos pasivos o bien un resonador cerámico o una red R-C. Aumentar la frecuencia de reloj supone disminuir el tiempo en que se ejecutan las instrucciones, pero lleva aparejado un incremento del consumo de energía.
1.3 RECURSOS ESPECIALES Cada fabricante oferta numerosas versiones de una arquitectura básica de microcontrolador. En algunas amplía las capacidades de las memorias, en otras incorpora nuevos recursos, en otras reduce las prestaciones al mínimo para aplicaciones muy simples, etc. La labor del diseñador es encontrar el modelo mínimo que satisfaga todos los requerimientos de su aplicación. De esta forma, minimizará el coste, el hardware y el software. Los principales recursos específicos que incorporan los microcontroladores son: •
Temporizadores o Timers.
•
Perro guardián o Watchdog.
•
Protección ante fallo de alimentación o Brownout.
•
Estado de reposo o de bajo consumo.
•
Conversor de analógico a digital (conversor A/D).
•
Conversor de digital a analógico (conversor D/A).
•
Comparador analógico.
•
Modulador de anchura de impulsos o PWM.
•
Puertas de Entrada/Salida digitales (puertas de E/S).
•
Puertas de comunicación.
32 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
1.3.1 Temporizadores o Timers Se emplean para controlar periodos de tiempo (temporizadores) y para llevar la cuenta de acontecimientos que suceden en el exterior (contadores). Para la medida de tiempos se carga un registro con el valor adecuado y a continuación dicho valor se va incrementando o decrementando al ritmo de los impulsos de reloj o algún múltiplo hasta que se desborde y llegue a 0, momento en el que se produce un aviso. Cuando se desean contar acontecimientos que se materializan por cambios de nivel o flancos en alguna de las patitas del microcontrolador, el mencionado registro se va incrementando o decrementando al ritmo de dichos impulsos.
1.3.2 Perro guardián o Watchdog Cuando el computador personal se bloquea por un fallo del software u otra causa, se pulsa el botón del reset y se reinicializa el sistema. Pero un microcontrolador funciona sin el control de un supervisor y de forma continuada las 24 horas del día. El perro guardián consiste en un temporizador que, cuando se desborda y pasa por 0, provoca un reset automáticamente en el sistema. Se debe diseñar el programa de trabajo que controla la tarea de forma que refresque o inicialice al perro guardián antes de que provoque el reset. Si falla el programa o se bloquea, no se refrescará al perro guardián y, al completar su temporización, “ladrará y ladrará” hasta provocar el reset.
1.3.3 Protección ante fallo de alimentación o Brownout Se trata de un circuito que resetea al microcontrolador cuando el voltaje de alimentación (VDD) es inferior a un voltaje mínimo (brownout). Mientras el voltaje de alimentación sea inferior al de brownout el dispositivo se mantiene reseteado, y comienza a funcionar normalmente cuando sobrepasa dicho valor.
1.3.4 Estado de reposo o de bajo consumo Son abundantes las situaciones reales de trabajo en que el microcontrolador debe esperar, sin hacer nada, a que se produzca algún acontecimiento externo que le ponga de nuevo en funcionamiento. Para ahorrar energía (factor clave en los aparatos portátiles), los microcontroladores disponen de una instrucción especial (SLEEP en los PIC), por la que pasan al estado de reposo o de bajo consumo, en el cual los requerimientos de potencia son mínimos. En dicho estado se detiene el
© RA-MA
CAPÍTULO 1. MICROCONTROLADORES 33
reloj principal y se “congelan” sus circuitos asociados, quedando sumido en un profundo “sueño” el microcontrolador. Al activarse una interrupción ocasionada por el acontecimiento esperado, el microcontrolador se despierta y reanuda su trabajo.
1.3.5 Conversor de analógico a digital (A/D) Los microcontroladores que incorporan un conversor A/D (Analógico/Digital) pueden procesar señales analógicas, tan abundantes en las aplicaciones. Suelen disponer de un multiplexor que permite aplicar a la entrada del CAD diversas señales analógicas desde las patitas del circuito integrado.
1.3.6 Conversor de digital a analógico (D/A) Transforma los datos digitales obtenidos del procesamiento del computador en su correspondiente señal analógica, que saca al exterior por una de las patitas de la cápsula. Existen muchos efectores que trabajan con señales analógicas.
1.3.7 Comparador analógico Algunos modelos de microcontroladores disponen internamente de un amplificador operacional que actúa como comparador entre una señal fija de referencia y otra variable que se aplica por una de las patitas de la cápsula. La salida del comparador proporciona un nivel lógico 1 ó 0 según una señal sea mayor o menor que la otra. También hay modelos de microcontroladores con un módulo de tensión de referencia que proporciona diversas tensiones de referencia que se pueden aplicar en los comparadores.
1.3.8 Modulador de anchura de impulsos o PWM Son circuitos que proporcionan en su salida impulsos de anchura variable, que se ofrecen al exterior a través de las patitas del encapsulado.
1.3.9 Puertas de Entrada/Salida (E/S) digitales Todos los microcontroladores destinan algunas de sus patitas a soportar líneas de E/S digitales. Por lo general, estas líneas se agrupan de ocho en ocho formando puertas.
34 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
Las líneas digitales de las puertas pueden configurarse como entrada o como salida cargando un 1 o un 0 en el bit correspondiente de un registro destinado a su configuración.
1.3.10 Puertas de comunicación Nacen con el objeto de dotar al microcontrolador de la posibilidad de comunicarse con otros dispositivos externos, otros buses de microprocesadores, buses de sistemas, buses de redes y poder adaptarlos con otros elementos bajo otras normas y protocolos. Algunos modelos disponen de recursos que permiten directamente esta tarea, entre los que destacan: •
UART, adaptador de comunicación serie asíncrona.
•
USART, adaptador de comunicación serie síncrona y asíncrona.
•
Puerta paralela esclava para poder conectarse con los buses de otros microprocesadores.
•
USB (Universal Serial Bus), que es un moderno bus serie para los PC.
•
Bus I2C, que es un interfaz serie de dos hilos desarrollado por Philips.
•
CAN (Controller Area Network), para permitir la adaptación con redes de conexionado multiplexado desarrollado conjuntamente por Bosch e Intel para el cableado de dispositivos en automóviles. En EE.UU. se usa el J185O.
1.4 HERRAMIENTAS PARA EL DESARROLLO DE APLICACIONES Uno de los factores que más importancia tiene a la hora de seleccionar un microcontrolador entre todos los demás es el soporte tanto software como hardware de que dispone. Un buen conjunto de herramientas de desarrollo puede ser decisivo en la elección, ya que pueden suponer una ayuda inestimable en el desarrollo del proyecto. Las principales herramientas de ayuda al desarrollo de sistemas basados en microcontroladores son en el ámbito del software con el uso de compiladores, depuradores, simuladores y hardware con el uso de emuladores y grabadores.
© RA-MA
CAPÍTULO 1. MICROCONTROLADORES 35
1.4.1 Desarrollo del software •
Ensamblador: la programación en lenguaje ensamblador puede resultar un tanto ardua para el principiante, pero permite desarrollar programas muy eficientes, ya que otorga al programador el dominio absoluto del sistema. Los fabricantes suelen proporcionar el programa ensamblador de forma gratuita y en cualquier caso siempre se puede encontrar una versión gratuita para los microcontroladores más populares.
•
Compilador: la programación en un lenguaje de alto nivel (como el C o Basic) permite disminuir el tiempo de desarrollo de un producto. No obstante, si no se programa con cuidado, el código resultante puede ser mucho más ineficiente que el programado en ensamblador. Las versiones más potentes suelen ser muy caras, aunque para los microcontroladores más populares pueden encontrarse versiones demo limitadas e incluso compiladores gratuitos.
1.4.2 Depuración Debido a que los microcontroladores van a controlar dispositivos físicos, los desarrolladores necesitan herramientas que les permitan comprobar el buen funcionamiento del microcontrolador cuando es conectado al resto de circuitos. •
Simulador: son capaces de ejecutar en un computador personal programas realizados para el microcontrolador. Los simuladores permiten tener un control absoluto sobre la ejecución de un programa, siendo ideales para la depuración de los mismos. Tampoco cuentan con los posibles ruidos en las entradas, pero, al menos, permiten el paso físico de la implementación de un modo más seguro y menos costoso, puesto que ahorraremos en grabaciones de chips para la prueba insitu.
•
Placas de evaluación: se trata de pequeños sistemas con un microcontrolador ya montado y que suelen conectarse a un PC desde el que se cargan los programas que se ejecutan en el microcontrolador. Las placas suelen incluir visualizadores LCD, teclados, LED, fácil acceso a los pines de Entrada/Salida (E/S), etc. El sistema operativo de la placa recibe el nombre de “programa monitor”. El programa monitor de algunas placas de evaluación, aparte de permitir cargar programas y datos en la memoria del microcontrolador, puede permitir en cualquier momento realizar la ejecución paso a paso, monitorizar el estado del microcontrolador o modificar los valores almacenados los registros o en la memoria.
36 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
•
© RA-MA
Emuladores en circuito: se trata de un instrumento que se coloca entre el computador personal anfitrión y el zócalo de la tarjeta de circuito impreso donde se alojará el microcontrolador definitivo. El programa es ejecutado desde el PC, pero para la tarjeta de aplicación es como si lo hiciese el mismo microcontrolador que luego irá en el zócalo. Presenta en pantalla toda la información tal y como luego sucederá cuando se coloque la cápsula.
Figura 1.4. Placas de evaluación: (a) LAB-X1, (b) LAB-X2, (c) LAB-X3, todas las placas son ofrecidas por microEngineering Labs, Inc. (http://www.melabs.com)
1.4.3 Grabación •
Grabadores o programadores: editado el programa y convertido a código de máquina, hay que grabarlo en la memoria de instrucciones del microcontrolador. Cuando hay que grabar enormes cantidades de chips, es preferible encargarle la operación al fabricante y utilizar sistemas con memoria ROM con máscara. Cuando es el usuario quien desea grabar los programas ha de adquirir microcontroladores con memoria no volátil del tipo OTP, EPROM o EEPROM. También debe disponer de un “grabador”, que suele ser un pequeño dispositivo con un zócalo libre sobre el que se sujeta el circuito integrado que hay que grabar. El control del grabador se efectúa desde un computador personal que, con el software adecuado, se encarga de escribir en la memoria no volátil el programa que requiere la
© RA-MA
CAPÍTULO 1. MICROCONTROLADORES 37
aplicación. En caso de las memorias EEPROM, desde el mismo grabador se puede proceder al borrado de la misma.
2Capítulo 2
MICROCONTROLADORES PIC Este capítulo presentará información técnica de los microcontroladores PIC de MICROCHIP que se utilizarán para la implementación de los esquemas del presente libro. La teoría presentada aquí respecto a los microcontroladores se complementa con las hojas técnicas que vienen como material adicional que se podrán descargar desde el portal web http://www.ra-ma.es.
2.1 MICROCONTROLADORES PIC Una de las razones del éxito de los PIC se basa en su utilización. Cuando se aprende a manejar uno de ellos, conociendo su arquitectura y su repertorio de instrucciones, es muy fácil emplear otro modelo. Para el mejor funcionamiento de una aplicación tiene que tomar en cuenta qué microcontrolador PIC utilizar, o en otros casos elegir otros microcontroladores que son más eficientes en aplicaciones específicas, más aún si éste presenta una característica particular. Entre las características importantes que ven los diseñadores al usar los PIC tenemos: •
Sencillez de manejo: tienen un juego de instrucciones reducido; 35 en la gama media.
•
Buena información, fácil de conseguir y económica.
•
Precio: su coste es comparativamente inferior al de sus competidores.
40 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
•
Poseen una elevada velocidad de funcionamiento. Buen promedio de parámetros: velocidad, consumo, tamaño, alimentación, código compacto, etc.
•
Herramientas de desarrollo fáciles y baratas. Muchas herramientas de software se pueden recoger libremente a través de Internet desde Microchip (http://www.microchip.com).
•
Existe una gran variedad de herramientas de hardware que permiten grabar, depurar, borrar y comprobar el comportamiento de los PIC.
•
Diseño rápido.
•
La gran variedad de modelos de PIC permite elegir el que mejor responde a los requerimientos de la aplicación.
2.2 CARACTERÍSTICAS COMUNES A continuación se muestran las características comunes que poseen los microcontroladores PIC.
2.2.1 Arquitectura La arquitectura del procesador sigue el modelo Harvard. En esta arquitectura, la UCP (Unidad de Control de Procesos) se conecta de forma independiente y con buses distintos con la memoria de instrucciones y con la de datos. La arquitectura Harvard permite a la UCP acceder simultáneamente a las dos memorias. Además, propicia numerosas ventajas al funcionamiento del sistema como se irá describiendo.
2.2.2 Segmentación Se aplica la técnica de segmentación (pipe-line) en la ejecución de las instrucciones. La segmentación permite al procesador realizar al mismo tiempo la ejecución de una instrucción y la búsqueda del código de la siguiente. De esta forma se puede ejecutar cada instrucción en un ciclo (un ciclo de instrucción equivale a cuatro ciclos de reloj). Las instrucciones de salto ocupan dos ciclos al no conocer la dirección de la siguiente instrucción hasta que no se haya completado la de bifurcación.
© RA-MA
CAPÍTULO 2. MICROCONTROLADORES PIC 41
2.2.3 Formato de las instrucciones El formato de todas las instrucciones es de la misma longitud Todas las instrucciones de los microcontroladores de la gama baja tienen una longitud de 12 bits. Las de la gama media tienen 14 bits, y más las de la gama alta. Esta característica es muy ventajosa en la optimización de la memoria de instrucciones y facilita enormemente la construcción de ensambladores y compiladores.
2.2.4 Juego de instrucciones Procesador RISC (Computador de Juego de Instrucciones Reducido). Los modelos de la gama baja disponen de un repertorio de 33 instrucciones, 35 los de la gama media y casi 60 los de la alta.
2.2.5 Todas las instrucciones son ortogonales Cualquier instrucción puede manejar cualquier elemento de la arquitectura como fuente o como destino.
2.2.6 Arquitectura basada en un “banco de registros” Esto significa que todos los objetos del sistema (puertas de E/S, temporizadores, posiciones de memoria, etc.) están implementados físicamente como registros.
2.2.7 Diversidad de modelos de microcontroladores con prestaciones y recursos diferentes La gran variedad de modelos de microcontroladores PIC permite que el usuario pueda seleccionar el más conveniente para su proyecto.
2.2.8 Herramientas de soporte potentes y económicas La empresa Microchip y otras que utilizan los PIC ponen a disposición de los usuarios numerosas herramientas para desarrollar hardware y software. Son muy abundantes los programadores, los simuladores de software, los emuladores en tiempo real, ensambladores, compiladores C, intérpretes y compiladores BASIC, etc. La arquitectura Harvard y la técnica de segmentación son los principales recursos en los que se apoya el elevado rendimiento que caracteriza estos dispositivos programables, mejorando dos características esenciales:
42 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
•
Velocidad de ejecución.
•
Eficiencia en la compactación del código.
© RA-MA
2.3 LAS GAMAS DE PIC Una de las labores más importantes del ingeniero de diseño es la elección del microcontrolador que mejor satisfaga las necesidades del proyecto con el mínimo presupuesto. Para resolver aplicaciones sencillas se precisan pocos recursos, en cambio, las aplicaciones grandes requieren numerosos y potentes. Siguiendo esta filosofía Microchip construye diversos modelos de microcontroladores orientados a cubrir, de forma óptima, las necesidades de cada proyecto. Así, hay disponibles microcontroladores sencillos y baratos para atender las aplicaciones simples y otros complejos y más costosos para las de mucha envergadura. Microchip dispone de cuatro familias de microcontroladores de 8 bits para adaptarse a las necesidades de la mayoría de los clientes potenciales. En la mayor parte de la bibliografía encontrará tan sólo tres familias de microcontroladores, con lo que habrán despreciado la llamada gama enana, que es en realidad una subfamilia formada por componentes pertenecientes a las otras gamas. En nuestro caso hemos preferido comentarla dado que los PIC enanos son muy apreciados en las aplicaciones de control de personal, en sistemas de seguridad y en dispositivos de bajo consumo que gestionan receptores y transmisores de señales. Su pequeño tamaño los hace ideales en muchos proyectos donde esta cualidad es fundamental.
2.3.1 La gama enana: PIC12C(F)XXX de 8 patitas Se trata de un grupo de microcontroladores PIC de reciente aparición que han acaparado la atención del mercado. Su principal característica es su reducido tamaño, al disponer todos sus componentes de 8 patitas. Se alimentan con un voltaje de corriente continua comprendido entre 2,5V y 5,5V, y consumen menos de 2mA cuando trabajan a 5V y 4MHz. El formato de sus instrucciones puede ser de 12 o de 14 bits y su repertorio es de 33 ó 35 instrucciones, respectivamente. En la figura 2.1 se muestra el diagrama de pines de uno de estos PIC. Aunque los PIC enanos sólo tienen 8 patitas, pueden destinar hasta 6 como líneas de E/S para los periféricos porque disponen de un oscilador interno R-C (Resistencia-Capacitor).
© RA-MA
CAPÍTULO 2. MICROCONTROLADORES PIC 43
En la tabla 2.1 se presentan las principales características de los modelos de esta subfamilia, que el fabricante tiene la intención de potenciar en un futuro próximo. Los modelos 12C5xx pertenecen a la gama baja, siendo el tamaño de las instrucciones de 12 bits; mientras que los 12C6xx son de la gama media y sus instrucciones tienen 14 bits. Los modelos 12F6xx poseen memoria Flash para el programa y EEPROM para los datos. VDD
1
8
VSS
GP5/OSC1/CLKIN
2
7
GP0
GP4/OSC2
3
6
GP1
GP3/MCLR/VPP
4
5
GP2/T0CKI
PIC12C508 PIC12C509
Figura 2.1. Diagrama de pines de los PIC12Cxxx de la gama enana
Modelo
Memoria
Memoria
de programa
de datos
Frecuencia Líneas Máxima
de E/S
ADC 8 bits
PIC12C508
512 x
12
25 x
8
4 MHz
6
PIC12C509
1024 x
12
41 x
8
4 MHz
6
PIC12C670
512 x
14
80 x
8
4 MHz
6
PIC12C671
1024 x
14
128 x
8
4 MHz
6
2
PIC12C672
2048 x
14
128 x
8
4 MHz
6
4
PIC12C680
512 x
12
16 x 8
4 MHz
6
4
4 MHz
6
FLASH PIC12C681
1024 x FLASH
80 x 8
EEPROM 14
81 x 8
17 x 8
Temporizado res TMR0 + WDT TMR0 + WDT TMR0 + WDT TMR0 + WDT TMR0 + WDT TMR0 + WDT TMR0 + WDT
Pines 8 8 8 8 8 8
8
EEPROM
Tabla 2.1. Características de los modelos PIC12C(F)XXX de la gama enana
2.3.2 Gama baja o básica: PIC16C5X con instrucciones de 12 bits Se trata de una serie de microcontroladores PIC de recursos limitados, pero con una de la mejores relaciones coste/prestaciones. Sus versiones están encapsuladas con 18 y 28 patitas y pueden alimentarse a partir de una tensión de 2,5V, lo que les hace ideales en las aplicaciones que funcionan con pilas teniendo en cuenta su bajo consumo (menos de 2mA a 5V y 4 MHz). Tienen un repertorio de 33 instrucciones cuyo formato consta de 12 bits. No admiten ningún tipo de interrupción y la pila sólo dispone de dos niveles. En la figura 2.2 se muestra el
44 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
diagrama de pines de uno de estos PIC. Al igual que todos los miembros de la familia PIC16/17, los componentes de la gama baja se caracterizan por poseer los siguientes recursos: (en la tabla 2.2 se presentan las principales características de los modelos de esta familia). RA2
1
18
RA1 RA0
RA3
2
17
T0CKI
3
16
OSC1/CLKIN
MCLR/VPP
4
15
OSC2/CLKOUT
VSS
5
14
VDD
RB0
6
13
RB7
RB1
7
12
RB6
RB2
8
11
RB5
9
10
RB4
RB3
PIC16C54/56
Figura 2.2. Diagrama de pines de los PIC de la gama baja que responden a la nomenclatura PIC16C54/56
Modelo
Memoria de programa (x 12 bits) EPROM
Memoria de datos (bytes)
Frecuencia Máxima
Líneas de E/S
Temporizadores
Pines
ROM
PIC16C52
384
25
4 MHz
4
TMR0 + WDT
18
PIC16C54
512
25
20 MHz
12
TMR0 + WDT
18
PIC1654A
512
25
20 MHz
12
TMR0 + WDT
18
25
20 MHz
12
TMR0 + WDT
18
PIC16C55
512
512
24
20 MHz
20
TMR0 + WDT
28
PIC16C56
1K
25
20 MHz
12
TMR0 + WDT
18
PIC16C57
2K
72
20 MHz
20
TMR0 + WDT
28
72
20 MHz
20
TMR0 + WDT
28
73
20 MHz
12
TMR0 + WDT
18
73
20 MHz
12
TMR0 + WDT
18
PIC16CR54A
2K
PIC16CR57B PIC16C58A PIC16CR58A
2K 2K
Tabla 2.2. Características de los modelos PIC16C(R)5X de la gama baja
•
Sistema de autoreseteo (Power On Reset o POR): todos los PIC tienen la facultad de generar una autoreinicialización o autoreset al conectarles la alimentación.
•
Perro guardián (Watchdog o WDT): existe un temporizador que produce un reset automáticamente si no es recargado antes que pase un tiempo prefijado. Así se evita que el sistema quede “colgado” dado en esa situación el programa no recarga dicho temporizador y se genera un reset.
© RA-MA
CAPÍTULO 2. MICROCONTROLADORES PIC 45
•
Código de protección: cuando se procede a realizar la grabación del programa, puede protegerse para evitar su lectura. También disponen los PIC de posiciones reservadas para registrar números de serie, códigos de identificación, prueba, etc.
•
Líneas de Entrada/Salida (E/S) de alta corriente: las líneas de E/S de los microcontroladores PIC pueden proporcionar o absorber una corriente de salida comprendida entre 20 y 25mA, capaz de excitar directamente ciertos periféricos.
•
Modo de reposo (Bajo consumo o Sleep): ejecutando una instrucción (SLEEP), la CPU y el oscilador principal se detienen y se reduce notablemente el consumo.
Para terminar el comentario introductorio sobre los componentes de la gama baja conviene nombrar dos restricciones importantes: •
La pila o stack sólo dispone de dos niveles, lo que supone no poder encadenar más de dos subrutinas.
•
Los microcontroladores de la gama baja no admiten interrupciones.
2.3.3 Gama media: PIC16CXXX con instrucciones de 14 bits Es la gama más variada y completa de los PIC. Abarca modelos con encapsulado desde 18 patitas hasta 68, cubriendo varias opciones que integran abundantes periféricos. Dentro de esta gama se halla el fabuloso PIC16X84 y sus variantes. En la figura 2.3 se muestra el diagrama de pines de uno de estos PIC. En esta gama sus componentes añaden nuevas prestaciones a las que poseían los de la gama baja, haciéndolos más adecuados en las aplicaciones complejas. Admiten interrupciones, poseen comparadores de magnitudes analógicas, convertidores A/D, puertos serie y diversos temporizadores. El repertorio de instrucciones es de 35, de 14 bits cada una y compatible con el de la gama baja. Sus distintos modelos contienen todos los recursos que se precisan en las aplicaciones de los microcontroladores de 8 bits. También dispone de interrupciones y una pila de 8 niveles que permite el anidamiento de subrutinas. En la tabla 2.3 se presentan las principales características de los modelos de esta familia.
46 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
MCLR/VPP
1
40
RB7
RA0/AN0
2
39
RB6
RA1/AN1
3
38
RB5
RA2/AN2
4
37
RB4
RA3/AN3/VREF
5
36
RB3
RA4/T0CKI
6
35
RB2
RA5/SS/AN4
7
34
RB1
RE0/RD/AN5
8
33
RB0/INT
9
32
VDD
RE2/CS/AN7
10
31
VSS
VDD
11
30
RD7/PSP7
VSS
12
29
RD6/PSP6
OSC1/CLKIN
13
28
RD5/PSP5
OSC2/CLKOUT
14
27
RD4/PSP4
RC0/T1OSO/T1CKI
15
26
RC7/RX/DT
RC1/T1OSI/CCP2
16
25
RC6/TX/CK
RC2/CCP1
17
24
RC5/SDO
RC3/SCK/SCL
18
23
RC4/SDI/SDA
RD0/PSP0
19
22
RD3/PSP3
RD1/PSP1
20
21
RD2/PSP2
RE1/WR/AN6
PIC16C74
Figura 2.3. Diagrama de pines del PIC16C74, uno de los modelos más representativos de la gama media
Modelo
Memoria
Memoria
de programa
de datos
(x 14 bits)
(bytes) RAM
EEPROM
Regis tros Especí ficos
Líneas
Tempori
Interrup
Rango de
de E/S
zadores
ciones
Voltaje
4
2,6
18
4
2,6
18
4
2,6
18
4
2,6
18
4
2,6
18
PIC16C84
1 K EEPROM
36
64
11
13
PIC16F84
1 K FLASH
68
64
11
13
PIC16F83
512 FLASH
36
64
11
13
PIC16CR84
1 K ROM
68
64
11
13
PIC16CR83
512 ROM
36
64
11
13
TMR0 + WDT TMR0 + WDT TMR0 + WDT TMR0 + WDT TMR0 + WDT
Pi nes
Tabla 2.3. Características relevantes de los modelos PIC16X8X de la gama media
Encuadrado en la gama media también se halla la versión PIC14C000, que soporta el diseño de controladores inteligentes para cargadores de baterías, pilas pequeñas, fuentes de alimentación ininterrumpibles y cualquier sistema de
© RA-MA
CAPÍTULO 2. MICROCONTROLADORES PIC 47
adquisición y procesamiento de señales que requiera gestión de la energía de alimentación. Los PIC 14C000 admiten cualquier tecnología de las baterías como Li-Ion, NiMH, NiCd, Ph y Zinc. El temporizador TMR1 que hay en esta gama tiene un circuito oscilador que puede trabajar asíncronamente y que puede incrementarse aunque el microcontrolador se halle en el modo de reposo (sleep), posibilitando la implementación de un reloj en tiempo real. Las líneas de E/S presentan una carga pull-up activada por software.
2.3.4 Gama alta: PIC17CXXX con instrucciones de 16 bits Se alcanzan las 58 instrucciones de 16 bits en el repertorio y sus modelos disponen de un sistema de gestión de interrupciones vectorizadas muy potente. También incluyen variados controladores de periféricos, puertas de comunicación serie y paralelo con elementos externos, un multiplicador hardware de gran velocidad y mayores capacidades de memoria, que alcanza las 8k palabras en la memoria de instrucciones y 454 bytes en la memoria de datos.
Modelo
Memoria de programa (x 16 bits)
Memoria de datos (RAM)
Regis tros Espe cíficos
Líneas de E/S
PIC17C42A
2K
232
48
33
PIC17C43
4K
454
48
33
PIC17C44
8K
454
48
33
PIC17C57
8K
454
76
50
PIC17C56
16 K
902
76
50
Tempo rizado res 4+ WDT 4+ WDT 4+ WDT 4+ WDT 4+ WDT
Interrup ciones
Conver sor A/D (10 bits) PWM
Pines
11
2
40/44
11
2
40/44
11
2
40/44
18
12
3
64/68
18
12
1
64/68
Tabla 2.4. Características más destacadas de los modelos PIC17CXXX de la gama alta
Quizás la característica más destacable de los componentes de esta gama es su arquitectura abierta, que consiste en la posibilidad de ampliación del microcontrolador con elementos externos. Para este fin, los pines sacan al exterior las líneas de los buses de datos, direcciones y control, a las que se conectan memorias o controladores de periféricos. Esta facultad obliga a estos componentes a tener un elevado número de pines comprendido entre 40 y 44. Esta filosofía de construcción del sistema es la que se empleaba en los microprocesadores, y no suele ser una práctica habitual cuando se emplean microcontroladores. En la tabla 2.4 se muestran las características más relevantes de los modelos de esta gama, que sólo se utilizan en aplicaciones muy especiales con grandes requerimientos.
48 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
2.3.5 Gama alta: PIC18CXXXX con instrucciones de 16 bits Son microcontroladores de la gama alta con instrucciones de 16 bits y datos de 8 bits, y sus modelos disponen de un sistema de gestión de interrupciones vectorizadas muy potente que vienen en paquetes de 18 a 80 pines. También incluyen variados controladores de periféricos, puertas de comunicación avanzadas con elementos externos como USB y CAN, velocidad de operación de 48MHz, un multiplicador hardware de gran velocidad y mayores capacidades de memoria, que alcanza 32k palabras en la memoria de instrucciones y 2k bytes en la memoria de datos. En la tabla 2.5 se muestran las características más relevantes de algunos modelos de esta gama, que sólo se utilizan en aplicaciones muy especiales con grandes requerimientos.
Modelo
Memo ria de progra ma Memoria (x 16 de datos bits) (RAM)
Regis tros Específi cos
Líneas de E/S
Temporiza dores
Conver sor Interrup A/D ciones (10 bits)
USB
Pines
PIC18F2455
24K
2K
32
23
4
19
10
1
28
PIC18F2550
32K
2K
32
23
4
19
10
1
28
PIC18F4455
24K
2K
32
34
4
20
13
1
40
PIC18F4450
32K
2K
32
34
4
20
13
1
40
Tabla 2.5. Características más destacadas de los modelos PIC17CXXX de la gama alta
2.4 MICROCONTROLADOR PIC16F84 2.4.1 Arquitectura interna El PIC16F84 al igual que los demás miembros de su familia se caracteriza por: •
Su procesador es segmentado, pipe-line.
•
Su procesador es tipo RISC.
•
Tiene una arquitectura HARVARD.
•
El formato de las instrucciones es ortogonal.
© RA-MA
CAPÍTULO 2. MICROCONTROLADORES PIC 49
•
Todas las instrucciones tienen la misma longitud (14 bits).
•
La arquitectura está basada en bancos de registros.
Todas estas características fueron explicadas en párrafos anteriores. Además de las características anteriormente señaladas, se puede resaltar lo siguiente: •
Memoria de programa EEPROM de 1Kx14 bits.
•
Memoria de datos dividida en 2 áreas: −
Área RAM.
−
Área EEPROM.
•
ALU de 8 bits y registro de trabajo W del que normalmente recibe un operando que puede ser: cualquier registro, memoria, puerto de Entrada/Salida o el propio código de instrucción.
•
Recursos conectados al bus de datos: Puerto A de 5 bits (RA0:RA4), Puerto B de 8 bits (RB0:RB7), Temporizador con Preescaler TMR0, etc.
•
Contador de programa de 13 bits (lo que en teoría permitiría direccionar 4KB de memoria, aunque el 16F84 sólo dispone de 1KB de memoria implementada).
•
Pila de 8 niveles. La arquitectura del PIC16F84 se mantiene para todos los microcontroladores de esta subfamilia, diferenciándose unos de otros por las siguientes características:
•
−
PIC 16F84: la memoria de programa es de lK palabras de l4 bits, pero de tipo Flash. La memoria de datos RAM tiene 68 registros de tamaño byte de propósito general, en lugar de 36.
−
PIC16CR84: la memoria de programa es de 1K palabras de 14 bits, tipo ROM y la de datos posee iguales características que el PIC16F84.
El elemento diferencial más importante del PIC16C84 respecto al resto de los elementos de la familia media de los PIC es que su memoria de programa es del tipo EEPROM y en el caso del PIC16F84 es que su
50 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
memoria es del tipo Flash, por lo demás, otros dispositivos de esta familia disponen de más memoria, tienen más periféricos, etc.
2.4.2 Pines y funciones El microcontrolador PIC16F84, como se ve en la figura 2.4, dispone de 18 pines. Los PUERTOS son el puente entre el microcontrolador y el mundo exterior. Son líneas digitales que trabajan entre cero y cinco voltios y se pueden configurar como entradas o como salidas. RA2
1
18
RA1
RA3
2
17
RA0
RA4/T0CKI
3
16
OSC1/CLKIN
MCLR/VPP
4
15
OSC2/CLKOUT VDD
VSS
5
14
RB0/INT
6
13
RB7
RB1
7
12
RB6
RB2
8
11
RB5
RB3
9
10
RB4
PIC16F84
Figura 2.4. Diagrama de pines del PIC16F84
El PIC16F84 tiene dos puertos. El puerto A con 5 líneas y el puerto B con 8 líneas. Cada pin se puede configurar como entrada o como salida independiente programado por un par de registros diseñados para tal fin. En ese registro un "0" configura el pin del puerto correspondiente como salida y un "1" lo configura como entrada.
2.4.2.1 PUERTO A Puerto bidireccional o de entrada/salida (TTL) u otra función como: •
RA0 = Pin de Entrada/Salida (TTL).
•
RA1 = Pin de Entrada/Salida (TTL).
•
RA2 = Pin de Entrada/Salida (TTL).
•
RA3 = Pin de Entrada/Salida (TTL).
•
RA4/TOCKI = Pin de Entrada/Salida o entrada de Reloj Externo para el TMR0 (TOCKI), cuando este pin se configura como salida es de tipo Open
© RA-MA
CAPÍTULO 2. MICROCONTROLADORES PIC 51
Drain (ST), cuando funciona como salida se debe conectar a Vcc (+5V) a través de una resistencia.
2.4.2.2 PUERTO B Puerto bidireccional o de Entrada/Salida (TTL) u otra función como: •
RB0/INT = Pin de Entrada/Salida (TTL/ST) / entrada de interrupción externa (INT).
•
RB1 = Pin de Entrada/Salida (TTL).
•
RB2 = Pin de Entrada/Salida (TTL).
•
RB3 = Pin de Entrada/Salida (TTL).
•
RB4 = Pin de Entrada/Salida con Interrupción por cambio de Flanco (TTL).
•
RB5 = Pin de Entrada/Salida con Interrupción por cambio de Flanco (TTL).
•
RB6 = Pin de Entrada/Salida con Interrupción por cambio de Flanco (TTL/ST).
•
RB7 = Pin de Entrada/Salida con Interrupción por cambio de Flanco (TTL/ST).
2.4.2.3 PINES ADICIONALES •
MCLR = Pin de Reset del Microcontrolador (Master Clear). Se activa (el PIC se resetea) cuando tiene un "0" lógico en su entrada.
•
VSS = Ground o Tierra.
•
VDD = Fuente Positiva (+5V).
•
OSC1/CLKIN = Entrada del Oscilador del Cristal (OSC1) / Entrada de reloj de una Fuente Externa (CLKIN).
•
OSC2/CLKOUT = Salida del Oscilador del Cristal (OSC2). Se conecta al Cristal o Resonador en modo XT (Oscilador de Cristal). En modo RC
52 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
(Resistencia-Condensador), este pin actúa como salida y tiene 1/4 de la frecuencia que entra por el pin OCS1/CLKIN. El Puerto B tiene internamente unas resistencias de pull-up conectadas a sus pines (sirven para fijar el pin a un nivel de cinco voltios), su uso puede ser habilitado o deshabilitado bajo control del programa. Todas las resistencias de pull-up se conectan o desconectan a la vez. La resistencia de pull-up es desconectada automáticamente en un pin si este se programa como salida. El pin RB0/INT se puede configurar por software para que funcione como interrupción externa. El pin RA4/TOCKI del puerto A puede ser configurado como un pin de Entrada/Salida como se mencionaba anteriormente o como entrada del temporizador/contador. Cuando este pin se programa como entrada digital, funciona como un disparador de Schmitt (Schmitt trigger, ST), esto quiere decir que puede reconocer señales un poco distorsionadas y llevarlas a niveles lógicos (cero y cinco voltios). Cuando se usa como salida digital se comporta como colector abierto, por lo tanto se debe poner una resistencia de pull-up (resistencia externa conectada a un nivel lógico de cinco voltios). Como salida, la lógica es inversa: un "0" escrito al pin del puerto entrega en el pin un “1” lógico. Además, como salida no puede manejar cargas como fuente, sólo en el modo sumidero. Como este dispositivo es de tecnología CMOS, todos los pines deben estar conectados a alguna parte, nunca hay que dejarlos al aire ya que se puede dañar el integrado. Los pines que no se estén usando se deben conectar a la fuente de alimentación +5V con una resistencia de 5KΩ. La máxima capacidad de corriente de cada uno de los pines de los puertos en modo sumidero (sink) es de 25mA y en modo fuente (source) es de 20mA. El consumo de corriente del microcontrolador para su funcionamiento depende del voltaje de operación, la frecuencia y de las cargas que tengan sus pines. Por ejemplo: para un reloj de 4MHz el consumo es de aproximadamente de 2mA; aunque éste se puede reducir a 40 microamperios cuando está en el modo Sleep (en este modo el microcontrolador se detiene y disminuye el consumo de potencia).
2.5 MICROCONTROLADOR PIC16F877A 2.5.1 Arquitectura interna El PIC16F877 es un microcontrolador de Microchip de la familia media y al igual que los demás miembros de su familia se caracteriza por: •
Su procesador es tipo RISC (35 instrucciones).
© RA-MA
CAPÍTULO 2. MICROCONTROLADORES PIC 53
•
Velocidad de operación de hasta 20MHz y 200ns por ciclo de instrucción.
•
Memoria de programa Flash de 8k x 14 palabras.
•
Modo sueño de ahorro de energía.
•
Vías de entrada de lectura y escritura del procesador.
•
Tiene una arquitectura HARVARD.
•
Perro guardián Timer (WDT) con propio oscilador RC.
•
La protección de código programable.
Además de las características anteriormente señaladas, se puede resaltar lo siguiente: •
Timer0: temporizador/contador de 8 bits con preescalador de 8 bits.
•
Timer1: temporizador/contador de 16 bits con preescalador, puede ser incrementado durante el modo sueño por cristal o reloj externo.
•
Timer2: temporizador/contador de 8 bits con registro de período de 8 bits, preescalador y postescalador.
•
Dos módulos de captura, comparador, modulador por ancho de pulso (PWM).
•
El convertidor multicanal de analógico a digital de 10 bits.
•
Synchronous Serial Port (SSP) con SPI (Serial Peripheral Interface) e I2C (Maestro/Esclavo).
•
USART.
2.5.2 Pines y funciones El microcontrolador PIC16F877, como se ve en la figura 2.3, dispone de 40 pines. Los puertos son el puente entre el microcontrolador y el mundo exterior. Son líneas digitales y otras analógicas que trabajan entre cero y cinco voltios y se pueden configurar como entradas o como salidas. El PIC16F877 tiene cinco puertos. El puerto A con 6 líneas, el puerto B, C, D con 8 líneas y el puerto E con 3
54 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
líneas. Cada pin se puede configurar como entrada o como salida independiente programado por un par de registros diseñados para tal fin. En ese registro un "0" configura el pin del puerto correspondiente como salida y un "1" lo configura como entrada. MCLR
1
40
RB7/PGD
RA0/AN0
2
39
RB6/PGC
RA1/AN1
3
38
RB5
RA2/AN2/VREF-
4
37
RB4
RA3/AN3/VREF+
5
36
RB3/PGM
RA4/T0
6
35
RB2
RA5/SS/AN4
7
34
RB1
RE0/RD/AN5
8
33
RB0/INT
9
32
VDD
RE2/CS/AN7
10
31
VSS
VDD
11
30
RD7
VSS
12
29
RD6
OSC1/CLKIN
13
28
RD5
OSC2/CLKOUT
14
27
RD4
RC0/T1OSO/T1CKI
15
26
RC7/RX/DT
RC1/PWM2
16
25
RC6/TX/CK
RC2/PWM1
17
24
RC5/SDO
RC3/SCK/SCL
18
23
RC4/SDI/SDA
RD0
19
22
RD3
RD1
20
21
RD2
RE1/WR/AN6
PIC16F877
Figura 2.5. Diagrama de pines del PIC16F877
2.5.2.1 PUERTO A Puerto bidireccional o de Entrada/Salida (TTL) u otra función como: •
A0/AN0 = Pin de entrada analógica 0 (AN0).
•
A1/AN1 = Pin de entrada analógica 1 (AN1).
•
A2/AN2/VREF - = Pin de entrada analógica 2 (AN2) / voltaje de referencia negativo (VREF-).
•
A3/AN3/VREF+ = Pin de entrada analógica 3 (AN3) / voltaje de referencia positivo (VREF+).
© RA-MA
CAPÍTULO 2. MICROCONTROLADORES PIC 55
•
A4/T0CK1 = Pin de Entrada/Salida o entrada de Reloj Externo para el TMR0 (T0CK1), cuando este pin se configura como salida es de tipo Open Drain (ST), cuando funciona como salida se debe conectar a VCC (+5V) a través de una resistencia.
•
A5/AN4/SS = Pin de entrada analógica 4 (AN4) / esclavo para puerto serial asíncrono (SS).
2.5.2.2 PUERTO B Puerto bidireccional o de Entrada/Salida (TTL) u otra función como: •
B0/INT = Pin de Entrada/Salida (TTL/ST) / entrada de interrupción externa (INT).
•
B1 = Pin de Entrada/Salida (TTL).
•
B2 = Pin de Entrada/Salida (TTL).
•
B3/PGM = Pin de Entrada/Salida (TTL) / entrada de programación de bajo voltaje (PGM).
•
B4 = Pin de Entrada/Salida con Interrupción por cambio de Flanco (TTL).
•
B5 = Pin de Entrada/Salida con Interrupción por cambio de Flanco (TTL).
•
B6/PGC = Pin de Entrada/Salida con Interrupción por cambio de Flanco (TTL/ST) / Reloj de programación serial (PGC). Entrada de alta velocidad.
•
B7/PGD = Pin de Entrada/Salida con Interrupción por cambio de Flanco (TTL/ST) / Reloj de programación serial (PGD). Entrada de alta velocidad.
2.5.2.3 PUERTO C Puerto bidireccional o de Entrada/Salida (TTL), entrada de alta velocidad, u otra función como: •
C0/T1OSO/T1CK1= Pin de salida de oscilador (T1OSO) / temporizador de entrada (T1CK1).
•
C1/T1OSI/CCP2 = Pin de entrada de oscilador (T1OSI) / entrada de captura 2 / salida de comparación 2 (CCP2) / salida por ancho de pulso 2 (PWM).
56 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
•
C2/CCP1 = Pin de entrada de captura 1, salida de comparación 1 (CCP1) / salida por ancho de pulso 1 (PWM).
•
C3/SCK/SCL = Pin de entrada serial síncrona de reloj (SCK) / salida de reloj para modos SPI y I2C (SCL).
•
C4/SDI/SDA = Pin de entrada de dato en SPI (SDI) / de entrada/salida de dato en I2C (SDA).
•
C5/SDO = Pin de salida de dato en SPI (SDO).
•
C6/TX/CK = Pin usado como USART transmisión asíncrona (TX) / reloj síncrono (CK).
•
C7/RX/DT = Pin usado como USART recepción asíncrona (RX) / datos síncronos (DT).
2.5.2.4 PUERTO D Puerto bidireccional o de Entrada/Salida (TTL), o puerto paralelo esclavo para interactuar con un bus de un microprocesador: •
D0/PSP0 = Pin de Entrada/Salida (TTL).
•
D1/PSP1 = Pin de Entrada/Salida (TTL).
•
D2/PSP2 = Pin de Entrada/Salida (TTL).
•
D3/PSP3 = Pin de Entrada/Salida (TTL).
•
D4/PSP4 = Pin de Entrada/Salida (TTL).
•
D5/PSP5 = Pin de Entrada/Salida (TTL).
•
D6/PSP6 = Pin de Entrada/Salida (TTL).
•
D7/PSP7 = Pin de Entrada/Salida (TTL).
2.5.2.5 PUERTO E Puerto bidireccional o de Entrada/Salida (TTL) u otra función como:
© RA-MA
CAPÍTULO 2. MICROCONTROLADORES PIC 57
•
E0/RD/AN5 = Pin de entrada para el control de lectura del bus paralelo esclavo (RD) / entrada analógica 5 (AN5).
•
E1/WR/AN6 = Pin de entrada para el control de escritura del bus paralelo esclavo (WR) / entrada analógica 6 (AN6).
•
E2/CS/AN7 = Pin de entrada para la habilitación del circuito integrado del bus paralelo esclavo (CS) / entrada analógica 7 (AN7).
2.5.2.6 PINES ADICIONALES •
MCLR = Pin de Reset del Microcontrolador (Master Clear). Se activa (el PIC se resetea) cuando tiene un "0" lógico en su entrada.
•
VSS = Ground o Tierra.
•
VDD = Fuente Positiva (+5V).
•
OSC1/CLKIN = Entrada del Oscilador del Cristal (OSC1) / Entrada de reloj de una Fuente Externa (CLKIN).
•
OSC2/CLKOUT = Salida del Oscilador del Cristal. Se conecta al Cristal o Resonador en modo XT (Oscilador de Cristal). En modo RC (ResistenciaCondensador), este pin actúa como salida, la cual tiene 1/4 de la frecuencia que entra por el pin OCS1/CLKIN.
2.6 MICROCONTROLADOR PIC18F2550 2.6.1 Arquitectura interna El PIC18F2550 al igual que los demás miembros de su familia se caracteriza por: •
Su procesador es tipo RISC (75 instrucciones).
•
Velocidad de operación de hasta 48MHz.
•
Memoria de programa Flash de 32k.
•
Modo sueño de ahorro de energía.
58 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
•
Tiene una arquitectura HARVARD.
•
Perro guardián Timer (WDT) con propio oscilador RC.
•
La protección de código programable.
© RA-MA
Además de las características anteriormente señaladas, se puede resaltar lo siguiente: •
Contiene 21 puertas que pueden ser configuradas como entrada o salida y dos más en una sola dirección.
•
Cuatro temporizadores.
•
Dos módulos de comparación, captura o salida PWM (CCP).
•
Dos módulos de comparación, captura o salida PWM mejorada (ECCP).
•
Dos comparadores analógicos.
•
Canales de comunicación serie.
•
Canal USB.
•
Diez canales de conversión analógica a digital de 10 bits.
2.6.2 Pines y funciones El microcontrolador PIC18F2550, como se ve en la figura 2.6, dispone de 28 pines. Los puertos son el puente entre el microcontrolador y el mundo exterior. Son líneas digitales y otras analógicas que trabajan entre cero y cinco voltios y se pueden configurar como entradas o como salidas. El PIC18F2550 tiene tres puertos. El puerto A con 7 líneas, el puerto B con 8 líneas, el puerto C con 7 líneas, y el puerto E con 1 línea. Cada pin se puede configurar como entrada o como salida independiente programado por un par de registros diseñados para tal fin, excepto dos puertas, la puerta A6 que es sólo salida y la puerta E3 que es sólo entrada. En ese registro un "0" configura el pin del puerto correspondiente como salida y un "1" lo configura como entrada.
© RA-MA
CAPÍTULO 2. MICROCONTROLADORES PIC 59
MCLR/VPP/RE3
1
28
RB7/KBI3/PGD
RA0/AN0
2
27
RB6/KBI2/PGC
RA1/AN1
3
26
RB5/KBI1/PGM
RA2/AN2/VREF-/CVREF
4
25
RB4/AN11/KBI0
RA3/AN3/VREF+
5
24
RB3/AN9/CCP2/VPO
RA4/T0CKI/C1OUT/RCV
6
23
RB2/AN8/INT2/VMO
RA5/SS/AN4/HLVDIN/C2OUT
7
22
RB1/AN10/INT1/SCK/SCL
VSS
8
21
RB0/AN12/INT0/FLT0/SDI/SDA
OSC1/CLKI
9
20
VDD
10
19
VSS
OSC2/CLKO/RA6 RC0/T1OSO/T13CKI
11
18
RC7/RX/DT/SDO
RC1/T1OSI/CCP2/UOE
12
17
RC6/TX/CK
RC2/CPP1
13
16
RC5/D+/VP
VUSB
14
15
RC4/D-/VM
PIC18F2550
Figura 2.6. Diagrama de pines del PIC18F2550
2.6.2.1 PUERTO A Puerto bidireccional o de Entrada/Salida (TTL), excepto A6, u otra función como: •
A0/AN0 = Pin de entrada analógica 0 (AN0) / entrada de comparación (C1IN-).
•
A1/AN1 = Pin de entrada analógica 1 (AN1) / entrada de comparación (C2IN-).
•
A2/AN2/VREF- = Pin de entrada analógica 2 (AN2) / entrada de comparación (C2IN+) / voltaje de referencia negativo (VRES-).
•
A3/AN3/VREF+ = Pin de entrada analógica 3 (AN3) / entrada de comparación (C1IN+) / voltaje de referencia positivo (VREF+).
•
A4/T0CK1/C1OUT/RCV = Pin de Entrada/Salida o entrada de Reloj Externo para el TMR0, cuando este pin se configura como salida es de tipo Open Drain (ST), cuando funciona como salida se debe conectar a VCC (+5V) a través de una resistencia, salida de comparación (C1OUT).
•
A5/AN4/SS = Pin de entrada analógica 4 (AN4) / esclavo para puerto serial asíncrono / salida de comparación (C1OUT) / entrada de tensión alta o baja (HLVDIN).
60 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
•
© RA-MA
A6/OSC2/CLKO = Pin de salida digital, entrada de oscilador principal (OSC2) / salida de señal de reloj (CLK0).
2.6.2.2 PUERTO B Puerto bidireccional o de Entrada/Salida (TTL) u otra función como: •
B0/AN12/INT0/FLT0/SD1/SDA = Pin de entrada analógica 12 (AN12) / entrada de interrupción externa 0 (INT0) / entrada de fallo del ECCP (FLT0) / entrada de datos del SPI (SDI) / línea de datos de I2C (SDA).
•
B1/AN10/INT1/SCK/SCL = Pin de entrada analógica 10 (AN10) / entrada de interrupción externa 1 (INT1) / línea de reloj del SPI (SCK) / línea de reloj de I2C (SCL).
•
B2/AN8/INT2/VMO = Pin de entrada analógica 8 (AN8) / entrada de interrupción externa 2 (INT2) / salida de datos del USB (VMO).
•
B3/AN9/CCP2/VPO = Pin de entrada analógica 9 (AN9) / línea de entrada o salida del CCP2 (CCP2) / salida de datos del USB (VPO).
•
B4/AN11/KBI0 = Pin de entrada analógica 11 (AN11) / interrupción por cambio de pin (KBI0) / salida de CS del SPP (CSSP).
•
B5/KBI1/PGM = Interrupción por cambio de pin (KBI1) / línea de programación (PGM).
•
B6/KBI2/PGC = Interrupción por cambio de pin (KBI2) / línea de programación (PGC).
•
B7/KBI3/PGD = Interrupción por cambio de pin (KBI3) / línea de programación (PGD).
2.6.2.3 PUERTO C Puerto bidireccional o de Entrada/Salida (TTL) / entrada de alta velocidad, u otra función como: •
C0/T1OSO/T13CK1= Pin de salida del oscilador del temporizador 1 (T1OSO) / entrada de contador de los temporizadores 1 y 3.
© RA-MA
CAPÍTULO 2. MICROCONTROLADORES PIC 61
•
C1/T1OSI/CCP2/UOE = Pin de entrada del oscilador del temporizador 1 (T1OSI) / línea de entrada o salida CCP2 (CCP2) / salida OE del tranceiver del USB (UOE).
•
C2/CCP1 = Pin de entrada o salida del CCP1 (CCP1).
•
C4/D-/VM = Pin menos del bus USB (D-) / línea de entrada del USB (VM).
•
C5/D+/VP = Pin más del bus USB (D+) / línea de entrada del USB (VP).
•
C6/TX/CK = Pin de salida de transmisión del EUSART (TX) / línea de reloj del EUSART (CK).
•
C7/RX/DT/SDO = Pin de entrada de recepción del EUSART (RX) / línea de datos síncrona del EUSART (DT) / salida de datos del SPI (SDO).
2.6.2.4 PUERTO E Puerto de sólo entrada. •
E3/MCLR/VPP = Pin de reseteo externo (MCLR) / línea de programación (VPP).
2.6.2.5 PINES ADICIONALES •
VSS = Ground o Tierra.
•
VDD = Fuente Positiva (+5V).
•
OSC1/CLKI = Entrada del Oscilador del Cristal / Entrada de reloj de una Fuente Externa.
•
VUSB = Regulación de voltaje USB.
2.7 MICROCONTROLADOR PIC18F4550 2.7.1 Arquitectura interna El PIC18F4550 al igual que los demás miembros de su familia se caracteriza por:
62 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
•
Su procesador es tipo RISC (75 instrucciones).
•
Velocidad de operación de hasta 48MHz.
•
Memoria de programa Flash de 32k.
•
Modo sueño de ahorro de energía.
•
Tiene una arquitectura HARVARD.
•
Perro guardián Timer (WDT) con propio oscilador RC.
•
La protección de código programable.
© RA-MA
Además de las características anteriormente señaladas, se puede resaltar lo siguiente: •
Contiene 32 puertas que pueden ser configuradas como entrada o salida y dos más en una sola dirección.
•
Cuatro temporizadores.
•
Un módulo de comparación, captura o salida PWM (CCP).
•
Un módulo de comparación, captura o salida PWM mejorada (ECCP).
•
Dos comparadores analógicos.
•
Canales de comunicación serie.
•
Canal USB.
•
Trece canales de conversión analógica a digital de 10 bits.
2.7.2 Pines y funciones El microcontrolador PIC18F4550, como se ve en la figura 2.7, dispone de 40 pines. Los puertos son el puente entre el microcontrolador y el mundo exterior. Son líneas digitales y otras analógicas que trabajan entre cero y cinco voltios y se pueden configurar como entradas o como salidas. El PIC18F4550 tiene cinco puertos. El puerto A con 7 líneas, el puerto B con 8 líneas, el puerto C con 7 líneas, el puerto D con 8 líneas y el puerto E con 4 líneas. Cada pin se puede configurar
© RA-MA
CAPÍTULO 2. MICROCONTROLADORES PIC 63
como entrada o como salida independiente programado por un par de registros diseñados para tal fin, excepto dos puertas, la puerta A6 que es sólo salida y la puerta E3 que es solo entrada. En ese registro un "0" configura el pin del puerto correspondiente como salida y un "1" lo configura como entrada. MCLR/VPP/RE3
1
40
RB7/KBI3/PGD
RA0/AN0
2
39
RB6/KBI2/PGC
RA1/AN1
3
38
RB5/KBI1/PGM
RA2/AN2/VREF-/CVREF
4
37
RB4/AN11/KBI0/CSSPP
5
36
RB3/AN9/CCP2/VPO
6
35
RB2/AN8/INT2/VMO
RA5/SS/AN4/HLVDIN/C2OUT
7
34
RB1/AN10/INT1/SCK/SCL
RE0/AN5/CK1SPP
8
33
RB0/AN12/INT0/FLT0/SDI/SDA
RE1/AN6/CK2SPP
VDD
RA3/AN3/VREF+ RA4/T0CK1/C1OUT/RCV
9
32
RE2/AN7/OESPP
10
31
VSS
VDD
11
30
RD7/SPP7/P1D
VSS
12
29
RD6/SPP6/P1C
13
28
RD5/SPP5/P1B RD4/SPP4
OSC1/CLKI
14
27
RC0/T1OSO/T13CKI
15
26
RC7/RX/DT/SDO
RC1/T1OSI/CCP2/UOE
16
25
RC6/TX/CK
RC2/CPP1/P1A
OSC2/CLKO/RA6
17
24
RC5/D+/VP
VUSB
18
23
RC4/D-/VM
RD0/SPP0
19
22
RD3/SPP3
20
21
RD2/SPP2
RD1/SPP1
PIC18F4550
Figura 2.7. Diagrama de pines del PIC18F4550
2.7.2.1 PUERTO A Puerto bidireccional o de Entrada/Salida (TTL), excepto A6, u otra función como: •
A0/AN0 = Pin de entrada analógica 0 (AN0) / entrada de comparación (C1IN-).
•
A1/AN1 = Pin de entrada analógica 1 (AN1) / entrada de comparación (C2IN-).
•
A2/AN2/VREF- = Pin de entrada analógica 2 (AN2) / entrada de comparación (C2IN+) / voltaje de referencia negativo (VREF-).
64 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
•
A3/AN3/VREF+ = Pin de entrada analógica 3, entrada de comparación (C1IN+) / voltaje de referencia positivo (VREF+).
•
A4/T0CK1/C1OUT/RCV = Pin de Entrada/Salida o entrada de Reloj Externo para el TMR0 (T0CK1), cuando este pin se configura como salida es de tipo Open Drain (ST), cuando funciona como salida se debe conectar a VCC (+5V) a través de una resistencia, salida de comparación (C1OUT).
•
A5/AN4/SS = Pin de entrada analógica 4 (AN4) o esclavo para puerto serial asíncrono / salida de comparación (C1OUT) / entrada de tensión alta o baja (HLVDIN).
•
A6/OSC2/CLKO = Pin de salida digital, entrada de oscilador principal (OSC2) / salida de señal de reloj (CLK0).
2.7.2.2 PUERTO B Puerto bidireccional o de Entrada/Salida (TTL) u otra función como: •
B0/AN12/INT0/FLT0/SD1/SDA = Pin de entrada analógica 12 (AN12) / entrada de interrupción externa 0 (INT0) / entrada de fallo del ECCP (FLT0) / entrada de datos del SPI (SDI) / línea de datos de I2C (SDA).
•
B1/AN10/INT1/SCK/SCL = Pin de entrada analógica 10 (AN10) / entrada de interrupción externa 1 (INT1) / línea de reloj del SPI (SCK) / línea de reloj de I2C (SCL).
•
B2/AN8/INT2/VMO = Pin de entrada analógica 8 (AN8) / entrada de interrupción externa 2 (INT2) / salida de datos del USB (VMO).
•
B3/AN9/CCP2/VPO = Pin de entrada analógica 9 (AN9) / línea de entrada o salida del CCP2 (CCP2) / salida de datos del USB (VPO).
•
B4/AN11/KBI0 = Pin de entrada analógica 11 (AN11) / interrupción por cambio de pin (KBI0) / salida de CS del SPP (CSSP).
•
B5/KBI1/PGM = Interrupción por cambio de pin (KBI1) / línea de programación (PGM).
•
B6/KBI2/PGC = Interrupción por cambio de pin (KBI2) / línea de programación (PGC).
© RA-MA
•
CAPÍTULO 2. MICROCONTROLADORES PIC 65
B7/KBI3/PGD = Interrupción por cambio de pin (KBI3) / línea de programación (PGD).
2.7.2.3 PUERTO C Puerto bidireccional o de Entrada/Salida (TTL), entrada de alta velocidad, u otra función como: •
C0/T1OSO/T13CK1= Pin de salida del oscilador del temporizador 1 (T1OSO) / entrada de contador de los temporizadores 1 y 3.
•
C1/T1OSI/CCP2/UOE = Pin de entrada del oscilador del temporizador 1 (T1OSI) / línea de entrada o salida CCP2 (CCP2) / salida OE del tranceiver del USB (UOE).
•
C2/CCP1/P1A = Pin de entrada o salida del CCP1 (CCP1) / salida PWM del ECCP1 (P1A).
•
C4/D-/VM = Pin menos del bus USB (D-) / línea de entrada del USB (VM).
•
C5/D+/VP = Pin más del bus USB (D+) / línea de entrada del USB (VP).
•
C6/TX/CK = Pin de salida de transmisión del EUSART (TX) / línea de reloj del EUSART (CK).
•
C7/RX/DT/SDO = Pin de entrada de recepción del EUSART (RX) / línea de datos síncrona del EUSART (DT) / salida de datos del SPI (SDO).
2.7.2.4 PUERTO D Puerto bidireccional o de Entrada/Salida (TTL), o puerto paralelo esclavo para interactuar con un bus de un microprocesador: •
D0/SPP0 = Pin de datos del SPP (SPP0).
•
D1/SPP1 = Pin de datos del SPP (SPP1).
•
D2/SPP2 = Pin de datos del SPP (SPP2).
•
D3/SPP3 = Pin de datos del SPP (SPP3).
•
D4/SPP4 = Pin de datos del SPP (SPP4).
66 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
•
D5/SPP5/P1B = Pin de datos del SPP (SPP5) / salida PWM del ECCP1 (P1B).
•
D6/SPP6/P1C = Pin de datos del SPP (SPP6) / salida PWM del ECCP1 (P1C).
•
D7/SPP7/P1D = Pin de datos del SPP (SPP7) / salida PWM del ECCP1 (P1D).
2.7.2.5 PUERTO E Puerto de sólo entrada: •
E0/AN5/CK1SPP = Pin de entrada analógica 5 (AN5) / salida de reloj 1 del SPP (CK1SPP).
•
E1/AN6/CK2SPP = Pin de entrada analógica 6 (AN6) / salida de reloj 2 del SPP (CK1SPP).
•
E2/AN7/OESPP = Pin de entrada analógica 7 (AN7) / salida de habilitación del SPP (OESPP).
•
E3/MCLR/VPP = Pin de reseteo externo (MCLR) / línea de programación (VPP).
2.7.2.6 PINES ADICIONALES •
VSS = Ground o Tierra.
•
VDD = Fuente Positiva (+5V).
•
OSC1/CLKI = Entrada del Oscilador del Cristal / Entrada de reloj de una Fuente Externa.
•
VUSB = Regulación de voltaje USB.
3Capítulo 3
COMANDOS PIC BASIC PRO En el capítulo que se presenta a continuación se dan referencias sobre los comandos Pic Basic Pro mayormente utilizados. Para mayor información sobre los comandos PBP, busque en el manual de programación Pic Basic Pro Compiler de microEngineering Labs, Inc y revise el libro Basic para microcontroladores PIC de Christian Bodington (http://www.conexionelectronica.com).
3.1 @ Esta instrucción es utilizada para insertar dentro del código PicBasic, líneas de programa en lenguaje ensamblador. En este caso, cada línea en lenguaje ensamblador debe llevar el símbolo @ al inicio. La sintaxis del comando es la siguiente. @ instrucción en lenguaje ensamblador Ejemplo: ȱ
ȱ
led VAR BYTE ' Declaración de Variable led TRISB = $00 ' Configura el puerto B como salida led = $00 ' Inicializamos la variable led Inicio: @bsf _led,0 ' Coloca en 1 el bit 0 de la variable ' led Pause 1000 ' Pausa de 1 segundo PORTB = led ' Saca dato por el puerto B Pause 1000 ' Pausa de 1 segundo @bcf _Led,0 ' Coloca en 0 el bit 0 de la variable ' led PORTB = led ' Saca dato por el puerto B GoTo Inicio ' Salto a inicio End
68 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
ȱ
Tome en cuenta que para acceder a una variable declarada en PicBasic, desde el lenguaje ensamblador se debe anteponer el símbolo “_” (guión bajo), ya que de lo contrario no será posible el acceso a ésta. En el ejemplo, se puede ver que para acceder a la variable “led” desde el lenguaje ensamblador, se antepuso el guión bajo a la variable, quedando “_led”.ȱ
3.2 ADCIN ADCIN es un comando que permite la lectura de un canal analógico interno del microcontrolador. La sintaxis del comando es la siguiente: AdcIn Canal, Variable •
Canal es la puerta donde se recibe la señal analógica.
•
Variable es donde se almacenará el dato resultado de la conversión.
Para el uso de esta sentencia se utilizan algunas definiciones como: DEFINE ADC_BITS 8 define el número de bits. DEFINE ADC_CLOCK 3 define el reloj (rc=3). DEFINE ADC_SAMPLEUS 50 define el tiempo de muestreo en microsegundos. Además se tiene que utilizar el registro ADCON como: ADCON1 = %Valor, donde Valor resulta de la configuración de los canales. (Véase la hoja técnica del microcontrolador a usar). Ejemplo: DEFINE ADC_BITS 10 ' Definir 10 bits de resolución DEFINE ADC_CLOCK 3 ' Definir reloj (rc=3) DEFINE ADC_SAMPLEUS 50 ' Definir un tiempo de muestreo de 50 ' microsegundos TRISA=255 ' Definir el puerto A como entrada ADCON1=0 ' Definir el puerto A como analógico x VAR BYTE ' Definir x como byte ADCIN 0, x ' Leer el canal 0 y almacenar el dato en la ' variable x
3.3 BRANCH La instrucción Branch hace un salto a una etiqueta dependiendo del valor de la variable, es decir, si la variable es igual a 0, el salto se hace a la etiqueta 1; si la variable es igual a 1, el salto se hace a la etiqueta 2; si la variable es igual a 2, el
© RA-MA
CAPÍTULO 3. COMANDOS PIC BASIC PRO 69
salto se hace a la etiqueta 3, y así sucesivamente. La sintaxis del comando es la siguiente: Branch Variable, [Etiqueta1, Etiqueta2,… EtiquetaN] •
Variable es la que tomará un valor que puede ser de 0 a 255.
•
Etiqueta1, Etiqueta2… son aquellas etiquetas hacia donde va a saltar el programa de acuerdo al valor de la variable, por ejemplo si el valor de la Variable es 0, entonces se salta a la Etiqueta1, si es 1 a la Etiqueta2 y así sucesivamente.
Ejemplo: i VAR BYTE TRISB = $00 PORTB = $00 i = 0
' ' ' '
Declaración de Variable I Configura el puerto B como salida Inicializa el puerto B Inicializa la variable I
Inicio: Branch i, [Led1, Led2, Led3] Led1: High PORTB.0 ' Coloca en alto la puerta B0 Pause 1000 ' Pause de 1 segundo Low PORTB.0 ' Coloca a bajo la puerta B0 i =i + 1 ' Suma 1 a la variable i GoTo Inicio ' Salta a inicio Led2: High PORTB.1 ' Coloca en alto la puerta B1 Pause 1000 ' Pause de 1 segundo Low PORTB.1 ' Coloca a bajo la puerta B1 i =i + 1 ' Suma 1 a la variable i GoTo Inicio ' Salta a inicio Led3: High PORTB.0 ' Coloca en alto la puerta B0 Pause 1000 ' Pause de 1 segundo Low PORTB.0 ' Coloca a bajo la puerta B0 I = 0 ' Inicializa la variable I GoTo Inicio ' Salta a inicio End ' Final
3.4 BUTTON BUTTON elimina los rebotes de un pulsador o “switch”, y genera autorepetición. La sintaxis del comando es la siguiente:
70 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
Button Pin, Estado, Retardo, Rango, Variable, Acción, Etiqueta •
Pin especifica la puerta donde será conectado el pulsador.
•
Estado indica cual es estado lógico que debe ocurrir cuando el pulsador es presionado (0 o 1). Si es 0, el pulsador deberá ser activo en bajo y si es 1, el pulsador deberá ser activo en alto (véase la figura 3.1).
•
Retardo es una variable o constante (0-255) que especifica cuántos ciclos deben pasar antes de efectuar la autorepetición. Este campo tiene dos funciones especiales: si el campo retardo es igual a 0, no permite antirebote y no permite autorepetición. Si el campo retardo es igual a 255, permite el antirrebote pero no permite la auto-repetición.
•
Rango es una variable o constante (0-255) que especifica el número de ciclos entre auto-repeticiones.
•
Variable es una variable auxiliar tipo Byte, definida también al inicio del programa para uso exclusivo de la instrucción Button, por lo cual no deberá ser utilizada con otro fin en el programa. Siempre debe ser inicializada antes del comando Button.
•
Acción indica el estado del botón cuando éste no es presionado.
•
Etiqueta es hacia donde va dar un salto el programa cuando el pulsador no ha sido presionado. +5V
+5V
1k Pulsador Puerto de PIC Activo en bajo Pulsador
Puerto de PIC
Presionado es 0
Activo en alto 1k Presionado es 1
(a)
(b)
Figura 3.1. Esquema con pulsadores: (a) activo en bajo y (b) activo en alto
© RA-MA
CAPÍTULO 3. COMANDOS PIC BASIC PRO 71
Ejemplo: TRISB = %11111101 ' Configuración del puerto B A0 VAR BYTE ' Declaración de la variable A0 A0 = 0 ' inicializa la variable A0 Inicio: ' Chequea el pulsador Button PORTB.0, 1, 2, 2, A0, 0, NoPres PulsOut PORTB.1, 150 ' Envía un pulso por el puerto ' B1 NoPres: Pause 10 ' Pausa de 10 milisegundos GoTo inicio ' Salta a inicio End ' Final
3.5 CALL CALL llama a una subrutina la cual está identificada con una etiqueta, y una vez culminada la subrutina la cual contiene al final la instrucción RETURN, vuelve a la siguiente línea después del llamado. La sintaxis del comando es la siguiente: Call Etiqueta •
Etiqueta es la que va a ser llamada por la función CALL.
Ejemplo: Call Lectura ' Llamar la subrutina Lectura ---Lectura: ---Return ' Retorna una línea después del llamado de la ' subrutina End ' Final
3.6 CLEAR CLEAR inicializa todos los registros de la RAM a cero, es decir, todas las variables simultáneamente pasarán a ser cero. La sintaxis del comando es la siguiente: Clear
72 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
3.7 CLEARWDT CLEARWDT inicializa el perro guardián (watchdog timer). La sintaxis del comando es la siguiente: ClearWDT
3.8 COUNT COUNT es un comando que permite el conteo de pulsos ingresados por una puerta del microcontrolador. La sintaxis del comando es la siguiente: Count Pin, Período, Variable •
Pin es la puerta por donde se va a ingresar el tren de pulsos.
•
Período es el tiempo en milisegundos que durará el conteo.
•
Variable es donde se almacenará la cantidad de pulsos.
Ejemplo: Count PORTA.0, 1000, x ' Contar los pulsos que ingresan por la ' puerta A0 durante un segundo y ' almacenar en la variable x
3.9 DATA DATA sólo puede ser utilizada para las familias de microcontroladores que incorporan memoria EEPROM en su arquitectura. Para los microcontroladores que no cuentan con esta memoria, existe la posibilidad de agregar una memoria EEPROM externa a través del protocolo de comunicación I2C. Básicamente esta instrucción guarda varias constantes a partir de una dirección que especificamos en el campo correspondiente. La sintaxis del comando es la siguiente: Data {@Dirección inicial}, Constante1, Constante2,… ConstanteN •
Dirección inicial es la localización inicial de la memoria, a partir de esta dirección, se almacenarán las constantes, teniendo en cuenta que la siguiente posición de memoria se incrementará automáticamente.
•
Constante1, Constante2…; es el dato que se almacenará en cada posición de memoria a partir de la dirección inicial.
© RA-MA
CAPÍTULO 3. COMANDOS PIC BASIC PRO 73
Ejemplo: Data @10, 1, 3, 5, 7, 9
' En este ejemplo, la ' instrucción Data almacenará ' los valores 1, 3, 5, 7 y 9 en ' las direcciones de memoria 10, ' 11, 12, 13 y 14 respectivamente.
3.10 DTMFOUT DTMFOUT genera tonos DTMF en secuencia y a través de una puerta del microcontrolador. La sintaxis del comando es la siguiente: DTMFout Pin, {Tiempo-Enc, Tiempo-Sil}, [Tono, Tono ... Tono] •
Pin especifica la puerta por donde se emitirán los tonos DTMF.
•
Tiempo-Enc es una variable, constante o expresión que especifica la duración de cada tono en milisegundos. En caso de no utilizar este parámetro, el tiempo por defecto de cada tono es de 200ms.
•
Tiempo-Sil es una variable o constante que especifica el tiempo en milisegundos del silencio que hay entre cada tono. En caso de no utilizar este parámetro, el tiempo por defecto será de 50ms.
•
Tono puede ser una variable o constante (entre 0-15), que especifica el tono que debe ser generado.
Ejemplo: Conectando el pin de salida (puerta C0) adecuadamente a una línea telefónica, estaremos marcando sin problemas un número telefónico. En algunos casos es recomendable utilizar los tiempos de encendido y de silencio (Tiempo-Enc y Tiempo-Sil)para realizar un marcado más exacto. DTMFout PortC.0, [0,1, 2, 3, 4, 5, 6, 7, 8 ,9]
Ejemplo: los tonos tendrán una duración de 400 milisegundos cada uno y un tiempo en silencio entre ellos de 150 milisegundos. En cuanto al oscilador, se recomienda usar del tipo HS (desde 10MHz o superior) para obtener mejores resultados en la generación de tonos DTMF, así como también se recomienda utilizar un circuito de acople entre el microcontrolador y el dispositivo externo al cual enviaremos los tonos.ȱ DTMFout PortC.0, 400,150, [6, 4, 3, 8, 7, 1, 0]
74 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
Dígito en la Instrucción DTMFout
Dígito en un teclado teléfonico
© RA-MA
Frecuencias Bajas
Frecuencias Altas
1 1 697 HZ 1.209 HZ 2 2 697 HZ 1.336 HZ 3 3 697 HZ 1.477 HZ 4 4 770 HZ 1.209 HZ 5 5 770 HZ 1.336 HZ 6 6 770 HZ 1.477 HZ 7 7 852 HZ 1.209 HZ 8 8 852 HZ 1.336 HZ 9 9 852 HZ 1.477 HZ 10 0 941 HZ 1.209 HZ 11 * 941 HZ 1.336 HZ 12 # 941 HZ 1.477 HZ 13 A 697 HZ 1.633 HZ 14 B 770 HZ 1.633 HZ 15 C 852 HZ 1.633 HZ 0 D 941 HZ 1.633 HZ Tabla 3.1. Tabla de tonos para la sentencia DTMFOUT 1k
1k
Salida del PIC
A amplif icador 0,1uF
0,1uF
Figura 3.2. Circuito básico complementaria a la salida del pin del PIC
Figura 3.3. Teclado matricial clásico de 4 x 4
© RA-MA
CAPÍTULO 3. COMANDOS PIC BASIC PRO 75
3.11 EEPROM EEPROM es un comando cuya función es grabar en la memoria del microcontrolador un dato en una dirección específica. La sintaxis del comando es la siguiente: Eeprom Dirección, [Valor] •
Dirección es la localización donde se almacenará el valor.
•
Valor es el dato a almacenar.
Ejemplo: EEPROM 0, 50
' Almacenar en la posición de memoria 0 el dato ' 50
3.12 END END detiene la ejecución de un programa y pone el microcontrolador en bajo consumo de energía. La sintaxis del comando es la siguiente: End
3.13 FOR… NEXT FOR… NEXT es un comando cuya función es generar un bucle finito, es decir, repetir un número determinado de veces una porción de programa (Cuerpo). La sintaxis del comando es la siguiente: For Contador = Inicio To Final { Step Incremento/ - Decremento} { Cuerpo } Next Contador •
Contador es la variable que se incrementará o disminuirá.
•
Inicio es el valor inicial de la variable Contador.
•
Final es el valor final de la variable Contador.
76 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
•
Incremento/- Decremento es el valor con el cual se irá incrementado (valor positivo) o disminuyendo (valor negativo) la variable Contador. Este dato es opcional, si no se coloca Step, el incremento por defecto de la variable Contador será 1.
•
Cuerpo es el conjunto de operaciones que se realizarán durante cada ciclo del For... Next.
Ejemplo: For i=0 To 10 Step 1
' Hacer un bucle desde i=0 hasta i=10 ' en pasos de 1
---Next i
' Próximo valor i, esto se repetirá de ' 1 en 1 hasta que i=10, es decir 11 ' veces
3.14 FREQOUT FREQOUT genera una o dos señales de frecuencia entre 0 y 32.767 Hz previamente definidas, durante un período de tiempo también definido. En cuanto al oscilador también se recomienda usar uno de alta velocidad de 20Mhz para obtener mejores resultados en la generación de tonos, así como también se recomienda utilizar un circuito de acople entre el microcontrolador y el dispositivo externo al cual enviaremos los tonos (ver figura 15.3). La sintaxis del comando es la siguiente: FreqOut Pin, Tiempo, Frecuencia1, Frecuencia2 •
Pin especifica el pin del puerto en el cual se va a generar la señal.
•
Tiempo es una variable o constante que determina el tiempo de duración de la señal en milisegundos.
•
Frecuencia1 puede ser una variable o constante (entre 0-32.767) que especifica la frecuencia del primer tono.
•
Frecuencia2 puede ser una variable o constante (entre 0-32.767) que especifica la frecuencia del segundo tono, el cual sale mezclado con la frecuencia 1.
© RA-MA
CAPÍTULO 3. COMANDOS PIC BASIC PRO 77
Ejemplo: ' Genera un tono de 2.000Hz durante 1 segundo FreqOut PortC.2, 1000, 2000 ' Genera dos tonos a la vez durante 1 segundo, uno de 1500Hz y ' otro de 3500Hz FreqOut PortC.2, 1000, 1500, 3500
3.15 GOSUB GOSUB ejecuta subrutinas dentro de un programa principal donde la ubicación de las mismas estará definida por la etiqueta correspondiente. Una vez ejecutada la subrutina y encontrada la instrucción Return, la ejecución del programa continúa en la línea siguiente a la instrucción Gosub. La sintaxis del comando es la siguiente: GoSub Etiqueta •
Etiqueta es a donde va a continuar el programa, ir a Etiqueta.
Ejemplo: GoSub Leer ' Ir a la subrutina Leer GoSub Escribir ' Ir a la subrutina Escribir ---Leer: ---Return ' Va una línea después de la línea desde donde ' se envió, es decir a GoSub Escribir
3.16 GOTO GOTO es un comando cuya función es la de ir a una etiqueta dentro de un programa. La sintaxis del comando es la siguiente: GoTo Etiqueta •
Etiqueta es a donde va a continuar el programa, ir a Etiqueta.
Ejemplo: Inicio:
' Etiqueta Inicio ---GoTo Inicio
' Volver a Inicio
78 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
3.17 HIGH HIGH es un comando que coloca a nivel alto (1 lógico o +5 voltios) una puerta del microcontrolador. La sintaxis del comando es la siguiente: High Pin •
Pin es la puerta de salida que se va a colocar a nivel alto (+5V).
Ejemplo: High PORTB.0
' Colocar a alto la puerta B0
3.18 I2CREAD I2CREAD es un comando que permite la lectura de una memoria del tipo 24LCXX usando el protocolo I2C. Algunos tipos de memoria que se pueden utilizar están especificados en la tabla 3.2 junto con algunas características técnicas necesarias para su programación. La sintaxis del comando es la siguiente: I2CRead PinDato, PinReloj, Control, Dirección, [Variable]
PinDato es la puerta por donde se envía la dirección y se leen los datos.
PinReloj es la puerta por donde se dará la sincronía.
Control es un byte que específica en qué bloque está almacenada la data.
Dirección es la posición de memoria que se desea leer.
Variable es donde se almacenará el dato obtenido de la dirección de memoria seleccionada.
El circuito de la figura 3.4 muestra la conexión entre el microcontrolador PIC16F84A y la memoria 24LC01B utilizando el protocolo de dos hilos I2C. De acuerdo con esto la puerta A0 del microcontrolador va conectado al pin de datos y la puerta A1 del microcontrolador va al pin de reloj. El código del bloque o control de la memoria (considerando que x toma el valor 0), es 10100000, que en decimal es 160. Además según la tabla 3.2, la memoria 24LC01B consta de un único bloque.
© RA-MA
CAPÍTULO 3. COMANDOS PIC BASIC PRO 79
Tamaño de Modelo Capacidad Control dirección 24LC01B 128 bytes %1010xxx0 1 byte 24LC02B 256 bytes %1010xxx0 1 byte 24LC04B 512 bytes %1010xxb0 1 byte 24LC08B 1k bytes %1010xbb0 1 byte 24LC16B 2k bytes %1010bbb0 1 byte 24LC32B 4k bytes %1010ddd0 2 bytes 24LC65 8k bytes %1010ddd0 2 bytes Tabla 3.2. Modelos de memorias 24LCXX y algunas características (x es una condición
no importa, y b y d pueden ser 1 ó 0 dependiendo del bloque que se quiera utilizar) +5V
+5V
+5V
+5V
4,7K 4,7K
1 2 3 4 5 6 7 8 9
RA2 RA1 RA3 RA0 RA4/TOCK1 OSC1 OSC2 MCLR VSS VDD RB7 RB0/INT RB1 RB6 RB2 RB5 RB3 RB4
18 17 16 15 14 13 12 11 10
1 2 3 4 4MHz
A0 A1 A2 VSS
VCC WP SCL SDA
+5V
4,7K
8 7 6 5
24LC01B
22pF
22pF
PIC16F84A
Figura 3.4. Interfaz entre microcontrolador PIC16F84A y memoria 24LC01B
Ejemplo: ' De acuerdo con el circuito de la figura 3.1, PinDato es la ' puerta A0 y PinReloj es la puerta A1 ' Leer la dirección 10 del bloque de memoria 160 y almacenar ' en la variable x I2CRead PORTA.0, PORTA.1, 160, 10, [x]
3.19 I2CWRITE I2CWRITE es un comando que permite escribir o grabar un dato en una memoria del tipo 24LCXX usando el protocolo I2C, prácticamente es la contraparte del comando I2CREAD. La sintaxis del comando es la siguiente: I2CWrite PinDato, PinReloj, Control, Dirección, [Valor]
80 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
•
PinDato es la puerta por donde se envía la dirección y se escriben los datos.
•
PinReloj es la puerta por donde se dará la sincronía.
•
Control es un byte que específica en qué bloque se almacenará la data.
•
Dirección es la posición de memoria donde se desea almacenar el dato.
•
Valor es el dato que se desea almacenar.
Ejemplo: ' De acuerdo con el circuito de la figura 3.1, PinDato es la ' puerta A0 y PinReloj es la puerta A1 ' Guardar en la dirección 15 del bloque de memoria 160 el dato ' 128 I2CWrite PORTA.0, PORTA.1, 160, 15, [128]
3.20 IF… THEN IF… THEN o Si… ENTONCES es un comando que sirve para formar proposiciones condicionales. Si se cumple con la condición, se ejecuta una conclusión, en caso contrario, se ejecuta otra conclusión. La sintaxis del comando es la siguiente: IF... Then IF Condiciones Then Etiqueta IF Condiciones Then Conclusión 1 Else Conclusión 2 EndIf •
IF... Then significa Si... Entonces es un comando que se encarga de la evaluación de una variable o variables de acuerdo a Condiciones. Para el primer caso, si se cumple con la Condición, entonces automáticamente se irá a la Etiqueta. Para el segundo caso, si se
© RA-MA
CAPÍTULO 3. COMANDOS PIC BASIC PRO 81
cumple con la Condición entonces la expresión será verdadera y se realiza la Conclusión 1 que está debajo de Then, en caso contrario, la Condición será falsa y se cumplirá con la Conclusión 2 que está debajo de Else. Ejemplo: Inicio: If x=1 Then Enviar GoTo Inicio Enviar:
' ' ' ' ' '
Etiqueta Inicio Si x es 1 entonces ir a la etiqueta Enviar En caso contrario, x no es 1, volver a Inicio Etiqueta Enviar
---GoTo Inicio
' Volver a Inicio
3.21 INPUT INPUT es un comando cuya función es la de configurar como entrada una puerta del microcontrolador. La sintaxis del comando es la siguiente: Input Pin •
Pin es la puerta que se quiere definir como entrada.
Ejemplo: Input PORTB.5
' Define la puerta B5 como entrada
3.22 LCDIN LCDIN carga el dato almacenado en una dirección de la memoria RAM de la pantalla de cristal líquido en una variable previamente definida. La sintaxis del comando es la siguiente: LCDin Dirección, [Variable1, Variable2,…] •
Dirección está referida a la ubicación de la memoria RAM de la pantalla de cristal líquido donde se guardarán las variables.
•
Variable1, Variable2,… es la información que se va a guardar en la memoria RAM de la pantalla de cristal líquido.
82 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
Ejemplo: x VAR BYTE LCDIn $10, [x] ' Lee el dato en la dirección de memoria $10 y ' lo carga en la variable x.
3.23 LCDOUT LCDOUT es un comando que se utiliza para la visualización de datos en una pantalla de cristal líquido paralelo. Los datos que se pueden mostrar son del tipo alfanuméricos, es decir, números o letras. La sintaxis del comando es la siguiente: LCDOut Datos •
Datos está referido a lo que se va a mostrar en la pantalla de cristal líquido. Comando Acción $FE, 1 Limpia la pantalla $FE, 2 Retorna al inicio de la primera línea $FE, $0C Apaga el Cursor $FE, $0E Cursor bajo (Underline "_") activo $FE, $0F Cursor intermitente activo $FE, $10 Mueve el cursor un espacio a la izquierda $FE, $14 Mueve el cursor un espacio a la derecha $FE, $C0 Mueve el cursor al inicio de la segunda línea $FE, $90 Mueve el cursor al inicio de la tercera línea $FE, $D0 Mueve el cursor al inicio de la cuarta línea Tabla 3.3. Comandos para manipular la pantalla de cristal líquido
Ejemplos: LCDOUT $Fe, 1, “INGENIERIA”
' Mostrar en la primera línea ' INGENIERIA LCDOUT $Fe, $C0, “ELECTRONICA” ' Mostrar en la segunda ' línea ELECTRONICA LCDOUT $Fe, 1, #t ' Mostrar en la primera línea ' la variable t en decimal.
© RA-MA
CAPÍTULO 3. COMANDOS PIC BASIC PRO 83
1 2 3 4 5 6 7 8 9 10 11 12 13 14
Vss Vdd Vo Rs R/W E 0 1 2 3 4 5 6 7
LCD
+5V
20k
+5V +5V
+5V
U2 10k
10k
1 2 3 4 5 6 7 8 9
RA2 RA1 RA3 RA0 RA4/TOCK1 OSC1 MCLR OSC2 VSS VDD RB0/INT RB7 RB1 RB6 RB2 RB5 RB3 RB4
18 17 16 15 14 13 12 11 10
4MHz
22pF
22pF
PIC16F84A
Figura 3.5. Configuración típica entre el microcontrolador PIC16F84A y una pantalla de cristal líquido paralelo Hitachi
3.24 LOW LOW es un comando que coloca a nivel bajo o 0 lógico (0V) una puerta del microcontrolador. La sintaxis del comando es la siguiente: Low Pin •
Pin es la puerta de salida que se va a colocar a nivel bajo (0V).
Ejemplo: Low PORTB.7
' Colocar a bajo la puerta B7
3.25 NAP NAP pone el microcontrolador en modo de bajo consumo de energía por períodos de tiempo definidos en la tabla 3.4. La sintaxis del comando es la siguiente:
84 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
NAP Período •
Período está definido por un número de 0 a 7 que indicará el tiempo que permanecerá el microcontrolador en modo de bajo consumo.
Ejemplo: NAP 6 ' Bajo consumo de energía durante 1152 milisegundos
Periodo Retardo (ms) 0 18 1 36 2 72 3 144 4 288 5 576 6 1.152 7 2.304 Tabla 3.4. Períodos de tiempo de bajo consumo para la sentencia NAP
3.26 ON INTERRUPT ON INTERRUPT permite el manejo de la interrupción externa del microcontrolador. El método es escribir un manejador de interrupciones PBP. Es similar a una subrutina PBP, pero termina con un RESUME. Cuando ocurre una interrupción, se marca con una bandera. Cuando la ejecución de la declaración PBP que se estaba ejecutando termina, el programa salta al manejador de interrupciones indicado en la Etiqueta. Una vez que termina el trabajo del manejador, una declaración RESUME envía el programa de vuelta a donde estaba cuando ocurrió la interrupción, tomando todo como lo dejó. DISABLE y ENABLE permiten que distintas secciones de un programa PBP se ejecuten sin la posibilidad de ser interrumpidas. El lugar más notorio para usar DISABLE es justo antes del actual manejador de interrupciones, o el manejador puede ser colocado antes que la declaración ON INTERRUPT ya que la bandera de interrupciones no se chequea antes del primer ON INTERRUPT en un programa. Se deben tener en cuenta los registros OPTION para habilitar el pullup del puerto B, el valor del registro es de $7F. También se usa el registro INTCON (véase el manual del microcontrolador que hay que usar), para habilitar las interrupciones con $90 y limpiar la bandera respectiva. La sintaxis del comando es la siguiente:
© RA-MA
CAPÍTULO 3. COMANDOS PIC BASIC PRO 85
On Interrupt GoTo Etiqueta •
Etiqueta es el manejador donde se encuentra la rutina que se va a realizar cuando se active la interrupción.
Ejemplo: OPTION_REG = $7f ' Habilita el pullups del PORTB ' El manejador se denomina Interrupcion y se va hacia esta ' etiqueta cuando se activa la puerta B0 On Interrupt GoTo Interrupcion INTCON = $90 ' Habilitar la Interrupción de la puerta B0 … Disable ' Deshabilita las interrupciones del manejador Interrupcion: ' Subrutina de la interrupción ---INTCON.1 = 0 ' Borrar las interrupciones de la ' bandera Resume ' Retorna al programa principal Enable ' Habilitar las interrupciones luego ' del manejador
3.27 OUTPUT OUTPUT es un comando cuya función es la de configurar como salida una puerta del microcontrolador. La sintaxis del comando es la siguiente: Output Pin •
Pin es la puerta que se desea definir como salida.
Ejemplo: Output PORTB.4
' Define la puerta B4 como salida
3.28 PAUSE PAUSE es un comando que permite dar una pausa o retardo en milisegundos. La sintaxis del comando es la siguiente: Pause Período •
Período es el tiempo de ajuste expresado en milisegundos.
86 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
Ejemplo: Pause 100
' Hacer una pausa de 100 milisegundos
3.29 PAUSEUS PAUSEUS realiza una pausa en el programa por un período definido en microsegundos. Esta instrucción no pone al microcontrolador en modo de bajo consumo de energía. La sintaxis del comando es la siguiente: PauseUs Período •
Período es el tiempo de ajuste expresado en microsegundos.
Ejemplo: Pause 300
' Hacer una pausa de 300 microsegundos
3.30 POT POT es un comando que permite medir el valor aproximado de una resistencia variable. Para ello utiliza un circuito R-C como se muestra en la figura 3.6. La sintaxis del comando es la siguiente: Pot Pin, Escala, Variable •
Pin es la puerta donde se conecta el circuito R-C. Los valores de la resistencia variable oscilan entre 5kΩ y 50kΩ, el condensador típico es de 0,1µF cerámico.
•
Escala de medición, la máxima escala es 255.
•
Variable es donde se almacena el dato leído, ésta es tipo byte, es decir va de 0 a 255.
Ejemplo: Pot PORTB.0, 255, x
' ' ' '
Leer el valor de la resistencia conectada a la puerta B0 en escala de 0 a 255 y almacenar el dato obtenido en la variable x
© RA-MA
CAPÍTULO 3. COMANDOS PIC BASIC PRO 87
Puerta del PIC
5 - 50K
0,1uF
Figura 3.6. Configuración R-C para leer el valor de una resistencia
3.31 PULSIN PULSIN es un comando que permite medir la cantidad de pulsos que ingresan por una puerta, tomando en cuenta los niveles altos y bajos. La sintaxis del comando es la siguiente: PulsIn Pin, Estado, Variable •
Pin es la puerta por donde se medirá la cantidad de pulsos.
•
Estado puede ser 0 ó 1, dependiendo de cuál de los estados de los pulsos se quiere contar, si Estado es 0 se cuentan los pulsos de nivel bajo y si Estado es 1 se cuentan los pulsos de nivel alto.
•
Variable es donde se almacena la cantidad de pulsos leídos.
Ejemplo: PulsIn PORTB.1, 0, w
' Contar la cantidad de pulsos de nivel ' bajo de la puerta B1 y almacenar en ' la variable w
3.32 PULSOUT PULSOUT es un comando cuya función es la de generar una señal cuadrada por una puerta del microcontrolador durante un período de tiempo. Este período va en incrementos de 10µS cuando se usa un cristal de 4MHz y 2µS cuando se usa un cristal de 20MHz. La sintaxis del comando es la siguiente: PulsOut Pin, Periodo •
Pin es la puerta por donde se genera los pulsos.
88 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
•
© RA-MA
Período es el ancho del pulso que toma valores de 0 a 255, y cada incremento es de 10µS cuando se utiliza un cristal de 4MHz y 2µS cuando el cristal es de 20MHz.
Ejemplo: PulsOut PORTB.2, 100
' Generar un pulso de un milisegundo ' por la puerta B2
3.33 PWM PWM es un comando que permite generar una señal por ancho de pulso usando una configuración R-C como se muestra en la figura 3.7, además, se puede utilizar como salida analógica. La sintaxis del comando es la siguiente: Pwm Pin, Ancho, Ciclo •
Pin es la puerta donde se conecta el circuito R-C que enviará la salida por ancho de pulso; esta salida podría servir como una salida analógica. Mayormente, se utiliza alguno de los pines del puerto B.
•
Ancho del pulso, la escala va de 0 (0%) a 255 (100%).
•
Ciclo es la cantidad de veces que se van a repetir los pulsos. El máximo es 255. 10K
Puerta del PIC
Salida analógica + 10uF
Figura 3.7. Configuración R-C para generar una salida analógica
Ejemplo: PWM PORTB.7, 127, 10
' Generar una señal simétrica (50% para ' 0 y 50% para 1) por la puerta B7 por ' 10 ciclos
© RA-MA
CAPÍTULO 3. COMANDOS PIC BASIC PRO 89
3.34 RANDOM RANDOM permite el almacenamiento de números aleatorios en una variable de 16 Bits, es decir, del tipo word. La sintaxis del comando es la siguiente: RANDOM Variable •
Variable es donde se almacenará el número aleatorio de 16 bits.
3.35 READ READ es un comando que permite la lectura de la memoria interna del microcontrolador, dando el valor de la posición de memoria o dirección y se obtiene el dato almacenado y se guarda en una variable. La sintaxis del comando es la siguiente: Read Dirección, [Variable] •
Dirección es la localización donde está almacenado el valor a leer.
•
Variable es donde se almacena el valor leído.
Ejemplo: Read 10, y
' Leer la dirección 10 de la memoria del ' microcontrolador y almacenar el dato ' obtenido en la variable y
3.36 RETURN RETURN permite el retorno de una subrutina desde donde se ha generado un salto del tipo Call o Gosub. La sintaxis del comando es la siguiente: Return Ejemplo: GoSub Leer ' Ir a la subrutina Leer GoSub Visualizar ' Ir a la subrutina Escribir ---Leer: ---Return ' Va una línea después de la línea desde donde ' se envió, es decir a GoSub Visualizar
90 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
3.37 REVERSE REVERSE cambia el estado de un puerto del microcontrolador, es decir, si el pin es entrada, éste pasa a ser salida, o si un pin es salida, éste pasa a ser entrada. La sintaxis del comando es la siguiente: REVERSE Pin •
Pin es el puerto que se cambiará de entrada a salida o viceversa.
Ejemplo: TRISB.0=0 ' Configura la puerta B0 como salida Inicio: ---Reverse PORTB.0 ' Configura la puerta B0 como ' entrada
3.38 SELECT CASE SELECT CASE es una variante del IF… THEN con la diferencia que utiliza varias condiciones o casos respecto a una variable. La sintaxis del comando es la siguiente: Select Case Select Case Variable Case Condición 1 Conclusión 1 Case Condición 2 Conclusión 2 Case Else Conclusión 3 End Select Select Case significa seleccionar caso, si la Variable cumple con la Condición 1 (Case) se realiza la Conclusión 1 que está debajo de ésta, si se cumple
© RA-MA
CAPÍTULO 3. COMANDOS PIC BASIC PRO 91
con el siguiente caso o Condición 2, se ejecuta la Conclusión 2 y así sucesivamente para cada caso, si no se cumple con ningún caso (Case Else), se ejecuta la Conclusión 3 que está debajo de ésta. Ejemplo: Select Case w Case 0 z=10 Case 1, 2 z=25 Case Is > 4 z=40 Case Else z=0 End Select
' ' ' ' ' ' ' ' ' ' '
Seleccionar caso para la variable w Si w es 0 entonces z es 10 Si w es 1 ó 2 entonces z es 25 Si w es mayor que 4 entonces z es 40 Si w no cumple con ningún caso anterior entonces z es 0 Fin de Select Case
3.39 SERIN2 SERIN2 es un comando que se utiliza para establecer comunicación con otro equipo de forma serie, específicamente para la recepción de datos. La sintaxis del comando es la siguiente: SerIn2 PinRx, Velocidad, Tiempo_Espera, Etiqueta, [Wait ( ), Variables] •
PinRx es la puerta por donde se recepcionan los datos.
•
Velocidad de recepción de bits expresada como un número, por ejemplo, para una velocidad de 1.200bps el código que se tiene que escribir es 813 en tipo no invertido o 17197 en tipo invertido. Estos datos se muestran en la tabla 3.2.
•
Tiempo_Espera es el tiempo que se espera para recepcionar los datos, este tiempo es expresado en milisegundos.
•
Etiqueta es hacia donde se va si los datos no son recepcionados durante el tiempo de espera.
•
Wait () es el primer dato que espera recibir de la cadena enviada por el computador, generalmente son caracteres.
•
Variables es donde se almacenan los datos recepcionados que han sido previamente declarados y pueden ser, por ejemplo, byte o word.
92 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
Velocidad (bps) Bits 0-12 300 3313 600 1646 1.200 813 2.400 396 4.800 188 9.600* 84 19.200* 32 Tabla 3.5. Velocidades de transmisión que se pueden utilizar con el microcontrolador. (*) Para usar estas velocidades, el cristal debe ser mayor de 4MHz
Para colocar los códigos correspondientes a la velocidad tome en cuenta la tabla 3.5, pero si usted no recuerda todos los códigos podría recordar la siguiente fórmula:
1.000.000 − 20 Velocidad Con esta ecuación se puede encontrar el código en 13 bits de la velocidad correspondiente. Pero no sólo son 13 bits los utilizados, sino 16 bits (0-15). El bit 13 sirve para establecer paridad (1 para paridad y 0 para no paridad), el bit 14 sirve para definir el tipo de envío, es decir, puede ser invertido (1) y no invertido (0). El bit 15 no se utiliza. Por ejemplo si se requiere una velocidad de 1.200bps, sin paridad, y en modo no invertido, el número sería 813, es decir:
1.000.000 − 20 = 813.33 1200 Ahora sólo se utiliza la parte entera, es decir, 813.
81310 = 000011001011012 Como se observa en la ecuación anterior, 813 es equivalente en bits (0-13) a 00001100101101, pero qué ocurriría si se dijera 1.200bps pero en modo invertido, entonces se debe agregar el bit 14 a 1 lógico, es decir:
1000011001011012 = 17.19710
© RA-MA
CAPÍTULO 3. COMANDOS PIC BASIC PRO 93
En conclusión resulta un número en bits (0-14) igual a 100001100101101 que en base 10 es 17.197, que sería el código para utilizar una velocidad de 1.200bps en modo invertido. Para realizar una comunicación con el computador se puede utilizar un pequeño circuito basado en un inversor de alta velocidad 74HC14 junto a una resistencia que permite limitar corriente. La velocidad a emplear dependerá del cristal y será en tipo no invertido. Véase la figura 3.8. DB9
22k
Puerta del PIC
2
1 74HC14
DB25
RS-232 TX
Pin 3 Pin 2
RS-232 GND
Pin 5 Pin 7
Figura 3.8. Circuito de interfaz entre microcontrolador y PIC
Ejemplo: ' Recepciona información por la puerta A0 a una velocidad de ' 1.200bps tipo no invertido, con un tiempo de espera de 10 ' milisegundos, si no se detectan datos, se va a la etiqueta ' No_Dato, si se detectan datos, primero espera que llegue el ' carácter “$” y el siguiente dato se almacena en B0 SerIn2 PORTA.0, 813, 10, No_Dato, [Wait “$”, B0]
3.40 SEROUT2 SEROUT2 es un comando que permite enviar datos de un microcontrolador a otro o hacia un computador utilizando comunicación serie. La sintaxis del comando es la siguiente: SerOut2 PinTx, Velocidad, [“Caracteres”, Variables] •
PinTx es la puerta por donde se va a transmitir.
•
Velocidad de transmisión de bits expresada como un número, por ejemplo para una velocidad de 1.200bps el código que se tiene que escribir es 813 en tipo no invertido o 17.197 en tipo invertido. Véase la tabla 3.2 y las ecuaciones vistas en el comando SERIN2.
•
Caracteres son conjuntos de letras o números que pueden ir entre comillas, cuando se envían caracteres sin comillas se esta mandando el valor en ASCII. Por ejemplo, si usted escribe “13”, usted estará enviando los caracteres 1 y 3, sin embargo si usted escribe sólo 13 estará enviando el valor ASCII correspondiente a 13, es decir, ENTER.
94 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
Estos caracteres pueden servir para enviar comandos al computador o separar variables. •
Variables son los datos que previamente declarados como byte o word van a ser transmitidos. Para que estos datos sean considerados como valores en el computador, a la variable se le antepone DEC seguido de la cantidad de caracteres que se quiere enviar, por ejemplo si se tiene una variable tipo byte, está va de 0 a 255, es decir tendrá 3 caracteres como mayor longitud (de 100 a 255). Otra forma de convertir los datos a valores en decimal, se da anteponiendo a la variable el símbolo #.
Para realizar una comunicación con el computador se puede utilizar un pequeño circuito basado en un inversor de alta velocidad 74HC14 junto con una resistencia que permite limitar corriente. La velocidad que hay que emplear dependerá del cristal y será en tipo no invertido. Véase la figura 3.9. DB9 Puerta del PIC
3
4 74HC14
DB25
RS-232 RX
Pin 2 Pin 3
RS-232 GND
Pin 5 Pin 7
Figura 3.9. Circuito de interfaz entre microcontrolador y PIC
Ejemplo: ' Transmite las variables B0 y B1 por la puerta A1 a una ' velocidad de 1.200bps tipo invertido SerOut2 PORTA.1, 17197, [B0, B1]
3.41 SHIFTIN SHIFTIN es un comando que sirve para realizar una comunicación síncrona, en este caso la recepción de datos. La sintaxis del comando es la siguiente: ShiftIn PinDato, PinReloj, Modo, [Variable\NBits] •
PinDato es la puerta por donde se van a recibir los datos.
•
PinReloj es la puerta por donde se dará la sincronía.
•
Modo significa cómo se van a recibir los bits, por ejemplo, si primero se recepciona el bit. MSB o el LSB, o cómo se envía la señal de reloj; para ello se designa un número (véase la tabla 3.6). En la figura 3.10 se
© RA-MA
CAPÍTULO 3. COMANDOS PIC BASIC PRO 95
muestra la relación existente entre los datos y el reloj tomando en cuenta los modos de funcionamiento. •
Variable es donde se almacenará el dato recepcionado por el PinDato.
•
Nbits es la cantidad de bits que contiene la Variable. Modo
N.° de Modo
Operación Se lee los datos desde el bit más significativo. Lee la data antes de enviar el reloj. MSBPRE 0 El reloj empieza en bajo. Se lee los datos desde el bit menos significativo. Lee la data antes de enviar el reloj. LSBPRE 1 El reloj empieza en bajo. Se lee los datos desde el bit más significativo. Lee la data luego envía el reloj. MSBPOST 2 El reloj empieza en bajo. Se lee los datos desde el bit menos significativo. Lee la data luego envía el reloj. LSBPOST 3 El reloj empieza en bajo. Se lee los datos desde el bit más significativo. Lee la data antes de enviar el reloj. 4 El reloj empieza en alto. Se lee los datos desde el bit menos significativo. Lee la data antes de enviar el reloj. 5 El reloj empieza en alto. Se lee los datos desde el bit más significativo. Lee la data luego envía el reloj. 6 El reloj empieza en alto. Se lee los datos desde el bit menos significativo. Lee la data luego envía el reloj. 7 El reloj empieza en alto. Tabla 3.6. Modos de comunicación para SHIFTIN
Ejemplo: ' Leer la variable x0 en 8 bits usando la puerta B0 ' sincronizada con la puerta de reloj B1 en modo 2 ' La data se lee desde el bit más significativo y luego se ' envía el reloj ShiftIn PORTB.0, PORTB.1, 2, [x0\8]
ȱ
96 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
Figura 3.10. Diagrama de tiempos de la relación existente entre los datos y la señal de reloj. Gráfico del manual de programación Pic Basic Pro Compiler de microEngineering Labs, Inc
3.42 SHIFTOUT SHIFTOUT es un comando que sirve para realizar una comunicación síncrona, en este caso la transmisión de datos. La sintaxis del comando es la siguiente: ShiftOut PinDato, PinReloj, Modo, [Variable\NBits] •
PinDato es la puerta por donde se van a enviar los datos.
•
PinReloj es la puerta por donde se dará la sincronía.
•
Modo significa cómo se van a enviar los bits, por ejemplo, si primero se recepciona el bit. MSB o el LSB, o cómo se envía la señal de reloj; para ello se designa un número (véase la tabla 3.4). En la figura 3.8 se muestra la relación existente entre los datos y el reloj tomando en cuenta los modos de funcionamiento.
•
Variable es el valor que se enviará por el PinDato.
•
Nbits es la cantidad de bits que contiene la Variable.
© RA-MA
CAPÍTULO 3. COMANDOS PIC BASIC PRO 97
Figura 3.11. Diagrama de tiempos de la relación existente entre los datos y la señal de reloj. Gráfico del manual de programación Pic Basic Pro Compiler de microEngineering Labs, Incȱ
Ejemplo: ' Envía la variable w0 en 8 bits usando la puerta B0 ' sincronizada con la puerta de reloj B1 en modo 1. La data se ' envía desde el bit más significativo. ShiftOut PORTB.0, PORTB.1, 1, [w0\8]
Modo LSBFIRST
N.° de Modo 0
Operación Se envían los datos desde el bit menos significativo. El reloj empieza en bajo. MSBFIRST 1 Se envían los datos desde el bit más significativo. El reloj empieza en bajo. Se envían los datos desde el bit menos significativo. El reloj empieza en alto. 4 Se envían los datos desde el bit más significativo. 5 El reloj empieza en alto. Tabla 3.7. Modos de comunicación para SHIFTOUT
3.43 SLEEP SLEEP lleva a un estado de bajo consumo de energía a un microcontrolador por un período de tiempo definido en segundos. La sintaxis del comando es la siguiente: SLEEP Período Ejemplo: Sleep 20 ' Bajo consumo de energía durante 20 segundos
98 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
3.44 SWAP SWAP intercambia el contenido de dos variables. La sintaxis del comando es la siguiente: SWAP Variable1, Variable2 •
Variable1, Variable2 intercambiados.
son aquellas variables cuyos valores serán
Ejemplo: a VAR BYTE b VAR BYTE ---SWAP a, b
' Define la variable a como byte ' Define la variable b como byte ' El valor de la variable a se almacenará en b ' y el valor de b se almacenará en a
----
3.45 TOOGLE TOGGLE invierte el estado lógico de un pin específico, es decir, si un pin se encuentra en estado lógico cero (0), éste pasa a ser uno lógico (1) y viceversa. La sintaxis del comando es la siguiente: TOGGLE Pin •
Pin es la puerta que se le cambiará el estado.
Ejemplo: High PORTA.0 ' Pone en uno (1) RA0 ---Inicio: Toggle PORTA.0 ' Invierte el estado lógico de ' la puerta A0 ----
3.46 TRIS TRISB es un comando que permite definir una puerta o un puerto como entrada o salida, dependiendo del valor que se le coloque (0 para entrada y 1 para salida). La sintaxis del comando es la siguiente: TRISPuerto = Valor
© RA-MA
CAPÍTULO 3. COMANDOS PIC BASIC PRO 99
•
Puerto es la puerta o puerto que se definirá como entrada o como salida.
•
Valor será un número en decimal o en binario que definirá el estado de un puerto, 0 para salida y 1 para entrada.
Ejemplos: TRISA= %11111111 TRISB= %00000000 TRISC= %10101010 TRISA.1= 0
' ' ' ' ' ' '
Coloca el puerto A como entrada, es equivalente a TRISA= 255 Coloca el puerto B como salida, es equivalente a TRISB= 0 Coloca algunas puertas de C como entrada y otras como salida Coloca la puerta A1 como entrada
3.47 WHILE…WEND WHILE… WEND mantiene la ejecución de las instrucciones involucradas, es decir, entre While y Wend, hasta que se cumpla la condición establecida. La sintaxis del comando es la siguiente: WHILE Condición Cuerpo WEND •
Condición es lo que se tiene que cumplir para que se ejecuten las tareas que se encuentran en el Cuerpo.
Ejemplo: a VAR BYTE a = 0 Pause 200 LCDOut $fe, 1
' ' ' ' '
Declaración de variable "A" Inicializa la variable "A" Pausa de 200 milisegundos para la pantalla de cristal líquido Limpia la pantalla de cristal líquido
Inicio: While A < 5 ' Condicional While - Wend High PORTB.0 ' Coloca la puerta B0 a 1 lógico Pause 1000 ' Pausa de 1 segundo Low PORTB.0 ' Coloca la puerta B0 a 0 lógico Pause 1000 ' Pausa de 1 segundo a = a + 1 ' Incrementa en uno (1) la ' variable a Wend LCDOUT $fe, 2, "While - Wend" ' Muestra mensaje
100 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
LCDOut $fe, $C0,"ha terminado!" ' Muestra mensaje Espera: GoTo Espera ' Salta a la etiqueta "espera" End ' Fin de programa
3.48 WRITE WRITE es un comando que hace posible la grabación de datos en la memoria interna del microcontrolador, simplemente especificando la dirección y lo que se desea grabar. La sintaxis del comando es la siguiente: Write Dirección,Valor •
Dirección es la posición de memoria donde se almacenará el dato o Valor.
•
Valor será un número en decimal que se desea almacenar.
Ejemplo: Write 10, 35
ȱ ȱ
' Almacenar en la dirección 10 el valor 35
4Capítulo 4
INSTALACIÓN DE SOFTWARE En el primer capítulo se dedicaron unos párrafos a las herramientas de desarrollo que se emplean para la puesta en marcha de un sistema basado en microcontrolador; ahí se describieron herramientas tales como editores, compiladores, grabadores, entre otras. En el presente capítulo se describirá el empleo de tres herramientas que podemos llamar fundamentales para el desarrollo de un circuito con microcontrolador PIC, el editor, el compilador y el grabador.
4.1 DESCRIPCIÓN DE LAS HERRAMIENTAS DE DESARROLLO 4.1.1 El Editor CodeDesigner Lite Para la edición del código de programa se empleará el CodeDesigner Lite, software que se puede bajar de Internet, y sirve exclusivamente para la escritura del código de programa. El código de programa se guardará con un nombre que no pase de 8 caracteres y con la extensión .pbp, por defecto.
4.1.2 El Compilador PicBasic Pro Una vez editado el código de programa se lleva a cabo la compilación del mismo, es decir, la transformación de lenguaje humano a lenguaje de máquina, para esto se usará el compilador PicBasic Pro, pues nuestros programas son editados en este lenguaje. La conversión del programa genera nuevos archivos, de
102 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
los cuales se empleará el que tiene extensión .hex, el cual será luego grabado en el microcontrolador. En la figura 4.1 se muestra el manual de programación y el disco con el compilador PicBasic Pro, además de un vistazo a la ventana principal del editor CodeDesigner Lite.
Figura 4.1. A la derecha: Compilador PicBasic Pro. A la izquierda: ventana de inicio del editor CodeDesigner Lite, ambos de microEngineering Labs, Inc (http://www.melabs.com)
4.1.3 El Programador EPIC Cuando se tiene el archivo .hex, se tiene el código que entiende el microcontrolador, el código en hexadecimal. Para la programación o grabación del microcontrolador se empleará el EPIC que se muestra en la figura 4.2.
Figura 4.2. A la izquierda: programador o grabador EPIC. A la derecha: adaptador ZIF 40/28, ambos de microEngineering Labs, Inc (http://www.melabs.com)
En la figura 4.3 se muestra un esquema del proceso de puesta en marcha de un circuito con microcontrolador. Para iniciar el proyecto, hay que tener una idea
© RA-MA
CAPÍTULO 4. INSTALACIÓN DE SOFTWARE 103
clara de lo que se quiere desarrollar, luego se crea el código de programa en el editor que llamaremos Prueba.pbp, luego éste se compila, y si no tiene errores, se crea un archivo Prueba.hex, se graba éste en el microcontrolador usando el programador y finalmente se prueba el microcontrolador en el proyecto, si no funciona correctamente se tiene que repetir el proceso. Editar Prueba.pbp
Compilar Prueba.hex
Grabar Prueba.hex
Figura 4.3. Proceso para desarrollar un proyecto con microcontrolador. Editar, compilar, grabar y probar el proyecto
4.2 INSTALACIÓN Y CONFIGURACIÓN DE LAS HERRAMIENTAS DE DESARROLLO En esta sección se verán los pasos que hay que realizar para la instalación de los programas antes mencionados y así dejarlos listos para su funcionamiento.
4.2.1 Paso 1: instalación de las herramientas de desarrollo En primer lugar se recurrirá a bajar el software necesario, para esto, accederemos a la página web principal de microEngineering Labs, Inc, cuya dirección electrónica es http://www.melabs.com (véase la figura 4.4). En la caja de texto de búsqueda coloque Codedesigner y haga clic en el botón Search como se muestra en la figura 4.5. Luego aparece el resultado de la búsqueda, aquí usted deberá hacer clic en la primera opción como se observa en la figura 4.6. Al hacer clic en este hipervínculo, aparece la página web donde usted descargará el software necesario, aquí haga clic en el hipervínculo CodeDesigner Lite como se observa en la figura 4.7, al realizar esta operación, aparecerá el vínculo para bajar el software, aquí usted deberá hacer clic en el enlace Download CodeDesigner Lite (véase la figura 4.8).
104 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
Figura 4.4. Página principal de microEngineering Labs, Inc (http://www.melabs.com)
Busqueda del programa CodeDesigner Lite
Figura 4.5. Página principal de microEngineering Labs, Inc (http://www.melabs.com)
© RA-MA
CAPÍTULO 4. INSTALACIÓN DE SOFTWARE 105
Haga clic en este hipervínvulo
Figura 4.6. Resultado de la búsqueda del programa CodeDesigner Lite en microEngineering Labs, Inc (http://www.melabs.com)
Haga clic en este hipervínvulo
Figura 4.7. Página web para descargar el software CodeDesigner Lite en microEngineering Labs, Inc (http://www.melabs.com)
Luego aparecerá una nueva ventana de Advertencia de seguridad de Descarga de archivos (observe la figura 4.8), donde aparecen tres botones, aquí, para que usted siempre posea el instalador, deberá hacer clic en el botón Guardar,
106 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
después de esta acción, se abrirá una nueva ventana denominada Guardar como, como se observa en la figura 4.9, donde usted dará la ubicación donde se guardará el archivo del instalador del CodeDesigner Lite (véase la figura 4.10). Particularmente se ha elegido la unidad D como la ubicación donde se guardará el archivo instalador. En la figura 4.11 se muestra la ventana del Explorador de Windows, con el archivo instalador enfocado después de la descarga del archivo. El archivo ejecutable se denomina cdlite171.exe, que viene del nombre CodeDesigner Lite versión 1.71.
Enlace de descarga de CodeDesigner Lite
Figura 4.8. Enlace para descargar el software CodeDesigner Lite en microEngineering Labs, Inc (http://www.melabs.com)
El segundo paso será hacer doble clic en el instalador cdlite171.exe para ejecutar el instalador, aquí usted iniciará el proceso de instalación del CodeDesigner Lite, ya que observará que se abre una nueva ventana denominada CD Lite Installation, y dentro de ésta, una ventana de ubicación de archivos (Choose Destination Location), donde usted podrá dar el lugar donde desee instalar los archivos generados por la instalación como se muestra en la figura 4.13.
© RA-MA
CAPÍTULO 4. INSTALACIÓN DE SOFTWARE 107
Clic aquí
Figura 4.9. Ventana de Advertencia de seguridad de Descarga de archivos
Para llevar un orden, los archivos los localizaremos por defecto en C:\CDLite\ como se observa en la figura 4.14, es por ello que usted deberá hacer clic en el botón Next, luego aparecerá una nueva ventana denominada Select Program Manager Group (véase la figura 4.15), aquí por defecto estará seleccionado el programa CodeDesigner Lite, así que simplemente haga clic en Next. Después aparecerá una nueva ventana denominada Start Installation, aquí usted deberá hacer clic en el botón Next para iniciar la instalación del programa, observe la figura 4.16. Finalmente en la figura 4.17 se muestra la ventana de finalización de la instalación (Installation Complete), donde usted hará clic en el botón Finish para finalizar la instalación del CodeDesigner Lite. El tercer paso será descargar el programa instalador del grabador que estaremos utilizando durante el desarrollo de los circuitos mostrados en el presente libro. Este programa se denomina EPIC y al igual que el CodeDesigner Lite, se descarga de la página web de microEngineering Labs, Inc (http://www.melabs.com). Para esto en la caja de texto de búsqueda ingrese el texto epic como se muestra en la figura 4.18, luego haga clic en el botón Search, esta acción iniciará la búsqueda de la información, que dará como resultado una página web como se muestra en la figura 4.19.
108 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
Clic aquí
Figura 4.10. Ventana de Guardar como para almacenar el instalador
Figura 4.11. Ventana de Explorador de Windows que muestra el instalador del CodeDesigner Lite
© RA-MA
CAPÍTULO 4. INSTALACIÓN DE SOFTWARE 109
Clic aquí
Figura 4.12. Ventana Abrir archivo – Advertencia de seguridad aquí se deberá hacer clic en el botón Ejecutar
Figura 4.13. Ventana Abrir archivo – Advertencia de seguridad, aquí se deberá hacer clic en el botón Next
110 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
Clic aquí
Figura 4.14. Ventana Abrir archivo – Advertencia de seguridad, aquí deberá hacer clic en el botón Next
Clic aquí
Figura 4.15. Ventana Abrir archivo – Advertencia de seguridad, aquí deberá hacer clic en el botón Next
El resultado de la búsqueda nos da varios resultados, entre ellos, usted elija la primera opción como se observa en la figura 4.19. Al hacer clic en este hipervínculo, aparecerá la página web donde se podrán descargar algunos programas de grabadores o programadores que ofrece microEngineering Labs, Inc, usted podría descargar el software requerido de acuerdo al grabador que usted
© RA-MA
CAPÍTULO 4. INSTALACIÓN DE SOFTWARE 111
posea, en este caso se utilizará el grabador EPIC, por lo tanto se requiere el programa de grabación EPICWIN, que se encuentra más abajo en la misma página (véase la figura 4.21). Para descargar el programa EPICWIN, usted tendrá que hacer clic en enlace EPICWin 2.46 Beta software como se indica en la figura 4.21. Después de hacer clic en este enlace, aparecerá una nueva ventana de Descarga de archivos donde usted tendrá que elegir entre tres opciones, Abrir, Guardar o Cancelar, para que usted posea almacenado el archivo, elija la opción Guardar, haciendo clic en este botón. Luego aparece una nueva ventana denominada Guardar como (véase la figura 4.23), aquí usted elegirá la ubicación donde guardará el archivo descargado, particularmente se eligió la unidad D como ubicación del archivo guardado.
Clic aquí
Figura 4.16. Ventana Abrir archivo – Advertencia de seguridad, aquí deberá hacer clic en el botón Next
En la figura 4.24 vemos la ventana del Explorador de Windows que muestra el archivo del programa EPICWin descargado. El archivo descargado EPICBETA1107 tiene una extensión .zip, esto significa que es un archivo comprimido, por lo tanto, el siguiente paso será descomprimir el archivo, para esto usted deberá hacer anticlic en el archivo como se muestra en la figura 4.25, luego elegirá la opción de descompresión. El resultado de la descompresión de los archivos se muestra en la figura 4.26, aquí el archivo ejecutable es el EPICWin.
112 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
Clic aquí
Figura 4.17. Ventana Abrir archivo – Advertencia de seguridad, aquí deberá hacer clic en el botón Finish
Busqueda del programa EPICWin
Figura 4.18. Página principal de microEngineering Labs, Inc (http://www.melabs.com)
© RA-MA
CAPÍTULO 4. INSTALACIÓN DE SOFTWARE 113
Haga clic en este hipervínculo
Figura 4.19. Resultado de la búsqueda del programa EPIC en microEngineering Labs, Inc (http://www.melabs.com)
Figura 4.20. Resultado de la búsqueda del programa EPIC de microEngineering Labs, Inc (http://www.melabs.com)
114 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
Enlace de descarga de EPICWIN
Figura 4.21. Resultado de la búsqueda del programa EPIC en microEngineering Labs, Inc (http://www.melabs.com)
Cuando usted instaló el programa CodeDesigner Lite, los archivos quedaron guardados en la carpeta CDLite en la unidad C, por una cuestión de orden, usted deberá copiar la carpeta descomprimida EPICBETA1107 en la carpeta CDLite, para que quede como se muestra en la figura 4.27.
Clic aquí
Figura 4.22. Ventana Descarga de archivos, aquí usted podrá optar por la opción de guardar el instalador
© RA-MA
CAPÍTULO 4. INSTALACIÓN DE SOFTWARE 115
Clic aquí
Figura 4.23. Ventana Guardar como, aquí usted hará clic en el botón Guardar
Figura 4.24. Ventana del Explorador de Windows que muestra los archivos instaladores
116 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
Anticlic aquí
Figura 4.25. Ventana del Explorador de Windows, aquí usted tendrá que descomprimir el archivo EPICBETA1107.ZIP
Figura 4.26. Ventana del Explorador de Windows que muestra los archivos descomprimidos del intalador EPICWIN
© RA-MA
CAPÍTULO 4. INSTALACIÓN DE SOFTWARE 117
Carpeta EPICBETA1107
Figura 4.27. Ventana del Explorador de Windows que muestra la carpeta EPICBETA1107
El próximo paso es la instalación del programa compilador, en este caso el PicBasic Pro de microEngineering Labs, Inc, el cual se compra, o si se desea se descarga de la página principal (http://www.melabs.com). En nuestro caso se ha adquirido el PicBasic Pro versión 2.6 que se procederá a instalar. El archivo instalador del PicBasic Pro se muestra en la figura 4.28, este archivo ejecutable se denomina setup.exe, y para iniciar con la instalación, usted deberá hacer doble clic en el archivo setup.exe. Luego aparecerá una ventana de Bienvenida a la instalación del PicBasic Pro, aquí usted deberá hacer clic en el botón Next para continuar con la instalación como se observa en la figura 4.29. Después de hacer clic en el botón Next, aparece una nueva ventana de Aceptación de licencia, aquí usted deberá hacer clic en el botón de opción denominado I accept the agreement y luego hacer clic en el botón Next como se muestra en la figura 4.30.
118 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
Instalador de PICBASIC PRO
Figura 4.28. Ventana del Explorador de Windows que muestra el archivo instalador del compilador PICBASIC PRO 2.6
Clic aquí
Figura 4.29. Ventana de Bienvenida a la instalación de PICBASIC PRO 2.6
© RA-MA
CAPÍTULO 4. INSTALACIÓN DE SOFTWARE 119
Aceptación de licencia Clic aquí
Figura 4.30. Ventana de Aceptación de licencia, aquí usted deberá hacer clic en el botón Next después de aceptar la licencia
Clic aquí
Figura 4.31. Ventana de Selección de localización de archivos de instalación
120 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
Clic aquí
Figura 4.32. Ventana de Creación de acceso rápido y ubicación de los archivos de instalación
Clic aquí
Figura 4.33. Ventana de Resumen de instalación
© RA-MA
CAPÍTULO 4. INSTALACIÓN DE SOFTWARE 121
Figura 4.34. Ventana de Visualización de progreso de instalación
Clic aquí
Figura 4.35. Ventana de Finalización de instalación
Después de aceptar la licencia, aparecerá una nueva ventana: selección de localización de archivos de instalación, aquí se muestra por defecto que los archivos de la instalación se colocarán en C:\PBP, en esta ventana usted deberá
122 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
hacer clic en el botón Next, con esto aceptará que los archivos se coloquen en la ubicación antes mencionada. Luego aparece una nueva ventana de Resumen de instalación que indica la dirección donde se ubican los archivos de la instalación, como se muestra en la figura 4.33, aquí usted deberá hacer clic en el botón Install. Después aparece una nueva ventana de Visualización de progreso de instalación, aquí se observa como avanza el proceso de instalación de archivos (véase la figura 4.34). Finalmente, aparece la ventana de Finalización de instalación, donde justamente se indica que la instalación finalizó con éxito. Aquí usted deberá hacer clic en Finish.
4.2.2 Paso 2: configuración de las herramientas de desarrollo Cuando haga doble clic en el archivo CdLite.exe aparecerá una ventana nueva, como se muestra en la figura 4.36.
Figura 4.36. Ventana inicial del editor de programas CodeDesigner Lite de microEngineering Labs, Inc
© RA-MA
CAPÍTULO 4. INSTALACIÓN DE SOFTWARE 123
Ingrese a las opciones del compilador haciendo clic en Compile-Compiler Options y se abrirá una nueva ventana como se muestra en la figura 4.37.
Figura 4.37. Barra de menú con el submenú Compile
En la ventana Compiler Options, en la caja de texto Compiler Pathname, ingrese la dirección exacta del compilador, para este caso: C:\CdLite\PicBasic Pro Compiler\Pbpw.exe y hacer clic en OK (véase la figura 4.38). Ingrese a las opciones del programador o grabador haciendo clic en Programmer-Programmer Options (véase la figura 4.39).
Figura 4.38. Ventana Compiler Options indicando lo que se debe agregar para el correcto uso del compilador
Figura 4.39. Barra de menú con el submenú Programmer
En la ventana Programmer Options, en la caja de texto Programmer Pathname, ingrese la dirección exacta del compilador, para este caso: C:\CDLite\EPICBETA1107\Epicwin.exe y hacer clic en OK (véase la figura 4.40).
124 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
Figura 4.40. Ventana Programmer Options que indica lo que se debe agregar para el correcto uso del compilador
4.3 EMPLEO DE LAS HERRAMIENTAS PARA EL DESARROLLO DE UNA APLICACIÓN Una vez que se ha hecho la instalación y configuración de las herramientas de desarrollo, se procederá a la explicación de cómo utilizar las herramientas de desarrollo para la grabación de un programa en un microcontrolador.
4.3.1 Paso 1: idea clara de lo que se va a desarrollar El primer paso para desarrollar una aplicación con microcontrolador es tener una idea clara de lo que tiene que hacer el microcontrolador. Para explicarlo daremos un ejemplo sencillo. Imaginemos que se quiere un circuito que encienda y apague un LED cada dos segundos, desde luego empleando un microcontrolador. Entonces, como se tiene un PIC16F84A a mano y éste tiene los pines suficientes para la aplicación, se diseña el circuito que hay que emplear (véase la figura 4.41). Del diseño, se pueden enumerar los componentes que hay que usar como sigue: •
Un Microcontrolador PIC 16F84A.
•
Un Cristal de 4MHz.
•
Una Resistencia de 10kΩ.
•
Una Resistencia de 1kΩ.
•
Un LED.
•
Una placa de prototipos.
© RA-MA
CAPÍTULO 4. INSTALACIÓN DE SOFTWARE 125
•
Fuente de alimentación de 5VDC.
•
Cables de conexión. +5V
+5V
10k
1k 1 2 3 4 5 6 7 8 9
RA2 RA1 RA3 RA0 RA4/TOCK1 OSC1 OSC2 MCLR VSS VDD RB0/INT RB7 RB1 RB6 RB2 RB5 RB3 RB4
18 17 16 15 14 13 12 11 10
4MHz LED
PIC16F84A
Figura 4.41. Circuito con micrcontrolador PIC16F84A para la primera aplicación
Una vez conseguido el material se procede a la construcción del circuito.
4.3.2 Paso 2: edición del programa Se tiene el circuito que hay que emplear, pero no funciona si el microcontrolador no está programado, entonces se procede a la escritura del código de programa en el editor. Para el funcionamiento de este circuito se escribe el código que se presenta a continuación. ' Programa 4.1: Primer Programa en PicBasic Pro ' Iniciar el programa Inicio: High PORTA.1 Pause 2000 Low PORTA.1 Pause 2000 GoTo Inicio
' ' ' ' '
Llevar a Pausa de Llevar a Pausa de Volver a
alto la puerta A1 o encender el LED 2 segundos bajo la puerta A1 o apagar el LED 2 segundos Inicio
Se Guarda el programa con un nombre (por ejemplo: Programa.pbp) como en cualquier editor de textos y se elige el microcontrolador que vamos a usar (para este caso el PIC16F84A). Para el circuito de la figura 4.9, las sentencias High y Low servirán para encender y apagar el LED conectado a la puerta A.1.
126 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
Referencia rápida de comandos PicBasic Pro: High Pin • Pin es la puerta de salida que se va a colocar a alto (5V). Low Pin • Pin es la puerta de salida que se va a colocar a bajo (0V). Pause Período • Período es el tiempo de ajuste expresado en milisegundos. GoTo Etiqueta • Etiqueta es a donde va a continuar el programa, ir a Etiqueta.
4.3.3 Paso 3: compilación del programa Cuando usted escribió el código de programa, lo hizo en lenguaje de alto nivel, pero éste no es entendido por el microcontrolador, entonces se necesita compilar el programa para que nos genere el código que entiende el de la microcontrolador (código hexadecimal), para esto se hace clic en el botón barra de menú del CodeDesigner Lite.
Figura 4.42. Ventana de Salida del compilador donde se muestra la versión del compilador y si el programa tiene errores
La otra forma de compilar es haciendo clic en el menú Compile-Compile o presionando la tecla F5. Si el programa no presenta errores se abrirá una nueva ventana que muestra la versión del compilador (véase la figura 4.42), si sucediera lo contrario la nueva ventana mostrará el número de la línea donde se encontraría el error. Cuando compila el programa se crean archivos con extensiones .asm, .hex y
© RA-MA
CAPÍTULO 4. INSTALACIÓN DE SOFTWARE 127
.mac, para este casos se crean los archivos programa.asm, programa.hex y programa.mac.
4.3.4 Paso 4: grabación del microcontrolador Para la grabación del PIC usted conectará el grabador EPIC al computador con su fuente de alimentación. Una vez encendido y conectado, se hace clic en el de la barra de menú del CodeDesigner Lite y se abrirá la ventana del botón programador (véase la figura 4.43). Otra forma de ejecutar el programa de grabación es haciendo clic en el menú Programmer-Launch Programmer o presionando la tecla F6. Si sale un mensaje de error, revise las conexiones de alimentación o del puerto paralelo. Como se observa en la figura 4.43, la ventana tiene el nombre EPICWin – C:\CdLite\Programa.hex, es decir, el nombre del software de grabación acompañado del nombre y ubicación del programa.
Figura 4.43. Ventana EPICWin
Figura 4.44. Ventana EPICWin que muestra el menú Code
El primer paso para la grabación de un microcontrolador es borrar el contenido del chip, para esto se hace clic en el botón . Una vez que se ha borrado el PIC, se hace clic en el botón para la grabación del microcontrolador. Si usted quiere ver el código de programa del chip, es decir, leer la memoria del microcontrolador, se hace clic en el botón . Luego se tiene que ir a View-Code y aparecerá una nueva ventana que muestra el código en hexadecimal del programa (véanse las figuras 4.44 y 4.45).
128 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
Figura 4.45. Ventana EPICWin – Code que muestra el código del programa
4.3.5 Paso 5: prueba de la aplicación Éste es el último paso y aquí usted puede determinar si está bien su diseño, entiéndase como diseño al software (código de programa) y hardware (circuito). Finalmente, usted debe probar si el microcontrolador funciona en el circuito, para ello conecte bien la alimentación y vea el funcionamiento del circuito. Si el circuito no funciona, revise las conexiones de alimentación, el cristal o la ubicación del LED. Los pasos que se detallaron, le servirán para desarrollar una aplicación con microcontrolador.
5Capítulo 5
CONEXIÓN DEL PUERTO SERIE CON VISUAL BASIC En la actualidad existen programas como el Visual Basic o LabView que permiten un fácil manejo de los puertos serie y paralelo. En esta sección trataremos sobre la realización de una comunicación serie entre el microcontrolador y el computador utilizando el Microsoft Visual Basic 6.0.
5.1 EL PUERTO SERIE RS-232C El puerto serie RS-232C, presente en todos los ordenadores actuales, es la forma mas comúnmente usada para realizar transmisiones de datos entre ordenadores. El RS-232C es un estándar que constituye la tercera revisión de la antigua norma RS-232, propuesta por la EIA (Asociación de Industrias Electrónicas), realizándose posteriormente una versión internacional por el CCITT, conocida como V.24. Las diferencias entre ambas son mínimas, por lo que a veces se habla indistintamente de V.24 y de RS-232C (incluso sin el sufijo "C"), refiriéndose siempre al mismo estándar. El RS-232C consiste en un conector tipo DB-25 de 25 pines, aunque es normal encontrar la versión de 9 pines DB-9, más barato e incluso mas extendido para cierto tipo de periféricos (como el ratón serie del computador en computadoras Pentium). En cualquier caso, los computadores no suelen emplear más de 9 pines en el conector DB-25. Las señales con las que trabaja este puerto serie son digitales, de +12V (0 lógico) y -12V (1 lógico), para la entrada y salida de datos, y a la inversa en las señales de control. El estado de reposo en la entrada y
130 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
salida de datos es -12V. Dependiendo de la velocidad de transmisión empleada, es posible tener cables de hasta 15 metros. Cada pin puede ser de entrada o de salida, teniendo una función específica cada uno de ellos (véase la tabla 5.1): Pin Función TxD Transmitir Datos RxD Recibir Datos DTR Terminal de Datos Listo DSR Equipo de Datos Listo RTS Solicitud de Envío CTS Libre para Envío CD/DCD Detección de Portadora Tabla 5.1. Tabla de funciones de cada pin de la interfaz serial RS-232C Número de pin DB-25 DB-9
Señal
Descripción
E/S
1 1 Masa chasis 2 3 TxD Transmit Data S 3 2 RxD Receive Data E 4 7 RTS Request To Send S 5 8 CTS Clear To Send E 6 6 DSR Data Set Ready E 7 5 SG Signal Ground 8 1 CD/DCD (Data) Carrier Detect E 15 TxC(*) Transmit Clock S 17 RxC(*) Data Terminal Ready E 20 4 DTR Ring Indicator S 22 9 RI Transmit/Receive Clock E 24 RTxC(*) S Tabla 5.2. Tabla de descripción de cada pin del RS-232C. (*) Significa normalmente no conectados en el DB-25
Las señales TXD, DTR y RTS son de salida, mientras que RXD, DSR, CTS y DCD son de entrada. La masa de referencia para todas las señales es SG (Tierra de Señal). Finalmente, existen otras señales como RI (Indicador de Llamada), y otras poco comunes que no se explican en estos párrafos. (Véase la tabla 5.2 y la figura 5.1.). El RS-232 puede transmitir los datos en grupos de 5, 6, 7 u 8 bits, a unas velocidades determinadas (normalmente, 9.600 bits por segundo o más). Después de la transmisión de los datos, le sigue un bit opcional de paridad (indica si el número de bits transmitidos es par o impar, para detectar fallos), y después 1 o 2 bits de Stop. Normalmente, el protocolo utilizado ser 8N1 (que significa: 8 bits de datos, sin paridad y con 1 bit de Stop).
© RA-MA
CAPÍTULO 5. CONEXIÓN DEL PUERTO SERIE CON VISUAL BASIC 131
Figura 5.1. Conectores para puerto serie tipo macho (parte superior) y tipo hembra (parte inferior), en dos presentaciones: (a) DB-25 y (b) DB-9
Una vez que ha comenzado la transmisión de un dato, los bits tienen que llegar uno detrás de otro a una velocidad constante y en determinados instantes de tiempo. Por eso se dice que el RS-232 es asíncrono por caracter y síncrono por bit. Los pines que portan los datos son RXD y TXD. Las demás se encargan de otros trabajos: DTR indica que el ordenador esta encendido, DSR que el aparato conectado a dicho puerto está encendido, RTS que el ordenador puede recibir datos (porque no está ocupado), CTS que el aparato conectado puede recibir datos, y DCD detecta que existe una comunicación, presencia de datos. Tanto el aparato que hay que conectar como el ordenador (o el programa terminal) tienen que usar el mismo protocolo serie para comunicarse entre sí. Puesto que el estándar RS-232 no permite indicar en qué modo se está trabajando, es el usuario quien tiene que decidirlo y configurar ambas partes. Como ya se ha visto, los parámetros que hay que configurar son: protocolo serie (8N1), velocidad del puerto serie y protocolo de control de flujo. Este último puede ser por hardware o bien por software (XON/XOFF, el cual no es muy recomendable ya que no se pueden realizar transferencias binarias). La velocidad del puerto serie no tiene por qué ser la misma que la de transmisión de los datos, de hecho debe ser superior. Por ejemplo, para transmisiones de 1.200 baudios es recomendable usar 9.600, y para 9.600 baudios se pueden usar 38.400 ó19.200.
5.2 MICROSOFT VISUAL BASIC 6.0 El software Visual Basic 6.0 es un producto Microsoft de programación orientada a eventos, altamente conocido por su fácil uso. Pasando estrictamente al desarrollo del capítulo, diremos que el Visual Basic 6.0 tiene un componente llamado Microsoft Comm Control (en resumen
132 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
MSComm1), que permite el manejo del puerto serie para comunicación con un MODEM u otro dispositivo que empleen este tipo de interfaz. En la prueba que se desarrollará en la presente práctica se hará uso de un cable de puerto serie (DB9 hembra) que se conectará a éste y se puentearán los terminales 2 y 3 (recepción y transmisión). Referencia rápida de comandos Visual Basic MSComm1.CommPort • CommPort toma valores del puerto serie que hay que utilizar, puede ser 1 ó 2 dependiendo del puerto serie que se encuentre libre. MSComm1.PortOpen • PortOpen toma dos posibles valores True o False (verdadero o falso), dependiendo de si se desea conectar (abrir) o desconectar el puerto. MSComm1.Settings • Settings se refiere a las propiedades de velocidad, paridad, bits de dato, bits de parada. MSComm1.InputLen • InputLen es la longitud de entrada del puerto. MSComm1.Input • Input sirve para leer los datos que se envían al puerto serie. MSComm1.Output • Output sirve para enviar datos del puerto serie al exterior.
5.3 PRUEBAS CON CABLE PARA PUERTO SERIE Primero se realizarán unas pruebas utilizando un cable de puerto serie y el computador para conocer el funcionamiento del puerto, para luego hacer pruebas con la intervención de un PIC.
5.3.1 Construcción del cable para puerto serie El primer paso es construir el cable para puerto serie, para ello usted debe disponer de un cable de 3 hilos y soldar este al conector DB-9 tipo hembra, sólo los pines 2, 3 y 5. Los pines que usted utilizará son los pines de recepción (2), transmisión (3) y tierra (5). Usted se hará la pregunta: ¿y los otros pines? La respuesta es sencilla, no los utilizaremos para la aplicación. Otra pregunta que
© RA-MA
CAPÍTULO 5. CONEXIÓN DEL PUERTO SERIE CON VISUAL BASIC 133
usted se estará haciendo es: ¿qué tengo que hacer si mi puerto serie no tiene conector DB9 sino un DB25? entonces usted soldará los pines 2, 3 y 7 que son transmisión, recepción y tierra respectivamente. Revise el cable, proteja la conexión con la capucha y conecte al puerto serie.
Figura 5.2. Cable de conexión de puerto serie para conector DB9
5.3.2 Primera prueba El programa que a continuación se describe es el punto de partida para realizar posteriores aplicaciones, preste mucha atención a lo que se muestra en las siguientes líneas, si usted no es usuario experto de Visual Basic, puede descargar los programas desde el portal web http://www.ra-ma.es. Iremos paso a paso, ejecute Microsoft Visual Basic 6.0 (Inicio→Todos los programas→Microsoft Visual Studio 6.0→Microsoft Visual Basic 6.0), véase la figura 5.3. Al acceder a Microsoft Visual Basic 6.0 se abre una nueva ventana llamada Nuevo Proyecto, acceda haciendo doble clic en EXE estándar (véase la figura 5.4), y se abrirá un nuevo proyecto que contiene un formulario llamado Form1. Acceda a la ventana de componentes haciendo anticlic en la ventana General (ventana del lado izquierdo de su pantalla) y aparecerá un menú desplegable, acceda haciendo clic en Componentes para agregar el componente de comunicación por el puerto serie, véase la figura 5.5. En la ventana de Componentes, busque Microsoft Comm Control 6.0, y haga clic en Aplicar y luego
134 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
en Cerrar para agregar el componente, luego aparecerá el icono en la ventana General. Véase la figura 5.5.
Figura 5.3. Acceso a Microsoft Visual Basic 6.0 desde Inicio
Inserte dos cajas de texto, un Temporizador y un Microsoft Comm Control en el formulario para que se observe como en la figura 5.6 y modifique las propiedades de los objetos según la tabla 5.3. Inserte el código del programa vb 5.1 en el Form_Load() y en TmrComunicacion_Timer(). En el Form_Load() se colocan las condiciones iniciales del programa, en este caso las condiciones para el funcionamiento de la comunicación serie, para nuestro caso se da el nombre del puerto a usar (Com1), activación del puerto, propiedades de velocidad (1.200bps), paridad (ninguna), bits de datos (8) y bits de parada (1). En el caso del código del TmrComunicacion_Timer(), nos servirá para leer cada cierto tiempo el puerto serie y mostrar el dato leído en la caja de texto.
© RA-MA
CAPÍTULO 5. CONEXIÓN DEL PUERTO SERIE CON VISUAL BASIC 135
Figura 5.4. Ventana de Nuevo proyecto o EXE estándar en Visual Basic 6.0
Figura 5.5. Ventanas para acceder a componentes, a la derecha: ventana de componentes para acceder al Microsoft Comm Control 6; a la izquierda: ventana de componentes estándar o General
136 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
Grabe el formulario con el nombre FrmPrueba (Archivo→Guardar Form1 como...) y el proyecto con el nombre Programa1 (Archivo→Guardar Proyecto como...). Conecte el cable de comunicación al puerto Com1 y cortocircuite los pines de transmisión y recepción (2 y 3) para que exista un lazo de realimentación. Cierre cualquier otro programa que opere con el puerto serie Com1, por ejemplo el Hyper Terminal, luego inicie el programa presionando F5. Véase la figura 5.7. Inserte un texto en TxtTx y observará que este aparece en la caja TxtRx, ¿qué está sucediendo?, es sencillo, en la caja de texto TxtTx está escribiendo lo que quiere enviar por el puerto de transmisión (Tx) y en la caja de texto TxtRx se está capturando los datos por el puerto de recepción (Rx). Si Ud. obvia la conexión entre los pines Tx y Rx del Com1, es decir, no conecta los pines 2 y 3, se estarán enviando los datos, pero no habrá puerto por donde se reciban estos datos, en pocas palabras, se pierde la conexión. Realice pruebas enviando cadenas de caracteres y conecte y desconecte para que pruebe si existe o no conexión entre los pines Tx y Rx. Objeto Formulario
Propiedad Valor Nombre FrmPrueba Caption Prueba BorderStyle 1 Caja de texto 1 Nombre TxtTx Text 0 (transparente) Caja de texto 2 Nombre TxtRx Text 0 (transparente) Temporizador Nombre TmrComunicacion Interval 100 Microsoft Comm Control 6.0 Nombre MSCComunicacion Tabla 5.3. Valor de cada una de las propiedades de los objetos mostrados en el formulario
Figura 5.6. Formulario inicial Form1 que muestra sus componentes a de acuerdo con la tabla 5.3
© RA-MA
CAPÍTULO 5. CONEXIÓN DEL PUERTO SERIE CON VISUAL BASIC 137
' Programa vb 5.1: Programa para Microsoft Visual Private Sub Form_Load() MSCComunicacion.CommPort=1 ' MSCComunicacion.PortOpen = True ' MSCComunicacion.Settings = "1200,n,8,1" ' ' ' End Sub Private Sub TmrComunicacion_Timer() MSCComunicacion.Output = TxtTx.Text
TxtRx.Text = MSComunicacion.Input
' ' ' ' '
Basic 6.0 Puerto serie Com1 Activar puerto 1.200bps, No paridad, 8 bits de datos, 1 de parada
Enviar el contenido de la caja de texto TxtTx por el puerto serie Leer el puerto serie y mostrar en la caja de texto TxtRx
End Sub
Figura 5.7. Formulario Prueba en pleno funcionamiento
5.3.3 Segunda prueba Con este programa, usted aprenderá cómo tratar datos que se envían desde un microcontrolador, esto le servirá de mucha ayuda cuando realice trabajos de captura de datos. Abra un nuevo proyecto en Visual Basic 6.0 y construya un nuevo formulario como el que se muestra en la figura 5.8, luego modifique las propiedades de cada uno de los objetos de acuerdo con la tabla 5.4. Inserte el código descrito en el programa vb 5.2. Los datos que se muestran en la caja de texto tienen el formato “*ABC|”, donde A, B y C son las 3 cifras que representan una variable enviada al puerto, que realmente es lo único que nos interesa, entonces debemos separar ABC de los caracteres que se encuentran a sus costados (* y |). Para separar ABC agregaremos unas líneas de código al programa vb 5.1 (véase el programa vb 5.2), en donde se muestra el empleo de las sentencias Left y Right. El programa muestra como se separa un dato de 3 cifras de una cadena de longitud constante. En la figura 5.9 se muestra como es la presentación final del formulario. Para ver algo similar en su formulario, cambie el valor de la barra horizontal y no se olvide de unir los cables Tx y Rx.
138 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
Objeto Formulario
Propiedad Valor Nombre FrmPrueba Caption Prueba BorderStyle 1 Caja de texto 1 Nombre TxtTx Text 0 (transparente) Caja de texto 2 Nombre TxtRx Text 0 (transparente) Etiqueta 1 Nombre Label1 Caption Transmisión Etiqueta 2 Nombre Label2 Caption Recepción Barra horizontal Nombre HScDato Max 255 Min 0 Temporizador Nombre TmrComunicacion Interval 100 Microsoft Comm Control 6.0 Nombre MSCComunicacion Tabla 5.4. Valor de cada una de las propiedades de los objetos mostrados en el formulario
Figura 5.8. Formulario para el segundo programa de prueba mostrando sus componentes de acuerdo a la tabla 5.4 ' Programa vb 5.2: Programa para Microsoft Visual Private Sub Form_Load() MSCComunicacion.CommPort = 1 ' MSCComunicacion.PortOpen = True ' MSCComunicacion.Settings = "1200,n,8,1" ' ' ' End Sub Private Sub HScDato_Change() Dato = 1000 + Val(HScDato.Value)
Basic 6.0 Puerto serie Com1 Activar puerto 1.200bps, No paridad, 8 bits de datos, 1 de parada
' Al valor de la barra ' horizontal se le suma 1.000 Dato = Right(Dato, 3) ' Se obtiene un número variable de 3 cifras ' Arreglar la cadena de la forma *ABC|donde ABC es el número de tres ' cifras TxtTx.Text = "*" & Dato & Chr(13) End Sub
© RA-MA
CAPÍTULO 5. CONEXIÓN DEL PUERTO SERIE CON VISUAL BASIC 139
Private Sub TmrComunicacion_Timer() ' Enviar el contenido de la caja de texto TxtTx por el puerto serie MSCComunicacion.Output = TxtTx.Text ' Leer el puerto serie y mostrar en la caja de texto TxtRx TxtRx.Text = MSCComunicacion.Input ' Separación del número de 3 cifras (ABC) que está entre "*" y el ' caracter 13 (ENTER) Valor = Mid(TxtRx.Text, 2, 3) ' Capturar 3 caracteres, se obtiene ABC ' A la cadena ABC, se obtiene el valor equivalente TxtRx.Text = Val(Valor) End Sub
Referencia rápida de funciones Visual Basic Left(Cadena, Longitud) • Cadena desde la cual se devuelven los caracteres que están más a la izquierda. • Longitud es una expresión numérica que indica cuántos caracteres se van a devolver. Si es 0, devuelve una cadena de longitud cero. Si es mayor o igual al número de caracteres en cadena, se devuelve la cadena entera. Right(Cadena, Longitud) • Cadena desde la cual se devuelven los caracteres que están más a la derecha. • Longitud es una expresión numérica que indica cuántos caracteres se van a devolver. Si es 0, se devuelve una cadena de longitud cero. Si es mayor o igual al número de caracteres en la cadena, se devuelve la cadena completa. Mid(Cadena, Inicio, Longitud) • Cadena desde la cual se devuelven los caracteres. • Inicio es la posición de carácter en la cadena en la cual comienza la parte que se desee tomar. Si inicio es mayor que el número de caracteres en la cadena, Mid devuelve una cadena de longitud cero. • Longitud es el número de caracteres a devolver. Si se omite o hay menos caracteres en el texto que en longitud (incluyendo el carácter de inicio), se devuelven todos los caracteres desde la posición de inicio hasta el final de la cadena. Val(Cadena) • Devuelve el valor numérico contenido en una Cadena. Len(Cadena) • Devuelve un número que indica la longitud de una Cadena, es decir el número de caracteres.
140 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
Referencia rápida de funciones Visual Basic Chr$(CódigoCaracter) • El argumento con nombre CódigoCarácter es un número en el intervalo de 0 a 255, inclusive, que identifica a un carácter.
Figura 5.9. Formulario Prueba en pleno funcionamiento
5.3.4 Tercera Prueba Con este programa, usted aprenderá cómo se pueden separar datos o valores que se encuentren dentro de una cadena, esto le servirá de mucha ayuda cuando realice trabajos de adquisición de dos o más datos. Diseñe un formulario como se muestra en la figura 5.10 y modifique las propiedades de los objetos como se muestra en la tabla 5.5.
Figura 5.10. Tercer formulario de prueba para el programa vb 5.3
El formulario que se presenta en la figura 5.10, sirve para que usted aprenda a extraer dos datos de una cadena de caracteres conformada por números y letras, muy parecido a las cadenas de datos que pueda enviar el microcontrolador.
© RA-MA
CAPÍTULO 5. CONEXIÓN DEL PUERTO SERIE CON VISUAL BASIC 141
Objeto Formulario
Propiedad Valor Nombre FrmPrueba Caption Prueba BorderStyle 1 Caja de texto 1 Nombre TxtDatoTx1 Text "0" Caja de texto 2 Nombre TxtDatoTx2 Text "0" Caja de texto 3 Nombre TxtTx Text 0 (transparente) Caja de texto 4 Nombre TxtDatoRx1 Text 0 (transparente) Caja de texto 5 Nombre TxtDatoRx2 Text 0 (transparente) Caja de texto 6 Nombre TxtRx Text 0 (transparente) Marco 1 Nombre Frame1 Caption Transmisión Marco 2 Nombre Frame2 Caption Recepción Barra horizontal 1 Nombre HScDatoTx1 Max 255 Min 0 Barra horizontal 2 Nombre HScDatoTx2 Max 255 Min 0 Temporizador Nombre TmrComunicacion Interval 100 Microsoft Comm Control 6.0 Nombre MSCComunicacion Tabla 5.5. Valor de cada una de las propiedades de los objetos mostrados en el formulario ' Programa vb 5.3: Programa para Microsoft Visual Basic 6.0 Dim Dato1 As String, Dato2 As String ' Variables tipo cadena Private Sub Form_Load() MSCComunicacion.CommPort = 1 ' Puerto serie Com1 MSCComunicacion.PortOpen = True ' Activar puerto ' 2.400bps, No paridad, 8 bits de datos, 1 de parada MSCComunicacion.Settings = "2400,n,8,1" Dato1 = "000" ' Dato1 inicial de la cadena Dato2 = "000" ' Dato2 inicial de la cadena ' Cadena A000B000| TxtTx.Text = "A" & Dato1 & "B" & Dato2 & Chr(13) End Sub Private Sub HScDatoTx1_Change() ' En la caja de texto se coloca el valor de la barra horizontal TxtDatoTx1.Text = Val(HScDatoTx1.Value) ' Al valor de la barra horizontal se le suma 1000 Dato1 = 1000 + Val(HScDatoTx1.Value)
142 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
' Se obtiene un número variable de 3 cifras Dato1 = Right(Dato1, 3) ' Arreglar la cadena de la forma AnumBnum|donde num es un número de ' tres cifras TxtTx.Text = "A" & Dato1 & "B" & Dato2 & Chr(13) End Sub Private Sub HScDatoTx2_Change() ' En la caja de texto se coloca el valor de la barra horizontal TxtDatoTx2.Text = Val(HScDatoTx2.Value) ' Al valor de la barra horizontal se le suma 1000 Dato2 = 1000 + Val(HScDatoTx2.Value) ' Se obtiene un número variable de 3 cifras Dato2 = Right(Dato2, 3) ' Arreglar la cadena de la forma AnumBnum|donde num es un número de ' tres cifras TxtTx.Text = "A" & Dato1 & "B" & Dato2 & Chr(13) End Sub Private Sub TmrComunicacion_Timer() ' Enviar el contenido de la caja de texto TxtTx por el puerto serie MSCComunicacion.Output = TxtTx.Text ' Leer el puerto serie y mostrar en la caja de texto TxtRx TxtRx.Text = MSCComunicacion.Input ' Separación de datos Cadena = TxtRx.Text ' Cadena es igual a los datos recepcionados If Len(Cadena) = 9 Then ' Si la longitud de la cadena es 9 ' entonces sigue ' En la caja de texto se captura el primer número de la cadena. ' Mid recoge una cadena desde el caracter 2 con una longitud de 3 ' caracteres TxtDatoRx1.Text = Val(Mid(Cadena, 2, 3)) ' En la caja de texto se captura el segundo número de la cadena. ' Mid recoge una cadena desde el caracter 6 con una longitud de 3 ' caracteres TxtDatoRx2.Text = Val(Mid(Cadena, 6, 3)) Else ' De lo contrario sale del bucle If End If ' Fin del bucle If End Sub
Figura 5.11. Tercer formulario de prueba en funcionamiento
Después que usted obtiene los valores que le interesan, podrá realizar lo que desee con estos datos, desde graficarlos en un cuadro hasta guardarlos en una base de datos o lo que usted necesite. ¿Por qué hacer este programa?, los
© RA-MA
CAPÍTULO 5. CONEXIÓN DEL PUERTO SERIE CON VISUAL BASIC 143
microcontroladores pueden enviar cadenas de caracteres conformadas por información referente a datos leídos y procesados por estos, por ejemplo, podríamos suponer que el microcontrolador tiene una interfaz con dos sensores de temperatura, cuyos datos son capturados y enviados, ambos en una misma cadena; estos datos separados indicarían la temperatura que refleja cada uno de los sensores. A continuación, escriba el programa vb 5.3 para el funcionamiento del nuevo formulario de prueba. En la figura 5.11 se muestra el tercer formulario de prueba en funcionamiento.
5.4 PRUEBAS DE CONEXIÓN ENTRE COMPUTADOR Y MICROCONTROLADOR Después de realizar distintas pruebas referentes a la conexión con el puerto serie, detallaremos cómo se realiza un enlace entre el computador y el microcontrolador PIC. Para las pruebas que se van a realizar, se utilizarán los siguientes materiales: •
Un Microcontrolador PIC 16F84A.
•
Un CI 74HC14.
•
Un Cristal de 4MHz.
•
Una Resistencia de 10kΩ.
•
Dos Resistencias variables de 10kΩ.
•
Dos condensadores de 22pF.
•
Un condensador de 0,1µF.
•
Dos Resistencias de 1kΩ.
•
Dos diodos emisores de luz.
•
Una placa de prototipos.
•
Fuente de alimentación de 5VDC.
•
Cable de conexión serie.
•
Cables de conexión.
144 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
El CI (circuito integrado) 74HC14 es un componente que tiene seis (6) compuertas independientes tipo NOT o inversores de alta inmunidad al ruido y alta velocidad de respuesta. En la figura 5.12, se muestra el diagrama de conexión y la tabla de verdad del CI 74HC14. El CI 74HC14 se utilizará para hacer la interfaz entre el microcontrolador y el computador del tipo invertido como se muestra en el circuito de la figura 5.13. Otro chip especializado para comunicación serie RS232 es el MAX232.
Figura 5.12. CI 74HC14, a la derecha: tabla de verdad y función; a la izquierda: diagrama de pines
PinTx
1
2
PinRx
4
3
RX (Receptor RS232)
22k
74HC14
TX (Transmisor RS232) GND (Tierra RS232)
Figura 5.13. Interfaz microcontrolador – computador con CI 74HC14
© RA-MA
CAPÍTULO 5. CONEXIÓN DEL PUERTO SERIE CON VISUAL BASIC 145
5.4.1 Transmisión de datos al computador desde el microcontrolador (PIC-PC) 5.4.1.1 PRIMERA PRUEBA Para la realización de esta prueba, usted necesitará implementar el circuito que se muestra en la figura 5.14. Primero explicaremos el programa del microcontrolador que consiste en enviar caracteres al computador (véase el programa pbp 5.1). +5V
+5V
10k 1 2 3 4 5 6 7 8 9
RA2 RA1 RA3 RA0 RA4/TOCK1 OSC1 MCLR OSC2 VSS VDD RB0/INT RB7 RB1 RB6 RB2 RB5 RB3 RB4
18 17 16 15 14 13 12 11 10
1
2 74HC14
4MHz
1 6 2 7 3 8 4 9 5 CONECTOR DB9
22pF
22pF
PIC16F84A
Figura 5.14. Circuito de transmisión de datos con interfaz RS232 Referencia rápida de comandos PicBasic Pro: SerOut2 PinTx, Velocidad, [“Caracteres”, Variables] • PinTx es la puerta por donde se va a transmitir. • Velocidad de transmisión de bits expresada como un número, por ejemplo para una velocidad de 1.200bps el código que se tiene que escribir es 813 en tipo no invertido o 17.197 en tipo invertido. • Caracteres son conjuntos de letras o números que pueden ir entre comillas, cuando se envían caracteres sin comillas se está mandando el valor en ASCII. Por ejemplo, si usted escribe “13”, estará enviando los caracteres 1 y 3, sin embargo si usted escribe sólo 13 estará enviando el valor ASCII correspondiente a 13 es decir ENTER. Estos caracteres pueden servir para enviar comandos al computador o separar variables. • Variables son los datos que previamente declarados como byte o word van a ser transmitidos. Para que estos datos sean considerados como valores en el computador, a la variable se le antepone DEC seguido de la cantidad de caracteres que se quiere enviar, por ejemplo, si se tiene una variable tipo byte, ésta va de 0 a 255, es decir, tendrá 3 caracteres como mayor longitud (de 100 a 255). Otra forma de convertir los datos a valores en decimal se da anteponiendo a la variable el símbolo #.
146 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
Referencia rápida de comandos PicBasic Pro: SerIn2 PinRx, Velocidad, Tiempo_Espera, Etiqueta, [Wait ( ), Variables] • PinRx es la puerta por donde se recepcionan los datos. • Velocidad de recepción de bits expresada como un número, por ejemplo, para una velocidad de 1.200bps el código que se tiene que escribir es 813 en tipo no invertido o 17.197 en tipo no invertido. • Tiempo_Espera es el tiempo que se espera para recepcionar los datos, este tiempo es expresado en milisegundos. • Etiqueta es hacia donde se va si los datos no son recepcionados durante el tiempo de espera. • Wait () es el primer dato que espera recibir de la cadena enviada por el computador, generalmente son caracteres. • Variables es donde se almacenan los datos recepcionados que han sido previamente declarados y pueden ser, por ejemplo, byte o word. ' Programa pbp 5.1: Programa en PicBasic Pro Inicio: ' Enviar por la puerta A1 con una velocidad de 1.200bps en tipo no ' invertido LABORATORIO seguido de 10 y 13 que significa interlineado SerOut2 PORTA.1, 813, [“LABORATORIO”, 10, 13] Pause 500 ' Pausa de 0.5 segundos ' Enviar por la puerta A1 con una velocidad de 1200bps en tipo no ' invertido DE INGENIERIA seguido de 10 y 13 que significa ' interlineado SerOut2 PORTA.1, 813, [“DE INGENIERIA”, 10, 13] Pause 500 ' Pausa de 0.5 segundos GoTo Inicio ' Volver a Inicio
5.4.1.1.1 Utilizando el Hyper Terminal Si usted no tiene instalado el Microsoft Visual Basic 6.0, podría usar un software de conexión con puerto serie, este software se llama Hyper Terminal y viene instalado con Windows (98, XP u otros). El Hyper Terminal se configura como el objeto Microsoft Comm Control de Visual Basic, es decir, se configura el acceso al puerto (Com 1, 2, etc.), la velocidad del puerto, el número de bits de datos, el número de bits de parada, la paridad y el hardware. En las siguientes figuras mostraremos cómo acceder al programa, la configuración y los pasos que hay que seguir para trabajar con este software. Para acceder al programa, usted tendría que tomar la siguiente ruta Inicio→Todos los programas→Accesorios→Comunicaciones→HyperTerminal (véase la figura 5.15), luego se abrirá una nueva ventana llamada Descripción de la conexión, como se muestra en la figura 5.16.
© RA-MA
CAPÍTULO 5. CONEXIÓN DEL PUERTO SERIE CON VISUAL BASIC 147
En la caja de texto Nombre escriba, por ejemplo, Microcontroladores (puede ser cualquier otro nombre), luego elija un icono y finalmente haga clic en Aceptar. Después de que usted haya escrito el nombre aparecerá una nueva ventana con el nombre Conectar a (véase la figura 5.17), en la lista Conectar usando, elija COM1 o COM3, dependiendo del puerto que tenga libre, para este caso elegiremos el COM1, luego haga clic en Aceptar.
Figura 5.15. Accedo a HyperTerminal
148 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
Figura 5.16. Ventana Descripción de la conexión, aquí usted escribirá el nombre de la nueva conexión
Figura 5.17. Ventana Conectar a, aquí usted deberá elegir el puerto de comunicación que desea usar
© RA-MA
CAPÍTULO 5. CONEXIÓN DEL PUERTO SERIE CON VISUAL BASIC 149
Figura 5.18. Ventana Propiedades de COM1, aquí usted colocará las propiedades de la comunicación
Figura 5.19. Ventana Hyper Terminal configurada
150 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
Figura 5.20. Ventana Hyper Terminal en funcionamiento
Luego aparecerá una nueva ventana de Propiedades de COM1, aquí usted debería establecer las propiedades del puerto, los bits por segundo o velocidad, que debe ser similar a la velocidad del microcontrolador (1.200bps), los bits de datos (8), la paridad (Ninguno), los bits de parada (1) y hardware (Ninguno) como se muestra en la figura 5.18. Finalizada la configuración aparecerá la ventana final del HyperTerminal como se muestra en la figura 5.19, finalice guardando la configuración, para ello acceda al menú Archivo→Guardar. En otra ocasión que desee probar algún otro circuito, usted no tendrá que configurar de nuevo. Una vez configurado el Hyper Terminal proceda a conectar el circuito vía el cable del puerto serie al computador, no olvide programar el microcontrolador y alimentar el circuito. Si usted está usando algún otro programa que use el puerto COM1, ciérrelo para evitar cualquier conflicto. En la figura 5.20 se muestra cómo se ven en pantalla los datos enviados por el PIC. Como se puede apreciar, aparece LABORATORIO en una línea y en la siguiente DE INGENIERIA y así sucesivamente. ¿Cómo sucede esto? La razón es que el microcontrolador está enviando después de las frases, los caracteres 10 y 13 que juntos funcionan como interlineado.
© RA-MA
CAPÍTULO 5. CONEXIÓN DEL PUERTO SERIE CON VISUAL BASIC 151
5.4.1.1.2 Utilizando Visual Basic Para ello, utilizaremos un programa similar al que se describió en la primera prueba, sólo se harán pequeñas modificaciones. Construya un formulario como se muestra en la figura 5.21 y modifique las propiedades de los componentes según la tabla 5.6. Luego escriba el programa vb 5.4. En la figura 5.22 se muestra el formulario en funcionamiento. Objeto Formulario
Propiedad Valor Nombre FrmPrueba Caption Prueba BorderStyle 1 Caja de texto 1 Nombre TxtRx Text 0 (transparente) Temporizador Nombre TmrComunicacion Interval 500 Microsoft Comm Control 6.0 Nombre MSCComunicacion Tabla 5.6. Valor de cada una de las propiedades de los objetos mostrados en el formulario
Figura 5.21. Formulario para la primera prueba con sus componentes de acuerdo con la tabla 5.6 ' Programa vb 5.4: Programa para Microsoft Visual Private Sub Form_Load() MSCComunicacion.CommPort=1 ' MSCComunicacion.PortOpen = True ' MSCComunicacion.Settings = "1200,n,8,1" ' ' ' End Sub Private Sub TmrComunicacion_Timer() TxtRx.Text = MSCComunicacion.Input End Sub
Basic 6.0 Puerto serie Com1 Activar puerto 1.200bps, No paridad, 8 bits de datos, 1 de parada
' Leer el puerto serie y mostrar ' en la caja de texto TxtRx
152 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
Figura 5.22. Formulario en funcionamiento con el circuito conectado
5.4.1.2 SEGUNDA PRUEBA Para esta prueba, usted tendrá que implementar el circuito de la figura 5.23. Como se observa en esta figura, se ha agregado al primer circuito implementado una resistencia variable de 10kΩ y un capacitor de 0,1µF, esto le va permitir probar cómo el microcontrolador puede enviar una variable de 8 bits al computador vía el puerto serie. +5V
+5V
10k
10k
0,1uF
1 2 3 4 5 6 7 8 9
RA2 RA1 RA3 RA0 RA4/TOCK1 OSC1 OSC2 MCLR VDD VSS RB7 RB0/INT RB6 RB1 RB5 RB2 RB3 RB4
18 17 16 15 14 13 12 11 10
1
2 74HC14
4MHz
1 6 2 7 3 8 4 9 5 CONECTOR DB9
22pF
22pF
PIC16F84A
Figura 5.23. Circuito de transmisión de datos con interfaz RS232
Referencia rápida de comandos PicBasic Pro: Pot Pin, Escala, Variable • Pin es la puerta donde se conecta el circuito RC. Los valores de la resistencia variable oscilan entre 5kΩ y 50kΩ, el condensador típico es de 0,1µF cerámico. • Escala de medición, la máxima escala es 255. • Variable es donde se almacena el dato leído, esta es tipo byte, es decir va de 0 a 255.
5.4.1.2.1 Prueba con HyperTerminal Active la conexión “Microcontroladores” creada con el HyperTerminal, conecte usted el circuito al puerto serie, varíe la resistencia variable y observe lo que ocurre en la pantalla del computador. (Véase la figura 5.24). El dato que se ve
© RA-MA
CAPÍTULO 5. CONEXIÓN DEL PUERTO SERIE CON VISUAL BASIC 153
en la ventana del HyperTerminal tiene la forma *ABC|, donde ABC es la variable que indica el valor de la resistencia variable y | el caracter ENTER. Este último no se observa, pero tiene una función significativa, que es volver a la misma línea, es decir, sobreescribe los datos. ' Programa pbp 5.2: Programa en PicBasic Pro variable VAR BYTE Inicio: Pot PORTA.2, 255, variable ' Leer la resistencia variable ' Enviar por la puerta A1 con una velocidad de 1.200bps en tipo no ' invertido * y la variable de 3 caracteres seguido de 13 que ' significa ENTER SerOut2 PORTA.1, 813, [“*”, DEC3 variable, 13] Pause 500 ' Pausa de 0,5 segundos GoTo Inicio ' Volver a Inicio
Usted podría realizar distintas pruebas, cambiando los parámetros de la sentencia SerOut2 del programa pbp 5.2 y observe lo que ocurre en el HyperTerminal; por ejemplo, cambie los parámetros de la sentencia SerOut2 por cada línea que se muestra a continuación: SerOut2 SerOut2 SerOut2 SerOut2
PORTA.1, PORTA.1, PORTA.1, PORTA.1,
813, 813, 813, 813,
[“*”, [“*”, [“*”, [“*”,
DEC3 Variable, 10, 13] DEC Variable, 10, 13] #Variable, 10, 13] DEC3 Variable]
ȱ
En las figuras 5.25, 5.26, 5.27 y 5.28 se muestran los resultados obtenidos cuando se programa con cada una de las líneas anteriores. Como usted observa en la figura 5.25, los datos se muestran de línea en línea, esto es debido a los caracteres finales 10 y 13, que significan interlineado, además estos datos tienen una longitud constante visible de 4 caracteres, aunque en realidad sean 6, pues se cuentan los caracteres de interlineado (10 y 13), así, por ejemplo, si la variable es 100, la cadena mostrada sería *100||, si la variable es 1, la cadena mostrada *001||. En la figura 5.26 se observa algo parecido, pero fíjese que cuando se cambia de 100 a 99 o números de dos o una cifra, la longitud de la cadena varía, así, por ejemplo, si la variable es 5, la cadena que se mostraría sería *5||, esto hace que la cadena posea 4 caracteres; si la variable es 30, la cadena sería *30||, esto hace que la cadena posea 5 caracteres; si la variable es mayor que 100, por ejemplo 250, la cadena mostrada sería *250||, y la cadena tendría 6 caracteres.
154 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
Figura 5.24. Ventana de Hyper Terminal en funcionamiento
Figura 5.25. Ventana de Hyper Terminal en funcionamiento
© RA-MA
© RA-MA
CAPÍTULO 5. CONEXIÓN DEL PUERTO SERIE CON VISUAL BASIC 155
Figura 5.26. Ventana de Hyper Terminal en funcionamiento
Figura 5.27. Ventana de Hyper Terminal en funcionamiento
156 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
Figura 5.28. Ventana de Hyper Terminal en funcionamiento
La figura 5.27 es similar a la figura 5.26, esto es porque el símbolo # tiene la misma función que DEC que es la de convertir la variable a un número. En la figura 5.28 se muestra que los datos van uno tras otro sucesivamente, esto es porque no existe un carácter final como 13 ó 10 y 13.
5.4.1.2.2 Prueba con Visual Basic Construya un formulario como se muestra en la figura 5.29. Modifique las propiedades del proyecto como se muestra en la tabla 5.7. Grabe nuevamente el microcontrolador con el programa pbp 5.2. Luego digite el programa vb 5.5 para el formulario anteriormente descrito. El programa vb 5.5 muestra cómo se realiza la captura de la cadena de datos enviados por el microcontrolador, si usted cambia el valor de la resistencia variable, observará que cambiará el dato en la caja de texto. Antes de poner en funcionamiento el programa del computador (presione F5 en la ventana de Visual Basic para ejecutar el programa), tiene que cerrar cualquier aplicación que use el puerto serie, por ejemplo el HyperTerminal. La figura 5.30 muestra el formulario en funcionamiento.
© RA-MA
CAPÍTULO 5. CONEXIÓN DEL PUERTO SERIE CON VISUAL BASIC 157
Objeto Formulario
Propiedad Valor Nombre FrmPrueba Caption Prueba BorderStyle 1 Caja de texto 1 Nombre TxtCadena Text 0 (transparente) Caja de texto 2 Nombre TxtVariable Text 0 (transparente) Etiqueta 1 Nombre Label1 Caption Cadena Etiqueta 2 Nombre Label2 Caption Variable Temporizador Nombre TmrComunicacion Interval 500 Microsoft Comm Control 6.0 Nombre MSCComunicacion Tabla 5.7. Valor de cada una de las propiedades de los objetos mostrados en el formulario
Figura 5.29. Formulario de prueba con sus componentes de acuerdo a la tabla 5.7 ' Programa vb 5.5: Programa para Microsoft Visual Private Sub Form_Load() MSCComunicacion.CommPort=1 ' MSCComunicacion.PortOpen = True ' MSCComunicacion.Settings = "1200,n,8,1" ' ' ' End Sub
Basic 6.0 Puerto serie Com1 Activar puerto 1.200bps, No paridad, 8 bits de datos, 1 de parada
Private Sub TmrComunicacion_Timer() ' Leer el puerto serie y mostrar en la caja de texto TxtCadena TxtCadena.Text = MSCComunicacion.Input ' Separación del número de 3 cifras (ABC) que está entre "*" y el ' caracter 13 (ENTER) If Len(TxtCadena.Text) = 5 Then ' Si la longitud de la cadena es ' 5 entonces ' Capturar 3 caracteres, se obtiene ABC Variable = Mid(TxtCadena.Text, 2, 3) ' A la cadena ABC, se obtiene el valor equivalente TxtVariable.Text = Val(Variable) EndIf End Sub
158 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
Figura 5.30. Formulario en funcionamiento con el circuito conectado
5.4.1.3 TERCERA PRUEBA El objetivo de esta prueba es que usted aprenda cómo enviar dos variables con el microcontrolador y también, que usted aplique el software Visual Basic para capturar, procesar y separar las variables que están dentro de la cadena enviada por el microcontrolador. La primera tarea que tendrá que hacer es implementar el circuito de la figura 5.31.
10k
+5V
+5V
Variable 1 0,1uF 10k
10k
Variable 2
1 2 3 4 5 6 7 8 9
RA2 RA1 RA3 RA0 RA4/TOCK1 OSC1 OSC2 MCLR VSS VDD RB0/INT RB7 RB1 RB6 RB2 RB5 RB3 RB4
18 17 16 15 14 13 12 11 10
1
2 74HC14
4MHz
1 6 2 7 3 8 4 9 5 CONECTOR DB9
22pF
22pF
PIC16F84A
0,1uF
Figura 5.31. Circuito de transmisión de dos variables al computador vía interfaz RS232
Como se observa en la figura 5.31, se tienen dos resistencias variables, las cuales serán leídas por el microcontrolador y luego enviadas al computador vía puerto serie en una sola cadena (las dos variables a la vez, una tras otra). Para el funcionamiento del circuito, digite el programa pbp 5.3 y grabe el microcontrolador. El microcontrolador es el encargado de leer cada resistencia variable para luego agruparlos en una sola cadena para ser enviados vía puerto serie. Es importante, para reducir el programa en el computador, que la longitud de la cadena sea constante, es por ello que DEC está acompañado de 3 que indica el número de cifras que tendrá la variable. La longitud total de la cadena es 9.
© RA-MA
CAPÍTULO 5. CONEXIÓN DEL PUERTO SERIE CON VISUAL BASIC 159
' Programa pbp 5.3: Programa en PicBasic Pro Variable1 VAR BYTE ' Definir la Variable1 como byte Variable2 VAR BYTE ' Definir la Variable2 como byte Inicio: Pot PORTA.2, 255, Variable1 ' Leer la resistencia variable 1 Pot PORTA.3, 255, Variable2 ' Leer la resistencia variable 2 ' Enviar por la puerta A1 con una velocidad de 1.200bps en tipo no ' invertido, A, la variable 1 de 3 caracteres, B, la variable 2 de 3 ' caracteres seguido de 13 que significa ENTER SerOut2 PORTA.1, 813, [“A”, DEC3 Variable1, “B”, DEC3 Variable2, 13] Pause 500 ' Pausa de 0.5 segundos GoTo Inicio ' Volver a Inicio
Figura 5.32. Ventana de HyperTerminal en funcionamiento
5.4.1.3.1 Prueba con HyperTerminal Active la conexión “Microcontroladores” creada con el HyperTerminal, conecte usted el circuito al puerto serie, varíe las resistencias variables 1 y 2, y observe lo que ocurre en la pantalla del computador. (Véase la figura 5.32). La cadena que se muestra tiene la forma AnumBnum| donde num es uno de los valores de la resistencia variable, A y B los llamaremos separadores y el último caracter representa 13 o ENTER. La idea general será extraer las dos variables de la cadena, para ello se recurrirá al Visual Basic.
160 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
5.4.1.3.2 Prueba con Visual Basic Realice un nuevo proyecto y cree un formulario como se muestra en la figura 5.33, luego cambie las propiedades de los componentes como se muestra en la tabla 5.8. Una vez creado el formulario y modificadas las propiedades de los componentes, usted tendrá que escribir el código que se muestra en el programa vb 5.6. Este programa, de manera resumida, capturará la cadena enviada por el microcontrolador, para luego separar las variables contenidas en ésta, es así que en la caja de texto TxtCadena, se muestra la cadena completa, luego en las cajas de texto inferiores, se muestra cada una de las variables que vienen a ser los valores de cada potenciómetro. En la figura 5.34 se muestra el formulario en funcionamiento. Objeto Formulario
Propiedad Valor Nombre FrmPrueba Caption Prueba BorderStyle 1 Caja de texto 1 Nombre TxtCadena Text 0 (transparente) Caja de texto 2 Nombre TxtVariable1 Text "0" Caja de texto 3 Nombre TxtVariable2 Text "0" Etiqueta 1 Nombre Label1 Caption Cadena Etiqueta 2 Nombre Label2 Caption Variable 1 Etiqueta 3 Nombre Label3 Caption Variable 2 Temporizador Nombre TmrComunicacion Interval 500 Microsoft Comm Control 6.0 Nombre MSCComunicacion Tabla 5.8. Valor de cada una de las propiedades de los objetos mostrados en el formulario
Figura 5.33. Formulario de prueba con sus componentes de acuerdo con la tabla 5.8
© RA-MA
CAPÍTULO 5. CONEXIÓN DEL PUERTO SERIE CON VISUAL BASIC 161
Figura 5.34. Formulario en funcionamiento que muestra los datos enviados por el circuito conectado al puerto serie ' Programa vb 5.6: Programa para Microsoft Visual Basic 6.0 Dim Dato1 As String, Dato2 As String ' Variables tipo cadena Private Sub Form_Load() MSCComunicacion.CommPort = 1 MSCComunicacion.PortOpen = True MSCComunicacion.Settings = "1200,n,8,1"
' ' ' ' '
Puerto serie Com1 Activar puerto 1.200bps, No paridad, 8 bits de datos, 1 de parada
End Sub Private Sub TmrComunicacion_Timer() ' Leer el puerto serie y mostrar en la caja de texto TxtRx TxtCadena.Text = MSCComunicacion.Input ' Separación de datos Cadena = TxtCadena.Text ' Cadena es igual a los datos ' recepcionados If Len(Cadena) = 9 Then ' Si la longitud de la cadena es 9 ' entonces ' En la caja de texto se captura la variable 1 de la cadena. Mid ' recoge una cadena desde el caracter 2 con una longitud de 3 ' caracteres TxtVariable1.Text = Val(Mid(Cadena, 2, 3)) ' En la caja de texto se captura la variable 2 de la cadena. Mid ' recoge una cadena desde el caracter 6 con una longitud de 3 ' caracteres TxtVariable2.Text = Val(Mid(Cadena, 6, 3)) Else ' De lo contrario sale del bucle If End If ' Fin del bucle If End Sub
5.4.2 Transmisión de datos al microcontrolador desde el computador (PC-PIC) Esta vez, el computador enviará una cadena de datos y el microcontrolador recepcionará ésta y procederá a realizar las tareas encomendadas de acuerdo con los datos de la cadena; por ejemplo, usted podrá controlar desde un computador alguna salida digital como encender un LED. La primera labor que usted tendrá que hacer es implementar el circuito que se muestra en la figura 5.35.
162 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
Como se observa en este circuito, el microcontrolador está conectado para recibir datos del computador, luego, de acuerdo con el programa del PIC, el microcontrolador se dispondrá a encender el LED 1 ó 2, esto puede ser aplicado, como veremos más adelante en próximos capítulos, a salidas de potencia con optoaisladores, relé u otros dispositivos. +5V
+5V
22k 10k
1 2 3 4 5 6 7 8 9
RA2 RA1 RA3 RA0 RA4/TOCK1 OSC1 MCLR OSC2 VSS VDD RB0/INT RB7 RB1 RB6 RB2 RB5 RB3 RB4
18 17 16 15 14 13 12 11 10
2
1 74HC14
4MHz
1 6 2 7 3 8 4 9 5 CONECTOR DB9
22pF
22pF
PIC16F84A LED 2 1k LED 1 1k
Figura 5.35. Circuito de recepción de datos
La idea fundamental será la siguiente, el computador enviará una cadena de datos conformada por 4 bytes, que los llamaremos $, B0, B1, B2. El caracter $ y el byte B2 servirán para comprobar que los datos llegaron al microcontrolador, digamos que son los bytes de inicio y final. B0 nos determina el puerto del microcontrolador que hay que usar (puerto RB.0 o RB.1) y B1 dará el estado que se quiere colocar al puerto, en alto o en bajo (0 ó 1 lógico). Es así que usted tendrá que escribir el código del programa pbp 5.4. ' Programa pbp 5.4: Programa en b0 VAR BYTE' Variable tipo byte ' computador b1 VAR BYTE' Variable tipo byte ' computador b2 VAR BYTE' Variable tipo byte ' computador b2 VAR BYTE' Variable tipo byte ' computador
PicBasic Pro donde se almacena el dato enviado por el donde se almacena el dato enviado por el donde se almacena el dato enviado por el donde se almacena el dato enviado por el
Inicio: SerIn2 PORTA.1, 188, 10, No_Dato, [WAIT("$"), b0, b1, b2] ' Recepciona la cadena de caracteres enviados por el computador a una ' velocidad de 4.800bps y las almacena en las variables b0, b1 y b2 ' esperando que llegue primero el caracter $, si no sucede esto en 10 ' milisegundos, entonces se irá a la etiqueta No_Dato IF b2=13 Then Funcion ' Si b2 es 13 entonces ir a etiqueta Funcion GoTo Inicio ' de lo contrario ir a Inicio Funcion: IF b0=0 Then Bajo ' Si b0 es 0 entonces ir a etiqueta Bajo
© RA-MA
CAPÍTULO 5. CONEXIÓN DEL PUERTO SERIE CON VISUAL BASIC 163 IF b0=1 Then Alto GoTo Inicio Bajo: Select Case b1 Case 0 Low PORTB.0 Pause 500 GoTo Inicio Case 1 Low PORTB.1 Pause 500 GoTo Inicio Case Else GoTo Inicio End Select Alto: Select Case b1 Case 0 High PORTB.0 Pause 500 GoTo Inicio Case 1 High PORTB.1 Pause 500 GoTo Inicio Case Else GoTo Inicio End Select No_Dato: GoTo Inicio
' Si b0 es 1 entonces ir a etiqueta Alto ' de lo contrario ir a Inicio ' ' ' ' ' ' ' ' ' ' ' ' '
Seleccionar caso de acuerdo con la variable b1 Si b1 es 0 entonces poner a bajo la puerta B0 pausa de 500 milisegundos volver a Inicio Si b1 es 1 entonces poner a bajo la puerta B1 pausa de 500 milisegundos volver a Inicio caso contrario, es decir b1 no es 0 ó 1 volver a Inicio fin de la selección de casos.
' ' ' ' ' ' ' ' ' ' ' ' '
Seleccionar caso de acuerdo con la variable b1 Si b1 es 0 entonces poner a alto la puerta B0 pausa de 500 milisegundos volver a Inicio Si b1 es 1 entonces poner a alto la puerta B1 pausa de 500 milisegundos volver a Inicio caso contrario, es decir b1 no es 0 ó 1 volver a Inicio Fin de la selección de casos.
' Volver a Inicio
5.4.2.1 PRUEBA CON VISUAL BASIC Esta vez realizaremos la prueba de envío de datos directamente con Visual Basic, en esta parte usted aprenderá cómo enviar datos a un PIC para que éste cumpla con una orden previamente establecida, en nuestro caso encender diodos emisores de luz. Usted tendrá que construir un nuevo proyecto en Visual Basic y construir un formulario como se muestra en la figura 5.35, luego tendrá que modificar las propiedades siguiendo la tabla 5.9. Finalmente, escriba el código del programa vb 5.7. Como se observa en la figura 5.36, se tiene 4 cajas de texto, en las primeras 3 cajas de texto se insertará el valor de cada variable que ha de ser enviada, es decir los valores b0, b1 y b2, en la última caja de texto se ensamblará la cadena de acuerdo con la que deberá recibir el microcontrolador. El temporizador tendrá la tarea de concatenar las variables y transmitirlas cada cierto tiempo por el puerto serie. Hay que tener en cuenta que para el funcionamiento correcto de la interfaz, tiene que cumplir con los parámetros vistos anteriormente, como velocidad de
164 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
transmisión, bits de datos, etc. La figura 5.37 muestra el formulario en funcionamiento. Objeto Formulario
Propiedad Valor Nombre FrmPrueba Caption Prueba BorderStyle 1 Caja de texto 1 Nombre TxtB0 Text "0" Caja de texto 2 Nombre TxtB1 Text "0" Caja de texto 3 Nombre TxtB2 Text "0" Caja de texto 4 Nombre TxtCadena Text 0 (transparente) Etiqueta 1 Nombre Label1 Caption B0 Etiqueta 2 Nombre Label2 Caption B1 Etiqueta 3 Nombre Label3 Caption B2 Etiqueta 4 Nombre Label4 Caption Cadena Temporizador Nombre TmrComunicacion Interval 10 Microsoft Comm Control 6.0 Nombre MSCComunicacion Tabla 5.9. Valor de cada una de las propiedades de los objetos mostrados en el formulario
Figura 5.36. Formulario de prueba con sus componentes de acuerdo con la tabla 5.9
© RA-MA
CAPÍTULO 5. CONEXIÓN DEL PUERTO SERIE CON VISUAL BASIC 165
' Programa vb 5.7: Programa para Microsoft Visual Basic 6.0 Dim b0 As Byte ' Definir b0 como byte Dim b1 As Byte ' Definir b1 como byte Private Sub Form_Load() MSCComunicacion.CommPort = 1 MSCComunicacion.PortOpen = True MSCComunicacion.Settings = "4800,n,8,1"
TxtB2.Text = "13" End Sub
' Puerto serie Com1 ' Activar puerto ' 4.800bps, No paridad, 8 ' bits de datos, 1 de ' parada ' El valor inicial en la caja de texto es 13
Private Sub TmrEnviar_Timer() b0 = Val(TxtB0.Text) ' b0 toma el valor de la caja de texto TxtB0 b1 = Val(TxtB1.Text) ' b1 toma el valor de la caja de texto TxtB1 b2 = TxtB2.Text ' b2 toma la cadena de la caja de texto TxtB0 ' Enviar la cadena conformada por "$", y los caracteres b0, b1 y b2 MSCComunicacion.Output = "$" + Chr$(b0) + Chr$(b1) + Chr$(b2) TxtCadena = "$" & b0 & b1 & b2 End Sub
Figura 5.37. Formulario de prueba en funcionamiento que muestra los datos que se enviarán al circuito conectado al puerto serie
Para la prueba, usted tiene que poner en marcha el formulario (presione F5), luego tiene que poner los comandos en la caja de texto, de acuerdo con lo que quiera que realice el microcontrolador, guíese, por ejemplo, por la tabla 5.10. B0 B1 B2 Estado 0 0 13 LED 1 Apagado 0 1 13 LED 2 Apagado 1 0 13 LED 1 Encendido 1 1 13 LED 2 Encendido Tabla 5.10. Tabla de valores de acuerdo con la cadena enviada hacia el circuito
6Capítulo 6
VISUALIZACIÓN DE DATOS En la industria existen variables físicas que necesitan una pronta visualización para tomar una decisión rápida y adecuada. Para que estos equipos sean ligeros y más fáciles de transportar se necesita de pantallas (pantalla de cristal líquido o visualizador de 7 segmentos) y no de equipos grandes como computadores. En el presente capítulo se presentarán algunos circuitos relacionados con dispositivos de visualización tales como: visualizador de 7 segmentos, pantallas de cristal líquido (LCD).
6.1 VISUALIZADOR DE 7 SEGMENTOS El visualizador de 7 segmentos o también llamado display de 7 segmentos es un conjunto de diodos emisores de luz (LED) en forma de línea y ordenados de manera tal que se pueden formar números del 0 al 9 y otros caracteres.
6.1.1 Funcionamiento del visualizador de 7 segmentos El visualizador convencional de 7 segmentos dispone de 10 pines de los cuales 2 son comunes (pueden ser ánodo común o cátodo común), uno es el punto decimal o DP y los otros 7 corresponden a los segmentos que denotan con las letras a, b, c, d, e, f, g. Encendiendo o apagando cada una de estas líneas se forman los números respectivos. A continuación, se dan los conceptos referentes a los dos tipos de visualizadores:
168 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
El visualizador ánodo común tiene todos los ánodos de los diodos emisores de luz (LED) unidos y para su funcionamiento deben estar conectados a una fuente de alimentación. En este caso para activar cualquier elemento hay que poner el cátodo del elemento a tierra a través de una resistencia para limitar la corriente que pasa por el elemento. g f
A.C.
a b
10 9 8 7 6 a f
A.C.:Ánodo común D.P.: Punto decimal a-g: Entrada de 7segmentos
b
g
e
c d
1 2 3 4 5
e d
c
D.P.
A.C.
Figura 6.1. Diagrama de pines del visualizador de 7 segmentos ánodo común +V
A.C.
a
b
c
d
e
f
g
D.P.
Figura 6.2. Configuración de un visualizador ánodo común a
b
c
d
e
f
g
D.P.
C.C.
Figura 6.3. Configuración de un visualizador cátodo común
El visualizador cátodo común tiene todos los ánodos de los diodos emisores de luz (LED) unidos y para su funcionamiento deben estar conectados a tierra. Para activar un segmento de éstos hay que poner el ánodo del segmento que
© RA-MA
CAPÍTULO 6. VISUALIZACIÓN DE DATOS 169
hay que encender a Vcc (tensión de la fuente) a través de una resistencia para limitar el paso de la corriente.
6.1.2 Interfaz con el microcontrolador El siguiente circuito muestra una conexión entre el microcontrolador y el visualizador de forma directa con unas resistencias de 220Ω hacia el puerto B. La conexión se hace utilizando el puerto B del microcontrolador (B0 – B6) con las entradas del visualizador (a – g) respectivamente. +5V +5V
DISPLAY U5 14
7 x 220
VDD
RB0/INT RB1 RB2 RB3 RB4 RB5 RB6 RB7
10k 4 16 15
4MHz
5 22pF
22pF
MCLR OSC1 OSC2 VSS
RA0 RA1 RA2 RA3 RA4/TOCK1
6 7 8 9 10 11 12 13 17 18 1 2 3
3 7 6 4 2 1 9 10 5
A.C. a a f b b c d g e e c f g d D.P. Ánodo Común
PIC16F84A
Figura 6.4. Circuito con microcontrolador y visualizador de 7 segmentos
El programa pbp 6.1 se encarga de mostrar los números del 0 al 9 de forma consecutiva. Se utiliza la memoria interna del microcontrolador específicamente 10 direcciones (0 a 9) donde se almacenan los valores correspondientes para la visualización de los números del 0 al 9 en el visualizador de 7 segmentos. Usted se preguntará, ¿por qué se coloca el valor 64 en la dirección 0? la respuesta es que con el número 64 a la salida del puerto se debe mostrar el número 0, recuerde que para que se ilumine un segmento, en un visualizador ánodo común, se tiene que colocar a 0 una entrada del visualizador, entonces para que aparezca el número cero, se deben iluminar los segmentos a, b, c, d, e, y f, g se deben apagar; considerando que g es MSB, entonces, la combinación sería 1000000, que en decimal es 64. Por ejemplo, para visualizar el número 8, se deben colocar las entradas de a hasta g a 0000000 que equivale a 0. El resto del programa sirve para realizar un bucle finito de valores, desde el 0 hasta el 9 para que se visualicen los números. El proceso se completa al leer la memoria y almacenar el dato en la variable b para que ésta se transfiera por el puerto B hacia el visualizador de 7 segmentos.
170 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
Referencia rápida de comandos PicBasic Pro: For Contador = Inicio To Final { Step Incremento/ - Decremento} { Cuerpo } Next Contador • Contador es la variable que se incrementará o disminuirá. • Inicio es el valor inicial de la variable Contador. • Final es el valor final de la variable Contador. • Incremento/ -Decremento es el valor con el cual se irá incrementado (valor positivo) o disminuyendo (valor negativo) la variable Contador. Este dato es opcional, si no se coloca Step, y el incremento por defecto la variable Contador será 1. • Cuerpo es el conjunto de operaciones que se realizarán durante cada ciclo del For... Next. Eeprom Dirección, [Valor] • Dirección es la localización donde se almacenará el valor. • Valor es el dato que hay que almacenar. Read Dirección, [Variable] • Dirección es la localización donde está almacenado el valor que hay que leer. • Variable es donde se almacena el valor leído. ' Programa pbp 6.1: Programa en PicBasic Pro i VAR BYTE ' Variable de conteo del 0 al 9 b VAR BYTE ' Variable donde se almacena el valor del puerto B TRISB=0 ' Definir el puerto B como salida ' Almacenar los valores 64, 121, 36, 48, 25, 10, 3, 120, 0, 24 en las ' direcciones de memoria desde la posición 0 hasta la posición 9. Los ' valores antes mencionados corresponden a los valores del 0 al 9 para ' que se visualice en el display de 7 segmentos EEPROM 0,[64] EEPROM 1,[121] EEPROM 2,[36] EEPROM 3,[48] EEPROM 4,[25] EEPROM 5,[18] EEPROM 6,[3] EEPROM 7,[120] EEPROM 8,[0] EEPROM 9,[24] Inicio: For i=0 TO 9 STEP 1 Read i,b
PORTB=b
' ' ' ' ' ' '
Hacer un bucle desde i=0 hasta el 9 de 1 en 1 ascendente Leer la memoria interna desde la posición 0 hasta el 9 y almacenar el dato leído en la variable b El puerto B se iguala a la variable b y se envía el dato al visualizador
© RA-MA
CAPÍTULO 6. VISUALIZACIÓN DE DATOS 171 Pause 500 Next i GoTo Inicio
' Pausa de 500 milisegundos ' Próximo i ' Volver a Inicio
El código del programa pbp 6.2 es muy similar al programa pbp 6.1 con la diferencia de que una vez que se cuenta de forma ascendente cuando i es igual a 9, comienza la cuenta descendente, es decir, desde 9 hasta el 0. ' Programa pbp 6.2: Programa en PicBasic Pro i VAR BYTE ' Variable de conteo del 0 al 9 b VAR BYTE ' Variable donde se almacena el valor del puerto B TRISB=0 ' Definir el puerto B como salida ' Almacenar los valores 64, 121, 36, 48, 25, 10, 3, 120, 0, 24 en las ' direcciones de memoria desde la posición 0 hasta la posición 9. Los ' valores antes mencionados corresponden a los valores del 0 al 9 para ' que se visualice en el display de 7 segmentos EEPROM 0,[64] EEPROM 1,[121] EEPROM 2,[36] EEPROM 3,[48] EEPROM 4,[25] EEPROM 5,[18] EEPROM 6,[3] EEPROM 7,[120] EEPROM 8,[0] EEPROM 9,[24] Inicio: For i=0 TO 9 STEP 1 Read i,b
PORTB=b Pause 500 Next i For i=9 TO 0 STEP -1 Read i,b
PORTB=b Pause 500 Next i GoTo Inicio
' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '
Hacer un bucle desde i=0 hasta el 9 de 1 en 1 ascendente Leer la memoria interna desde la posición 0 hasta el 9 y almacenar el dato leído en la variable b El puerto B se iguala a la variable b y se envía el dato al visualizador Pausa de 500 milisegundos Próximo i Hacer un bucle desde i=9 hasta el 0 de 1 en 1 descendente Leer la memoria interna desde la posición 0 hasta el 9 y almacenar el dato leído en la variable b El puerto B se iguala a la variable b y se envía el dato al visualizador Pausa de 500 milisegundos Próximo i Volver a Inicio
6.2 DECODIFICADOR 7447 El CI 7447 es un decodificador de BCD a 7 segmentos. Acepta una entrada BCD de 4 bits y decodifica el dato en 7 bits (salida invertida) para conectar a un visualizador (ánodo común). En la figura 6.5 se muestra el diagrama de pines del 7447.
172 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
B
1
16
VCC
C
2
15
f
LT
3
14
g
BI/RBO
4
13
a
RBI
5
12
b
D
6
11
c
A
7
10
d
8
9
e
GND
© RA-MA
GND: Tierra VCC: Alimentación +5V A-D: Entrada BCD a-g: Salida de 7segmentos LT: Entrada para test RBI: Entrada de borrado BI/RBO: Entrada / Salida de borrado
7447
Figura 6.5. Diagrama de pines del decodificador 7447
6.2.1 Funcionamiento del decodificador 7447 Las pines etiquetados con A, B, C y D del 7447 son las entradas por donde se hacen las combinaciones (0000 a 1001), teniendo en cuenta que la entrada menos significativa es A (LSB) y la más significativa es D (MSB); y por las salidas a, b, c, d, e, f y g salen las combinaciones para que en el display se muestre el número respectivo a la combinación de entrada, por ejemplo, si por las entradas D, C, B, A se da la combinación es 0101 (5 en decimal), en las salidas a, b, c, d, e, f, g se mostraría la combinación 0100100 necesaria para que en el visualizador se muestre el número 5. En la tabla 6.1 se muestra la tabla de verdad del CI 7447.
Decimal 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 BI RBI LT
LT 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 X 1 0
Entradas Salidas RBI D C B A BI/RBO a b c d 1 0 0 0 0 1 0 0 0 0 X 0 0 0 1 1 1 0 0 1 X 0 0 1 0 1 0 0 1 0 X 0 0 1 1 1 0 0 0 0 X 0 1 0 0 1 1 0 0 1 X 0 1 0 1 1 0 1 0 0 X 0 1 1 0 1 1 1 0 0 X 0 1 1 1 1 0 0 0 1 X 1 0 0 0 1 0 0 0 0 X 1 0 0 1 1 0 0 0 1 X 1 0 1 0 1 1 1 1 0 X 1 0 1 1 1 1 1 0 0 X 1 1 0 0 1 1 0 1 1 X 1 1 0 1 1 0 1 1 0 X 1 1 1 0 1 1 1 1 0 X 1 1 1 1 1 1 1 1 1 X X X X X 0 1 1 1 1 0 0 0 0 0 0 1 1 1 1 X X X X X 1 0 0 0 0 Tabla 6.1. Tabla de verdad del decodificador 7447
e 0 1 0 1 1 1 0 1 0 1 0 1 1 1 0 1 1 1 0
f 0 1 1 1 0 0 0 1 0 0 1 1 0 0 0 1 1 1 0
g 1 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 1 1 0
© RA-MA
CAPÍTULO 6. VISUALIZACIÓN DE DATOS 173
Para la muestra de los números en el visualizador sólo se necesitan las combinaciones de 0000 a 1001, ya que el resto de combinaciones no se utilizan, pues muestran otros caracteres.
6.2.2 Interfaz con el microcontrolador En la figura 6.6 se muestra como se puede realizar una conexión entre el CI 7447 y el microcontrolador PIC16F84A para la visualización de los números (0 a 9) en el visualizador de 7 segmentos. Los puertos B0, B1, B2 y B3 van conectados a las entradas A, B, C y D respectivamente. +5V
+5V U5 14
VDD
RB0/INT RB1 RB2 RB3 RB4 RB5 RB6 RB7
10k 4 16 4MHz
15 5
22pF
22pF
MCLR OSC1 OSC2 VSS
+5V
U6 6 7 8 9 10 11 12 13 17 18 1 2 3
RA0 RA1 RA2 RA3 RA4/TOCK1
7 1 2 6 3 4 5 8
A VCC B a C b D c LT d BI/RBO e RBI f GND g
DISPLAY 16 13 12 11 10 9 15 14
7 x 220
7447
3 7 6 4 2 1 9 10 5
A.C. a a f b b c d g e e c f g d D.P. Ánodo Común
PIC16F84A
Figura 6.6. Conexión de microcontrolador PIC16F84A, decodificador 7447 y un visualizador de 7 segmentos
El código del programa pbp 6.3 sirve para que por el puerto B, específicamente por las puertas B0, B1, B2 y B3, se envíe un dato de 4 bits al 7447 para que éste decodifique la entrada a 7 bits para que se muestre en el visualizador de 7 segmentos. Esto lo hace automáticamente usando un bucle finito (For… Next) desde 0 hasta 9. El código del programa pbp 6.4 es muy similar al programa anterior, sólo se ha agregado el código para que realice una cuenta de 9 a 0 una vez que termine la cuenta de 0 a 9. ' Programa pbp 6. 3: Programa en PicBasic Pro i VAR BYTE ' Variable de conteo del 0 al 9 TRISB=0 ' Definir el puerto B como salida Inicio: For i=0 TO 9 STEP 1 PORTB=i Pause 500 Next i GoTo Inicio
' ' ' ' ' ' '
Hacer un bucle desde i=0 hasta el 9 de 1 en 1 ascendente El puerto B se iguala a la variable i y se envía el dato al CI 7447 Pausa de 500 milisegundos Próximo i Volver a Inicio
174 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
' Programa pbp 6. 4: Programa en PicBasic Pro i VAR BYTE ' Variable de conteo del 0 al 9 TRISB=0 ' Definir el puerto B como salida Inicio: For i=0 TO 9 STEP 1 PORTB=i Pause 500 Next i For i=9 TO 0 STEP -1 PORTB=i Pause 500 Next i GoTo Inicio
' ' ' ' ' ' ' ' ' ' ' ' '
Hacer un bucle finito desde i=0 hasta el 9 de 1 en 1 ascendente El puerto B se iguala a la variable i y se envía el dato al CI 7447 Pausa de 500 milisegundos Próximo i Hacer un bucle finito desde i=9 hasta el 0 de 1 en 1 descendente El puerto B se iguala a la variable i y se envía el dato al CI 7447 Pausa de 500 milisegundos Próximo i Volver a Inicio
En el código del programa pbp 6.5 se muestran dos variables tipo byte que son unidad y decena y cada una de ellas se divide en variables tipo bit desde el bit 0 hasta el bit 3, ya que sólo se utilizan los primeros 4 bits para obtener combinaciones del 0 al 9. En este programa se realiza un bucle de 0 a 99 utilizando la variable i que se va a separar en dos cifras: decena y unidad, utilizando unas operaciones matemáticas simples, por ejemplo: suponga que i toma el valor 25, entonces si decena es igual a i entre 10, decena sería 2,5, pero recuerde que en PBP no se aceptan los decimales, por ello decena se iguala a 2, luego la unidad sale de la resta de i menos la decena por 10, es decir unidad=25-2x10, entonces unidad sería igual a 5; y se obtienen las dos variables unidad y decena. Finalmente, las variables tipo bit de unidad y decena se igualan a cada puerta del puerto B que se conecta a cada decodificador para que se visualicen los números. +5V
+5V U5 14
VDD
RB0/INT RB1 RB2 RB3 RB4 RB5 RB6 RB7
10k 4 16 15
4MHz
5 22pF
22pF
MCLR OSC1 OSC2 VSS
+5V
U6
RA0 RA1 RA2 RA3 RA4/TOCK1
PIC16F84A
6 7 8 9 10 11 12 13
7 1 2 6 3 4 5 8
17 18 1 2 3
A VCC B a C b D c LT d BI/RBO e RBI f GND g
DISPLAY 16 13 12 11 10 9 15 14
3 7 6 4 2 1 9 10 5
7 x 220
7447 +5V
+5V
U7 7 1 2 6 3 4 5 8
A VCC B a C b D c LT d BI/RBO e RBI f GND g 7447
A.C. a a f b b c d g e e c f g d D.P. Ánodo Común DISPLAY
16 13 12 11 10 9 15 14
7 x 220
3 7 6 4 2 1 9 10 5
A.C. a a f b b c d g e e c f g d D.P. Ánodo Común
Figura 6.7. Circuito para la visualización de un números del 0 al 99
© RA-MA
CAPÍTULO 6. VISUALIZACIÓN DE DATOS 175
' Programa pbp 6. 5: Programa en PicBasic Pro i VAR BYTE ' Variable de conteo del 0 TRISB=0 ' Definir el puerto B como unidad VAR BYTE ' Definir unidad como byte decena VAR BYTE ' Definir decena como byte un0 VAR unidad.0 ' Definir un0 como el bit 0 de la un1 VAR unidad.1 ' Definir un1 como el bit 1 de la un2 VAR unidad.2 ' Definir un2 como el bit 2 de la un3 VAR unidad.3 ' Definir un3 como el bit 3 de la de0 VAR decena.0 ' Definir de0 como el bit 0 de la de1 VAR decena.1 ' Definir de1 como el bit 1 de la de2 VAR decena.2 ' Definir de2 como el bit 2 de la de3 VAR decena.3 ' Definir de3 como el bit 3 de la
al 99 salida
variable variable variable variable variable variable variable variable
unidad unidad unidad unidad decena decena decena decena
Inicio: For i=0 TO 99 STEP 1 ' Hacer un bucle de 0 a 99 de 1 en 1 decena=i/10 ' Obtener la decena dividiendo i entre 10 unidad=i-decena*10 ' Obtener la unidad restando i menos la decena ' por 10 PORTB.0=de0 ' Igualar la puerta B0 al valor de un0 PORTB.1=de1 ' Igualar la puerta B1 al valor de un1 PORTB.2=de2 ' Igualar la puerta B2 al valor de un2 PORTB.3=de3 ' Igualar la puerta B3 al valor de un3 PORTB.4=un0 ' Igualar la puerta B4 al valor de de0 PORTB.5=un1 ' Igualar la puerta B4 al valor de de1 PORTB.6=un2 ' Igualar la puerta B4 al valor de de2 PORTB.7=un3 ' Igualar la puerta B4 al valor de de3 Pause 500 ' Pausa de 500 milisegundos Next i ' Próximo i GoTo Inicio ' Volver a Inicio
El código del programa pbp 6.6 tiene una diferencia con el código anterior: esta vez el dato no se va a mostrar de forma automática sino que se dará por medio del valor de la resistencia que será leída por la puerta A0 usando la sentencia Pot. El dato leído se almacena en la variable i que posteriormente se convierte a un valor de 0 a 99 usando una operación matemática simple. ' Programa pbp 6. 6: Programa en PicBasic Pro i VAR BYTE ' Variable de conteo del 0 TRISB=0 ' Definir el puerto B como unidad VAR BYTE ' Definir unidad como byte decena VAR BYTE ' Definir decena como byte un0 VAR unidad.0 ' Definir un0 como el bit 0 de la un1 VAR unidad.1 ' Definir un1 como el bit 1 de la un2 VAR unidad.2 ' Definir un2 como el bit 2 de la un3 VAR unidad.3 ' Definir un3 como el bit 3 de la de0 VAR decena.0 ' Definir de0 como el bit 0 de la de1 VAR decena.1 ' Definir de1 como el bit 1 de la de2 VAR decena.2 ' Definir de2 como el bit 2 de la de3 VAR decena.3 ' Definir de3 como el bit 3 de la Inicio: Pot PORTA.0,255,i i=(i/10)*4-1 decena=i/10 unidad=i-decena*10
' ' ' ' '
al 99 salida
variable variable variable variable variable variable variable variable
unidad unidad unidad unidad decena decena decena decena
Leer la resistencia por el puerto A0 en escala de 255 y almacenar en i Llevar la variable i a un número de 0 a 99 Obtener la decena dividiendo i entre 10 Obtener la unidad restando i menos la decena
176 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP ' ' ' ' ' ' ' ' ' ' '
PORTB.0=de0 PORTB.1=de1 PORTB.2=de2 PORTB.3=de3 PORTB.4=un0 PORTB.5=un1 PORTB.6=un2 PORTB.7=un3 Pause 500 GoTo Inicio
© RA-MA
por 10 Igualar la puerta B0 al valor Igualar la puerta B1 al valor Igualar la puerta B2 al valor Igualar la puerta B3 al valor Igualar la puerta B4 al valor Igualar la puerta B4 al valor Igualar la puerta B4 al valor Igualar la puerta B4 al valor Pausa de 500 milisegundos Volver a Inicio
de de de de de de de de
un0 un1 un2 un3 de0 de1 de2 de3
Referencia rápida de comandos PicBasic Pro: Pot Pin, Escala, Variable • Pin es la puerta donde se conecta el circuito RC. Los valores de la resistencia variable oscilan entre 5kΩ y 50kΩ, el condensador típico es de 0,1µF cerámico. • Escala de medición, la máxima escala es 255. • Variable es donde se almacena el dato leído, esta es tipo byte, es decir va de 0 a 255.
+5V
+5V
10k
U5 14
Variable
VDD
RB0/INT RB1 RB2 RB3 RB4 RB5 RB6 RB7
10k 0,1uF 4 16 4MHz
15 5
22pF
22pF
MCLR OSC1 OSC2 VSS
+5V
U6
RA0 RA1 RA2 RA3 RA4/TOCK1
PIC16F84A
6 7 8 9 10 11 12 13
7 1 2 6 3 4 5 8
17 18 1 2 3
A VCC B a C b D c LT d BI/RBO e RBI f GND g
DISPLAY 16 13 12 11 10 9 15 14
7 x 220
3 7 6 4 2 1 9 10 5
7447 +5V
+5V
U7 7 1 2 6 3 4 5 8
A VCC B a C b D c LT d BI/RBO e RBI f GND g
A.C. a a f b b c d g e e c f g d D.P. Ánodo Común
DISPLAY 16 13 12 11 10 9 15 14
7 x 220
7447
3 7 6 4 2 1 9 10 5
A.C. a a f b b c d g e e c f d g D.P. Ánodo Común
Figura 6.8: Lectura y visualización de una variable análoga en visualizador de 7 segmentos
6.3 PANTALLA DE CRISTAL LÍQUIDO (LCD) LCD (Liquid Crystal Display) son las siglas en inglés de Pantalla de Cristal Líquido, dispositivo inventado por Jack Janning, quien fue empleado de NCR. Se trata de un sistema eléctrico de presentación de datos formado por 2 capas conductoras transparentes y en medio un material especial cristalino (cristal
© RA-MA
CAPÍTULO 6. VISUALIZACIÓN DE DATOS 177
líquido) que tienen la capacidad de orientar la luz a su paso. Cuando la corriente circula entre los electrodos transparentes con la forma representada (por ejemplo, un segmento de un número) el material cristalino se reorienta alterando su transparencia. Las pantallas LCD se encuentran en multitud de dispositivos industriales y de consumo: máquinas expendedoras, electrodomésticos, equipos de telecomunicaciones, computadoras, etc. Todos estos dispositivos utilizan pantallas fabricadas por terceros de una manera más o menos estandarizada. Existen dos tipos de pantallas LCD en el mercado: pantallas de texto y pantallas gráficas (véase http://es.wikipedia.org/wiki/LCD). En esta sección trabajaremos con pantallas de texto.
Figura 6.9. Pantalla de cristal líquido (LCD) paralelo marca HANTRONIX de 16x2 caracteres
6.3.1 Funcionamiento de la pantalla de cristal líquido El funcionamiento de estas pantallas se fundamenta en sustancias que comparten las propiedades de sólidos y líquidos a la vez. Cuando un rayo de luz atraviesa una partícula de estas sustancias tiene necesariamente que seguir el espacio vacío que hay entre sus moléculas como lo haría al atravesar un cristal sólido, pero a cada una de estas partículas se le puede aplicar una corriente eléctrica que cambie su polarización dejando pasar la luz o no. Una pantalla LCD está formada por 2 filtros polarizados colocados perpendicularmente de manera que al aplicar una corriente eléctrica al segundo de ellos dejaremos pasar o no la luz que ha atravesado el primero de ellos. Para conseguir el color es necesario aplicar tres filtros más para cada uno de los colores básicos: rojo, verde y azul, y para la reproducción de varias tonalidades de color se deben aplicar diferentes niveles intermedios de brillo entre luz y no luz, lo cual se consigue con variaciones en el voltaje que se aplicaba los filtros. Las pantallas de cristal líquido de texto son las más baratas y simples de utilizar. Solamente permiten visualizar mensajes cortos de texto. Existen algunos modelos estandarizados en la industria, en función de su tamaño medido en número de líneas y columnas de texto. Existen modelos de una, dos y cuatro filas únicamente. El número de columnas típico es de ocho, dieciséis, veinte y cuarenta caracteres.
178 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
El controlador Hitachi HD44780 se ha convertido en un estándar de industria cuyas especificaciones funcionales son imitadas por la mayoría de los fabricantes. Este controlador cuenta con los siguientes interfaces eléctricos: •
D0-D7: ocho señales eléctricas que componen un bus de datos.
•
R/W: una señal que indica si se desea leer o escribir en la pantalla (generalmente solamente se escribe).
•
RS: una señal que indica si los datos presentes en D0-D7 corresponden, bien a una instrucción, bien a sus parámetros.
•
E: una señal para activar o desactivar la pantalla.
•
V0: señal eléctrica para determinar el contraste de la pantalla. Generalmente en el rango de cero a cinco voltios. Cuando el voltaje es de cero voltios se obtienen los puntos más oscuros.
•
VSS y VDD: señales de alimentación. Generalmente a cinco voltios.
VSS VDD VO RS R/W E D0 D1 D2 D3 D4 D5 D6 D7 Figura 6.10. Diagrama de pines de una pantalla de cristal líquido paralelo HANTRONIX de 16x2 caracteres
6.3.2 Interfaz con el microcontrolador La pantalla de cristal líquido paralelo se puede conectar fácilmente a un microcontrolador PIC16F84A utilizando su circuito de conexión típica como se muestra en la figura 6.11. Referencia rápida de comandos PicBasic Pro: LCDOut Datos • Datos está referido a lo que se va a mostrar en el LCD.
© RA-MA
CAPÍTULO 6. VISUALIZACIÓN DE DATOS 179
' Programa pbp 6. 7: Programa en PicBasic Pro ' Limpiar pantalla y mostrar en la primera línea de la pantalla de ' cristal líquido los caracteres "Microcontrolador" LCDOut $Fe, 1, "Microcontrolador" ' Mostrar en la segunda línea de la pantalla de cristal líquido los ' caracteres "PIC16F84A" LCDOut $Fe, $C0, "PIC16F84A" Pause 2000 ' Pausa de 2 segundos
+5V
1 2 3 4 5 6 7 8 9 10 11 12 13 14
Vss Vdd Vo Rs R/W E 0 1 2 3 4 5 6 7
LCD
+5V +5V
+5V
10k
10k 1 2 3 4 5 6 7 8 9
RA2 RA1 RA3 RA0 RA4/TOCK1 OSC1 MCLR OSC2 VSS VDD RB0/INT RB7 RB1 RB6 RB2 RB5 RB3 RB4
18 17 16 15 14 13 12 11 10
4MHz
22pF
22pF
PIC16F84A
Figura 6.11. Conexión típica entre el microcontrolador PIC16F84A y la pantalla de cristal líquido paralelo
Para mostrar mensajes en la pantalla de cristal líquido sólo hace falta un par de líneas de código, siempre y cuando utilice el circuito típico del PIC16F84A con la pantalla de cristal líquido. Según el código del programa pbp 6.7, la primera sentencia sirve para limpiar pantalla y las otras dos son para escribir en la primera línea y luego en la segunda. Para observar el resultado de la muestra en la pantalla de cristal líquido véase la figura 6.12. Para mostrar frases es necesario que se coloquen comillas entre el inicio y el final de la frase. Tiene que tomar en cuenta que los espacios también cuentan, pues si usted quiere centrar la frase “PIC16F84A” puede dar unos espacios a la izquierda para que la frase se desplace hacia la derecha.
Figura 6.12. Muestra de la pantalla de cristal líquido de acuerdo con el programa pbp 6.7
180 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
Otra aplicación que se puede realizar con una pantalla de cristal líquido es la muestra del valor analógico de una variable, esta aplicación será muy parecida a la de la figura 6.7, con la diferencia de que la visualización se hará en una pantalla de cristal líquido. Para esta aplicación véase el circuito de la figura 6.13 y el programa pbp 6.8, en este código de programa se define variable como byte, donde se almacena el valor de la resistencia en un dato de 0 a 255, luego se usa la sentencia Pot para leer el potenciómetro y almacenar en variable para su visualización en la segunda línea de la pantalla de cristal líquido (véase la figura 6.14).
+5V
1 2 3 4 5 6 7 8 9 10 11 12 13 14
Vss Vdd Vo Rs R/W E 0 1 2 3 4 5 6 7
LCD
10k
+5V
Variable +5V
+5V
0,1uF
10k
10k 1 2 3 4 5 6 7 8 9
RA2 RA1 RA3 RA0 RA4/TOCK1 OSC1 OSC2 MCLR VSS VDD RB0/INT RB7 RB1 RB6 RB2 RB5 RB3 RB4
18 17 16 15 14 13 12 11 10
4MHz
22pF
22pF
PIC16F84A
Figura 6.13. Conexión típica entre el microcontrolador PIC16F84A y la pantalla de cristal líquido paralela ' Programa pbp 6. 8: Programa en PicBasic Pro variable VAR BYTE ' Definir variable como byte Inicio: ' Leer la resistencia por la puerta B0 en escala de 255 y almacenar ' en variable Pot PORTB.0,255,variable ' Mostrar en la primera línea del LCD los caracteres " Dato" LCDOut $Fe, 1, "Dato" ' Mostrar en la segunda línea del LCD los caracteres "Valor= " y la ' variable en decimal LCDOut $Fe, $C0, "Valor= ", DEC variable Pause 500 ' Pausa de 500 milisegundos Goto Inicio ' Volver a Inicio
© RA-MA
CAPÍTULO 6. VISUALIZACIÓN DE DATOS 181
Figura 6.14. Muestra de la pantalla de cristal líquido de acuerdo al programa pbp 6.8
La última aplicación que se muestra en este capítulo se refiere a la muestra de dos variables analógicas en una pantalla de cristal líquido, véase la figura 6.13 y el código de programa pbp 6.9. El programa es muy parecido al anterior, con la diferencia de que esta vez se leen dos potenciómetros. Para observar cómo se muestran los datos en la pantalla de cristal líquido, vea la figura 6.16.
+5V
1 2 3 4 5 6 7 8 9 10 11 12 13 14
Vss Vdd Vo Rs R/W E 0 1 2 3 4 5 6 7
LCD
10k
+5V
Variable 1 +5V
+5V
0,1uF
10k
10k
Variable 2 0,1uF
10k 1 2 3 4 5 6 7 8 9
RA2 RA1 RA3 RA0 RA4/TOCK1 OSC1 OSC2 MCLR VSS VDD RB0/INT RB7 RB1 RB6 RB2 RB5 RB3 RB4
18 17 16 15 14 13 12 11 10
4MHz
22pF
22pF
PIC16F84A
Figura 6.15. Conexión típica entre el microcontrolador PIC16F84A y la pantalla de cristal líquido paralela ' Programa pbp 6. 9: Programa en PicBasic Pro variable1 VAR BYTE ' Definir variable1 como byte variable2 VAR BYTE ' Definir variable2 como byte Inicio: ' Leer la resistencia por la puerta B0 en escala de 255 ' en variable1 Pot PORTB.0,255,variable1 ' Leer la resistencia por la puerta B1 en escala de 255 ' en variable2 Pot PORTB.1,255,variable2 ' Mostrar en la segunda línea de la pantalla de cristal ' caracteres "Valor= " y la variable1 en decimal LCDOut $Fe, 1, "Valor= ", DEC variable1 ' Mostrar en la segunda línea de la pantalla de cristal ' caracteres "Valor= " y la variable2 en decimal LCDOut $Fe, $C0, "Valor= ", DEC variable2 Goto Inicio
y almacenar
y almacenar
líquido los
líquido los
182 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
Figura 6.16. Muestra de la pantalla de cristal líquido de acuerdo con el programa pbp 6.9
7Capítulo 7
ENTRADAS Y SALIDAS DIGITALES Es seguro que alguna vez usted ha diseñado un circuito digital basado en compuertas lógicas básicas como AND, OR o NOT, o con compuertas universales NAND y NOR, para ello usted utilizó entradas y salidas de dos estados o niveles lógicos 1 y 0 o simplemente señales digitales. Un interruptor es un ejemplo de una entrada de dos estados, pues es abierto o cerrado, y una lámpara es un ejemplo de una salida de dos estados pues puede estar encendida o apagada. En el presente capítulo veremos los diferentes circuitos de entrada y salida digital, tomando en cuenta algunas características de protección o acondicionamiento de señal y potencia.
7.1 ENTRADAS DIGITALES La manera más simple de obtener una entrada digital es usando un pulsador, para ello tenemos dos configuraciones posibles, activo en bajo y activo en alto. Véase la figura 7.1. Para la figura 7.1a, cuando usted presiona el pulsador, la puerta del PIC se lleva a tierra, es decir, se vuelve 0V, que significa 0 lógico; cuando usted deja de presionar el pulsador, no existe caída de tensión en la resistencia y por lo tanto la entrada del microcontrolador se vuelve 5V, que significa 1 lógico. Para la figura 7.1b, cuando usted presiona el pulsador, la puerta del PIC se lleva a 5V, que significa 1 lógico, y cuando usted deja de presionar el pulsador, la entrada del microcontrolador se vuelve 0V o tierra que es 0 lógico. Recuerde que los niveles de tensión aceptados por el microcontrolador son niveles lógicos TTL.
184 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP +5V
© RA-MA
+5V
1k Pulsador Puerto de PIC Activo en bajo Pulsador
Puerto de PIC
Presionado es 0
Activo en alto 1k Presionado es 1
Figura 7.1. Esquema con pulsadores: a la derecha, activo en bajo y a la izquierda activo en alto +5V
1k
Pulsador
+5V
+5V
10k 1 2 3 4 5 6 7 8 9
RA2 RA1 RA3 RA0 RA4/TOCK1 OSC1 MCLR OSC2 VSS VDD RB0/INT RB7 RB1 RB6 RB2 RB5 RB3 RB4
18 17 16 15 14 13 12 11 10
1
2 74HC14
4MHz
1 6 2 7 3 8 4 9 5 CONECTOR DB9
22pF
22pF
PIC16F84A
Figura 7.2. Circuito para la lectura del estado de un pulsador ' Programa pbp 7.1: Programa en PicBasic Pro ' Definición de variables entrada VAR PORTA.2 ' Nombrar la puerta A2 con el nombre Entrada Input PORTA.2 ' Definir la puerta A2 como entrada Inicio: IF entrada=1 Then ' Si la entrada está en alto entonces ' Enviar por la puerta A1 con una velocidad de 1.200bps en tipo no ' invertido ESTADO=1 seguido de 10 y 13 que significa interlineado SerOut2 PORTA.1,813,["ESTADO=1 ", 10, 13] Else ' De lo contrario ' Enviar por la puerta A1 con una velocidad de 1.200bps en tipo no ' invertido ESTADO=0 seguido de 10 y 13 que significa interlineado SerOut2 PORTA.1,813,["ESTADO=0 ", 10, 13] EndIF ' Fin del condicional Pause 500 ' Pausa de 500 milisegundos GoTo Inicio ' Volver a Inicio
© RA-MA
CAPÍTULO 7. ENTRADAS Y SALIDAS DIGITALES 185
Referencia rápida de comandos PicBasic Pro: IF... Then IF Condiciones Then Etiqueta IF Condiciones Then Conclusión 1 Else Conclusión 2 EndIf • IF ... Then significa Si... Entonces y es un comando que se encarga de la evaluación de una variable o variables acuerdo a Condiciones. Para el primer caso, si se cumple con la Condición, entonces automáticamente se irá a la Etiqueta. Para el segundo caso, si se cumple con la Condición entonces la expresión será verdadera y se realiza la Conclusión 1 que está debajo de Then, en caso contrario, la Condición será falsa y se cumplirá con la Conclusión 2 que está debajo de Else. Input Pin • Pin es la puerta que se quiere definir como entrada. SerOut2 PinTx, Velocidad, [“Caracteres”, Variables] • PinTx es la puerta por donde se va a transmitir. • Velocidad de transmisión de bits expresada como un número, por ejemplo, para una velocidad de 1.200bps el código que se tiene que escribir es 813 en tipo no invertido o 17.197 en tipo invertido. • Caracteres son conjuntos de letras o números que pueden ir entre comillas, cuando se envían caracteres sin comillas se está mandando el valor en ASCII. Por ejemplo, si usted escribe “13”, usted estará enviando los caracteres 1 y 3, sin embargo si usted escribe sólo 13 estará enviando el valor ASCII correspondiente a 13, es decir, ENTER. Estos caracteres pueden servir para enviar comandos al computador o separar variables. • Variables son los datos que previamente declarados como byte o word van a ser transmitidos. Para que estos datos sean considerados como valores en el computador, a la variable se le antepone DEC seguido de la cantidad de caracteres que se quiere enviar, por ejemplo, si se tiene una variable tipo byte, ésta va de 0 a 255, es decir, tendrá 3 caracteres como mayor longitud (de 100 a 255). Otra forma de convertir los datos a valores en decimal, es anteponiendo a la variable el símbolo #.
La figura 7.2 muestra un circuito de prueba para leer el estado de un pulsador; para el funcionamiento del circuito programe el microcontrolador con el código de programa pbp 7.1 y observe el dato enviado por el microcontrolador accediendo a HyperTerminal o con un programa en Visual Basic (revise el capítulo 5). Para este caso, la visualización de los datos enviados por el microcontrolador se
186 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
realizará en Visual Basic, por ello construya un formulario como se muestra a continuación en la figura 7.3 y modifique los valores de las propiedades de los componentes de acuerdo con la tabla 7.1. Objeto Formulario
Propiedad Valor Nombre FrmPrueba Caption Prueba BorderStyle 1 Caja de texto 1 Nombre TxtTx Text 0 (transparente) Temporizador Nombre TmrComunicacion Interval 500 Microsoft Comm Control 6.0 Nombre MSCComunicacion Tabla 7.1. Valor de cada una de las propiedades de los objetos mostrados en el formulario
Figura 7.3. Formulario inicial con sus componentes de acuerdo a la tabla 7.1
En el programa vb 7.1 se muestra el código para capturar los datos enviados por el microcontrolador, como se puede apreciar en el código, se tiene, como propiedades iniciales del formulario, la configuración de la comunicación serial, y luego en el temporizador se ejecuta la captura del dato enviado por el microcontrolador. Para una mejor explicación repase el capítulo 5. En la figura 7.4 se muestra el formulario en funcionamiento. ' Programa vb 7.1: Programa para Microsoft Visual Private Sub Form_Load() MSCComunicacion.CommPort=1 ' MSCComunicacion.PortOpen = True ' MSCComunicacion.Settings = "1200,n,8,1" ' ' ' End Sub
Basic 6.0 Puerto serie Com1 Activar puerto 1.200bps, No paridad, 8 bits de datos, 1 de parada
Private Sub TmrComunicacion_Timer() Dim Cadena As String ' Declarar la variable Cadena como String ' Leer el puerto serie y almacenar en Cadena Cadena = MSCComunicacion.Input If Len(Cadena) = 10 Then ' Si la longitud de la cadena es 10 ' entonces ' Mostrar en la caja de texto TxtRx desde el primer caracter, 8 ' Caracteres de la variable Cadena TxtRx.Text = Mid(Cadena, 1, 8) End If ' Finalizar If End Sub
© RA-MA
CAPÍTULO 7. ENTRADAS Y SALIDAS DIGITALES 187
Figura 7.4. Formulario Prueba en funcionamiento recepcionando los datos del circuito
7.1.1 Acondicionamiento de señal: interfaz electrónica No siempre las entradas digitales tienen niveles de voltaje de 0 y 5 voltios, por ejemplo, usted podría encontrar entradas digitales superiores a 12 voltios o si analizamos algunos estándares industriales, una entrada digital maneja 24 voltios, un ejemplo claro sería un Controlador Lógico Programable o PLC. Por ello, son convenientes los siguientes párrafos para explicar como acondicionar una señal digital superior a 5 voltios y llevarla a niveles que no dañen al microcontrolador. Para acondicionar una señal, hay que conocer el voltaje de entrada para luego elegir el circuito de interfaz entre la entrada digital de alta tensión y el microcontrolador; para ello, una forma común de acondicionar una señal es utilizando los denominados acoples electrónicos, que usan separadores, transistores y el dispositivo más común: la optocupla. La figura 7.5 muestra algunos circuitos basados en optocupla. La optocupla o también llamado optoaislador es un circuito electrónico que permite un acople óptico o aislante entre la entrada de alta tensión y el microcontrolador. La optocupla puede ser usada para una interfaz óptima entre niveles de alta tensión y el microcontrolador, pero usted tiene que tener cuidado con el valor de la resistencia que coloque en serie con el LED de la optocupla; la función de este resistor es la de limitar la corriente que pasará por el LED, si la resistencia fuera demasiado pequeña podría dañar la optocupla. Lo mejor de este tipo de circuito es el aislamiento óptimo entre el circuito de alta tensión y el microcontrolador en caso de que algo falle.
188 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP 4,7k
© RA-MA
+5V
+5V
+12V y 0V 1
6
5 4,7k
1k
+12V y 0V
Entrada 5
1
6
2
4N25 4
Puerto de PIC
Entrada 2
4N25 4
Puerto de PIC
1k
Figura 7.5. Interfaces con optocupla: a la izquierda, circuito con lógica positiva y, a la derecha, circuito con lógica negativa
La figura 7.5 de la izquierda muestra la interfaz con optocupla con lógica positiva, es decir, si consideramos que la entrada de +12V es 1 lógico y 0V es 0 lógico, cuando se excite la entrada con +12V, se encenderá el LED y, por lo tanto, se activará al transistor, esto genera que la entrada del puerto del PIC se coloque a 1 lógico (+5V); es decir, si entra un 1 lógico (+12V), la entrada del PIC será 1 lógico. Si entra 0 lógico (0V), la entrada del PIC será 0 lógico. La figura 7.5 de la derecha muestra la interfaz con optocupla con lógica negativa, es decir, cuando se excite la entrada con +12V, se encenderá el LED y por lo tanto activará al transistor, esto generará que la entrada del microcontrolador se coloque a 0 lógico (0V); es decir, si entra un 1 lógico (+12V), la entrada del PIC será 0 lógico. Si entra 0 lógico (0V), la entrada del PIC se colocará a 1 lógico. +5V +5V 10k +24V y 0V
1
2N2222A
Entrada 2
3
Puerto de PIC
74126 1k
Figura 7.6. Interfaz con transistor 2N2222A y circuito lógico separador 74126
Otro tipo de acople netamente eléctrico es utilizando la configuración de la figura 7.6; cuando se inserta un voltaje considerable (5, 12 ó 24 voltios) por la resistencia de 10kΩ, la entrada del PIC se coloca a 5V (1 lógico); cuando no exista tensión en 10kΩ, la entrada del PIC se coloca a 0V (0 lógico). La protección electrónica que tiene esta configuración es el circuito de 3 estados (74126), este chip podría ser reemplazado por un separador de 3 estados como el 74245.
© RA-MA
CAPÍTULO 7. ENTRADAS Y SALIDAS DIGITALES 189
Existen otras formas de reducir el voltaje de entrada, la forma más rápida es utilizar un divisor de tensión con resistencias, pero esto resultaría poco apropiado si la entrada, en algún momento, se eleva más de lo previsto, esto ocasionaría serios daños en el puerto del microcontrolador.
7.1.2 Interruptor electrónico Los interruptores electrónicos que proveen detección “sin contacto” son muy populares en aplicaciones industriales. “Activación sin contacto físico” significa que no hay que usar contactos eléctricos ni partes móviles. El pulsador que usamos anteriormente serviría en una aplicación donde se presiona varios miles de veces o con dispositivos de fin de carrera. Sin embargo, en algún momento su resorte se gastará, o sus contactos de desgastarán u oxidarán, hasta el punto de que deje de ser conveniente usarlo. Los interruptores eléctricos industriales utilizan uno de tres principios. •
Los interruptores de proximidad inductivos miden el cambio en el rendimiento de un oscilador cuando objetos de metal se acercan. A menudo los objetos de metal absorben energía mediante corrientes parásitas, lo que hace que el oscilador se detenga.
•
Los interruptores de proximidad capacitivos miden un incremento en la capacidad cuando se les acerca cualquier tipo de material. Cuando el incremento es suficientemente grande, el oscilador interno comienza a oscilar, el circuito se dispara y el estado de la salida cambia.
•
Los interruptores ópticos detectan la presencia o ausencia de un angosto haz de luz, a menudo en el rango infrarrojo. En interruptores ópticos reflectivos, el haz de luz podría reflejarse en un objeto móvil hacia el sensor óptico del interruptor. Otros interruptores ópticos se configuran de forma que un objeto bloquee el haz de luz que va desde la fuente de luz hasta el receptor.
La salida de un interruptor electrónico es una señal de dos estados. Su etapa final puede ser cualquiera de las mostradas en la figura 7.5. Como técnico y desarrollador de aplicaciones, debe considerar la naturaleza de este circuito de señal y condicionarlo para la entrada digital del microcontrolador. La hoja de datos del fabricante le dará información sobre la tensión de operación del interruptor y conexiones de cargas típicas. Aunque puede tomar el pin de entrada digital del PIC como una carga, el interruptor electrónico puede necesitar un resistor de referencia como se empleó en la figura 7.1.
190 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
Normalmente, la salida del interruptor de proximidad estará muy cerca de 0V en un estado y muy cerca de la tensión de fuente en el otro. Siempre es una buena idea medir la tensión de los estados del interruptor con un voltímetro antes de conectarlo a un microcontrolador desprotegido. Si las tensiones de salida no están dentro de los límites compatibles con el PIC, necesitará usar alguno de los circuitos mostrados en la figura 7.5 y 7.6 como una interfaz apropiada. Una aplicación básica de estos interruptores electrónicos es el conteo de pulsos, medición de revoluciones de un motor o velocidad, por ello utilizaremos una entrada del microcontrolador. A continuación, se mostrará un circuito basado en interruptor inductivo para la medición de velocidad en RPM de un motor de corriente continua (véase la figura 7.7). Para el funcionamiento del circuito, proceda a grabar el programa pbp 7.2 en el microcontrolador.
1
1 6 2 7 3 8 4 9 5
2 74HC14
+5V
+5V
CONECTOR DB9
+5V 10k
1 2 3 4 5 6 7 8 9
RA2 RA1 RA3 RA0 RA4/TOCK1 OSC1 OSC2 MCLR VSS VDD RB0/INT RB7 RB1 RB6 RB2 RB5 RB3 RB4
18 17 16 15 14 13 12 11 10
4
3
4MHz 74HC14 10k 22pF
Sensor 1 2 3
22pF
PIC16F84A
VCC GND OUT 3132
(a) +12V
1k
Ve
3
+
2
4
Regulación de velocidad
8
+5V
TL082 1
TIP31
Vs
Motor c.c. 1k
1k
(b) Figura 7.7. (a) Lectura de una señal proveniente de un sensor de efecto de campo 3132 de Allegro MicroSystem y (b) variador de velocidad para motor c.c
© RA-MA
CAPÍTULO 7. ENTRADAS Y SALIDAS DIGITALES 191
Referencia rápida de comandos PicBasic Pro: Count Pin, Período, Variable • Pin es la puerta por donde se va a ingresar el tren de pulsos. • Período es el tiempo en milisegundos que durará el conteo. • Variable es donde se almacenará la cantidad de pulsos. ' Programa pbp 7.2: Programa en PicBasic Pro ' Definición de variables pulsos VAR WORD ' Definir Pulsos como doble byte rpm VAR WORD ' Definir RPM como doble byte Inicio: ' Contar por la puerta A2 durante 1 segundo y almacenar el conteo en ' pulsos Count PORTA.2,1000,pulsos rpm = pulsos*60 ' Expresar la velocidad en rpm, multiplicando Pulsos por 60 ' Enviar al computador el caracter ”*”, la variable rpm en 4 cifras ' seguido de los caracteres 10 y 13 por la puerta A1 a una velocidad ' de 1.200bps SerOut2 PORTA.1,813,[”*”,DEC4 rpm,10,13] Pause 100 ' Pausa de 100 milisegundos GoTo Inicio ' Volver a Inicio
Para la implementación de un circuito, necesitamos un motor de donde obtener la velocidad, para ello implementaremos un circuito variador de velocidad, es más, necesitamos acoplar de alguna manera el eje del motor al sensor inductivo, ¿cómo hacer esto?, no es tan difícil. Tiene que conseguir un imán pequeño que pueda pegar al extremo de un disco de material plástico, por ejemplo, un CD en desuso, acerque el imán al sensor de manera perpendicular y cerciórese de que cuando pasa el imán cerca al sensor, éste genera un cambio de 0 a 1 lógico. Cada vez que el disco gire y el imán pase por el sensor inductivo éste generará un pulso, que será contado por el microcontrolador; como la cuenta se realiza cada segundo y se quiere obtener revoluciones por minuto, se tiene que multiplicar la cantidad de pulsos obtenidos por 60. El resultado de la velocidad se podría observar en HyperTerminal o en un programa en Visual Basic. Una forma de mejorar la medida de velocidad es colocando más imanes alrededor del disco en una posición simétrica (véase la figura 7.8). Si se agregan más imanes, tiene que tomar en cuenta la siguiente fórmula:
RPM =
Pulsos × 60 N
donde, RPM = Velocidad del motor en revoluciones por minuto.
192 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
Pulsos = Número de pulsos obtenidos en un segundo. N = Número de imanes colocados en el disco. Si usted no tuviera un sensor de efecto de campo o inductivo como el HI300, podría utilizar sensores de proximidad o reflectivos bajo el mismo principio, para observar un experimento con sensor reflectivo véase el documento Control industrial Guía del estudiante de PARALLAX, visite http://www.parallax.com.
Figura 7.8. Discos decodificadores para el sensor inductivo. Tenga en cuenta que cada cuadrado negro es un imán
Figura 7.9. Formulario Prueba en funcionamiento que muestra las RPM
Para la visualización de la velocidad en RPM se utilizará el programa Visual Basic, para ello utilice un formulario similar al de la figura 7.3 con las
© RA-MA
CAPÍTULO 7. ENTRADAS Y SALIDAS DIGITALES 193
mismas propiedades de la tabla 7.1, luego digite el código del programa vb 7.2, para la captura de las RPM. ' Programa vb 7.2: Programa para Microsoft Visual Private Sub Form_Load() MSCComunicacion.CommPort=1 ' MSCComunicacion.PortOpen = True ' MSCComunicacion.Settings = "1200,n,8,1" ' ' ' End Sub
Basic 6.0 Puerto serie Com1 Activar puerto 1.200bps, No paridad, 8 bits de datos, 1 de parada
Private Sub TmrComunicacion_Timer() Dim Cadena As String ' Declarar la variable Cadena como String ' Leer el puerto serie y almacenar en Cadena Cadena = MSCComunicacion.Input If Len(Cadena) = 7 Then ' Si la longitud de la cadena es 7 ' entonces ' Mostrar en la caja de texto TxtRx desde el segundo caracter, 4 ' caracteres de la variable Cadena TxtRx.Text = Mid(Cadena, 2, 4) End If ' Finalizar If End Sub
7.1.3 Entradas digitales de 8 bits Cuando se habla de entradas y salidas digitales se relaciona rápidamente con número de bits, y esto no está muy alejado de la realidad, pues cuando se dice que un puerto manipula 8 bits se podría decir que se pueden manejar directamente 8 entradas o salidas digitales, así, por ejemplo, el microcontrolador PIC16F84A tiene el puerto B que es de 8 bits. La siguiente prueba la realizaremos directamente con el microcontrolador PIC, configurando el puerto B como entrada; para esto observe el circuito de la figura 7.10 y el código del programa pbp 7.3. ' Programa pbp 7.3: Programa en PicBasic Pro ' Definición de variables Dato VAR BYTE ' Definir dato como byte TRISB = 255 ' Colocar todo el puerto B como entrada Inicio: dato = PORTB ' Leer el puerto B ' Enviar al computador la variable entrada en 3 cifras seguido de los ' caracteres 10 y 13 por la puerta A1 a una velocidad de 1.200bps SerOut2 PORTA.1,813,[“*”,DEC3 dato,10,13] Pause 500 ' Pausa de 100 milisegundos GoTo Inicio ' Volver a Inicio
Una vez implementado el circuito de la figura 7.10, pulse cada pulsador y verifique qué cambio ocurre con la variable dato recepcionado en el computador, por ejemplo, si presiona el pulsador “0” el valor de dato será 1, si presiona el pulsador 7 el valor de dato será 128, si presiona todos los pulsadores el valor de dato será 255. Para la visualización de la variable dato se usará un formulario en
194 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
Visual Basic, para esto utilice un formulario similar al de la figura 7.3 con las propiedades que se muestran en la tabla 7.1. En el programa vb 7.3 se muestra el código para capturar la variable dato. En la figura 7.11 se muestra el formulario en funcionamiento, en la caja de texto se puede apreciar el número 128, que indica que se presionó el pulsador 7. +5V
0
1
2
3
4
5
6
7
1k
1k
1k
1k
1k
1k
1k
1k
+5V 14
VDD
RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0/INT
10k 4 16 4MHz
15 5
22pF
22pF
MCLR OSC1 OSC2 VSS
RA4/TOCK1 RA3 RA2 RA1 RA0
13 12 11 10 9 8 7 6 3 2 1 18 17
PIC16F84A
3
4 74HC14
1 6 2 7 3 8 4 9 5 CONECTOR DB9
Figura 7.10. Circuito para la lectura de 8 entradas digitales ' Programa vb 7.3: Programa para Microsoft Visual Basic 6.0 Private Sub Form_Load() MSCComunicacion.CommPort=1 ' Puerto serie Com1 MSCComunicacion.PortOpen = True ' Activar puerto MSCComunicacion.Settings = "1200,n,8,1" ' 1.200bps, No paridad, 8 ' bits de datos, 1 de ' parada End Sub Private Sub TmrComunicacion_Timer() Dim Cadena As String ' Declarar la variable Cadena como String ' Leer el puerto serie y almacenar en Cadena Cadena = MSCComunicacion.Input If Len(Cadena) = 6 Then ' Si la longitud de la cadena es 6 ' entonces ' Mostrar en la caja de texto TxtRx desde el segundo caracter, 3 ' caracteres de la variable Cadena TxtRx.Text = Mid(Cadena, 2, 3) End If ' Finalizar If End Sub
© RA-MA
CAPÍTULO 7. ENTRADAS Y SALIDAS DIGITALES 195
Figura 7.11. Formulario Prueba en funcionamiento que muestra la lectura de la entrada digital
7.1.4 Usando el 74151 El circuito integrado 74151 es un multiplexor digital de 8 a 1, es decir, que tiene 8 entradas y una salida, por ello, se utilizará este chip para la lectura de 8 bits. Para conocer más a fondo este chip, en la figura 7.8 le mostramos el diagrama de pines de un 74151 y luego, en la tabla 7.2, se muestra la tabla de verdad de este circuito integrado. D3
1
16
VCC
D2
2
15
D4
D1
3
14
D5
D0
4
13
D6
Y
5
12
D7 A
W
6
11
G
7
10
B
GND
8
9
C
GND: Tierra VCC: Alimentación G: Habilitador de CI Y: Salida multiplexada W: Salida multiplexada negada A-C: Selectores de canal D0-D7: Entradas digitales
74151
Figura 7.12. Diagrama de pines del CI 74151
Selectores C B A X X X 0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1 1 1
Entradas Salidas Habilitador G Y W=Y’ 1 0 1 0 D0 D0’ 0 D1 D1’ 0 D2 D2’ 0 D3 D3’ 0 D4 D4’ 0 D5 D5’ 0 D6 D6’ 0 D7 D7’ Tabla 7.2. Tabla de verdad del CI 74151
196 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
Para leer cada una de las entradas del 74151, se tiene que habilitar el CI y luego manipular los selectores C, B y A, para que en la salida Y se refleje el canal leído, por ejemplo, si se coloca G a 0 lógico, y CBA en una combinación 010, entonces por Y saldrá el valor de D2. En la figura 7.13 se muestra una interfaz entre el microcontrolador PIC16F84A, el multiplexor 74151 y el computador donde se observará el estado de las entradas, para la visualización de los datos use el HyperTerminal o el Visual Basic, revise el capítulo 5. Para el funcionamiento del circuito, digite, compile y grabe el microcontrolador con el programa pbp 7.4. Referencia rápida de comandos PicBasic Pro: For Contador = Inicio To Final { Step Incremento} { Cuerpo } Next Contador • Contador es la variable que se incrementará o disminuirá. • Inicio es el valor inicial de la variable Contador. • Final es el valor final de la variable Contador. • Incremento es el valor con el cual se irá incrementado o disminuyendo la variable Contador. Este dato es opcional, si no se coloca Step y el incremento, por defecto la variable Contador se incrementara en 1. • Cuerpo es el conjunto de operaciones que se realizarán durante cada ciclo del For... Next. ' Programa pbp 7.4: Programa en PicBasic Pro ' Definición de variables para el Mux 74151 valor VAR BYTE ' Definir valor como byte entrada VAR BYTE ' Definir entrada como byte a VAR ENTRADA.0 ' Definir a como el bit 0 de entrada b VAR ENTRADA.1 ' Definir b como el bit 1 de entrada c VAR ENTRADA.2 ' Definir c como el bit 2 de entrada Inicio: TRISB.0=0 ' TRISB.1=0 ' TRISB.2=0 ' TRISB.3=1 ' valor=0 ' For entrada=0 TO 7 ' PORTB.0=a ' PORTB.1=b ' PORTB.2=c ' valor = valor >> 1 ' valor.7=1 ' ' IF PORTB.3=0 Then ' ' EndIF Next entrada '
Establecer la puerta B0 como salida Establecer la puerta B1 como salida Establecer la puerta B2 como salida Establecer la puerta B3 como entrada valor inicial a 0 Realizar combinaciones de entrada desde 0 a 7 Puerta B0 es a Puerta B1 es b Puerta B2 es c Acumular el bit leído en la variable valor Establecer el bit más significativo de valor a alto Si Y (puerto B3) es 0 entonces el valor más significativo de valor va a bajo valor.7=0 Próxima entrada
© RA-MA
CAPÍTULO 7. ENTRADAS Y SALIDAS DIGITALES 197 ' Enviar al computador el carácter ”*”, la variable valor en 3 cifras ' seguido de los caracteres 10 y 13 por la puerta A1 a una velocidad ' de 1.200bps SerOut2 PORTA.1,813,[“*”, DEC3 valor,10, 13] Pause 100 ' Pausa de 100 milisegundos GoTo Inicio ' Volver a Inicio +5V
0
1
2
3
4
5
6
7
+5V 14
VDD
RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0/INT
10k 4 16 4MHz
15 5
22pF
22pF
MCLR OSC1 OSC2 VSS
RA4/TOCK1 RA3 RA2 RA1 RA0
13 12 11 10 9 8 7 6
+5V 16 5 6 9 10 11 7 8
3 2 1 18 17
VCC Y Y C B A E GND
D7 D6 D5 D4 D3 D2 D1 D0
12 13 14 15 1 2 3 4
74LS151 8 x 1k
PIC16F84A
1
2 74HC14
1 6 2 7 3 8 4 9 5 CONECTOR DB9
Figura 7.13. Circuito con CI 74151 y microcontrolador PIC16F84A
Para la visualización del dato digital usaremos el programa vb 7.3. En la figura 7.14 se muestra el formulario en funcionamiento, en la caja de texto TxtRx se muestra el valor 255, esto quiere decir que todas las entradas digitales se encuentran a 1 lógico.
Figura 7.14. Formulario Prueba en funcionamiento que muestra la lectura de la entrada digital
198 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
7.2 SALIDAS DIGITALES Una salida digital simple se puede visualizar en un diodo emisor de luz o LED, al igual que las entradas digitales, existen dos formas de salidas digitales: negada y no negada. Un ejemplo de conexión se muestra en la figura 7.15. La figura 7.15a es una salida digital no negada, la cual hace que se encienda el LED cuando el puerto del microcontrolador se coloca a alto. La figura 7.15b es una salida digital negada, la cual hace que se encienda el LED cuando el puerto del microcontrolador se coloca a bajo. LED 1k Puerto de PIC Activo en alto
(a) LED 1k Puerto de PIC Activo en bajo +5V
(b) Figura 7.15. Esquemas de salida: (a) activo en alto y (b) activo en bajo
7.2.1 Acondicionamiento de señal: interfaz electrónica Como ya se ha visto, existen en la industria niveles lógicos que superan los 5 voltios (TTL), por ejemplo, si usted quisiera encender una lámpara que funciona con 220VAC con un microcontrolador, tendría que agregar una etapa a la salida del microcontrolador para que pueda encender la lámpara, estos circuitos se denominan de acople o para el caso específico de salida de voltaje superior a los 5 voltios “etapas de potencia”. A continuación, detallaremos algunas etapas de potencia. En la figura 7.16 se muestran tres circuitos basados en optocupla, es decir con aislamiento óptico. •
Para el caso del circuito de la figura 7.16a, cuando la salida del PIC es 1 lógico, el diodo no se activará y por tanto no excitará la base del transistor y el voltaje de salida será aproximadamente 12V, en caso contrario, si la salida del PIC es 0 lógico, el diodo se activará y excitará la base del transistor y el voltaje de salida será 0V.
•
Para el caso del circuito de la figura 7.16b, cuando la salida del PIC es 1 lógico, el diodo se activará y por tanto se excitará la base del transistor y el voltaje de salida será aproximadamente 0V, de lo contrario, si la salida del PIC es 0 lógico, el diodo no se activará y no funcionará el transistor y el voltaje de salida será 12V.
© RA-MA
•
CAPÍTULO 7. ENTRADAS Y SALIDAS DIGITALES 199
Para el caso del circuito de la figura 7.16c, cuando la salida del PIC es 1 lógico, el diodo se activará y por tanto excitará la base del transistor y el voltaje de salida será aproximadamente 12V, en caso contrario, si la salida del PIC es 0 lógico, el diodo no se activará y no excitará la base del transistor y el voltaje de salida será 0V. +12V
+12V
10k
10k
+5V
330 Puerto de PIC
1
6
5
1
6
5
Voltaje de salida
2
Voltaje de salida
4N25 4
2
4N25 4
330 Puerto de PIC
(a)
(b) +12V
Puerto de PIC 1
6
5
2
4N25 4 Voltaje de salida
330
10k
(c) Figura 7.16. Interfaces con optocupla
En los pines de voltaje de salida se puede colocar una carga de 12V, como por ejemplo un pequeño motor o una lámpara que funcione a 12V, tiene que tomar en cuenta la corriente y el voltaje de la fuente. Otra forma de obtener una etapa de potencia es utilizando transistores de potencia, como el transistor TIP120 (Darlington) y un circuito separador (circuito de protección). En la figura 7.17, se muestran dos configuraciones basadas en TIP120. Para el caso de la figura 7.17a, cuando la salida del PIC es 0 lógico, el transistor no se activa y la salida de voltaje es aproximadamente 24 voltios; en caso
200 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
contrario, si la salida del PIC es 1 lógico, se activa el transistor y la salida será aproximadamente 0 voltios. Para el caso de la figura 7.17b, cuando la salida del PIC es 0 lógico, el transistor no funciona y la carga no se polariza; en caso contrario, si la salida del PIC es 1 lógico, el transistor funciona y en el colector se hará tierra, y la carga se polariza con 24 voltios y tierra, esto permite que se active la carga. El voltaje de 24 voltios puede variar dependiendo del voltaje de funcionamiento de la carga, por ejemplo, si la carga es un motor DC de 9 voltios, entonces el voltaje conectado al colector será de 9 voltios. Existen otras formas de obtener salidas de mayor voltaje, por ejemplo salidas de 220VAC, para el encendido de artefactos eléctricos u otros aparatos, estas salidas son posibles con el uso de un relé, de contactos múltiples o de estado sólido. La figura 7.18, muestra un relé de 2 contactos, cuya finalidad es la de activar una carga que funcione con 220VAC. Inicialmente, el circuito de la carga y alimentación alterna está abierto, es decir, no existe un flujo de corriente, pues el contacto está entre los pines 2 y 4 del relé, cuando exista alimentación directa en la bobina (entre los pines 1 y 3) de 12 voltios (voltaje de bobina), entonces el relé conmutará, es decir, el contacto cambiará del pin 4 al 5, esto hará que el circuito se cierre (se cierra el conmutador entre los pines 2 y 5) y exista flujo de corriente y, además, que el voltaje alterno se conecte en paralelo a la carga y por lo tanto funcione. Para que el relé conmute del pin 4 al 5 (se cierre el circuito), la salida del PIC debe colocarse a 1 lógico, en caso contrario el relé regresará a su posición inicial y el circuito se abrirá. La figura 7.19, muestra un circuito de potencia basado en un relé de estado sólido, el funcionamiento es muy parecido al relé de múltiples contactos, con la diferencia que en lugar de una bobina que permita la conmutación por campo magnético, tiene un LED que permite un contacto por medio óptico, de manera similar a la de una optocupla. El principio de funcionamiento es simple, cuando la salida del PIC sea 0 voltios, esto hará que el LED al interior del relé se active y que el contacto se cierre y, por lo tanto, se cierre el circuito de potencia y fluya corriente para la activación de la carga. Cuando la salida del PIC sea 5 voltios el LED no se activará y el conmutador regresará a su estado inicial de circuito abierto.
© RA-MA
CAPÍTULO 7. ENTRADAS Y SALIDAS DIGITALES 201 +24V
1k
1
+5V
1k 2
Puerto de PIC
Voltaje de salida
3
TIP120
74126
(a)
1
+24V
2
CARGA
1
+5V
1k Puerto de PIC
2
3
TIP120
74126
(b) Figura 7.17. Interfaz con transistor de potencia TIP120 y separador 74126
4 220VAC
2 5 1
+12V 1
CARGA 3 2
RELÉ DE 2 CONTACTOS 12VDC 220VAC 10A 1k 2N2222A
Puerto de PIC
Figura 7.18. Circuito de potencia con relé de dos contactos y transistor 2N2222A +5V
1
3 1
2
CARGA
240V 10A
220VAC
3-24V Puerto de PIC 2
RELÉ DE ESTADO SÓLIDO
4
Figura 7.19. Circuito de potencia con relé de estado sólido
202 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
7.2.2 Salidas digitales de 8 bits Como ya hemos mencionado, los puertos de 8 bits son muy comunes en electrónica, por ello, en esta parte utilizaremos el puerto B del PIC16F84A como salida de 8 bits (véase la figura 7.20). Para la prueba del circuito, usted tendrá que programar el microcontrolador con el código de programa pbp 7.5. ' Programa pbp 7.5: Programa en PicBasic Pro ' Definición de variables dato VAR BYTE ' Definir dato como byte TRISB = 0 ' Colocar todo el puerto B como salida Inicio: For dato = 0 To 255 PORTB = dato Pause 500 Next dato GoTo Inicio
' ' ' ' ' '
Contar desde dato igual 0 hasta 255 incrementando de uno Escribir el puerto B Pausa de 500 milisegundos Próximo dato Volver a Inicio
El programa pbp 7.5 hará que la salida del puerto B se vaya incrementando en 1, esto permite que los LED se enciendan de acuerdo al número binario que corresponda, por ejemplo, al inicio todo el puerto B estará apagado, es decir, la combinación que se reflejará es la 00000000, después de medio segundo el puerto B0 se encenderá, pues la variable dato toma el valor decimal 1 que en binario será 00000001 y así sucesivamente hasta que la variable dato sea 255, que significará el encendido de todo el puerto B, que en binario es 11111111. +5V 8 x 1k 14
VDD
RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0/INT
10k 4 16 4MHz
15 5
22pF
22pF
MCLR OSC1 OSC2 VSS
RA4/TOCK1 RA3 RA2 RA1 RA0
13 12 11 10 9 8 7 6 3 2 1 18 17
7 6 5 4 3 2 1 0
PIC16F84A
Figura 7.20. Circuito con 8 salidas directas del microcontrolador
Las combinaciones que se están reflejando en el circuito de la figura 7.20 son autónomas, es decir, el microcontrolador las genera de forma automática, pero a veces resultaría importante que usted manipule las salidas del microcontrolador desde un computador, por ello, agregaremos una etapa de comunicación serie con el ordenador para la activación de estas 8 salidas (véase la figura 7.21), para ello repasaremos el capítulo 5 del libro, para establecer un pequeño programa en Visual Basic para la interfaz. Primero se hará el programa en Visual Basic, para ello usted
© RA-MA
CAPÍTULO 7. ENTRADAS Y SALIDAS DIGITALES 203
tendrá que construir un formulario como se muestra en la figura 7.22 y modificar las propiedades de los componentes como se muestra en la tabla 7.3. +5V 8 x 1k 14
VDD
RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0/INT
10k 4 16 4MHz
15 5
22pF
22pF
MCLR OSC1 OSC2 VSS
RA4/TOCK1 RA3 RA2 RA1 RA0
7
13 12 11 10 9 8 7 6
6 5 4 3
3 2 1 18 17
2 1 0
PIC16F84A
22k 2
1 74HC14
1 6 2 7 3 8 4 9 5 CONECTOR DB9
Figura 7.21. Circuito con 8 salidas directas del microcontrolador con comunicación con PC
Con la finalidad de terminar con el programa en Visual Basic, digite el código que se muestra en el programa vb 7.4; el objetivo de este programa es enviar una cadena de datos por el puerto serie hacia el microcontrolador, exactamente $, el byte b0 y el carácter 13 (ENTER), de esta cadena, el byte b0 es el que se va a representar como salida en el puerto B del microcontrolador. Para el funcionamiento del circuito de la figura 7.21, programe el microcontrolador con el código del programa pbp 7.6; aquí el microcontrolador captará lo que esté enviando el computador, en este caso, si el computador envía $ y luego el byte b0 y el caracter 13, el byte b0 se mostrará en el puerto B. La figura 7.23 muestra el formulario en funcionamiento, como se ve en la figura, el valor de b0 es 128, es decir, que desde el computador se envía $, 128 y 13, esto hace que en el microcontrolador se almacene 128 en la variable b0 y 13 en la variable b1, entonces el valor que se reflejará en el puerto B será 128, es decir, el puerto B7 se encenderá y el resto del puerto se apagará (en binario 10000000). Varíe la barra horizontal de 0 a 255 y cambiará el estado de los LED. ' Programa pbp 7.6: Programa en PicBasic Pro ' Definición de variables b0 VAR BYTE' b0 es un byte, b0 será la variable que cambiará el valor del ' puerto B de 0-255 b1 VAR BYTE' b1 es un byte, b1 será la variable que indica si llega la ' cadena completa TRISB=0 ' Configura el puerto B como salida Inicio:
204 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
' Recepciona el byte b0 junto a $ y b1 enviado por el computador a ' una velocidad de 1200bps SerIn2 PORTA.1, 813, 10, No_Dato, [WAIT("$"),b0,b1] If b1=13 Then PORTB = b0 ' El puerto B toma el valor de b0 Pause 10 ' Pausa de 10 milisegundos GoTo Inicio ' Volver a Inicio EndIF No_Dato: GoTo Inicio ' Volver a Inicio
Objeto Formulario
Propiedad Valor Nombre FrmPrueba Caption Prueba BorderStyle 1 Caja de texto 1 Nombre TxtB0 Text "0" Caja de texto 2 Nombre TxtCadena Text 0 (transparente) Etiqueta 1 Nombre Label1 Caption B0 Etiqueta 2 Nombre Label2 Caption Cadena Barra Horizontal Nombre HScDato Min 0 Max 255 Temporizador Nombre TmrComunicacion Interval 100 Microsoft Comm Control 6.0 Nombre MSCComunicacion Tabla 7.3. Valor de cada una de las propiedades de los objetos mostrados en el formulario Referencia rápida de comandos PicBasic Pro: SerIn2 PinRx, Velocidad, Tiempo_Espera, Etiqueta, [Wait ( ), Variables] • PinRx es la puerta por donde se recepcionan los datos. • Velocidad de recepción de bits expresada como un número, por ejemplo para una velocidad de 1.200bps el código que se tiene que escribir es 813 en tipo no invertido o 17.197 en tipo no invertido. • Tiempo_Espera es el tiempo que se espera para recepcionar los datos, este tiempo es expresado en milisegundos. • Etiqueta es hacia donde se va si los datos no son recepcionados durante el tiempo de espera. • Wait () es el primer dato que espera recibir de la cadena enviada por el computador, generalmente son caracteres. • Variables es donde se almacenan los datos recepcionados que han sido previamente declarados, y pueden ser, por ejemplo byte o word.
© RA-MA
CAPÍTULO 7. ENTRADAS Y SALIDAS DIGITALES 205
Figura 7.22. Formulario para conexión entre el computador y el PIC ' Programa vb 7.4: Programa para Microsoft Visual Basic 6.0 Dim b0 As Byte ' Declarar b0 como byte Private Sub Form_Load() MSCComunicacion.CommPort = 1 MSCComunicacion.PortOpen = True MSCComunicacion.Settings = "1200,n,8,1"
' ' ' ' '
Puerto serie Com1 Activar puerto 1.200bps, No paridad, 8 bits de datos, 1 de parada
End Sub Private Sub HScDato_Change() ' Mostrar en la caja de texto TxtB0 el valor de la barra horizontal TxtB0 = HScDato.Value ' b0 es igual al valor de la barra horizontal b0 = HScDato.Value ' Mostrar en la caja de texto TxtCadena lo que se va a enviar TxtCadena = "$" & b0 & Chr(13) ' Enviar por el puerto serie la cadena de caracteres $, b0 y 13 ' (ENTER) MSCComunicacion.Output = "$" + Chr$(b0) + Chr$(13) End Sub Private Sub TmrComunicacion_Timer() ' Enviar por el puerto serie la cadena de caracteres $, b0 y 13 ' (ENTER) de manera repetitiva MSCComunicacion.Output = "$" + Chr$(b0) + Chr$(13) End Sub
Figura 7.23. Formulario en funcionamiento para el control de las salidas digitales
206 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
7.2.3 Usando el 74164 El circuito integrado 74164 es un conversor de serie a paralelo de 8 bits, con la ayuda de un microcontrolador se podrá manejar este CI para que nos muestre 8 salidas digitales, pero usted se preguntará: ¿qué motivo lleva estudiar este CI?, la respuesta es simple: ahorrar pines de control del PIC, es decir, que con sólo dos puertos del microcontrolador conectados al 74164, obtenemos 8 salidas digitales. A
1
14
VCC
B
2
13
QH
QA
3
12
QG
QB
4
11
QF
QC
5
10
QE
QD
6
9
CLR
GND
7
8
CLK
GND: Tierra VCC: Alimentación A-B : Entradas seriales CLK: Entrada de reloj CLR: Entrada de borrado QA-QH: Salidas digitales
74164
Figura 7.24. Diagrama de pines del CI 74164
CLR 0 1 1 1 1
Entradas Salidas CLK A B QA QB ... X X X 0 0 ... 0 X X QA0 QB0 ... 1 1 1 QAn ... 0 X 0 QAn ... X 0 0 QAn ... Tabla 7.4. Tabla de verdad del CI 74164
QH 0 QH0 QGn QGn QGn
En la figura 7.24 se muestra el diagrama de pines del 74164, y debajo la tabla de verdad (véase la tabla 7.4). Para el funcionamiento del conversor serie a paralelo, colocaremos las entradas CLR y B a alto (5 voltios), la entrada CLK se colocará a un puerto del microcontrolador por donde se enviará una señal de reloj, para luego enviar la data serial por otro puerto del PIC conectada a la entrada A. Para comprobar el funcionamiento del CI 74164, implemente el circuito que se muestra en la figura 7.25 y programe el microcontrolador con el código de programa pbp 7.7. El programa pbp 7.7 muestra una prueba para el funcionamiento del CI 74164, aquí el microcontrolador enviará al conversor un dato serie de 8 bits, es decir, 256 combinaciones (de 0 a 255), que serán convertidas en paralelo, bits que se reflejarán en los diodos emisores de luz (0-7) conectados de QA a QH. En la figura 7.26 se muestra el circuito de la figura 7.25 pero con conexión serie para una comunicación con el computador, desde el computador se enviará el dato de 8 bits
© RA-MA
CAPÍTULO 7. ENTRADAS Y SALIDAS DIGITALES 207
que se quiere reflejar a la salida del circuito, para esto utilice el programa vb 7.4 que se hizo en párrafos anteriores. +5V
+5V 8 x 1k 14
VDD
RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0/INT
10k 4 16 4MHz
15 5
22pF
22pF
MCLR OSC1 OSC2 VSS
RA4/TOCK1 RA3 RA2 RA1 RA0
13 12 11 10 9 8 7 6 3 2 1 18 17
14 1 2 8 9 7
VCC QH QG QF A QE B CLK QD CLR QC QB GND QA
13 12 11 10 6 5 4 3
74LS164
7 6 5 4 3 2 1 0
PIC16F84A
Figura 7.25. Circuito con CI 74164 y microcontrolador PIC Referencia rápida de comandos PicBasic Pro: ShiftOut PinDato, PinReloj, Modo, [Variable\NBits] • PinDato es la puerta por donde se van a enviar los datos. • PinReloj es la puerta por donde se dará la sincronía. • Modo significa cómo se van a recibir los bits, por ejemplo, si primero se recepciona el bit MSB o el LSB, o como se envía la señal de reloj; para ello se designa un número. • Variable es donde se almacenará el dato recepcionado por el PinDato. • Nbits es la cantidad de bits que contiene la Variable. ' Programa pbp 7.7: Programa en PicBasic Pro ' Definición de variables dato VAR BYTE ' Definir dato como byte a VAR PORTB.7 ' Definir la puerta B7 como a clk VAR PORTB.6 ' Definir la puerta B6 como clk Inicio: For dato = 0 To 255
' Contar desde dato igual 0 hasta 255 en ' incrementos de uno ' Enviar al 74164 el dato serie por a (B7), junto con al reloj por ' clk (B6) ShiftOut a, clk, 2, [Dato\8] Pause 500 ' Pausa de 500 milisegundos Next dato ' Próximo dato GoTo Inicio ' Volver a Inicio
208 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP +5V
© RA-MA
+5V 8 x 1k 14
VDD
10k 4 16 4MHz
15 5
22pF
22pF
MCLR
RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0/INT
OSC1 RA4/TOCK1 RA3 OSC2 RA2 RA1 VSS RA0
13 12 11 10 9 8 7 6 3 2 1 18 17
14 1 2 8 9 7
VCC QH QG QF A QE B CLK QD CLR QC QB GND QA
13 12 11 10 6 5 4 3
7 6 5 4 3
74LS164
2 1 0
PIC16F84A
22k 2
1 74HC14
1 6 2 7 3 8 4 9 5 CONECTOR DB9
Figura 7.26. Circuito con CI 74164, microcontrolador PIC y comunicación con PC
Por citar un ejemplo respecto a lo dicho en el párrafo anterior, si observamos la figura 7.26, donde se envía el número 128, el microcontrolador almacenará ese dato en la variable b0 que luego será enviada de forma serie al CI 74164 que lo mostrará en paralelo, es decir, el diodo denominado 7 se encenderá. Si el dato enviado es 255, los diodos del 0 al 7 se encenderán, y así, si se envía 0, los diodos del 0 al 7 se apagarán. En la figura 7.27 se muestra el formulario en funcionamiento, en este caso se está enviando el byte cuyo valor es 20, que permitirá encender los diodos 2 y 4. ' Programa pbp 7.8: Programa en PicBasic Pro ' Definición de variables b0 VAR BYTE ' b0 es un byte, b0 será la variable que cambiará el ' valor del puerto B de 0-255 b1 VAR BYTE ' b1 es un byte, b1 tomará el valor de ENTER a VAR PORTB.7 ' Definir la puerta B7 como a clk VAR PORTB.6 ' Definir la puerta B6 como clk Inicio: ' Recepciona la cadena de caracteres enviados por el computador a una ' velocidad de 1.200bps y las almacena en las variables b0 y b1 ' esperando que llegue primero el caracter $, si no sucede esto en 10 ' milisegundos, entonces se irá a la etiqueta No_Dato SerIn2 PORTA.1, 813, 10, No_Dato, [WAIT("$"), b0, b1] IF b1=13 Then Enviar ' Si b1 es 13 entonces ir a etiqueta Funcion GoTo Inicio ' de lo contrario ir a Inicio Enviar: ' Enviar al 74164 el dato serie por a (B7), junto con al reloj por ' clk (B6) ShiftOut a, clk, 2, [B0\8] Pause 10 ' pausa de 10 milisegundos GoTo Inicio ' volver a Inicio No_Dato: GoTo Inicio ' volver a Inicio
© RA-MA
CAPÍTULO 7. ENTRADAS Y SALIDAS DIGITALES 209
Figura 7.27. Formulario de envío de datos en funcionamiento
8Capítulo 8
CONVERSOR A/D Como ya se sabe, un computador manipula señales binarias, o niveles lógicos 0 y 1, pero las señales del mundo real son analógicas, desde una complicada señal de voz hasta cualquier variable física como la humedad, presión o temperatura, en este último caso, por ejemplo, la temperatura en un sitio cálido, por la mañana puede ser de unos 18°C, por el medio día podría alcanzar los 24°C y por la noche bajar a 15°C. Lo que se puede captar del ejemplo es que la temperatura es una señal que varía en el tiempo, alcanzando diferentes valores y no únicamente dos niveles como en una señal binaria. Si a alguna persona se le ocurre registrar la temperatura en un ordenador haciendo uso de un circuito, tendría que convertir la variable analógica (temperatura) a digital para que así pueda ser captada por el computador. El circuito integrado que hace esta conversión se llama conversor A/D (conversor de analógico a digital).
8.1 CONVERSOR ADC0804 El ADC0804 es un conversor A/D de aproximaciones sucesivas de entrada analógica diferencial y de 8 bits de resolución (de salida en paralelo), esto significa que tiene 256 niveles (28). Entre otras características, tiene un tiempo de conversión de 100µs, un error total de ±1LSB y un voltaje de alimentación de 5V. En la figura 8.1 se muestra el diagrama de pines del conversor y se detalla la función de cada pin.
212 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
CS
1
20
RD
2
19
WR
3
18
CLK IN
4
17
INTR
5
16
VIN(+)
6
15
VIN(-)
7
14
A GND
8
13
VREF/2
9
12
10
11
GND
© RA-MA
GND: Tierra CLK R VCC: Alimentación CS: Habilitador de CI DB0 RD: Habilitador de lectura DB1 WR: Habilitador de escritura CLK IN: Puerto de entrada de reloj DB2 CLK R: Puerto de salida de reloj DB3 VIN(+): Entrada positiva de señal analógica DB4 VIN(-): Entrada negativa de señal analógica DB5 A GND: Tierra analógica DB6 VREF/2: Voltaje de referencia DB0-DB7: Pines de salida de conversión AD DB7 VCC
ADC0804
Figura 8.1. Diagrama de pines del ADC0804
8.1.1 Funcionamiento del ADC0804 La mejor forma de poner a prueba el ADC0804 es ensamblar el circuito típico básico del A/D que se observa en la hoja técnica del chip y que se muestra en la figura 8.2. Como se observa en la figura 8.2, se tiene una resistencia variable de 10KΩ, que servirá para brindar la entrada analógica de 0 a 5V al ADC0804, éste arrojará su correspondiente valor digital en los LED conectados en las salidas DB7 a DB0, así, por ejemplo, si usted coloca la resistencia a un extremo que dé 5V de entrada al A/D todos los LED se encenderán (valor en decimal igual a 255), si por el contrario, usted coloca la entrada del A/D a 0V, observará que todos los LED se apagarán (valor en decimal igual a 0). Como usted se dará cuenta, cuando pruebe este circuito, y vaya incrementando paulatinamente el voltaje de entrada del A/D (moviendo la resistencia variable), los LED irán cambiando su estado desde “00000000” hasta “11111111”. Estos cambios se pueden explicar de la siguiente manera:
0V → 0 5V → 255 entonces, los cambios de bit a bit serán:
5 = 19,6mV 255 Es decir, que para que cambie la salida digital de “00000000” a “00000001” se necesita una entrada de 19,6mV. A este valor se le denomina tamaño de paso. Por ejemplo, para 2,5V, ¿qué valor arrojará su conversión a digital?
© RA-MA
CAPÍTULO 8. CONVERSOR A/D 213
2,5 = 127,5 19,6mV ahora, 127,5, redondeando es 128 en decimal, que transformando a digital sería “10000000”. +5V
10K
150pF 1 2 +5V
3 4 5
10K
6 7 8 9 10 10K
10K
CS
VCC
RD
CLK R
WR
DB0
CLK IN
DB1
INTR
DB2
VIN(+)
DB3
VIN(-)
DB4
A GND
DB5
VREF/2
DB6
GND
DB7
20 19 1k 18 1k 17 1k 16 1k 15 1k 14 1k 13 1k 12 1k 11
ADC0804
RESET
+5V
Figura 8.2. Diagrama Típico de prueba del ADC0804
8.1.2 Interfaz con el microcontrolador La conexión con el microcontrolador será la más simple posible, como se observó en capítulos anteriores, el PIC16F84A tiene un puerto paralelo de 8 bits, el puerto B, por ello, la salida de 8 bits del ADC0804 será conectada directamente al puerto B considerando que el puerto B0 es el menos significativo, y será conectado al DB0 y así sucesivamente hasta la conexión B7 a DB7. El dato de conversión en decimal será mostrado en el computador. (Véase la figura 8.3). El programa pbp 8.1 muestra en código lo descrito en líneas anteriores. Para la visualización de la variable adc ejecute el HyperTerminal como se explicó en el capítulo 5. Si quiere ver la variable de otra manera, ejecute el programa vb 5.5 (véase el capítulo 5). En la figura 8.4 vemos el formulario en funcionamiento, mostrando el resultado de la conversión. ' Programa pbp 8.1: Programa en PicBasic Pro ' Definición de variables adc VAR BYTE ' Definir variable adc como byte, almacenará el ' resultado de la conversión TRISB=255 ' Definir todo el puerto B como entrada
214 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
Inicio: Low PORTA.1 ' Refrescar el A/D adc=PORTB ' Leer el puerto B y almacenar en adc High PORTA.1 ' Refrescar el A/D ' Enviar por el puerto A.0 a una velocidad de 1.200bps tipo invertido ' el caracter “*” y la variable adc en 3 cifras seguido de 13 que ' significa ENTER SerOut2 PORTA.0, 813, [“*”, DEC3 adc, 13] Pause 500 ' Pausa de 500 milisegundos GoTo Inicio ' Ir a Inicio
Referencia rápida de comandos PicBasic Pro: High Pin • Pin es la puerta de salida que se va a poner a alto (5V). Low Pin • Pin es la puerta de salida que se va a colocar a bajo (0V). SerOut2 PinTx, Velocidad, [“Caracteres”, Variables] • PinTx es la puerta por donde se va a transmitir. • Velocidad de transmisión de bits expresada como un número, por ejemplo para una velocidad de 1.200bps el código que se tiene que escribir es 813 en tipo no invertido o 17.197 en tipo invertido. • Caracteres son conjuntos de letras o números que pueden ir entre comillas, cuando se envían caracteres sin comillas se está mandando el valor en ASCII. Por ejemplo, si usted escribe “13”, usted estará enviando los caracteres 1 y 3, sin embargo si usted escribe sólo 13 estará enviando el valor ASCII correspondiente a 13, es decir, ENTER. Estos caracteres pueden servir para enviar comandos al computador o separar variables. • Variables son los datos que previamente declarados como byte o word van a ser transmitidos. Para que estos datos sean considerados como valores en el computador, a la variable se le antepone DEC seguido de la cantidad de caracteres que se quiere enviar, por ejemplo, si se tiene una variable tipo byte, está va de 0 a 255, es decir, tendrá 3 caracteres como mayor longitud (de 100 a 255). Otra forma de convertir los datos a valores en decimal es anteponiendo a la variable el símbolo #. TRISPuerto = Valor • Puerto es la puerta o puerto que se definirá como entrada o como salida. • Valor será un valor en decimal o en binario que definirá el estado de un puerto, 0 para salida y 1 para entrada.
© RA-MA
CAPÍTULO 8. CONVERSOR A/D 215
1
2 74HC14
+5V
+5V
1 6 2 7 3 8 4 9 5 CONECTOR DB9
14
VDD
10k 4 16 4MHz
15 5
22pF
22pF
RA0 RA1 RA2 RA3 RA4/TOCK1
MCLR OSC1 OSC2 VSS
RB0/INT RB1 RB2 RB3 RB4 RB5 RB6 RB7
17 18 1 2 3 6 7 8 9 10 11 12 13
10K +5V 20 19 18 17 16 15 14 13 12 11
VCC CS CLK R RD DB0 WR DB1 CLK IN DB2 INTR DB3 VIN(+) DB4 VIN(-) DB5 A GND DB6VREF/2 DB7 GND
PIC16F84A
1 2 3 4 5 6 7 8 9 10
150pF Entrada Analógica
10K
ADC0804 10K
10K
+5V
Figura 8.3. Interconexión del ADC0804 con el PIC16F84A
Figura 8.4. Formulario en funcionamiento que muestra el resultado de la conversión A/D paralelo
8.1.3 Traducir a voltios Como usted habrá percibido, el dato resultado de la conversión enviado al computador es un byte, es decir, una variable que va de 0 a 255 que significa un voltaje de 0 a 5 voltios. Por ello, si lo desea puede traducir la variable adc a un valor aproximado de voltaje, observe el programa pbp 8.2. Básicamente el programa pbp 8.2 es casi similar en estructura al programa anterior, la diferencia está en la inclusión de una nueva variable, la variable vol. Está variable permitirá la conversión de la variable adc a un valor en voltios. Como es sabido, la variable adc arroja un valor de 0 a 255 que significa un voltaje de 0 a 5 voltios, por ello haciendo algunas operaciones matemáticas y considerando que el lenguaje PBP no trabaja con decimales, se procede a lo siguiente:
vol = adc ×
500 255
216 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
donde vol es el resultado en voltios y adc es el resultado de la conversión del A/D. Para realizar la operación hay que tener en cuenta el tipo de variable que se utiliza, por ejemplo, si se tiene una variable tipo WORD, el rango de la variable es de 0 a 65535, ¿qué ocurriría si la variable adc es 255? reemplacemos adc por 255, entonces:
vol = 255 × vol = 500
500 255
Se diría que el resultado es 500, pues se anula el número 255 del denominador y del numerador, lo que es falso, recuerde que un programa es secuencial, es decir, que va paso a paso, primero se ejecuta la multiplicación 255 por 500, que resulta 127.500, esto hace que la variable vol se desborde, es decir, la variable excede su valor máximo de 65.535, esto provoca un error de cálculo, por ello el resultado de vol no es 500, es 243. La expresión anterior se arreglará de la siguiente forma:
vol =
(adc × 100) × 5 255
Analicemos, si adc es 255 entonces:
vol =
(255 × 100) × 5
255 25.500 ×5 vol = 255 vol = 100 × 5 vol = 500
El valor de vol es 500, luego se aplica DEC1 vol/100 que resulta 5, luego se enlaza con el carácter punto y finalmente DEC2 vol que resulta 00, todo esto se envía al puerto junto con otros caracteres, y se obtiene Vin=5,00V. ' Programa pbp 8.2: Programa en PicBasic Pro ' Definición de variables adc VAR BYTE ' Definir variable adc como byte, almacenará el ' resultado de la conversión vol VAR WORD ' Definir variable vol como word, se utilizará para ' convertir la variable adc a voltios TRISB=255 ' Definir todo el puerto B como entrada Inicio:
© RA-MA
CAPÍTULO 8. CONVERSOR A/D 217 Low PORTA.1 ' Refrescar el A/D adc=PORTB ' Leer el puerto B y almacenar el dato en adc High PORTA.1 ' Refrescar el A/D vol=(adc*100/255)*5 ' Convertir adc a voltaje ' Enviar por el puerto A.0 a una velocidad de 1.200bps tipo invertido ' “Vin=” , la variable vol dividida en 100 en una cifra, el carácter ' punto (“.”), la variable vol en 2 cifras seguido de "V" y 13 que ' significa ENTER SerOut2 PORTA.0,813,[ "Vin=",DEC1 vol/100,".",DEC2 vol,"V",13] GoTo Inicio ' Ir a Inicio
Referencia rápida sobre Bits: Bit Multiplicador
7 6 128 64
5 32
4 16
3 8
2 4
1 2
0 1
Factor de cada Bit y Potencias de dos • El bit-0 es el bit menos significativo o de menor peso (Least Significant Bit = LSB, en inglés) y el bit-7 es el de mayor peso o más significativo (Most Significant Bit = MSB, en inglés). Esto se debe a que el bit-0 hace la contribución más pequeña al valor del número y el bit-7 hace la contribución más grande. Los números binarios se arman comenzando por el bit-7 a la izquierda y finalizando con el bit-0 a la derecha, lo que permite convertirlos utilizando potencias de dos. Ejemplos: El multiplicador para el bit-0 es 1, que es igual a 20. El multiplicador para el bit-1 es 2, que es igual a 21. El multiplicado para el bit-7 es 128, que es igual a 27. Puede usar potencias de dos para extender la tabla para cualquier cantidad de bits.
Figura 8.5. Formulario de prueba con sus componentes de acuerdo a la tabla 8.1
Para la visualización del voltaje enviado por el microcontrolador, se realizará un pequeño programa diseñado en Visual Basic. Para ello, construya un formulario como se muestra en la figura 8.5, coloque las propiedades de cada componente según la tabla 8.1 y digite el código descrito en el programa vb 8.1, que permitirá la captura de la cadena enviada por el microcontrolador.
218 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
Objeto Formulario
Propiedad Valor Nombre FrmPrueba Caption Prueba BorderStyle 1 Caja de texto 1 Nombre TxtCadena Text 0 (transparente) Etiqueta 1 Nombre Label1 Caption Voltaje Temporizador Nombre TmrComunicacion Interval 500 Microsoft Comm Control 6.0 Nombre MSCComunicacion Tabla 8.1. Valor de cada una de las propiedades de los objetos mostrados en el formulario ' Programa vb 8.1: Programa para Microsoft Visual Private Sub Form_Load() MSCComunicacion.CommPort = 1 ' MSCComunicacion.PortOpen = True ' MSCComunicacion.Settings = "1200,n,8,1" ' ' ' End Sub
Basic 6.0 Puerto serie Com1 Activar puerto 1.200bps, No paridad, 8 bits de datos, 1 de parada
Private Sub TmrComunicacion_Timer() Dim Cadena As String ' Definir Cadena como String ' Leer el puerto serie y almacenar en la variable cadena Cadena = MSCComunicacion.Input If Len(Cadena) = 10 Then ' Si la longitud de la cadena es 10 TxtCadena.Text = Mid(Cadena, 1, 10) ' Capturar la cadena entera End If End Sub
Figura 8.6. Formulario en funcionamiento que muestra el resultado de la conversión a voltaje
En la figura 8.6 se muestra el formulario en funcionamiento, donde se puede visualizar el valor enviado por el microcontrolador, pero en esta ocasión, el dato se muestra en voltios.
8.2 CONVERSOR ADC08031 El ADC0831 es un conversor analógico a digital de 8 bits con salida serial sincrónica. Trabajar con una salida serial sincrónica significa que estamos enviando los datos con cierta coordinación temporal (sincronía). Técnicamente,
© RA-MA
CAPÍTULO 8. CONVERSOR A/D 219
significa que el emisor y el receptor de los bits de datos trabajarán con la misma señal de reloj. Entre otras características, el ADC08031 posee un tiempo de conversión de 8µs, un error total de ±1LSB, un voltaje de alimentación de 5V y una entrada diferencial. La figura 8.7 muestra el diagrama de pines del ADC08031 con la descripción de cada pin.
CS
1
8
VCC
VIN(+)
2
7
CLK
VIN(-)
3
6
DO
4
5
VREF
GND
ADC08031
GND: Tierra VCC: Alimentación CS: Pin de habilitación del conversor VIN(+): Entrada positiva de señal analógic VIN(-): Entrada negativa de señal analógic VREF: Voltaje de referencia DO: Pin de salida digital de la conversión CLK: Pin de reloj
Figura 8.7. Diagrama de pines del ADC08031
8.2.1 Funcionamiento del ADC08031 La forma más sencilla de averiguar cómo funciona un chip es recurriendo a la hoja técnica, y más específicamente al diagrama de tiempo. El ADC08031 tiene el diagrama mostrado en la figura 8.8.
Figura 8.8. Diagrama de tiempos del ADC08031. ADC08031 Timming obtenido de National Semiconductor
8.2.2 ¿Cómo programar de acuerdo con el diagrama de tiempo? De acuerdo con el diagrama de tiempos visto, se observa que para el funcionamiento del chip se necesita que el pin CS esté en bajo y se dén 9 pulsos de reloj al pin CLK, para ahí leer el dato de 8 bits por el pin DO. Otra observación más que se puede hacer es que el primer dato que enviará el A/D es el bit mas significativo (MSB) y que para volver a realizar una conversión se tiene que deshabilitar el chip poniendo a alto el pin CS y volver a hacer todo de nuevo.
220 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
8.2.3 Interfaz con el microcontrolador Para la comunicación con el microcontrolador, se utilizarán 3 puertos que irán conectados directamente a los pines CS, CLK y DO del A/D.
1
1 6 2 7 3 8 4 9 5
2 74HC14
+5V 14
VDD
10k 4 16 4MHz
15 5
22pF
22pF
RA0 RA1 RA2 RA3 RA4/TOCK1
MCLR OSC1 OSC2 VSS
RB0/INT RB1 RB2 RB3 RB4 RB5 RB6 RB7
17 18 1 2 3 6 7 8 9 10 11 12 13
CONECTOR DB9
+5V
8 7 6 5
CS VCC CLK VIN(+) DO VIN(-) VREF GND
1 2 3 4
+5V
Entrada Analógica
10K
ADC08031 +5V
PIC16F84A 10K
Figura 8.9. Circuito PIC16F84A con ADC08031
Esta vez trabajaremos con los puertos B0, B1 y B2 que serán conectados a CS, CLK y Do respectivamente. El circuito se muestra en la figura 8.9. Para la visualización del dato de conversión, se hará uso de un computador y luego realizaremos unas pruebas con una pantalla de cristal líquido, para esto revise los programas pbp 8.3 y 8.4. Para la visualización de los datos en el computador, se podría utilizar el HyperTerminal o el código del programa vb 5.5 explicado en el capítulo 5. ' Programa pbp 8.3: Programa en PicBasic Pro ' Definición de variables adc VAR BYTE ' Definir adc como byte, almacenará el resultado de la ' conversión cs VAR PORTB.0 ' Definir la puerta B0 como cs clk VAR PORTB.1 ' Definir la puerta B1 como clk do VAR PORTB.2 ' Definir la puerta B2 como do Inicio: Low cs ' Habilitar el A/D ' Leer la variable de 8 bits comenzando con el bit MSB y sincronizar ' con 9 pulsos de reloj ShiftIn do, clk, 2, [adc\9] High cs ' Deshabilitar el A/D ' Enviar por la puerta A.1 a una velocidad de 1.200bps tipo invertido ' el carácter “*” y la variable adc en 3 cifras seguido de 13 que ' significa ENTER SerOut2 PORTA.1, 813, [“*”, DEC3 adc, 13] Pause 500 ' Pausa de 500 milisegundos GoTo Inicio ' Ir a Inicio
© RA-MA
CAPÍTULO 8. CONVERSOR A/D 221
En la figura 8.10 se muestra el formulario en funcionamiento, dando como resultado la captura de la variable adc.
Figura 8.10. Formulario en funcionamiento que muestra el resultado de la conversión A/D.
Si usted no quiere emplear una computadora como medio de visualización, aquí le mostramos un circuito para que visualice la variable en una pantalla de cristal líquido o LCD. (Véase la figura 8.11). El programa para el circuito de la figura 8.11 es básicamente el mismo que el anterior, la única diferencia es la sentencia LCDOut.
Vss Vdd Vo Rs R/W E 0 1 2 3 4 5 6 7
LCD
1 2 3 4 5 6 7 8 9 10 11 12 13 14
+5V
10k +5V 14
VDD
10k 4 16 4MHz
15 5
22pF
22pF
RA0 RA1 RA2 RA3 RA4/TOCK1
MCLR OSC1 OSC2 VSS PIC16F84A
RB0/INT RB1 RB2 RB3 RB4 RB5 RB6 RB7
17 18 1 2 3
+5V +5V
6 7 8 9 10 11 12 13
8 7 6 5
VCC CS CLK VIN(+) DO VIN(-) VREF GND
1 2 3 4
Entrada Analógica
10K
ADC08031 +5V
10K
Figura 8.11. Visualización de la conversión en una pantalla de cristal líquido ' Programa pbp 8.4: Programa en PicBasic Pro ' Definición de variables adc VAR BYTE ' Definir adc como byte, almacenará el resultado de la ' conversión cs VAR PORTB.0 ' Definir la puerta B0 como cs clk VAR PORTB.1 ' Definir la puerta B1 como clk do VAR PORTB.2 ' Definir la puerta B2 como do
222 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
Inicio: Low cs ' Habilitar el A/D ' Leer la variable de 8 bits comenzando con el bit MSB y sincronizar ' con 9 pulsos de reloj ShiftIn do, clk, 2, [adc\9] High cs ' Deshabilitar el A/D ' Mostrar en la pantalla de cristal líquido “A/D=” y la variable adc LCDOut $Fe, 1, “A/D=”, #adc Pause 500 ' Pausa de 500 milisegundos GoTo Inicio ' Ir a Inicio
Referencia rápida de comandos PicBasic Pro: ShiftIn PinDato, PinReloj, Modo, [Variable\NBits] • PinDato es la puerta por donde se van a recibir los datos. • PinReloj es la puerta por donde se dará la sincronía. • Modo significa cómo se van a recibir los bits, por ejemplo, si primero se recepciona el bit MSB o el LSB, o cómo se envía la señal de reloj; para ello se designa un número. • Variable es donde se almacenará el dato recepcionado por el PinDato. • Nbits es la cantidad de bits que contiene la Variable. LCDOut Datos • Datos está referido a lo que se va a mostrar en el LCD.
8.2.4 Traducir a voltios El programa pbp 8.5 muestra la conversión de la variable adc a su valor correspondiente en voltios. Para obtener el voltaje, básicamente se aplica la formula que se explicó en párrafos anteriores. En la figura 8.12 se muestra una aproximación de lo que aparecería en la pantalla de cristal líquido del circuito de la figura 8.7 de acuerdo con los programas pbp 8.4 y pbp 8.5. En la figura 8.12a simplemente se muestra el resultado de la conversión A/D, es decir la variable adc, para este caso 128, mientras que en la figura 8.12b se muestra el valor de la conversión A/D en voltios, es decir 2,5 voltios.
(a)
(b) Figura 8.12. Pantallas de cristal líquido de acuerdo con los programas: (a) pbp 8.4 y (b) pbp 8.5
© RA-MA
CAPÍTULO 8. CONVERSOR A/D 223
' Programa pbp 8.5: Programa en PicBasic Pro ' Definición de variables adc VAR BYTE ' Definir adc como byte, almacenará el resultado de la ' conversión vol VAR WORD ' Definir variable vol como word, se utilizará para ' convertir la variable adc a voltios cs VAR PORTB.0 ' Definir la puerta B0 como cs clk VAR PORTB.1 ' Definir la puerta B1 como clk do VAR PORTB.2 ' Definir la puerta B2 como do Inicio: Low cs ' Habilitar el A/D ' Leer la variable de 8 bits comenzando con el bit MSB y sincronizar ' con 9 pulsos reloj ShiftIn do, clk, 2, [adc\9] High cs ' Deshabilitar el A/D vol=(adc*100/255)*5 ' Convertir adc a voltaje ' Mostrar en la pantalla de cristal líquido "Vin = " y el voltaje con ' dos decimales seguido del caracter "V" LCDOut $Fe, 1, "Vin = ", DEC1 vol/100,".",DEC2 vol," V" Pause 500 ' Pausa de 0,5 segundos GoTo Inicio ' Ir a Inicio
8.3 CONVERSOR ADC08032 El ADC08032 es un conversor de analógico a digital de 8 bits serial de alta velocidad de dos canales que pertenece a la serie ADC08031, ADC08032, ADC08034, ADC08038.
CS
1
8
VCC
CH0
2
7
CLK
CH1
3
6
DO
GND
4
5
DI
ADC08032
GND: Tierra VCC: Alimentación CS: Pin de habilitación del conversor CH0: Canal de entrada analógica 0 CH1: Canal de entrada analógica 1 DI: Pin de entrada digital de selección de cana DO: Pin de salida digital de la conversión CLK: Pin de reloj
Figura 8.13. Diagrama de pines del ADC08032
Si usted aprecia el último número de cada código, se puede dar cuenta que indica el número de canales que posee el conversor, es así que el ADC08032 posee 2 canales, el ADC08034 posee 4 canales y así sucesivamente. Una de las características del ADC08032 es que posee un multiplexor interno para la selección de canal. La figura 8.13 muestra el diagrama de pines del ADC08032 y la función de cada pin.
8.3.1 Funcionamiento del ADC08032 Como se hizo con el ADC08031, para el funcionamiento del ADC08032, recurriremos a la hoja técnica proporcionada por el fabricante. La figura 8.10
224 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
muestra el diagrama de tiempos que nos permitirá saber cómo funciona el ADC08032. En las tablas 8.2 y 8.3 se muestran las tablas de configuración del multiplexor interno, de acuerdo con esto el multiplexor del ADC08032 se puede configurar de 2 formas básicas o modos de manipular los canales del conversor, modo simple y modo diferencial. El diagrama de tiempos de la figura 8.14 muestra cómo se debe manipular los pines CLK, CS, DIN y DOUT para que funcione el ADC08032, de acuerdo con esto, se tendría que construir una onda teniendo en cuenta las entradas CLK, CS y DIN (que son salidas del microcontrolador) del conversor para que luego arroje la conversión del canal seleccionado por DOUT (que será una entrada para el microcontrolador).
Figura 8.14. Diagrama de tiempos del ADC08032. ADC08032 Timming obtenido de National Semiconductor
Se sabe que existen dos formas de manipular los canales del conversor de modo simple y modo diferencial, pero ¿cuál es la diferencia entre cada uno de ellos?, lo explicaremos, el trabajo en modo simple, significa que cada canal es independiente del otro, en cambio en modo diferencial existe una dependencia del canal 0 con respecto al canal 1 y viceversa, para decirlo más claro, si se lee el canal 0 se utiliza como referencia el canal 1 (se hace una diferencia).
Modo Simple DIRECCIÓN DEL MULTIPLEXOR CANAL SGL/ ODD/ START DIF SIGN 0 1 1 1 0 + 1 1 1 + Tabla 8.2. Configuración del ADC08032 para modo simple
© RA-MA
CAPÍTULO 8. CONVERSOR A/D 225
Modo Diferencial DIRECCIÓN DEL MULTIPLEXOR CANAL SGL/ ODD/ START DIF SIGN 0 1 1 0 0 + 1 0 1 + Tabla 8.3. Configuración del ADC08032 para modo diferencial
8.3.2 ¿Cómo programar de acuerdo con el diagrama de tiempo? Tomemos el diagrama de la figura 8.10 y concentrémonos en la onda de DI, si usted observa bien, la onda tiene una secuencia 101 y luego condiciones “no importa”, si ésta se compara con la tabla 8.3, el bit de START es 1, el bit SGL/DIF es 0 y el bit ODD/SIGN esto es el segundo caso, es decir, que la secuencia permite la lectura en modo diferencial del canal 2; esto sucedería siempre y cuando CS se encuentre en 0 lógico y se lea utilizando el pin DO con la sincronización CLK.
8.3.3 Interfaz con el microcontrolador Siguiendo estos pasos y de acuerdo con el esquema de la figura 8.15, el código quedaría como se muestra en el programa pbp 8.6. El programa pbp 8.6 sirve para la lectura de dos canales analógicos en modo simple y está dividido en tiempos de acuerdo con el diagrama de la figura 8.14.
1 +5V
74HC14 14
VDD
10k 4 16 4MHz
15 5
22pF
22pF
1 6 2 7 3 8 4 9 5
2
RA0 RA1 RA2 RA3 RA4/TOCK1
MCLR OSC1 OSC2 VSS
RB0/INT RB1 RB2 RB3 RB4 RB5 RB6 RB7
17 18 1 2 3 6 7 8 9 10 11 12 13
+5V
+5V
Entrada Analógica 1
10K
CONECTOR DB9 8 7 6 5
VCC CLK DO DI
CS CH0 CH1 GND
1 2 3 4
ADC08032
+5V
Entrada Analógica 2
10K
PIC16F84A
Figura 8.15. Circuito PIC16F84A con ADC08032
En el tiempo 1 se establece el primer pulso de reloj, luego el conversor permanece desactivado y se inicia el conversor (START bit a alto).
226 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
En el tiempo 2 se da un pulso más de reloj y se habilita el conversor (CS a bajo), luego se establece el conversor como simple (SGL/DIF a alto). En el tiempo 3 se origina el siguiente pulso de reloj y luego se selecciona el canal (ODD/SIGN a bajo para canal 0 o a alto para canal 1), en los siguientes 9 pulsos de reloj se leen los 8 bits del canal de forma muy parecida al ADC0831. Hay que tener en cuenta que en el tiempo 0 se considera que no sucede nada con el conversor. Para que el conversor A/D funcione de modo diferencial, el programa pbp 8.6 se modificará y quedará como el programa pbp 8.7 en el cual, el tiempo 1 permanece igual, el tiempo 2 el bit SGL/DIF de DI debe establecerse bajo y luego en el tiempo 3 se elige el canal. Edite, compile y grabe cada uno de los programas para el funcionamiento del conversor ADC0832.
Figura 8.16. Formulario en funcionamiento que muestra la cadena enviada por el microcontrolador y las dos variables separadas
Para la visualización de los datos, usted podría utilizar el programa vb 5.6, desarrollado en el capítulo 5; en la figura 8.16 se muestra el formulario de Visual Basic en funcionamiento, aquí se muestran tres caja de texto, en la superior se muestra la cadena completa y en las inferiores las variables separadas ch0 y ch1. ' Programa pbp 8.6: Programa en PicBasic Pro ' Definición de variables ch0 VAR BYTE ' Definir ch0 como byte, almacenará el dato obtenido ' de la conversión del canal 0 ch1 VAR BYTE ' Definir ch1 como byte, almacenará el dato obtenido ' de la conversión del canal 1 cs VAR PORTB.0 ' Definir la puerta B0 como cs clk VAR PORTB.1 ' Definir la puerta B1 como clk do VAR PORTB.2 ' Definir la puerta B2 como do di VAR PORTB.4 ' Definir la puerta B4 como di Inicio: ' Leer canal 0 High clk ' Tiempo 1: Primera señal de reloj en alto High cs ' Desactivar el conversor A/D High di ' Bit START a alto para iniciar el conversor A/D Low clk ' Señal de reloj a bajo Low cs ' Activar el conversor A/D
© RA-MA
CAPÍTULO 8. CONVERSOR A/D 227 High di High clk High di
' Bit START a alto para iniciar el conversor A/D ' Tiempo 2: Segunda señal de reloj en alto ' Bit SGL/DIF a alto para establecer el multiplexor en ' modo simple Low clk ' Señal de reloj a bajo High di ' Bit SGL/DIF a alto para establecer el multiplexor en ' modo simple High clk ' Tiempo 3: Tercera señal de reloj en alto High di ' Bit SGL/DIF a alto para establecer el multiplexor en ' modo simple Low clk ' Señal de reloj a bajo Low di ' Bit ODD/SIGN a bajo para seleccionar el canal 0 ' Tiempo 4 a 12: Leer canal 0 y almacenar en ch0 ShiftIn do,clk,2,[ch0\9] ' Leer canal 1 High clk ' Tiempo 1: Primera señal de reloj en alto High cs ' Desactivar el conversor A/D High di ' Bit START a alto para iniciar el conversor A/D Low clk ' Señal de reloj a bajo Low cs ' Activar el conversor A/D High di ' Bit START a alto para iniciar el conversor A/D High clk ' Tiempo 2: Segunda señal de reloj en alto High di ' Bit SGL/DIF a alto para establecer el multiplexor en ' modo simple Low clk ' Señal de reloj a bajo High di ' Bit SGL/DIF a alto para establecer el multiplexor en ' modo simple High clk ' Tiempo 3: Tercera señal de reloj en alto High di ' Bit SGL/DIF a alto para establecer el multiplexor en ' modo simple Low clk ' Señal de reloj a bajo High di ' Bit ODD/SIGN a alto para seleccionar el canal 1 ' Tiempo 4 a 12: Leer canal 1 y almacenar en ch1 ShiftIn do,clk,2,[ch1\9] ' Enviar por la puerta A.0 a una velocidad de 1.200bps tipo invertido ' el carácter “A”, la variable ch0 en 3 cifras, el carácter “B”, la ' variable ch1 en 3 cifras, y el caracter 13 que significa ENTER SerOut2 PORTA.0, 813, ["A",DEC3 ch0, "B", DEC3 ch1, 13] Pause 500 ' Pausa de 500 milisegundos GoTo Inicio ' Ir a Inicio
ȱ ' Programa pbp 8.7: Programa en PicBasic Pro ' Definición de variables ch0 VAR BYTE ' Definir ch0 como byte, almacenará el dato obtenido ' de la conversión del canal 0 ch1 VAR BYTE ' Definir ch1 como byte, almacenará el dato obtenido ' de la conversión del canal 1 cs VAR PORTB.0 ' Definir la puerta B0 como cs clk VAR PORTB.1 ' Definir la puerta B1 como clk do VAR PORTB.2 ' Definir la puerta B2 como do di VAR PORTB.4 ' Definir la puerta B4 como di Inicio: ' Leer canal 0 High clk ' Tiempo 1: Primera señal de reloj en alto High cs ' Desactivar el conversor A/D High di ' Bit START a alto para iniciar el conversor A/D Low clk ' Señal de reloj a bajo Low cs ' Activar el conversor A/D
228 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
High di High clk Low di
' Bit START a alto para iniciar el conversor A/D ' Tiempo 2: Segunda señal de reloj en alto ' Bit SGL/DIF a bajo para establecer el multiplexor en ' modo diferencial PauseUs 1 ' Pausa de 1 microsegundo Low clk ' Señal de reloj a bajo Low di ' Bit SGL/DIF a bajo para establecer el multiplexor en ' modo diferencial High clk ' Tiempo 3: Tercera señal de reloj en alto Low di ' Bit SGL/DIF a bajo para establecer el multiplexor en ' modo diferencial Low clk ' Señal de reloj a bajo Low di ' Bit ODD/SIGN a bajo para seleccionar el canal 0 ' Tiempo 4 a 12: Leer canal 0 y almacenar en ch0 ShiftIn do,clk,2,[ch0\9] ' Leer canal 1 High clk ' Tiempo 1: Primera señal de reloj en alto High cs ' Desactivar el conversor A/D High di ' Bit START a alto para iniciar el conversor A/D Low clk ' Señal de reloj a bajo Low cs ' Activar el conversor A/D High di ' Bit START a alto para iniciar el conversor A/D High clk ' Tiempo 2: Segunda señal de reloj en alto Low di ' Bit SGL/DIF a bajo para establecer el multiplexor en ' modo diferencial Low clk ' Señal de reloj a bajo Low di ' Bit SGL/DIF a bajo para establecer el multiplexor en ' modo diferencial High clk ' Tiempo 3: Tercera señal de reloj en alto Low di ' Bit SGL/DIF a bajo para establecer el multiplexor en ' modo diferencial Low clk ' Señal de reloj a bajo Low clk ' Señal de reloj a bajo High di ' Bit ODD/SIGN a alto para seleccionar el canal 1 ' Tiempo 4 a 12: Leer canal 1 y almacenar en ch1 ShiftIn do,clk,2,[ch1\9] ' Enviar por la puerta A.0 a una velocidad de 1.200bps tipo invertido ' el carácter "A", la variable ch0 en 3 cifras, el carácter "B", la ' variable ch1 en 3 cifras, y el caracter 13 que significa ENTER SerOut2 PORTA.0, 813, ["A",DEC3 ch0, "B", DEC3 ch1, 13] Pause 500 ' Pausa de 500 milisegundos GoTo Inicio ' Ir a Inicio
En la figura 8.17 se muestra un diagrama usando una pantalla de cristal líquido para visualizar datos. Para la visualización de los datos en la pantalla de cristal líquido, el programa es similar al programa pbp 8.6, sólo cambie la sentencia SerOut por LCDOut como se muestra en el programa pbp 8.8. En la pantalla de cristal líquido se mostrarán los datos de ambos canales analógicos, un valor en cada línea. En la figura 8.18 se muestra como aparecerían los valores de las variables ch0 y ch1, un valor en cada línea acompañado del título Canal 0 y Canal 1 respectivamente.
© RA-MA
CAPÍTULO 8. CONVERSOR A/D 229
Vss Vdd Vo Rs R/W E 0 1 2 3 4 5 6 7
LCD
1 2 3 4 5 6 7 8 9 10 11 12 13 14
+5V
+5V 10k +5V 14
VDD
10k 4 16 4MHz
15 5
22pF
22pF
RA0 RA1 RA2 RA3 RA4/TOCK1
MCLR OSC1 OSC2 VSS PIC16F84A
RB0/INT RB1 RB2 RB3 RB4 RB5 RB6 RB7
Entrada Analógica 1
17 18 1 2 3 6 7 8 9 10 11 12 13
10K
+5V +5V 8 7 6 5
VCC CLK DO DI
CS CH0 CH1 GND
1 2 3 4
Entrada Analógica 2
10K
ADC08032
Figura 8.17. Visualización de la conversión de los dos canales en la pantalla de cristal líquido ' Programa pbp 8.8: Programa en PicBasic Pro ' Definición de variables ch0 VAR BYTE ' Definir ch0 como byte, almacenará el dato obtenido ' de la conversión del canal 0 ch1 VAR BYTE ' Definir ch1 como byte, almacenará el dato obtenido ' de la conversión del canal 1 cs VAR PORTB.0 ' Definir la puerta B0 como cs clk VAR PORTB.1 ' Definir la puerta B1 como clk do VAR PORTB.2 ' Definir la puerta B2 como do di VAR PORTB.4 ' Definir la puerta B4 como di Inicio: ' Leer canal 0 High clk ' Tiempo 1: Primera señal de reloj en alto High cs ' Desactivar el conversor A/D High di ' Bit START a alto para iniciar el conversor A/D Low clk ' Señal de reloj a bajo Low cs ' Activar el conversor A/D High di ' Bit START a alto para iniciar el conversor A/D High clk ' Tiempo 2: Segunda señal de reloj en alto High di ' Bit SGL/DIF a alto para establecer el multiplexor en ' modo simple Low clk ' Señal de reloj a bajo High di ' Bit SGL/DIF a alto para establecer el multiplexor en ' modo simple High clk ' Tiempo 3: Tercera señal de reloj en alto High di ' Bit SGL/DIF a alto para establecer el multiplexor en ' modo simple Low clk ' Señal de reloj a bajo Low di ' Bit ODD/SIGN a bajo para seleccionar el canal 0 ' Tiempo 4 a 12: Leer canal 0 y almacenar en ch0 ShiftIn do,clk,2,[ch0\9]
230 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
' Leer canal 1 High clk ' Tiempo 1: Primera señal de reloj en alto High cs ' Desactivar el conversor A/D High di ' Bit START a alto para iniciar el conversor A/D Low clk ' Señal de reloj a bajo Low cs ' Activar el conversor A/D High di ' Bit START a alto para iniciar el conversor A/D High clk ' Tiempo 2: Segunda señal de reloj en alto High di ' Bit SGL/DIF a alto para establecer el multiplexor en ' modo simple Low clk ' Señal de reloj a bajo High di ' Bit SGL/DIF a alto para establecer el multiplexor en ' modo simple High clk ' Tiempo 3: Tercera señal de reloj en alto High di ' Bit SGL/DIF a alto para establecer el multiplexor en ' modo simple Low clk ' Señal de reloj a bajo High di ' Bit ODD/SIGN a alto para seleccionar el canal 1 ' Tiempo 4 a 12: Leer canal 0 y almacenar en ch1 ShiftIn do,clk,2,[ch1\9] ' Mostrar en la primera línea de la pantalla de cristal líquido ' "Canal 0=" mas la variable ch0 LCDOut $Fe, 1, "Canal 0=", #Ch0 ' Mostrar en la segunda línea de la pantalla de cristal líquido ' "Canal 1=" mas la variable ch1 LCDOut $Fe, $C0, "Canal 1=", #Ch1 Pause 100 ' Pausa de 100 milisegundos GoTo Inicio ' Ir a Inicio
Figura 8.18. Pantalla de cristal líquido que muestra las variables ch0 y ch1
8.3.4 Traducir a voltios El programa pbp 8.9 muestra la conversión de las variables ch0 y ch1 a su correspondiente voltaje. Para la conversión se utiliza la fórmula mencionada para el primer circuito del capítulo. Tome en cuenta que el conversor A/D está funcionando en canal simple y que los voltajes van de 0 a 5 voltios por canal. Edite, compile y grabe el programa pbp 8.9 y pruebe el funcionamiento del conversor A/D para la lectura en voltios de cada canal analógico. ' Programa pbp 8.9: Programa en PicBasic Pro ' Definición de variables ch0 VAR BYTE ' Definir ch0 como byte, almacenará el dato obtenido ' de la conversión del canal 0 ch1 VAR BYTE ' Definir ch1 como byte, almacenará el dato obtenido ' de la conversión del canal 1 v0 VAR WORD ' Definir v0 como word, almacenará la conversión a ' voltaje de ch0 v1 VAR WORD ' Definir v1 como word, almacenará la conversión a ' voltaje de ch1 cs VAR PORTB.0 ' Definir la puerta B0 como cs clk VAR PORTB.1 ' Definir la puerta B1 como clk
© RA-MA
CAPÍTULO 8. CONVERSOR A/D 231
do VAR PORTB.2 ' Definir la puerta B2 como do di VAR PORTB.4 ' Definir la puerta B4 como di Inicio: ' Leer canal 0 High clk ' Tiempo 1: Primera señal de reloj en alto High cs ' Desactivar el conversor A/D High di ' Bit START a alto para iniciar el conversor A/D Low clk ' Señal de reloj a bajo Low cs ' Activar el conversor A/D High di ' Bit START a alto para iniciar el conversor A/D High clk ' Tiempo 2: Segunda señal de reloj en alto High di ' Bit SGL/DIF a alto para establecer el multiplexor ' modo simple Low clk ' Señal de reloj a bajo High di ' Bit SGL/DIF a alto para establecer el multiplexor ' modo simple High clk ' Tiempo 3: Tercera señal de reloj en alto High di ' Bit SGL/DIF a alto para establecer el multiplexor ' modo simple Low clk ' Señal de reloj a bajo Low di ' Bit ODD/SIGN a bajo para seleccionar el canal 0 ' Tiempo 4 a 12: Leer canal 0 y almacenar en ch0 ShiftIn do,clk,2,[ch0\9] v0=(ch0*100/255)*5 ' Conversión de ch0 a voltaje ' Leer canal 1 High clk ' Tiempo 1: Primera señal de reloj en alto High cs ' Desactivar el conversor A/D High di ' Bit START a alto para iniciar el conversor A/D Low clk ' Señal de reloj a bajo Low cs ' Activar el conversor A/D High di ' Bit START a alto para iniciar el conversor A/D High clk ' Tiempo 2: Segunda señal de reloj en alto High di ' Bit SGL/DIF a alto para establecer el multiplexor ' modo simple Low clk ' Señal de reloj a bajo High di ' Bit SGL/DIF a alto para establecer el multiplexor ' modo simple High clk ' Tiempo 3: Tercera señal de reloj en alto High di ' Bit SGL/DIF a alto para establecer el multiplexor ' modo simple Low clk ' Señal de reloj a bajo High di ' Bit ODD/SIGN a alto para seleccionar el canal 1 ' Tiempo 4 a 12: Leer canal 0 y almacenar en ch1 ShiftIn do,clk,2,[ch1\9] v1=(ch1*100/255)*5 ' Conversión de ch1 a voltaje ' Mostrar en la primera línea de la pantalla de cristal líquido ' "Canal 0=" mas la variable ch0 en voltios LCDOut $Fe, 1, "Canal 0= ", DEC1 v0/100,".",DEC2 v0," V" ' Mostrar en la segunda línea de la pantalla de cristal líquido ' "Canal 1=" mas la variable ch1 en voltios LCDOut $Fe, $C0, "Canal 1= ", DEC1 v1/100,".",DEC2 v1," V" Pause 100 ' Pausa de 100 milisegundos GoTo Inicio ' Ir a Inicio
en
en
en
en
en
en
Figura 8.19. Pantalla de cristal líquido que muestra las variables ch0 y ch1 en voltios
232 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
8.4 MULTIPLEXOR ANALÓGICO 4051 El circuito integrado 4051 es un multiplexor analógico de 8 a 1, es decir, que tiene 8 entradas y una salida, por ello, se utilizará este chip para la lectura de más de un canal analógico. Para conocer más a fondo este chip, en la figura 8.20 le mostramos el diagrama de pines de un 4051 y su correspondiente tabla de funcionamiento (véase la tabla 8.4). X4
1
16
+V
X6
2
15
X2
X
3
14
X1
X7
4
13
X0
X5
5
12
X3
INH
6
11
A
NC
7
10
B
GND
8
9
C
GND: Tierra +V: Alimentación INH: Habilitador de CI X: Salida multiplexada A-C: Selectores de canal X0-X7: Entradas digitales
4051
Figura 8.20. Diagrama de pines del CI 4051
Para leer cada una de las entradas del 4051, se tiene que habilitar el CI y luego manipular los selectores C, B y A, para que en la salida X se refleje el canal leído, por ejemplo, si se coloca INH a 0 lógico, y CBA en una combinación 011, entonces por X saldrá el valor de X3.
Selectores C B A X X X 0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1 1 1
Entradas Habilitador INH 1 0 0 0 0 0 0 0 0 Tabla 8.4. Tabla de verdad del CI 4051
Salida X X0 X1 X2 X3 X4 X5 X6 X7
© RA-MA
CAPÍTULO 8. CONVERSOR A/D 233
8.4.1 Lectura de 4 canales analógicos En la figura 8.21 se muestra el circuito que permitirá la lectura de 4 canales analógicos usando el multiplexor 4051. La interfaz se realiza con el computador donde se observará el estado de las entradas, para la visualización de los datos use el HyperTerminal o el Visual Basic, revise el capítulo 5. Para el funcionamiento del circuito, digite, compile y grabe el microcontrolador con el programa pbp 8.10. El programa pbp 8.10 muestra la lectura de cuatro canales analógicos uno a uno, para esto utiliza la sentencia FOR... NEXT que realizará el proceso de selección del canal (variable sel) haciendo un conteo de 0 a 3 que se enviará por los puertos B5 y B6, luego se habilita el conversor A/D, se realiza la lectura del ADC08031, y se almacena el resultado de la conversión en la variable adc, y finalmente se envía al computador vía el puerto A1 y se repite el proceso. ' Programa pbp 8.10: Programa en PicBasic Pro ' Definición de variables adc VAR BYTE ' Definir adc como byte, almacenará el dato de la ' conversión del A/D sel VAR BYTE ' Definir sel como byte, variable de selección de ' canal a VAR sel.0 ' Bit a de la variable sel b VAR sel.1 ' Bit b de la variable sel cs VAR PORTB.0 ' Definir la puerta B0 como cs clk VAR PORTB.1 ' Definir la puerta B1 como clk do VAR PORTB.2 ' Definir la puerta B2 como do TRISB.5=0 ' Puerta B5 como salida TRISB.6=0 ' Puerta B6 como salida Inicio: For sel=0 TO 3 ' Desde selector 0 hasta 3, se selecciona el canal a ' leer PORTB.5=b ' Puerta B5 igual a selector B PORTB.6=a ' Puerta B6 igual a selector A Low cs ' Habilitar A/D ShiftIn do,clk,2,[adc\9] ' Leer A/D High cs ' Deshabilitar A/D ' Enviar al computador por la puerta A1 a una velocidad de ' 1.200bps los caracteres "Canal ", el valor del canal ' seleccionado, el carácter "=", la variable adc en 3 cifras, 10 y ' 13 SerOut2 PORTA.1,813,["Canal ",DEC sel," =",DEC3 adc,10,13] Pause 500 ' Pausa de medio segundo Next sel ' Próximo selector GoTo Inicio ' Ir a Inicio
234 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
Referencia rápida de comandos PicBasic Pro: For Contador = Inicio To Final { Step Incremento} { Cuerpo } Next Contador • Contador es la variable que se incrementará o disminuirá. • Inicio es el valor inicial de la variable Contador. • Final es el valor final de la variable Contador. • Incremento es el valor con el cual se irá incrementado o disminuyendo la variable Contador. Este dato es opcional, si no se coloca Step y el incremento, por defecto la variable Contador se incrementará en 1. • Cuerpo es el conjunto de operaciones que se realizarán durante cada ciclo del For... Next.
1
1 6 2 7 3 8 4 9 5
2 74HC14 22k
4 74HC14 14
VDD
10k 4 16 15 5 22pF
22pF
+5V
+5V
CONECTOR DB9
+5V
4MHz
3
RA0 RA1 RA2 RA3 RA4/TOCK1
MCLR OSC1 OSC2 VSS PIC16F84A
RB0/INT RB1 RB2 RB3 RB4 RB5 RB6 RB7
6 7 8 9 10 11 12 13
1k
1k
+5V
17 18 1 2 3
16 +5V
3 8 7 6 5
+5V
VCC CS CLK VIN(+) DO VIN(-) VREF GND
+V X
1 2 3 4
ADC08031 1k
9 10 11
C B A
X0 X1 X2 X3 X4 X5 X6 X7 INH VEE GND
13 14 15 12 1 5 2 4
+5V
+5V
1k 6 7 8
4051
Figura 8.21. Lectura de 4 canales analógicos
El programa pbp 8.11 es muy similar al anterior con la diferencia de que se agrega una variable tipo WORD denominada vol en la cual se almacenará la conversión de la variable adc a un valor en voltios. ' Programa pbp 8.11: Programa en PicBasic Pro ' Definición de variables adc VAR BYTE ' Definir adc como byte, almacenará el dato de la ' conversión del A/D vol VAR WORD ' Definir vol como word, almacenará la conversión a ' voltaje de adc sel VAR BYTE ' Definir sel como byte, variable de selección de ' canal a VAR sel.0 ' Bit a de la variable sel b VAR sel.1 ' Bit b de la variable sel cs VAR PORTB.0 ' Definir la puerta B0 como cs clk VAR PORTB.1 ' Definir la puerta B1 como clk do VAR PORTB.2 ' Definir la puerta B2 como do
1k
© RA-MA TRISB.5=0 TRISB.6=0
CAPÍTULO 8. CONVERSOR A/D 235 ' Puerta B5 como salida ' Puerta B6 como salida
Inicio: For sel=0 TO 3 ' Desde selector 0 hasta 3, se selecciona el canal a ' leer PORTB.5=b ' Puerta B5 igual a selector B PORTB.6=a ' Puerta B6 igual a selector A Low cs ' Habilitar A/D ShiftIn do,clk,2,[adc\9] ' Leer A/D High cs ' Deshabilitar A/D vol=(adc*100/255)*5 ' Convertir a voltaje ' Enviar al computador por la puerta A1 a una velocidad de ' 1.200bps los caracteres "Canal ", el valor del canal ' seleccionado, el caracter "=", la variable adc en 3 cifras, 10 y ' 13 SerOut2 PORTA.1,813,["Canal ",DEC sel," =",DEC1 vol/100,".",DEC2 _ _vol,10,13] Pause 500 ' Pausa de medio segundo Next sel ' Próximo selector GoTo Inicio ' Ir a Inicio
El programa pbp 8.12 permite controlar el multiplexor para así leer el canal que el usuario desee, por ejemplo, si usted desea leer el canal 2, sólo envía el número 2 acompañado de $ y 13 ($, 2, 13) desde el computador al microcontrolador y éste envía al multiplexor el canal seleccionado para luego leer el conversor A/D, y finalmente el microcontrolador responde enviando los caracteres “Canal”, el canal seleccionado, el caracter “=”, el voltaje del canal leído, el caracter “V” y los comandos 10 y 13. Además, el programa previene un error de lectura si se envía un número de canal que no existe (recuerde que son 4 canales, de 0 a 3), por ejemplo si usted envía la cadena $, 5 y 13, el microcontrolador enviará el mensaje “Error: sólo existen 4 canales 0-3” además de los comandos 10 y 13. ' Programa pbp 8.12: Programa en PicBasic Pro ' Definición de variables adc VAR BYTE ' Definir adc como byte, almacenará el dato de la ' conversión del A/D vol VAR WORD ' Definir vol como word, almacenará la conversión a ' voltaje de adc sel VAR BYTE ' Definir sel como byte, variable de selección de ' canal ent VAR BYTE ' Definir ent como byte, variable que indica si llega ' la cadena completa a VAR sel.0 ' Bit 0 de la variable sel llamado a b VAR sel.1 ' Bit 1 de la variable sel llamado b cs VAR PORTB.0 ' Definir la puerta B0 como cs clk VAR PORTB.1 ' Definir la puerta B1 como clk do VAR PORTB.2 ' Definir la puerta B2 como do TRISB.5=0 ' Puerta B5 como salida TRISB.6=0 ' Puerta B6 como salida Inicio: ' Recepcionar la cadena acompañada de $, sel y ent por la puerta A0 a ' una velocidad de 1.200bps SerIn2 PORTA.0, 813, 10, No_Dato, [ WAIT("$"),sel ,ent]
236 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
IF ent=13 Then ' Si ent es 13, es decir llegó ENTER entonces sigue IF sel>3 Then ' Si la variable del selector es mayor a 3 ' entonces ' Enviar al computador el mensaje de Error SerOut2 PORTA.1,813,["Error: sólo existen 4 canales 0-3",10,13] GoTo Inicio ' Ir a Inicio EndIF ' Fin de condicional PORTB.6=b ' Puerto B6 igual a selector B PORTB.7=a ' Puerto B7 igual a selector A Low cs ' Habilitar A/D ShiftIn do,clk,2,[adc\9] ' Leer A/D High cs ' Deshabilitar A/D vol=(adc*100/255)*5 ' Convertir a voltaje ' Enviar al computador por la puerta A1 a una velocidad de ' 1.200bps los caracteres "Canal ", el valor del canal ' seleccionado, el caracter "=", el voltaje, "V", 10 y 13 SerOut2 PORTA.1,813,["Canal ",DEC sel," =",DEC1 vol/100,".",DEC2_ _vol,"V",10,13] GoTo Inicio ' Ir a Inicio EndIF ' Fin de condicional
8.4.2 Lectura de 8 canales analógicos En la figura 8.22 se muestra el circuito que permitirá la lectura de 8 canales analógicos usando el multiplexor 4051. La interfaz se realiza con el computador donde se observará el estado de la entrada seleccionada en voltios, para la visualización de los datos use el HyperTerminal o el Visual Basic, revise el capítulo 5. Para el funcionamiento del circuito, digite, compile y grabe el microcontrolador con el programa pbp 8.13. El programa 8.13 es similar al anterior con la diferencia de que el número de canales en esta ocasión son 8, de 0 a 7. ' Programa pbp 8.13: Programa en PicBasic Pro ' Definición de variables adc VAR BYTE ' Definir adc como byte, almacenará el dato de la ' conversión del A/D vol VAR WORD ' Definir vol como word, almacenará la conversión a ' voltaje de adc sel VAR BYTE ' Definir sel como byte, variable de selección de ' canal ent VAR BYTE ' Definir ent como byte, variable que indica si llega ' la cadena completa a VAR sel.0 ' Bit 0 de la variable sel llamado a b VAR sel.1 ' Bit 1 de la variable sel llamado b c VAR sel.2 ' Bit 2 de la variable sel llamado c cs VAR PORTB.0 ' Definir la puerta B0 como cs clk VAR PORTB.1 ' Definir la puerta B1 como clk do VAR PORTB.2 ' Definir la puerta B2 como do TRISB.5=0 ' Puerta B5 como salida TRISB.6=0 ' Puerta B6 como salida TRISB.7=0 ' Puerta B7 como salida Inicio: ' Recepcionar la cadena acompañada de $, sel y ent por la puerta A0 a ' una velocidad de 1.200bps SerIn2 PORTA.0, 813, 10, No_Dato, [ WAIT("$"),sel ,ent]
© RA-MA
CAPÍTULO 8. CONVERSOR A/D 237 IF ent=13 Then ' Si ent es 13, es decir llegó ENTER entonces sigue IF sel>7 Then ' Si la variable del selector es mayor a 7 ' entonces ' Enviar al computador el mensaje de Error SerOut2 PORTA.1,813,["Error: sólo existen 8 canales 0-7",10,13] GoTo Inicio ' Ir a Inicio EndIF ' Fin de condicional PORTB.5=c ' Puerta B5 igual a selector C PORTB.6=b ' Puerta B6 igual a selector B PORTB.7=a ' Puerta B7 igual a selector A Low cs ' Habilitar A/D ShiftIn do,clk,2,[adc\9] ' Leer A/D High cs ' Deshabilitar A/D vol=(adc*100/255)*5 ' Convertir a voltaje ' Enviar al computador por la puerta A1 a una velocidad de ' 1.200bps los caracteres "Canal ", el valor del canal ' seleccionado, el caracter "=", el voltaje, "V", 10 y 13 SerOut2 PORTA.1,813,["Canal ",DEC sel," =",DEC1 vol/100,".",DEC2 _ _vol,10,13] GoTo Inicio ' Ir a Inicio EndIF ' Fin de condicional No_Dato: GoTo Inicio ' Volver a Inicio
ȱ 1
1 6 2 7 3 8 4 9 5
2 74HC14 22k
4 74HC14 14
VDD
10k 4 16 15 5 22pF
22pF
+5V
+5V
+5V
+5V
CONECTOR DB9
+5V
4MHz
3
RA0 RA1 RA2 RA3 RA4/TOCK1
MCLR
RB0/INT RB1 RB2 RB3 RB4 RB5 RB6 RB7
OSC1 OSC2 VSS
6 7 8 9 10 11 12 13
1k
1k
1k
1k
+5V
17 18 1 2 3
16 +5V
3 8 7 6 5
+5V
CS VCC CLK VIN(+) DO VIN(-) VREF GND
+V X
X0 X1 X2 X3 X4 X5 X6 X7
C B A
INH VEE GND
1 2 3 4
ADC08031 1k
PIC16F84A
9 10 11
13 14 15 12 1 5 2 4
+5V
+5V
+5V
+5V
6 7 8 1k
1k
1k
1k
4051
Figura 8.22. Lectura de 8 canales analógicos
8.5 CONVERSOR A/D INTERNO El conversor A/D es un módulo que tiene 5 entradas en los microcontroladores de 28 pines y 8 entradas en los microcontroladores de 40 pines. Las entradas analógicas son llevadas internamente a un circuito de muestreo y retención basado en un capacitor, de aquí, se conecta al conversor A/D. El conversor genera una salida digital vía aproximaciones sucesivas; esta salida puede ser reflejada en un número de 10 bits. A continuación, analizaremos el caso del microcontrolador PIC16F877A.
238 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
Referencia rápida de comandos PicBasic Pro: ADCIN Canal, Variable • Canal es la puerta donde se recibe la señal analógica. • Variable es donde se almacenará el dato de la conversión. Para el uso de esta sentencia se utilizan algunas definiciones como: • DEFINE ADC_BITS 8 define el número de bits. • DEFINE ADC_CLOCK 3 define el reloj (rc=3). • DEFINE ADC_SAMPLEUS 50 define el tiempo de muestreo en microsegundos. Además se tiene que utilizar el registro ADCON1 como: • ADCON1=%Valor, donde Valor resulta de la configuración de los canales, de acuerdo con la tabla 8.5.
8.5.1 Funcionamiento del conversor interno del PIC16F877A El microcontrolador PIC16F877A posee 8 entradas analógicas, que se muestran a continuación: •
Canal 0 – RA0 AN0
•
Canal 1 – RA1 AN1
•
Canal 2 – RA2 AN2
•
Canal 3 – RA3 AN3
•
Canal 4 – RA5 AN4
•
Canal 5 – RE0 AN5
•
Canal 6 – RE1 AN6
•
Canal 7 – RE3 AN7
Se podría pensar que existe un error en la numeración de los canales analógicos, pues se obvia el RA4, pero la numeración es correcta, pues el puerto A4 es utilizado como TIMER, como en el PIC16F84A.
© RA-MA
CAPÍTULO 8. CONVERSOR A/D 239
Los puertos que se han citado también pueden funcionar como digital, de acuerdo con la configuración que se dé por programa. Para la configuración de los puertos hay que tener en cuenta la tabla 8.5. Para la configuración del conversor A/D del microcontrolador, se tienen que definir algunos datos del conversor, como el número de bits (ADC_BITS), la frecuencia del reloj (ADC_CLOCK) y el tiempo de muestreo (ADC_SAMPLEUS), luego se asigna un valor al registro ADCON1 de acuerdo con la utilización de los canales analógicos, de acuerdo con la tabla 8.5, y finalmente se utiliza el comando ADCIN para leer los canales analógicos. AN7 AN6 AN5 AN4 AN3 AN2 AN1 AN0 VALOR RE2 RE1 RE0 RA5 RA3 RA2 RA1 RA0 VREF+ VREF0000 A A A A A A A A VDD VSS 0001 A A A A VREF+ A A A RA3 VSS 0010 D D D A A A A A VDD VSS 0011 D D D A VREF+ A A A RA3 VSS 0100 D D D D A D A A VDD VSS 0101 D D D D VREF+ D A A RA3 VSS 011X D D D D D D D D VDD VSS 1000 A A A A VREF+ VREF- A A RA3 RA2 1001 D D A A A A A A VDD VSS 1010 D D A A VREF+ A A A RA3 VSS 1011 D D A A VREF+ VREF- A A RA3 RA2 1100 D D D A VREF+ VREF- A A RA3 RA2 1101 D D D D VREF+ VREF- A A RA3 RA2 1110 D D D D D D D A VDD VSS 1111 D D D D VREF+ VREF- D A RA3 RA2 Tabla 8.5. Valores del registro para la configuración de las entradas del A/D del PIC16F877A. A significa Analógico y D significa Digital
8.5.2 Programación del A/D interno para la lectura de un canal A continuación se describe un ejemplo de la lectura de un canal analógico usando el conversor interno del PIC16F877A, para esto, usted tendrá que construir el circuito de la figura 8.23 y programar el microcontrolador con el código del programa pbp 8.14. El objetivo de este ejemplo es convertir una señal analógica a digital y enviar ésta al computador. De acuerdo a la figura 8.15, sólo utiliza el canal A0 como analógico y los otros están sin conexión, por ello, el valor del registro ADCON1 según la tabla 8.5 sería 1110 (observe la penúltima fila). Para la visualización del dato de conversión utilice el HyperTerminal o el Visual Basic, repase el capítulo 5. El resultado de la conversión se muestra en un dato de 8 bits
240 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
(0-255), es decir, la resolución del conversor es 8 bits. La ventaja que tiene este A/D es que se puede configurar con una resolución de 10 bits, para esto revise el programa pbp 8.15 y observe el resultado en el HyperTermianal. Recuerde que el resultado de la conversión en 10 bits, arrojará un valor de 0-1.023. El programa 8.16 muestra la lectura del conversor interno en voltios. +5V
+5V
10k
10k
+5V
4MHz
22pF
22pF
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
RB7 MCLR/Vpp RB6 RA0/AN0 RB5 RA1/AN1 RB4 RA2/AN2 RB3 RA3/AN3/VRF RB2 RA4/T0CKI RB1 RA5/SS/AN4 RB0/INT RE0/RD/AN5 VDD RE1/WR/AN6 VSS RE2/CS/AN7 VDD RD7/PSP7 VSS RD6/PSP6 OSC1/CLKIN RD5/PSP6 OSC2/CLKOUT RD4/PSP4 RC0/T1OSO/T1CKI RC7/RX/DT RC1/T1OSI/CCP2 RC6/TX/CK RC2/CCP1 RC5/SDO RC3/SCK/SCL RC4/SDI/SDA RD0/PSP0 RD3/PSP4 RD1/PSP1 RD2/PSP2
40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21
+5V
1
2 74HC14
1 6 2 7 3 8 4 9 5 CONECTOR DB9
PIC16F877A
Figura 8.23. PIC16F877A para leer un canal analógico ' Programa pbp 8.14: Programa en PicBasic Pro ' Definición de los parámetros del conversor A/D y de variable de ' resultado de conversión : DEFINE ADC_BITS 8 ' Definición de 8 bits para la conversión DEFINE ADC_CLOCK 3 ' Definición de frecuencia de reloj a 3 DEFINE ADC_SAMPLEUS 50 ' Definición tiempo de muestreo de 50 ' microsegundos canal0 VAR BYTE ' Variable donde se almacena el resultado de la ' conversión del canal 0 ADCON1 = %1110 ' Configurar la puerta A0 como analógica y el ' resto como digital Inicio: ADCIN 0,canal0 ' Lee el canal A0 y almacenar el dato de conversión en ' Canal0 ' Envía al computador el dato de conversión del A/D SerOut2 PORTC.6,813,["*",DEC3 canal0,10,13] Pause 100 Pausa de 100 milisegundos GoTo Inicio ' Ir a Inicio
ȱ ' Programa pbp 8.15: Programa en PicBasic Pro ' Definición de los parámetros del conversor A/D y de variable de ' resultado de conversión : DEFINE ADC_BITS 10 ' Definición de 10 bits para la conversión DEFINE ADC_CLOCK 3 ' Definición de frecuencia de reloj a 3 DEFINE ADC_SAMPLEUS 50 ' Definición tiempo de muestreo de 50 ' microsegundos
© RA-MA
CAPÍTULO 8. CONVERSOR A/D 241
canal0
VAR
ADCON1 = %1110
WORD
' ' ' '
Variable donde se almacena el resultado de la conversión del canal 0 Configurar la puerta A0 como analógica y el resto como digital
Inicio: ADCIN 0,canal0
' Lee el canal A0 y almacenar el dato de ' conversión en Canal0 ' Envía al computador el dato de conversión del A/D SerOut2 PORTC.6,813,["*",DEC4 canal0,10,13] Pause 100 ' Pausa de 100 milisegundos GoTo Inicio ' Ir a Inicio
ȱ ' Programa pbp 8.16: Programa en PicBasic Pro ' Definición de los parámetros del conversor A/D y de variable de ' resultado de conversión : DEFINE ADC_BITS 8 ' Definición de 8 bits para la conversión DEFINE ADC_CLOCK 3 ' Definición de frecuencia de reloj a 3 DEFINE ADC_SAMPLEUS 50 ' Definición tiempo de muestreo de 50 ' microsegundos canal0 VAR BYTE ' Variable donde se almacena el resultado de la ' conversión del canal 0 vol VAR WORD ' Definir vol como word, almacenará la ' conversión a voltaje de canal0 ADCON1 = %1110 ' Configurar la puerta A0 como analógica y el ' resto como digital Inicio: ADCIN 0,canal0
' Lee el canal A0 y almacenar el dato de ' conversión en canal0 vol= (100*canal0/255)*5 ' Convertir canal0 a voltios ' Envía al computador el dato de conversión del A/D en voltios SerOut2 PORTC.6,813,["Vin= ",DEC1 vol/100, ".", DEC2 vol, "V",10,13] Pause 100 ' Pausa de 100 milisegundos GoTo Inicio ' Ir a Inicio
8.5.3 Programación del A/D interno para la lectura de tres canales A continuación le mostramos la figura 8.24, circuito con microcontrolador PIC16F877A donde capturaremos 3 señales analógicas. Los canales analógicos que se usan son A0, A1 y A3, el resto de puertos se configuran como digital, es decir el ADCON1 es 0100. El programa pbp 8.21 permite mostrar en la pantalla de cristal líquido el valor de cada canal analógico en voltios. El programa es muy similar al programa pbp 8.20, sólo se han agregado unas variables que se denominan vol (vol0, vol1 y vol3) para la conversión de la variable canal (canal0, canal1 y canal3) a voltios. El circuito de la figura 8.25 muestra la conexión entre la pantalla de cristal líquido y el microcontrolador para la lectura del conversor A/D interno.
242 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP +5V
10k
+5V
10k
+5V
10k
+5V
4MHz
22pF
22pF
© RA-MA
+5V
10k
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
MCLR/Vpp RB7 RA0/AN0 RB6 RA1/AN1 RB5 RA2/AN2 RB4 RA3/AN3/VRF RB3 RA4/T0CKI RB2 RA5/SS/AN4 RB1 RE0/RD/AN5 RB0/INT RE1/WR/AN6 VDD RE2/CS/AN7 VSS VDD RD7/PSP7 VSS RD6/PSP6 OSC1/CLKIN RD5/PSP6 OSC2/CLKOUT RD4/PSP4 RC0/T1OSO/T1CKI RC7/RX/DT RC1/T1OSI/CCP2 RC6/TX/CK RC2/CCP1 RC5/SDO RC3/SCK/SCL RC4/SDI/SDA RD0/PSP0 RD3/PSP4 RD1/PSP1 RD2/PSP2
40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21
+5V CONECTOR DB9
1
2 74HC14 22k
4
3
1 6 2 7 3 8 4 9 5
74HC14
PIC16F877A
Figura 8.24. PIC16F877A para leer tres canales analógicos y enviarlos al computador. ' Programa pbp 8.17: Programa en PicBasic Pro ' Definición de los parámetros del conversor A/D y de variable de ' resultado de conversión : DEFINE ADC_BITS 8 ' Definición de 8 bits para la conversión DEFINE ADC_CLOCK 3 ' Definición de frecuencia de reloj a 3 DEFINE ADC_SAMPLEUS 50 ' Definición tiempo de muestreo de 50 ' microsegundos canal0 VAR BYTE ' Variable donde se almacena el resultado de la ' conversión del canal 0 canal1 VAR BYTE ' Variable donde se almacena el resultado de la ' conversión del canal 1 canal3 VAR BYTE ' Variable donde se almacena el resultado de la ' conversión del canal 3 ADCON1 = %0100 ' Configurar las puertas A0, A1 y A3 como ' analógicas y el resto como digitales Inicio: ADCIN 0,canal0 ' Lee el canal A0 y almacenar el dato de conversión en ' canal0 ADCIN 1,canal1 ' Lee el canal A1 y almacenar el dato de conversión en ' canal1 ADCIN 3,canal3 ' Lee el canal A3 y almacenar el dato de conversión en ' canal3 ' Envia al computador los datos de conversión de los canales ' analógicos SerOut2 PORTC.6, 813,["A", DEC3 canal0, "B", DEC3 canal1, "C", DEC3_ _canal3, 10, 13] Pause 100 ' Pausa de 100 milisegundos GoTo Inicio ' Ir a Inicio
ȱ ' Programa pbp 8.18: Programa en PicBasic Pro ' Definición de los parámetros del conversor A/D y de variable de ' resultado de conversión : DEFINE ADC_BITS 10 ' Definición de 10 bits para la conversión
© RA-MA DEFINE ADC_CLOCK 3 DEFINE ADC_SAMPLEUS 50 canal0 VAR WORD canal1 VAR WORD canal3 VAR WORD ADCON1 = %0100
CAPÍTULO 8. CONVERSOR A/D 243 ' ' ' ' ' ' ' ' ' ' '
Definición de frecuencia de reloj a 3 Definición tiempo de muestreo de 50 microsegundos Variable donde se almacena el resultado de la conversión del canal 0 Variable donde se almacena el resultado de la conversión del canal 1 Variable donde se almacena el resultado de la conversión del canal 3 Configurar las puertas A0, A1 y A3 como analógicas y el resto como digitales
Inicio: ADCIN 0,canal0 ' Leer el canal A0 y almacenar el dato de conversión ' en canal0 ADCIN 1,canal1 ' Leer el canal A1 y almacenar el dato de conversión ' en canal1 ADCIN 3,canal3 ' Leer el canal A3 y almacenar el dato de conversión ' en canal3 ' Enviar al computador los datos de conversión de los canales ' analógicos SerOut2 PORTC.6,813,["A", DEC4 canal0, "B", DEC4 canal1, "C", DEC4_ _ canal3,10, 13] Pause 100 ' Pausa de 100 milisegundos GoTo Inicio ' Ir a Inicio
ȱ ' Programa pbp 8.19: Programa en PicBasic Pro ' Definición de los parámetros del conversor A/D y de variable de ' resultado de conversión : DEFINE ADC_BITS 8 ' Definición de 8 bits para la conversión DEFINE ADC_CLOCK 3 ' Definición de frecuencia de reloj a 3 DEFINE ADC_SAMPLEUS 50 ' Definición tiempo de muestreo de 50 ' microsegundos canal VAR BYTE ' Definir canal como byte, almacenará el dato ' de la conversión del A/D sel VAR BYTE ' Definir sel como byte, variable de selección ' de canal ent VAR BYTE ' Definir ent como byte, variable que indica si ' llega la cadena completa vol VAR WORD ' Definir vol como word, almacenará la ' conversión a voltaje de canal ADCON1 = %0100 ' Configurar las puertas A0, A1 y A3 como ' analógicas y el resto como digitales Inicio: ' Recepcionar la cadena acompañada de $, sel y ent por la puerta C7 a ' una velocidad de 1.200bps SerIn2 PORTC.7, 813, 10, No_Dato, [ WAIT("$"),sel ,ent] IF ent=13 Then ' Si ent es 13, es decir llegó ENTER entonces sigue IF sel>3 OR sel=2 Then ' Si la variable del selector es mayor ' a 3 o 2 entonces ' Enviar al computador el mensaje de Error SerOut2 PORTC.6,813,["Error: sólo existen 3 canales 0, 1 Y _ _3",10,13] GoTo Inicio ' Ir a Inicio EndIF ' Fin de condicional ADCIN sel,canal ' Leer el canal seleccionado y almacenar el ' dato de conversión en canal vol=(100*canal/255)*5 ' Convertir canal seleccionado a
244 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
' voltios ' Enviar al computador el dato de la conversión del canal ' analógico seleccionado SerOut2 PORTC.6,813,["Canal ",DEC1 sel," = ",DEC1 vol/100,".",_ _DEC2 vol,10,13] GoTo Inicio ' Ir a Inicio EndIF ' Fin de condicional No_Dato: GoTo Inicio ' Volver a Inicio
Vss Vdd Vo Rs R/W E 0 1 2 3 4 5 6 7
LCD
1 2 3 4 5 6 7 8 9 10 11 12 13 14
+5V
270 +5V
+5V
+5V
+5V
1k 10k
10k
10k
10k
+5V
4MHz
22pF
22pF
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
RB7 MCLR/Vpp RB6 RA0/AN0 RB5 RA1/AN1 RB4 RA2/AN2 RB3 RA3/AN3/VRF RB2 RA4/T0CKI RB1 RA5/SS/AN4 RB0/INT RE0/RD/AN5 VDD RE1/WR/AN6 VSS RE2/CS/AN7 VDD RD7/PSP7 VSS RD6/PSP6 OSC1/CLKIN RD5/PSP6 OSC2/CLKOUT RD4/PSP4 RC0/T1OSO/T1CKI RC7/RX/DT RC1/T1OSI/CCP2 RC6/TX/CK RC2/CCP1 RC5/SDO RC3/SCK/SCL RC4/SDI/SDA RD0/PSP0 RD3/PSP4 RD1/PSP1 RD2/PSP2
40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21
+5V
PIC16F877A
Figura 8.25. PIC16F877A para leer tres canales analógicos con conexión a una pantalla de cristal líquido ' Programa pbp 8.20: Programa en PicBasic Pro ' Definición de los parámetros del conversor A/D y de variable de ' resultado de conversión : DEFINE ADC_BITS 8 ' Definición de 10 bits para la conversión DEFINE ADC_CLOCK 3 ' Definición de frecuencia de reloj a 3 DEFINE ADC_SAMPLEUS 50 ' Definición tiempo de muestreo de 50 ' microsegundos ' Definir los registros y bits de la pantalla de cristal líquido DEFINE LCD_DREG PORTD 'D0,D1,D2,D3-4,5,6,7 DEFINE LCD_DBIT 4 DEFINE LCD_RSREG PORTE 'E0-RS DEFINE LCD_RSBIT 0 DEFINE LCD_EREG PORTE 'E1-E
© RA-MA DEFINE canal0
CAPÍTULO 8. CONVERSOR A/D 245 LCD_EBIT 1 VAR BYTE
canal1
VAR
BYTE
canal3
VAR
BYTE
ADCON1 = %0100
' ' ' ' ' ' ' '
Variable donde se almacena conversión del canal 0 Variable donde se almacena conversión del canal 1 Variable donde se almacena conversión del canal 3 Configurar las puertas A0, analógicas y el resto como
el resultado de la el resultado de la el resultado de la A1 y A3 como digitales
Inicio: ADCIN 0,canal0 ' Leer el canal A0 y almacenar el dato ' en canal0 ADCIN 1,canal1 ' Leer el canal A1 y almacenar el dato ' en canal1 ADCIN 3,canal3 ' Leer el canal A3 y almacenar el dato ' en canal3 ' Enviar al computador los datos de conversión de los ' analógicos LCDOut $Fe, 1, "Conversor A/D" LCDOut $Fe, $C0, "0=", DEC canal0, " 1=", DEC canal1, _canal3 Pause 100 ' Pausa de 100 milisegundos GoTo Inicio ' Ir a Inicio
de conversión de conversión de conversión canales
" 3=", DEC _
ȱ ' Programa pbp 8.21: Programa en PicBasic Pro ' Definición de los parámetros del conversor A/D y de variable de ' resultado de conversión : DEFINE ADC_BITS 8 ' Definición de 10 bits para la conversión DEFINE ADC_CLOCK 3 ' Definición de frecuencia de reloj a 3 DEFINE ADC_SAMPLEUS 50 ' Definición tiempo de muestreo de 50 ' microsegundos ' Definir los registros y bits de la pantalla de cristal líquido DEFINE LCD_DREG PORTD 'D0,D1,D2,D3-4,5,6,7 DEFINE LCD_DBIT 4 DEFINE LCD_RSREG PORTE 'E0-RS DEFINE LCD_RSBIT 0 DEFINE LCD_EREG PORTE 'E1-E DEFINE LCD_EBIT 1 canal0 VAR BYTE ' Variable donde se almacena el resultado de la ' conversión del canal 0 canal1 VAR BYTE ' Variable donde se almacena el resultado de la ' conversión del canal 1 canal3 VAR BYTE ' Variable donde se almacena el resultado de la ' conversión del canal 3 vol0 VAR WORD ' Definir vol0 como word, almacenará la conversión a ' voltaje de canal0 vol1 VAR WORD ' Definir vol1 como word, almacenará la conversión a ' voltaje de canal1 vol3 VAR WORD ' Definir vol3 como word, almacenará la conversión a ' voltaje de canal3 ADCON1 = %0100 ' Configurar las puertas A0, A1 y A3 como analógicas y ' el resto como digitales Inicio: ADCIN 0,canal0 ' ' ADCIN 1,canal1 ' '
Leer el canal A0 y almacenar el dato de conversión en canal0 Leer el canal A1 y almacenar el dato de conversión en canal1
246 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
ADCIN 3,canal3 ' Leer el canal A3 y almacenar el dato de conversión ' en canal3 vol0=(100*canal0/255)*5 ' Convertir canal0 a voltios vol1=(100*canal1/255)*5 ' Convertir canal1 a voltios vol3=(100*canal3/255)*5 ' Convertir canal3 a voltios ' Enviar al computador los datos de conversión de los canales ' analógicos LCDOut $Fe, 1, "Canales: ", "0=",DEC1 vol0/100,".",DEC2 vol0,"V" LCDOut $Fe, $C0, " 1=", DEC1 vol1/100,".",DEC2 vol1,"V"," 3=", DEC1_ _ vol3/100,".",DEC2 vol3,"V" Pause 100 ' Pausa de 100 milisegundos GoTo Inicio ' Ir a Inicio
8.5.4 Programación del A/D interno para la lectura de ocho canales En la figura 8.26 se muestra un circuito basado en PIC16F877A para la lectura de 8 canales analógicos usando el conversor A/D interno y el computador para la captura de datos. ' Programa pbp 8.22: Programa en PicBasic Pro ' Definición de los parámetros del conversor A/D y de variable de ' resultado de conversión : DEFINE ADC_BITS 8 ' Definición de 8 bits para la conversión DEFINE ADC_CLOCK 3 ' Definición de frecuencia de reloj a 3 DEFINE ADC_SAMPLEUS 50 ' Definición tiempo de muestreo de 50 ' microsegundos canal VAR BYTE ' Definir canal como byte, almacenará el dato de la ' conversión del A/D sel VAR BYTE ' Definir sel como byte, variable de selección de ' canal ent VAR BYTE ' Definir ent como byte, variable que indica si llega ' la cadena completa vol VAR WORD ' Definir vol como word, almacenará la conversión a ' voltaje de canal ADCON1 = %0000 ' Configurar el puerto A y el puerto E como analógico Inicio: ' Recepcionar la cadena acompañada de $, sel y ent por la puerta C7 a ' una velocidad de 1200bps SerIn2 PORTC.7, 813, 10, No_Dato, [ WAIT("$"),sel ,ent] IF ent=13 Then ' Si ent es 13, es decir llegó ENTER entonces sigue IF sel>7 Then ' Si la variable del selector es mayor a 7 ' entonces ' Envía al computador el mensaje de Error SerOut2 PORTC.6,813,["Error: sólo existen 8 canales 0 a _ _7",10,13] GoTo Inicio ' Ir a Inicio EndIF ' Fin de condicional ADCIN sel,canal ' Leer el canal seleccionado y almacenar el ' dato de conversión en canal vol=(100*canal/255)*5 ' Convertir canal seleccionado a ' voltios ' Enviar al computador el dato de la conversión del canal ' analógico seleccionado SerOut2 PORTC.6,813,["Canal ",DEC1 sel," = ",DEC1 vol/100,".",_
© RA-MA
CAPÍTULO 8. CONVERSOR A/D 247 _DEC2 vol,10, 13] Pause 100 GoTo Inicio EndIF No_Dato: GoTo Inicio
+5V
10k
+5V
10k
+5V
10k
+5V
+5V
' Pausa de 100 milisegundos ' Ir a Inicio ' Fin de condicional ' Volver a Inicio
+5V
10k
10k +5V
+5V
+5V
+5V
+5V 4MHz
10k
10k
10k
10k 22pF
22pF
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
RB7 MCLR/Vpp RB6 RA0/AN0 RB5 RA1/AN1 RB4 RA2/AN2 RB3 RA3/AN3/VRF RB2 RA4/T0CKI RB1 RA5/SS/AN4 RB0/INT RE0/RD/AN5 VDD RE1/WR/AN6 VSS RE2/CS/AN7 VDD RD7/PSP7 VSS RD6/PSP6 OSC1/CLKIN RD5/PSP6 OSC2/CLKOUT RD4/PSP4 RC0/T1OSO/T1CKI RC7/RX/DT RC1/T1OSI/CCP2 RC6/TX/CK RC2/CCP1 RC5/SDO RC3/SCK/SCL RC4/SDI/SDA RD0/PSP0 RD3/PSP4 RD1/PSP1 RD2/PSP2
40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21
CONECTOR DB9
1
2 74HC14 22k
4
3
1 6 2 7 3 8 4 9 5
74HC14
PIC16F877A
Figura 8.26. PIC16F877A para leer ocho canales analógicos con conexión al computador
El programa pbp 8.22 permite la lectura de las 8 señales analógicas (0 a 7 canales) eligiendo desde el computador el canal que se desea leer. Por ejemplo, si se desea leer el canal 5, usted envía 5 por el computador y el microcontrolador almacenará 5 en la variable sel, luego se verifica que la variable no sea mayor de 7, después se procede a la lectura del canal seleccionado y se almacena en la variable canal y, finalmente, se envía el valor del canal analógico en voltios (variable vol) al computador a una velocidad de 1.200bps.
9Capítulo 9
CONVERSOR D/A Como se mencionó en el capítulo anterior, el mundo real es analógico y, por ello, para realizar un contacto entre un dispositivo digital, como un microcontrolador, y el mundo real se necesita de un circuito extra capaz de convertir la señal digital del microcontrolador a una señal analógica, el dispositivo que permite el cambio de señal se denomina conversor D/A (conversor de digital a analógico). En el presente capítulo se desarrollarán pruebas referentes a cómo generar una señal analógica con un microcontrolador haciendo uso de dispositivos de conversión D/A.
9.1 COMBINACIÓN R-2R La combinación R-2R es una forma sencilla de obtener un conversor D/A de 8 bits, para esto, se necesita de un arreglo de resistencias en formación escalera. El arreglo se resistencias trabaja por división de voltaje presente en cada entrada del arreglo, es así que la combinación de voltaje que se genera en la entrada del arreglo permitirá una salida de voltaje proporcional a esta combinación, de tal modo que si se tiene una combinación a la entrada de 00000000 (0 en decimal) la salida será 0 voltios y si la combinación a la entrada es 11111111 (255 en decimal) la salida será 5 voltios, esto se expresaría de la siguiente forma:
0 → 0V 255 → 5V Para un mejor análisis se debe determinar el tamaño del paso entre bit y bit, el cual es aproximadamente 20mV.
250 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
5 = 19,6mV 255 Por ejemplo, si se genera la combinación 10000000 (128 en decimal) en la entrada del arreglo de resistencias, se considera 128 pasos de 19,6mV, esto permitiría una salida de aproximadamente 2,5V.
128 × 19,6mV = 2,508V La generación de 8 bits será posible gracias a que las entradas del arreglo de resistencias estarán conectadas directamente al puerto B del microcontrolador PIC, ya que es la forma más sencilla de generar 8 bits en paralelo. Véase la figura 9.1. El programa pbp 9.1 muestra una prueba sencilla de cómo generar una señal de 0 a 5V utilizando un contador de 0 a 255 cuya salida será el puerto B. 2k Voltaje de salida 0-5 v oltios 1k 2k
1k 2k
1k 2k
1k 2k
+5V
0.1uF U4 14
1k
VDD
RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0/INT
10k 4 16 4MHz
15 5
22pF
22pF
MCLR OSC1 OSC2 VSS
RA4/TOCK1 RA3 RA2 RA1 RA0
13 12 11 10 9 8 7 6 3 2 1 18 17
2k
1k 2k
1k 2k
1k
PIC16F84A
Figura 9.1. Combinación de resistencias R-2R con el microcontrolador PIC16F84A ' Programa pbp 9.1: Programa en PicBasic Pro ' Definición de variables b VAR BYTE ' Variable de conteo de salida de 0 al 255 TRISB=0 ' Definir el puerto B como salida Inicio: For b=0 TO 255 STEP 1 ' Hacer un bucle desde b=0 hasta 255 de 1 en 1
© RA-MA
CAPÍTULO 9. CONVERSOR D/A 251 ' ' ' ' ' '
PORTB=b Pause 500 Next b GoTo Inicio
ascendente El puerto B se iguala a la variable b y se envía el dato a la combinación R-2R Pausa de 0.5 segundos Próximo b Volver a Inicio
9.2 CONVERSOR DAC0808 El DAC0808 es un dispositivo conversor D/A de 8 bits con una salida por corriente proporcional con un tiempo de conversión aproximado de 150ns, capaz de consumir un máximo de 33mW con una fuente de ±5V. Los 8 bits de entrada son compatibles con TTL e independientes de la alimentación del chip (±4,5V a ±18V), además se puede mencionar que posee un error de ±1LSB. En la figura 9.2 se muestra el diagrama de pines y la descripción de cada pin.
9.2.1 Funcionamiento del DAC0808 La forma más sencilla de hacer funcionar un chip es visitando su hoja técnica y buscar dentro de ella el circuito típico. El circuito que se muestra en la figura 9.3 muestra el circuito típico del DAC0808, este circuito tiene 8 entradas digitales (A1 a A8) y la salida de corriente (pin 4) se encuentra conectada a un amplificador operacional LF351 que se encarga de convertir la salida de corriente a una salida por voltaje. NC
1
16
COMP
GND
2
15
VREF(-)
VEE
3
14
VREF(+)
Io
4
13
VCC
MSB A1
5
12
A8 LSB
A2
6
11
A7
A3
7
10
A6
A4
8
9
A5
GND: Tierra VCC: Alimentación NC: No conexión Io: Salida de corriente A1-A8: Entradas digitales COMP: Compensación VEE: Entrada de voltaje de referencia VREF(+): Voltaje de referencia positiva VREF(-): Voltaje de referencia negativa
DAC0808
Figura 9.2. Diagrama de pines del DAC0808
Otro pin importante es el pin de voltaje de referencia, que según el circuito típico es 10V, esto hace que la salida máxima de voltaje sea 10V, esto se puede expresar según la siguiente fórmula:
Vsalida = Vreferencia ×
Entrada digital 255
252 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
El voltaje de referencia puede cambiar de acuerdo a la salida máxima que se necesita, por ejemplo, si se necesita un voltaje de salida máximo de 5 voltios, el voltaje de referencia será 5 voltios. +5V
+5V 5k
+10V
3
7
4
8
5
9
6
10
7
11
8
12
A2
VREF(+)
A3
VREF(-)
A4
NC
A5
IO
A6
COMP
A7
VEE
A8
GND
13 5k
+15V
14 15 1
5k
7 5
6
VCC
4
2
16
3
LF351 6 Voltaje de salida 0-10 v oltios
3 0,1uF
4 1
2
A1
+
5
-
1
2
DAC0808 -15V
-15V
Figura 9.3. Circuito típico del DAC0808
9.2.2 Interfaz con el microcontrolador Para el funcionamiento del DAC0808 se conectarán las entradas digitales de A1 a A8 al puerto B desde el B7 al B0 en ese orden, pues la entrada A1 es MSB y la A8 es LSB. Una vez implementado el circuito de la figura 9.4, programe el microcontrolador con el código de programa pbp 9.2. +5V
5k
+5V +10V
4 16 4MHz
15 5
22pF
22pF
MCLR OSC1 OSC2 VSS
RA4/TOCK1 RA3 RA2 RA1 RA0
3 2 1 18 17
VCC VREF(+) VREF(-) NC IO COMP VEE GND
+15V
5k 7 5
10k
A1 A2 A3 A4 A5 A6 A7 A8
13 14 15 1 4 16 3 2
5k 0,1uF
DAC0808
2 3
LF351 6 Voltaje de salida 0-10 v oltios
4 1
RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0/INT
5 6 7 8 9 10 11 12
+
VDD
13 12 11 10 9 8 7 6
-
14
-15V -15V
PIC16F84A
Figura 9.4. Circuito de microcontrolador conectado con el DAC0808
Según el programa del microcontrolador, éste se encargará de enviar al conversor, vía los 8 bits del puerto B, las combinaciones necesarias para generar una señal analógica.
© RA-MA
CAPÍTULO 9. CONVERSOR D/A 253
9.2.3 Traducir a voltios A veces es necesario que el microcontrolador genere una señal de acuerdo a lo que se desee, para ello se puede usar un computador, con la finalidad de enviar el dato que indique el valor de voltaje que hay que generar. Para esto implemente el circuito de la figura 9.5, donde se muestra la interfaz entre el computador, el microcontrolador y el conversor D/A. El código que hay que usar, es el programa pbp 9.3, que indica cómo el microcontrolador puede captar el dato enviado por el computador y luego convertirlo en 8 bits en paralelo, por el puerto B, con la finalidad de enviarlo al conversor D/A y obtener una señal analógica. Referencia rápida de comandos PicBasic Pro: For Contador = Inicio To Final { Step Incremento} { Cuerpo } Next Contador • Contador es la variable que se incrementará o disminuirá. • Inicio es el valor inicial de la variable Contador. • Final es el valor final de la variable Contador. • Incremento es el valor con el cual se ira incrementado o disminuyendo la variable Contador. Este dato es opcional, si no se coloca Step y el incremento, por defecto la variable Contador se incrementara en 1. • Cuerpo es el conjunto de operaciones que se realizarán durante cada ciclo del For... Next. ' Programa pbp 9.2: Programa en PicBasic Pro ' Definición de variables b VAR BYTE ' Variable de conteo de salida de 0 al 255 TRISB=0 ' Definir el puerto B como salida Inicio: For b=0 TO 255 STEP 1 ' Hacer un bucle desde b=0 hasta 255 ' ascendente PORTB=b ' El puerto B se iguala a la variable b y se ' dato al conversor D/A Pause 500 ' Pausa de 500 milisegundos Next b ' Próximo b For b=255 TO 0 STEP -1 ' Hacer un bucle desde b=255 hasta 0 ' descendente PORTB=b ' El puerto B se iguala a la variable b y se ' dato al conversor D/A Pause 500 ' Pausa de 500 milisegundos Next b ' Próximo b GoTo Inicio ' Volver a Inicio
de 1 en 1 envía el
de 1 en 1 envía el
ȱ ' ' b c
Programa pbp 9.3: Programa en PicBasic Pro Definición de variables VAR BYTE ' Variable de conteo de salida de 0 al 255 VAR BYTE ' Variable de verificación de llegada de datos
254 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP TRISB=0
© RA-MA
' Definir el puerto B como salida
Inicio: ' Recepcionar la variable b por el puerto A0 a una velocidad de ' 4.800bps SerIn2 PORTA.0, 188, 10, No_Dato, [WAIT(“$”), b, c] If c=13 Then Salida ' Si c es igual a 13 entonces ir a la etiqueta ' Salida GoTo Inicio ' Volver a Inicio Salida: PORTB=b ' El puerto B se iguala a la variable b y se envía el ' dato al ' conversor D/A Pause 10 ' Pausa de 10 milisegundos GoTo Inicio ' Volver a Inicio No_Dato: GoTo Inicio ' Volver a Inicio
+5V
5k
+5V +10V
4 16 4MHz
15 5
22pF
22pF
MCLR OSC1 OSC2 VSS
RA4/TOCK1 RA3 RA2 RA1 RA0
3 2 1 18 17
VCC VREF(+) VREF(-) NC IO COMP VEE GND
+15V
5k 7 5
10k
A1 A2 A3 A4 A5 A6 A7 A8
13 14 15 1 4 16 3 2
5k 0,1uF
DAC0808
2 3
LF351 6 Voltaje de salida 0-10 v oltios
4 1
RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0/INT
5 6 7 8 9 10 11 12
+
VDD
13 12 11 10 9 8 7 6
-
14
-15V -15V
PIC16F84A
22k 2
1
74HC14
1 6 2 7 3 8 4 9 5 CONECTOR DB9
Figura 9.5. Circuito de microcontrolador con el DAC0808 y comunicación con el computador
Figura 9.6. Formulario inicial con sus componentes de acuerdo con la tabla 9.1
© RA-MA
CAPÍTULO 9. CONVERSOR D/A 255
En la figura 9.6 se muestra el formulario que hay que construir para realizar la aplicación con el microcontrolador, por ello usted tendrá que implementar un formulario como se muestra en esta figura y modificar las propiedades de los objetos de acuerdo con la tabla 9.1. Objeto Formulario
Propiedad Valor Nombre FrmPrueba Caption Prueba BorderStyle 1 Caja de texto 1 Nombre TxtDato Text 0 (transparente) Caja de texto 2 Nombre TxtVoltaje Text 0 (transparente) Etiqueta 1 Nombre Label1 Caption 0.00 Etiqueta 2 Nombre Label2 Caption 10.00 Barra horizontal Nombre HScDato Max 255 Min 0 Temporizador Nombre TmrComunicacion Interval 10 Microsoft Comm Control 6.0 Nombre MSCComunicacion Tabla 9.1. Valor de cada una de las propiedades de los objetos mostrados en el formulario ' Programa vb 9.1: Programa para Microsoft Visual Basic 6.0 Dim b As Byte ' Declara la variable como un byte Private Sub Form_Load() MSCComunicacion.CommPort = 1 MSCComunicacion.PortOpen = True MSCComunicacion.Settings = "4800,n,8,1"
' ' ' ' '
Puerto serie Com1 Activar puerto 4.800bps, No paridad, 8 bits de datos, 1 de parada
End Sub Private Sub HScDato_Change() ' Captura el valor de la barra horizontal y lo guarda en b b = HScDato.Value ' Muestra el valor de b en la caja de texto TxtDato TxtDato.Text = b ' Convierte el valor de b en voltios ' El valor del voltaje se muestra en dos decimales TxtVoltaje.Text = (b * 10) / 255 TxtVoltaje.Text = Mid(FormatCurrency(TxtVoltaje.Text, 2), 5, 5) End Sub Private Sub TmrComunicacion_Timer() ' Enviar el contenido de b acompañado de "$" y el carácter 13 que ' significa Enter por el puerto serie MSCComunicacion.Output = "$" + Chr(b) + Chr(13) End Sub
256 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
Figura 9.7. Formulario en funcionamiento
El formulario de la figura 9.6 queda completo con el programa vb 9.1 que básicamente captura el valor de la barra horizontal y lo guarda en la variable b que es enviada vía el puerto serie hacia el microcontrolador acompañada de los caracteres “$” y 13 o Enter, que van a los extremos de la cadena. El valor de la variable b es convertida en el mismo Visual Basic y colocado en un formato de dos decimales como se muestra en la figura 9.7; en esta figura se puede apreciar que cuando se envía el dato 255, el voltaje reflejado en la salida analógica será aproximadamente 10,00 voltios.
9.3 CONVERSOR DAC0800 El DAC0800 es un dispositivo conversor D/A de 8 bits con una salida por corriente proporcional con un tiempo de conversión aproximado de 100ns, capaz de consumir un máximo de 33mW con una fuente de ±5V. Los 8 bits de entrada son compatibles con TTL y posee una salida en voltaje de ±10V, esto hace que tenga una ventaja con respecto al DAC0808, ya que puede generar voltajes tanto positivos como negativos. Además, se puede mencionar que posee un error de ±1LSB. En la figura 9.8 se muestra el diagrama de pines y la descripción de cada pin. 1
16
COMP
2
15
VREF(-)
-V
3
14
VREF(+)
IOUT
4
13
+V
MSB B1
5
12
B8 LSB
B2
6
11
B7
B3
7
10
B6
8
9
B5
VLC IOUT
B4
VLC: Control +V: Voltaje positivo -V: Voltaje negativo B1-B8: Entrada de datos IOUT: Salida de corriente IOUT: Salida de corriente COMP: Compensación de corriente VREF(+): Voltaje de referencia positivo VREF(-): Voltaje de referencia negativo
DAC0800
Figura 9.8. Diagrama de pines del DAC0800
© RA-MA
CAPÍTULO 9. CONVERSOR D/A 257
9.3.1 Funcionamiento del DAC0800 Como se ha visto a lo largo del libro, la forma más sencilla de hacer funcionar un chip es visitando su hoja técnica y buscar dentro de ella el circuito típico, y para este caso no va a ser la excepción. El circuito que se muestra en la figura 9.9 presenta el circuito típico del DAC0800 para que dando niveles TTL en las entradas de B1 a B8 se obtenga una salida entre los pines 2 y 4 de ±10V. +15V
+10V
+5V 100nF MSB
5,1k
1
5
2
6
3
7
4
8
5
9
6
10
7
11
8
12 LSB
B1
+V
B2
IOUT
B3
IOUT
B4
VREF(+)
B5
VREF(-)
B6
COMP
B7
-V
B8
VLC
DAC0800
10k
10k
13 4
+ Voltaje de salida +10 a -10 v oltios
2 14 10nF 15 16 3 1 100nF 5,1k -15V
Figura 9.9. Circuito típico del DAC0800
Para el funcionamiento del circuito deberá conmutar los interruptores para dar los niveles TTL que se dé un cambio en el voltaje de salida entre los pines 4 y 2. De acuerdo con los bits que le ingresará al DAC0800, usted se dará cuenta de lo siguiente:
00000000 − 10000010 ≈ +10V → 0V 10000011 − 11111111 ≈ 0V → −10V De acuerdo con lo anterior usted puede obtener niveles de voltajes positivos y negativos de acuerdo con la combinación de bits que colocará a la entrada del DAC0800.
9.3.2 Interfaz con el microcontrolador Para el funcionamiento del DAC0800 se conectarán las entradas digitales de B1 a B8 al puerto B desde el B7 al B0 en ese orden, pues la entrada B1 es MSB y la B8 es LSB. Una vez implementado el circuito de la figura 9.10, programe el
258 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
microcontrolador con el código de programa pbp 9.3, es decir, con el código anterior. Según el programa del microcontrolador, éste se encargará de enviar al conversor, vía los 8 bits del puerto B, las combinaciones necesarias para generar una señal analógica de +10V a -10V. +15V
+10V
+5V 100nF
5,1k
10k
10k
U4 14
VDD
RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0/INT
5k 4 16 4MHz
15 5
22pF
22pF
MCLR OSC1 OSC2 VSS
RA4/TOCK1 RA3 RA2 RA1 RA0
13 12 11 10 9 8 7 6 3 2 1 18 17
5 6 7 8 9 10 11 12
B1 B2 B3 B4 B5 B6 B7 B8
+V IOUT IOUT VREF(+) VREF(-) COMP -V VLC
13 4 2 14 15 16 3 1
+ Voltaje de salida - +10 a -10 v oltios 10nF
DAC0800 5,1k 100nF -15V
PIC16F84A
22k 2
1
74HC14
1 6 2 7 3 8 4 9 5 CONECTOR DB9
Figura 9.10. Circuito de microcontrolador conectado con el DAC0800
9.3.3 Traducir a voltios A veces es necesario que el microcontrolador genere una señal de acuerdo con lo que se desee, para ello se puede usar un computador, con la finalidad de enviar el dato que indique el valor de voltaje que hay que generar. Para esto implemente el circuito de la figura 9.11, donde se muestra la interfaz entre el computador, el microcontrolador y el DAC0800. El código que hay que usar, es el programa pbp 9.4, que indica como el microcontrolador puede captar el dato enviado por el computador y luego convertirlo en 8 bits en paralelo, por el puerto B, con la finalidad de enviarlo al conversor D/A y obtener una señal analógica entre +10V y -10V. Para desarrollar el programa del computador, usted desarrollará un formulario en Visual Basic similar a la de la figura 9.11, en este caso se deben cambiar las propiedades de los objetos de acuerdo con la tabla 9.2. El código del programa vb 9.2 es el indicado para este caso en el cual se desea enviar una variable que determine el valor analógico deseado entre +10V y -10V. Este programa básicamente envía una cadena de caracteres conformada por el carácter “$”, el dato b y el carácter 13 o Enter, de estos datos, la variable b es la que se utiliza para enviar los bits por el puerto b del microcontrolador. El resto del
© RA-MA
CAPÍTULO 9. CONVERSOR D/A 259
programa es un arreglo para mostrar la variable b como voltaje. En la figura 9.13 se muestra el formulario en funcionamiento; aquí usted puede ver que cuando la variable b es 64, este dato es enviado en binario al conversor que arroja aproximadamente en la salida el valor de 5,08 voltios. +15V
+10V
+5V 100nF
5.1k
10k
10k
U4 14
VDD
RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0/INT
5k 4 16 4MHz
15 5
22pF
22pF
MCLR OSC1 OSC2 VSS
RA4/TOCK1 RA3 RA2 RA1 RA0
13 12 11 10 9 8 7 6 3 2 1 18 17
5 6 7 8 9 10 11 12
B1 B2 B3 B4 B5 B6 B7 B8
+V IOUT IOUT VREF(+) VREF(-) COMP -V VLC
13 4 2 14 15 16 3 1
+ Voltaje de salida - +10 a -10 v oltios 10nF
DAC0800 5.1k 100nF -15V
PIC16F84A
22k 2
1
74HC14
1 6 2 7 3 8 4 9 5 CONECTOR DB9
Figura 9.11. Circuito de microcontrolador con el DAC0800 y comunicación con el computador Objeto Formulario
Propiedad Valor Nombre FrmPrueba Caption Prueba BorderStyle 1 Caja de texto 1 Nombre TxtDato Text 0 (transparente) Caja de texto 2 Nombre TxtVoltaje Text 0 (transparente) Etiqueta 1 Nombre Label1 Caption +10,00 Etiqueta 2 Nombre Label2 Caption -09,62 Barra horizontal Nombre HScDato Max 255 Min 0 Temporizador Nombre TmrComunicacion Interval 10 Microsoft Comm Control 6.0 Nombre MSCComunicacion Tabla 9.2. Valor de cada una de las propiedades de los objetos mostrados en el formulario
260 MICROCONTROLADORES PIC CON PROGRAMACIÓN PBP
© RA-MA
Figura 9.12. Formulario inicial con sus componentes de acuerdo con la tabla 9.2
Figura 9.13. Formulario en funcionamiento ' Programa vb 9.2: Programa para Microsoft Visual Basic 6.0 Dim b As Byte ' Declara la variable como un byte Private Sub Form_Load() MSCComunicacion.CommPort = 1 MSCComunicacion.PortOpen = True MSCComunicacion.Settings = "4800,n,8,1"
' ' ' ' '
Puerto serie Com1 Activar puerto 4.800bps, No paridad, 8 bits de datos, 1 de parada
End Sub Private Sub HScDato_Change() ' Captura el valor de la barra horizontal y lo guarda en b b = HScDato.Value TxtDato.Text = b ' Muestra el valor de b en la caja de texto ' TxtDato If b 3 Then ' Si i es mayor que 3 entonces i=0 ' Se inicializa la variable a i a 0 para comenzar de ' nuevo los pasos EndIf ' Fin de If GoTo Inicio ' Volver a Inicio Case 2 ' Si pul es igual 2 (Giro horario) If i3 Then ' Si i es mayor que 3 entonces i=0 ' Se inicializa la variable a i a 0 para comenzar de ' nuevo los pasos EndIf ' Fin de If GoTo Inicio ' Volver a Inicio Case 2 ' Si b0 es igual 2 (Giro horario) If i7 Then ' Si i es mayor que 7 entonces i=0 ' Se inicializa la variable a i a 0 para comenzar de ' nuevo los pasos EndIf ' Fin de If GoTo Inicio ' Volver a Inicio Case 2 ' Si pul es igual 2 (Giro horario) If i7 Then ' Si i es mayor que 7 entonces i=0 ' Se inicializa la variable a i a 0 para ' comenzar de nuevo los pasos EndIf ' Fin de If GoTo Inicio ' Volver a Inicio Case 2 ' Si b0 es igual 2 (Giro horario) If i3 Then ' Si i es mayor que 3 entonces i=0 ' Se inicializa la variable a i a 0 para ' comenzar de nuevo los pasos EndIf ' Fin de If Next j ' Próximo j GoTo Inicio ' Volver a Inicio
© RA-MA
CAPÍTULO 13. MOTORES PASO A PASO 345 Case 2 ' For j=1 To b1 ' If i