1MANUAL DE PRÁCTICAS “PROGRAMACIÓN AVANZADA” AUTOR: Viridiana Bárcenas Jiménez Exp.: 153380 2 CONTENIDO PRÁCTICA 1 • USO DEL PUERTO PARALELO DE LA COMPUTADORA (Salida) PÁG. 3 … PRÁCTICA 2 • USO DEL PUERTO PARALELO DE LA COMPUTADORA PARA EL CONTROL DE MOTORES DE CD Y DE CONMUTACIÓN ELECTRÓNICA (MOTORES PASO A PASO). PÁG.21 … PRÁCTICA 3 • ADQUISICIÓN DE DATOS DE TEMPERATURA (CONFIGURACIÓN DEL PUERTO PARALELO DE ENTRADA). PÁG.27 … PRÁCTICA 4 • USO DEL PUERTO SERIAL PARA COMUNICACIÓN (CHAT CON PUERTO SERIAL). PÁG.34 … PRÁCTICA5 • INTRODUCCIÓN AL USO DE MICROCONTROLADORES (PIC16F877A). PÁG.46 … PRÁCTICA 6 • USO DE µC CONFIGURADO PARA ENTRADA Y SALIDA DE DATOS (PIC16F877A). PÁG. … PRÁCTICA 7 • TRANSMISIÓN/RECEPCIÓN DE DATOS VÍA UN MÓDULO DE COMUNICACIÓN XBee. PÁG.52 ... 3 Nombre de la Asignatura LABORATORIO DE PROGRAMACIÓN AVANZADA Nombre de la Práctica USO DEL PUERTO PARALELO DE LA COMPUTADORA (Salida) Número de Práctica 1 2 Duración (Horas) OBJETIVO (Resultado del aprendizaje) El alumno comprenderá el uso del puerto paralelo para efectuar acciones de control (on/off), también, aprenderá a configurar el puerto paralelo de salida para procesar señales MARCO TEÓRICO Introducción. El puerto paralelo de una PC o computadora [1] es ideal para usarse como herramienta de control de motores, relevadores, LEDs (Diodos Emisores de Luz), etc. Este dispositivo posee un bus de datos de 8 bits y señales de control de salida y otras de entrada que pueden ser usadas fácilmente (Tabla 1). La PC generalmente posee sólo uno de estos puertos llamado LPT1 (Terminal de las Líneas de Impresión), la dirección hexadecimal de este puerto es igual a 0x378 ó 888 en decimal, esto se puede verificar fácilmente en el setup de la PC. Tabla1. Configuración del puerto paralelo estándar. Pin (D-25) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18-25 Línea Puerto SPP -Strobe D0 D1 D2 D3 D4 D5 D6 D7 -Ack Busy Paper-out Select -Auto-Linefeed -Error -Initialize -SelecPrinter GND Dirección Entrada/ Salida Salida Salida Salida Salida Salida Salida Salida Salida Entrada Entrada Entrada Entrada Entrada/ Salida Entrada Entrada/ Salida Entrada/ Salida Registro (bit) Control(0) Datos(0) Datos(1) Datos(2) Datos(3) Datos(4) Datos(5) Datos(6) Datos(7) Estado(6) Estado(7) Estado(5) Estado(4) Control(1) Estado(3) Control(2) Control(3) 4 El hardware del puerto paralelo. El puerto paralelo de una típica PC utiliza un conector hembra de tipo D de 25 pines (DB-25 S), definido este por el estándar IEEE 1284. El orden de los pines y la función de cada uno de ellos es la correspondiente a la Figura 1. Figura 1. Orden y función de pines para DB-25 S. Hay tres direcciones de E/S asociadas con un puerto paralelo de la PC, estas direcciones pertenecen al registro de datos, el registro de estado y el registro de control. El registro de datos es un puerto de lectura-escritura de ocho bits. Los distintos pines (bits) de salida correspondientes al bus de datos no pueden ser escritos en forma independiente, por lo que siempre que se modifiquen se deben escribir los ocho bits nuevamente. Los registros de control y estado proveen la interfase a las otras líneas de E/S. Para leer el estado de los pines de entrada se debe realizar una lectura a la dirección hexadecimal 0x379 ó 889 en decimal tal como se muestra en la Tabla 2. La lectura será devuelta en un byte en donde el bit 6 corresponde al pin 10, el bit 5 corresponde al pin 12, el bit 4 corresponde al pin 13 y el bit 3 corresponde al pin 15. Tabla 2. Direcciones a puerto. Puerto Datos Se compone de 8 bits, es bidireccional. Estado Registro de entrada de información de 5 bits. Control Es un bidireccional de 4 bits, con un bit de configuración que no tiene conexión al exterior. Dirección LPT1 378H 379H 37AH Instrucciones en C para configurar el puerto paralelo. En primera instancia se debe habilitar el puerto paralelo para su uso, para esto se recurre al USERPORT. Manejo del USERPORT. Para poder leer y escribir en el puerto paralelo es necesario un driver (archivo *.sys) que comunique el software con dispositivo hardware. El proceso a seguir para instalar el driver que permita acceder a el puerto paralelo: • • • Descargar la utilidad denominada USERPORT .Descomprime el archivo en una carpeta del disco duro. No importa el nombre. Copiar el archivo "userport.sys" en la carpeta de sistema C:\WINDOWS\SYSTEM32\DRIVERS Ejecuta el archivo UserPort.exe 5 Figura 2. Ventana principal USERPORT. • Para iniciar el driver, accionar el botón START, si se desea detener la ejecución seleccionar el botón STOP (Figura 2). El direccionamiento de los puertos, está indicado en el cuadro de diálogo del USERPORT, en este se hace referencia a los rangos habituales que se asigna a los puertos en un PC. Si el direccionamiento del puerto no coincide con los que aparecen, se puede añadir un nuevo rango de direcciones escribiéndolas en notación hexadecimal. Para finalizar se debe ejecutar el lenguaje de programación que acceda a los puertos y utilizar de forma transparente las instrucciones primitivas para entrada/salida de datos. Configuración de puerto paralelo salida (escritura) Con ocho bits se puede escribir en el puerto un total de 256 valores diferentes, cada uno representa un byte de información y cada byte representa una acción concreta. Con la Tabla 1 y Tabla 2 se puede modificar o leer cualquiera de las líneas de programación de salida del puerto paralelo mediante el uso de las instrucciones de acceso al mismo, en el lenguaje de programación C, Turbo C y C++. 1. Determinar que salida del puerto paralelo es el que se va utilizar. Se debe tomar es esta salida y conectarla a un diodo LED en serie a una resistencia de 330 Ohm como se muestra en la Figura 3. Figura 3. Línea de salida. NOTA: "Pin puerto paralelo" puede ser cualquier Pin del 2 al 9. 2. Se indica que señal será la que se va a enviar, esto aplicado en la función Outportb tal como en la Figura 4 donde se indica que se enviara un dato a través del puerto de datos. Las instrucciones que terminan en b, como seria en el caso del Outportb, se refieren a la lectura o escritura de un byte, mientras que las que no terminan en esta letra es decir el Outport se refieren a una palabra el equivalente a dos byte. 6 Figura 4. Formato de instrucción de salida a puerto paralelo. EQUIPO Y MATERIALES. • • • • • • PC. Resistencias de 330 Ohms. LEDs. Cable interfaz Puerto paralelo (armado DB-25 macho). Alambre para conexión AWG 22. Protoboard. PRERREQUISITOS. El alumno debe traer armado el cable de interfaz para puerto paralelo y los circuitos requeridos que son necesarios para la comunicación de salida del puerto paralelo contemplando sólo las líneas de datos. METODOLOGÍA. El alumno debe realizar las siguientes aplicaciones visible en un arreglo de LEDs: 1. Secuencia par e impar: Desarrollar e implementar un programa que muestre en una línea de salida donde se enciendan primero los indicadores correspondientes a número par y en seguida los correspondientes a número impar, secuencia dada en números binarios, ver ejemplo Figura 5. Figura 5. Tablero de LEDs indicadores secuencia de números PAR e IMPAR. 7 2. Contador de 0-255: Desarrollar e implementar el programa necesario que muestre en una línea de datos una secuencia binaria correspondiente a un contador de 0 a 255, ver ejemplo Figura 6. Figura 6. Tablero de LEDs indicadores contador 0-255. 3. Corrimiento de izquierda a derecha: Desarrollar e implementar el programa que muestre en una línea de salida los datos correspondientes al corrimiento de bits de izquierda a derecha, ver ejemplo Figura 7. Figura 7. Tablero de LEDs indicadores secuencia de Izquierda a Derecha. 8 4. Corrimiento del centro a los lados: Desarrollar e implementar el programa que muestre en una línea de datos el corrimiento de bits partiendo del centro del arreglo de LED hacia las laterales del mismo, ver ejemplo Figura 8. Figura 8. Tablero de LEDs indicadores secuencia de Derecha a Izquierda. EVALUACIÓN DE LA PRÁCTICA. Conclusiones:_________________________________________________________________________ _____________________________________________________________________________________ ____________________________________________________________________. Observaciones:_______________________________________________________________________ __________________________________________________________________________. BIBLIOGRAFÍA. [1]http://www.modelo.edu.mx/univ/virtech/circuito/paralelo.htm, 1999, El puerto paralelo de la PC, por Virgilio Gómez Negrete, Español. [2]http://olmo.pntic.mec.es/jmarti50/puerto_xp/userport.htm, 2004, USERPORT. Driver para acceder al puerto paralelo en Windows NT/2000/XP, J.C.M.Castillo, Español. [3]Técnicas de programación, Ed. McGraw Hill. 9 Figura Anexa (A) Diagrama de flujo propuesto para la programación. Inicio /*Declaración de librerías #include<…>*/ #include<conio.h> #include<stdio.h> #include<dos.h> /*Declaración de variables globales. En caso de que el programador lo desee*/ #define salida 0x378 // dirección salida /*Pude direccionar la salida por puerto empleando el Outport tal y como se indica en la Figura4*/ /*Declaración de la función principal */ Voidmain() { /*Declaración de variables locales. En caso de que se requiera su uso*/ Int a,b,c,d,e,f,g; float x; /*Se verifica la acción a ejecutar y se determina el código más adecuado para el programador: If, Else, For ,etc … */ Palabra = inport(puerto); outport (puerto, Palabra); Byte = inportb (puerto); outportb (puerto, Byte); /*Se finaliza la ejecución de la función principal*/ } Fin 10 Nombre de la Asignatura LABORATORIO DE PROGRAMACIÓN AVANZADA Nombre de la Práctica USO DEL PUERTO PARALELO DE LA COMPUTADORA PARA EL CONTROL DE MOTORES DE CD Y DE CONMUTACIÓN ELECTRÓNICA (MOTORES PASO A PASO). Número de Práctica 2 Duración (Horas) 2 OBJETIVO (Resultado del aprendizaje) El alumno podrá reconocer las diferentes configuraciones para accionar y controlar motores de CD y de conmutación electrónica (paso a paso) empleando drivers de uso específico y el puerto paralelo. MARCO TEÓRICO Interfaz para el puerto paralelo. Actualmente, la mayoría de los puertos instalados en las PC son de tipo multimodal configurables a través del BIOS de la máquina, en modo normal o de puerto paralelo estándar, además de éste, están las opciones bidireccional, puerto paralelo extendido versión 1.7, versión 1.9 y el puerto de capacidad extendida. El modo de operación Normal es el más elemental y solamente permite la escritura en las líneas de datos, pines 2 a la 9 del conector DB-25 del [1] puerto paralelo de la PC . Eléctricamente, el puerto paralelo entrega señales TTL (lógica de transistor a transistor)y como tal, se le puede conectar cualquier dispositivo que cumpla con los niveles de voltaje específicos, sin embargo el hardware del puerto paralelo es muy limitado en cuanto a su capacidad de manejo de corriente, es por eso que se tiene que ser muy cuidadoso con el manejo de las señales del puerto, un corto circuito puede dañar permanentemente la tarjeta madre de la PC. El manejo de potencia, es decir la manipulación de altas corrientes, implica tener consideraciones de seguridad eléctrica para los operarios y de protección para el sistema digital en este caso el puerto paralelo de la PC. Para disminuir el riesgo de daño al puerto se emplea una etapa de aislamiento. • [2] El integrado 74LS244 funciona como etapa aislante y mejora la capacidad de manejo de corriente, Figura 1(A). Por cada línea de entrada del puerto paralelo existe una etapa amplificadora-separadora dentro del 74LS244 con una tasa de entrega de corriente suficiente para desplegar la información a través de LEDs, Ver Figura 1(B). 11 Figura 1. A) Circuito 74LS244, B) Configuración de conexión a Puerto Paralelo. • Es deseable que la interconexión entre ambas etapas la digital y la de potencia se realice por un medio de acoplamiento que aísle eléctricamente los dos sistemas. Esto se puede lograr con los dispositivos llamados [3] OPTO ACOPLADORES (por ejemplo el optoacoplador 4N25 ), Figura 2(A), mediante los cuales se obtiene un acoplamiento óptico y, al mismo tiempo, un aislamiento eléctrico. El acoplamiento se efectúa en el rango del espectro infra-rojo a partir de dispositivos emisores de luz, usualmente IRED (infra-rojo) o LEDs, actuando como emisores y utilizando dispositivos detectores de luz (opto detectores), como receptores, Figura 2(B). Figura 2. A) Opto acoplador 4N25, B) Configuración del 4N25 salida. • [4] Un relevador es un interruptor accionado por un electroimán (Figura 3). Al pasar corriente eléctrica por la bobina el núcleo de hierro se magnetiza, convirtiéndose en un imán que será más potente mientras mayor sea la intensidad de la corriente y el número de vueltas de la bobina. Al abrirse nuevamente el interruptor y dejar de pasar corriente por la bobina, desaparece el campo magnético y el núcleo deja de ser un imán, cortando totalmente el paso de corriente del sistema en caso de los sistemas que manejan cargas inductivas como lo son motores, se impide el paso de corrientes parásitas que puedan quedar de su movimiento inercial regresando por la línea de alimentación dañando la etapa digital del sistema en cuestión. 12 Figura 3. Relevador. Motores de corriente directa. El funcionamiento se basa en la interacción entre el campo magnético del imán permanente y el generado por las bobinas, ya sea una atracción o una repulsión hace que el eje del motor comience su movimiento. Cuando una bobina es recorrida por la corriente eléctrica, esta genera un campo magnético con dos polos un polo NORTE y un polo SUR. Esto permite que mediante la inversión de la polaridad se consiga el cambio de giro del motor. Divers para manejo de motores de CD. Relevador: Existen varias formas de lograr que estos motores inviertan su sentido de giro una es utilizando una fuente simétrica o dos fuentes de alimentación con un interruptor simple de dos contactos y otra es utilizar una fuente común con un interruptor doble es decir uno de 4 contactos o un relevador que cuente con esta configuración (Figura 3). Aunque esta opción es una de las más prácticas, tiene sus inconvenientes ya que los relevadores suelen presentar problemas mecánicos y de desgaste. Figura 3. Cambio de giro de un motor de CD mediante un relé de 4 contactos. 13 Transistor: La segunda opción es haciendo uso de transistores, estos conectados en modo corte y saturación [5] (valores lógicos “1” y “0”), así actúan como interruptores (Figura 4 y Figura 5) . Figura 4. Configuración con dos transistores complementarios y una terminal de control (Corte y saturación) usando fuente dual. Figura 5. Configuración empleando 4 transistores, dos terminales de control y una fuente sencilla (Puente H). Circuito integrado L293B: La tercera opción es haciendo uso del L293B 6), sus ventajas son las siguientes: 5. 6. 7. 8. [6] . Se trata de un driver para motores de 4 canales (Figura Cada canal es capaz de entregar hasta 1A de corriente. Posee una entrada de alimentación independiente que alimenta los 4 drivers. El control de los drivers es compatible con señales TTL es decir con 5 voltios (señales lógicas). Cada uno de los 4 drivers puede ser activado de forma independiente (por su terminal de entrada), o habilitado de dos en dos con un sólo terminal (Enable). 14 Figura 6. Circuito integrado L293B. Existen dos formas de emplear este circuito como elemento de control, una de ellas es controlar a los motores en un sólo sentido de giro (paro y arranque), en este caso se tiene la posibilidad de controlar hasta 4 motores (Figura 7). En este circuito D1 y D2 sirven como seguro para el L293B de las tensiones generadas por la inducción de las bobinas del motor. Figura 7. Driver configurado para controlar motores en un solo sentido. La otra configuración es la que se muestra en la Figura 8, esta permite controlar el motor en cuatro estados: un sentido o en otro, detenerlo o dejarlo libre (se refiere a que cualquier señal en los terminales de control no tendrán efecto sobre el motor). 15 Figura 8. Configuración del L293B para motor de CD (Forma de control 2). Motores paso a paso. Los motores paso a paso son comúnmente utilizados en situaciones en que se requiere un cierto grado de precisión. El ángulo de giro de estos motores es muy variado pasando desde los 90º hasta los 1.8º e incluso 0.72º, cada ángulo de giro, (también llamado paso) se efectúa enviando un pulso en uno de sus terminales. Los Motores-PaP suelen ser clasificado en dos tipos, según su diseño y fabricación pueden ser Bipolares o Unipolares (Figura 9). Figura 9. Configuración de las bobinas de Motores PaP. • Motores bipolares. Para motores bipolares se deben identificar los cables a, b, c y d empleando un multímetro se puede medir la resistencia entre cada par de terminales, los extremos a y b deben tener la misma resistencia que los extremos c y d, al medir la resistencia en forma cruzada el multímetro no marca nada ya que corresponden a bobinas distintas. Para su control se requiere de invertir las polaridades de los terminales de las bobinas 1 y 2 en una determinada secuencia para lograr un giro a derecha, y en secuencia opuesta para que gire a izquierda (Figura 10). Figura 10. Secuencia de Pasos para un motor Bipolar. • Motores Unipolares. El motor paso a paso de tipo unipolar es de fácil control, esto se debe a que tienen un terminal común a ambas bobinas. Una forma de identificar cada uno de los cables es analizar la forma de conexión interna de estos motores. 16 1. Este motor tiene 6 cables, con el multímetro se mide resistencias por todos los cables. De este estudio sólo se obtienen tres valores distintos que además se repiten, el primero valor corresponde a la cifra de mayor resistencia, es decir a los extremos de las bobinas (a-b o bien c-d). El segundo valor corresponde aproximadamente la mitad del valor nominal de la medición anterior, por tanto esa debe ser la resistencia entre el terminal común y ambos extremos de una bobina, por ejemplo entre aCom1 o b-Com1, c-Com2 o d-Com2 (Figura 11A). La última señal es cuando no marca nada, esto significa que se midieron los cables de bobinas distintas. 2. Lo que sigue ahora es unir los dos Com1 y el Com2 (Figura 11B). Aquí la resistencia entre cualquier terminal y el común es la misma (aproximadamente la mitad de la resistencia entre los extremos de las bobinas). Al unir los comunes los cuatro cables restantes corresponden a: a, b, c, y d, se debe conectar la terminal común a la fuente de alimentación, y seleccionar uno de los 4 cables restantes, considerándolo como A y se conecta a GND (Tierra), el motor quedará enclavado en una sola posición, en seguida se debe tomar un segundo cable, cuando este sea conectado a GND el motor dará un primer paso. Aquí pueden ocurrir 3 cosas: 1. Que el motor gire a derecha (Terminal b). 2. Que gire a izquierda (Terminal d). 3. No pasa nada (Terminal c). Figura 11. Bobinas de Motor paso a paso unipolar: A)configuración inicial del motor a identificar B) Com1 y el Com2 se unen para formar una sola terminal, Com. Drivers útiles para el manejo de motores paso a paso (Bipolares). LN293 En la Figura 12, L1 y L2 son las bobinas del motor, los diodos D1 a D8 son para proteger al integrado de las sobre tensiones generadas por dichas bobinas, los terminales 1 y 9 se unieron como terminal de habilitación, 1a, 1b, 2a y 2b son las entradas de control para la secuencia de las bobinas del motor. 17 Figura 12. Configuración de control para motores PaP bipolar empleando LN293B. Drivers útiles para el manejo de motores paso a paso (unipolares). ULN2803 [7] El ULN2803 es un arreglo de transistores Dárlington capaz de manejar hasta 500mA en sus salidas (Figura 13). Las salidas del ULN2803 están invertidas respecto de las entradas, y de acuerdo al diagrama interno, se puede apreciar que son de colector abierto. La configuración para el manejo de motores paso a paso empleando el Driver ULN2803 se muestra en la Figura 14. 18 Figura 13. Configuración del ULN2803. Figura 14. El ULN2803 tiene salidas invertidas, cada vez que envíe un "1" por el pin In se enviará "0" a la salida. Secuencias para manejo de giro de motores paso a paso empleando el ULN2803 La secuencia que se requiere para hacer que el motor gire en un sólo sentido se muestra en la Figura 15. Figura 15. Secuencias para hacer que el motor gire en un sentido, si se desea que gire en sentido opuesto, invertir dicha secuencia. Al trabajar con una sola bobina se pierde un poco el torque del motor. Otra propuesta es activar las bobinas de a dos, de esta manera el campo magnético se duplica, el motor tiene mayor fuerza de giro y retención, la secuencia a seguir se muestra en la Figura 16. Este método presenta mayor fuerza en cada paso y el consumo de energía aumenta. 19 Figura 16. Secuencia de giro activando dos bobinas a la vez. Una tercera propuesta es la resultante de la combinación de las anteriores, mejor conocida como secuencia de medios pasos esto es, que si tenemos un motor de 4 pasos puede ser usado como de 8 pasos. Para el caso anterior se anexa la secuencia en la Figura 17. Figura 17. Secuencia de medios pasos para motor de 4 pasos. EQUIPO Y MATERIALES. • • • • • • • Fuente de alimentación. Motor de CD de 3 0 6 volts. Motor a pasos bipolar y unipolar. Circuitos (ULN2803, L293D, 74LS244, MOC 3011, RELEVADOR RAS 05) Caimanes. Puerto Paralelo. Protoboard. PRERREQUISITOS. Que el alumno acuda al laboratorio de Programación Avanzada contando con los circuitos necesarios armados para conectar el puerto paralelo a los mandos finales (motores de CD y Motores paso a paso) así como la hoja de datos de los de los siguientes elementos eléctricos: • • • • • 74LS244 ULN2803 L293D MOC 3011 RELEVADOR seleccionado (RAS 05). 20 METODOLOGÍA. El alumno: Mediante el uso de los circuitos integrados usados en la práctica aprenderá a controlar el movimiento de los motores de corriente directa, a pasos unipolar y bipolar mediante el puerto paralelo. EVALUACIÓN DE LA PRÁCTICA. Conclusiones:_________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________. Observaciones:_______________________________________________________________________ _____________________________________________________________________________________ ______________________________________________________________________. BIBLIOGRAFÍA: Williams, Arthur. Microprocesadores, dispositivos optoelectrónicos, periféricos y de interfaz. Serie de circuitos. [1]Tutorial en web (PDF, html) El puerto paralelo de la PC por Virgilio Gómez Negrete. [2]Datasheet74LS244. [3]Datasheet 4N25. [4]Maloney J. Timothy. Electrónica Industrial. Dispositivos y Sistemas. Editorial Prentice Hall Hispanoamericana, México, 2000 [5]Boylestad Robert y Nashelsky Louis. Electrónica. Teoría de Circuitos. Editorial Prentice Hall Hispanoamericana, México, 1998. [6]Datasheet L293D. [7]Datasheet ULN2803. 21 Nombre de la Asignatura LABORATORIO DE PROGRAMACIÓN AVANZADA Nombre de la Práctica ADQUISICIÓN DE DATOS DE TEMPERATURA (CONFIGURACIÓN DEL PUERTO PARALELO DE ENTRADA). Número de Práctica 3 Duración (Horas) 2 OBJETIVO (Resultado del aprendizaje) El alumno comprenderá el funcionamiento del sensor de temperatura LM-35 y el de un convertidor Analógico Digital (ADC) de 8 bits de resolución. Realizará mediante puerto paralelo un sistema de adquisición de temperatura y el monitoreo de la misma en la PC. MARCO TEÓRICO Configuración de puerto paralelo escritura. Con ocho bits se puede escribir en el puerto paralelo un total de 256 valores diferentes, cada valor representa un byte de información y cada byte puede representar una acción concreta que se puede definir de acuerdo a las [1] necesidades del programador . Utilizando la Tabla1 y la Tabla2 se puede modificar o leer cualquier línea de programación direccionada al puerto paralelo mediante el uso de las instrucciones de acceso. Entrada. 1. Determinar que línea del puerto paralelo se va a usar como señal de entrada, verificando que corresponda a una señal este tipo. 2. Se asigna el valor del puerto mediante la funcione Inportb (Figura 1). Figura 1. Instrucción de salida de datos para puerto paralelo. La conexión para el circuito de entrada es la vista en la Figura 2A, Como se aprecia en el esquema, el circuito utiliza una de las líneas de entrada para leer el estado de un push-buttom, en el esquema se utiliza la línea de salida D1 para poder alimentar la resistencia de pull-up del push buttom, esto se aplica para no tener que utilizar una fuente externa de 5v sólo para alimentar a la resistencia. Para evitar que un fallo en el diseño del circuito dañe a la PC es necesario aislar las líneas del puerto paralelo. En la Figura 2B se observa el esquema de un circuito optoacoplado [3] para una línea de entrada . 22 Figura 2. Línea de entrada (línea internamente invertida por hardware, conectada 5v corresponde a 0, conectada a GND corresponde a 1). Tabla1. Configuración del puerto paralelo estándar. Pin Nº (D-25) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18-25 Línea Puerto SPP -Strobe D0 D1 D2 D3 D4 D5 D6 D7 -Ack Busy Paper-out Select -AutoLinefeed -Error -Initialize -SelecPrinter GND Dirección Registro(bit) Entrada/ Salida Salida Salida Salida Salida Salida Salida Salida Salida Entrada Entrada Entrada Entrada Control(0) Datos(0) Datos(1) Datos(2) Datos(3) Datos(4) Datos(5) Datos(6) Datos(7) Estado(6) Estado(7) Estado(5) Estado(4) Entrada/ Salida Control(1) Entrada Entrada/ Salida Entrada/ Salida Estado(3) Control(2) Control(3) Tabla 2. Direcciones a puerto. Puerto Datos Estado Control Dirección LPT1 378H 379H 37AH 23 ADC(Convertidor Analógico Digital) Figura 3. ADC0804, resolución a 8 bits (1 byte). Un convertidor analógico/digital (Figura 3) es un circuito integrado que convierte señales análogas en datos binarios (ceros y unos). [4] El convertidor analógico/digital ADC0804 es un circuito integrado capaz de convertir una muestra analógica entre 0v y 5v, a un valor binario de 8 dígitos. Para conocer la resolución del convertidor se tiene que conocer el valor máximo que la entrada de información a utilizar y la cantidad máxima de la salida en dígitos binarios. Para el ADC0804 la resolución se determina de la forma siguiente: Características Principales: Convertidor ADC0804 Vcc: voltaje positivo de alimentación AGND: tierra del sistema análogo DGND: tierra del sistema digital Vin(+): terminal positiva del voltaje de entrada Vin(-): terminal negativa del voltaje de entrada DB7-DB0: salidas de la conversión digital, con DB7 el MSB y DB0 el LSB CLKin: entrada de reloj CLKr: salida del reloj cuya frecuencia depende de una resistencia y un condensador externos CS(chip select):, para que el ACD0804 funcione debe estar en bajo. RD: cuando este pin está en bajo, las salidas tri-estado están activas y se puede leer el dato. WR: cuando va a nivel bajo, el proceso de conversión se inicia INTR: genera una interrupción de nivel bajo cuando finaliza el proceso de conversión Vref/2: este pin debe ser alimentado con la mitad del rango de voltaje analógico máximo que va a recibir el ADC0804 por el pin Vin (+). Ejemplo: para un rango de entrada entre 0,5v y 3,5v el valor de Vref/2 será igual a: (3,5 – 0,5 )/2 o sea 1,5v 24 Sensor de temperatura LM35. El sensor de temperatura utilizado, es el circuito integrado LM35 siguientes: [5] , cuyas características principales son las El circuito integrado LM35 es un sensor de temperatura cuya tensión de salida es linealmente proporcional con la temperatura en la escala Celsius. No necesita calibración externa, posee sólo tres terminales, es de bajo costo • • • • Factor de escala: 10mV/ºC (garantizado entre 9,8 y 10,2mV/ºC). Rango de utilización: -55ºC< T <150ºC. Precisión de: ~1,5ºC (peor caso). No linealidad: ~0,5ºC (peor caso). Censado de temperatura empleando LM35 y ADC0804. Figura 4. Interfaz entre el LM35 y el ADC0804, de acuerdo a la configuración de su hoja de datos. EQUIPO Y MATERIALES. • • • • • • • • PC. Resistencias de 330 Ohms. LEDs. Cable interfaz Puerto paralelo (armado DB-25 macho). Cables de conexión. Protoboard. LM35 ADC0804 25 PRERREQUISITOS. Que el alumno acuda al laboratorio de Programación Avanzada contando con: 9. El ADC de 8 bits configurado de tal manera que de forma automática transforme valores analógicos en digitales (Ver Figura 4). 10. El sensor LM35 configurado para entregar voltajes de acuerdo a la ecuación de transformación del sensor. METODOLOGÍA. El alumno: Debe construir un sistema de adquisición de datos de temperatura de tal forma que los datos de temperatura se muestren en la pantalla de la computadora (Figura 5). Figura 5. Interfaz entre el puerto paralelo de la PC y el sensor LM35. Los datos deben ser adquiridos en la computadora mediante el puerto paralelo. El puerto debe ser configurado desde el software de la PC y monitoreado a través de la misma. El formato para mostrar es de 2 dígitos y dos decimales. EVALUACIÓN DE LA PRÁCTICA. Conclusiones:_________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________. Observaciones:_______________________________________________________________________ _____________________________________________________________________________________ ______________________________________________________________________. BIBLIOGRAFÍA: [1]Tutorial en Web (PDF, html) El puerto paralelo de la PC por Virgilio Gómez Negrete. [2]Técnicas de programación, Ed. McGraw Hill. [3]Williams, Arthur. Microprocesadores, dispositivos opto electrónicos, periféricos y de interfaz. Serie de circuitos. [4]Datasheet ADC0804. [5]Datasheet LM35. 26 Figura Anexa (B) Diagrama de flujo propuesto para la programación. Inicio /*Declaración de librerías #include<…>*/ #include<conio.h> #include<stdio.h> #include<dos.h> /*Declaración de variables globales. En caso de que el programador lo desee*/ /*Declaración de la función principal */ Voidmain() { /*Declaración de variables locales. En caso de que se requiera su uso*/ Int a,b,c,d,e,f,g; float x; /*Se verifica la acción a ejecutar y se determina el código más adecuado para el programador: If, Else, For ,etc … */ Palabra = inport(puerto); Byte = inportb (puerto); /*Se finaliza la ejecución de la función principal*/ } Fin 27 Nombre de la Asignatura LABORATORIO DE PROGRAMACIÓN AVANZADA Nombre de la Práctica USO DEL PUERTO SERIAL PARA COMUNICACIÓN (CHAT CON PUERTO SERIAL). Número de Práctica 4 Duración (Horas) 2 OBJETIVO (Resultado del aprendizaje) El alumno comprenderá el uso del puerto serial para efectuar acciones de intercambio de información entre PC y PC. MARCO TEÓRICO Introducción. [1] El puerto serial se considera una de las conexiones más simples. Su principal función es enviar y recibir datos bit por bit, este posee un conector estándar y trabaja con un protocolo que permite la conexión de dispositivos a la PC. Se le denomina como puerto serial debido a que toma un byte de datos y transmite cada uno de los 8 bits uno a uno por un sólo canal. Al puerto serial se le conocen con el nombre de puertos de comunicación o COM, y tienen la característica de ser bidireccional. Esta característica permite a cada uno de estos dispositivos que puedan tanto recibir como enviar datos. Su funcionamiento normal depende de un dispositivo especial denominado UART debido a las siglas en inglés para “Universal Asynchronous Reciever/Transmitter”. Este dispositivo controlador toma la salida paralela del bus, y la PC lo convierte a forma serial, lo que permite la transmisión de los datos a través del puerto. Dentro de sus principales ventajas se encuentra la necesidad de un sólo cable para transmitir los 8 bits, sin embargo, se demora 8 veces más en realizar esta transmisión que si se contara con 8 cables, como sucede con un puerto paralelo. Las especificaciones del puerto serial están contenidas en el estándar EIA RS-232C6. Este estándar posee varias especificaciones, algunas son: • Un “espacio” (es un cero lógico) está entre los +3 volts y los +25 volts. • Una “marca” (es un uno lógico) que está entre los -3 volts y los -25 volts. • La zona entre los +3 volts y los -3 volts no está definida. • Un circuito abierto de voltaje no debe exceder los 25 volts con respecto a la tierra. • Un máximo largo de 15 metros garantizando máximo de transferencia. 28 Construcción de interfaz para puerto serial. Una PC convencional maneja un conector DB9 hembra cuya configuración de los pines es la que se muestra en la Figura 1 (a), de igual forma se presenta la configuración para el DB9 macho en la Figura 1 (b): Figura 1. Configuración de los pines del conector DB9: a) Tipo hembra, b) Tipo macho. Tabla 1. Configuración del los pines del conector DB9. 3 2 8 1 TD RD CTS DCD Transmit Data Receive Data Clear ToSend Data CarrierDetect 6 DSR Data Set Ready 4 DTR Data Terminal Ready 7 RTS RequestToSend 9 5 RI GND Ring Indicator Ground Salida de Datos Serial TX Entrada de Datos Serial RX Esta línea indica que el MODEM está listo para intercambiar datos. Cuando el MODEM detecta un “carrier” del otro MODEM al final de la línea este se activa. Esto le dice a UART que el MODEM está listo para establecer una conexión. Esta línea le informa al MODEM que la UART está lista para transmitir datos. Este es opuesto a DSR. Le indica al MODEM que la UART no está lista para establecer una conexión. Se activa cuando el MODEM detecta una señal de ring desde el PSTN. Tierra Configuración del USERPORT para manejo del puerto serial. [2] Puerto serial: Este no aparece por defecto reflejado en la ventana de USERPORT . Para conocer el direccionamiento de un puerto en una PC con Windows XP se debe hacer lo siguiente: • Desde el Panel de Control, abrir la carpeta de sistema (Figura 2) Figura 2. Símbolo del sistema. • En el cuadro de diálogo Propiedades del Sistema (Figura 3), se debe elegir la pestaña Hardware y hacer click sobre el botón "Administrador de dispositivos". 29 Figura 3. Vista ventana “Propiedades del sistema”. • En el árbol de dispositivos, se debe elegir la carpeta de puertos y hacer click con el botón derecho del mouse sobre el puerto que se desea conocer su direccionamiento (Figura 4). Elegir la opción "Propiedades" del menú contextual. Figura 4. Administrador de dispositivos, selección de puerto. • Seleccionar la pestaña “recursos del cuadro de diálogo”, "Propiedades del puerto" y observar el direccionamiento que aparece en el Intervalo de E/S, Figura 5, en esta venta aparecen dos valores el primero representa el intervalo de direccionamiento al puerto serial, mientras que IRQ 04 representa el primer puerto serial (COM1). Figura 5. Ventana “Propiedades del puerto”. 30 Instrucciones para configurar el puerto serial. En lenguaje C, existe una instrucción especial para manejar la comunicación serial siguiente sintaxis: int bios com(int cmd, char abyte, int port); [3] . Esta instrucción posee la Tabla 2. Instrucciones para manejo de puerto serie. cmd Especifica la operación a realizar abyte es un carácter que se enviará por el puerto serial port es la identificación del puerto serial (desde 0 para COM1 hasta 3 para COM4) El parámetro cmd puede tener los siguientes valores y significados: 0 1 2 3 Inicializa el puerto port con los valores dados por abyte Envía el carácter abyte por el puerto port Lee el carácter recibido por el puerto port Retorna el estado del puerto port Para la inicialización del puerto, el carácter abyte tiene las interpretaciones que se muestran en la Tabla 3. Tabla 3. Interpretaciones para el carácter abyte. 0x02 0x03 7 bits de datos 8 bits de datos 0x00 0x04 1 bits de parada 2 bits de parada 0x00 0x08 0x18 Sin paridad Paridad impar Paridad par 0x00 0x20 0x40 0x60 0x80 110 baudios 150 baudios 300 baudios 600 baudios 1200 baudios 0xA0 0xC0 0xE0 2400 baudios 4800 baudios 9600 baudios Para configurar el puerto con algunos parámetros, basta con realizar una operación OR con los valor deseado, por ejemplo, para 1200 baudios, sin bit de paridad, sin bit de parada y 8 bits, basta con seleccionar la palabra dada por: abyte = 0x80 | 0x00 | 0x00 | 0x03 o lo que es equivalente, abyte = 0x83 Para la lectura de un carácter que se haya recibido o del estado del puerto, se deben utilizar variables en las cuales se almacenen los valores de retorno; en ambos casos se obtienen valores de 16 bits. Para la lectura de un dato recibido, los 8 bits menos significativos corresponden al dato y los 8 más significativos al estado del puerto; si alguno de estos últimos está en "1 ", un error ocurrió; si todos están en "0", el dato fue recibido sin error. 31 Cuando el comando es 2 ó 3 (lee el carácter o el estado del puerto), el argumento abyte no se tiene en cuenta. Para configurar el puerto COM1 con los parámetros del ejemplo dado anteriormente, basta con la instrucción: Bios com (0,0x83,0); /*(inicializar, parámetros, COM1)*/ El manejo de los comandos y las instrucciones para la configuración de los puertos aquí expuestos sólo tendrán sentido en la medida en que se utilice el puerto serial para establecer una comunicación bien con otras PC o bien con dispositivos electrónicos como microcontroladores. EQUIPO Y MATERIALES. • • 2 PC 1 Cable interfaz puerto serie. PRERREQUISITOS. Que el alumno acuda al laboratorio de Programación Avanzada contando con un cable para establecer comunicación con el puerto serial entre dos PCs. (deberán estar soldados los pines correspondientes a ‘RX’ entrada de datos Pin 2, ‘TX’ salida de datos Pin 3, ‘GND’ tierra Pin 5 Figura 6) Figura 6. Conexión entre DB9 para realizar comunicación de puerto a puerto. METODOLOGÍA. El alumno debe desarrollar e implementar el programa necesario para la ejecución de un chat entre dos PCs a través del puerto serial de las mismas (Figura 7). Figura 7. Comunicación serial(Chat) 32 VALUACIÓN DE LA PRÁCTICA. Conclusiones:_________________________________________________________________________ _____________________________________________________________________________________ ____________________________________________________________________________________. Observaciones:_______________________________________________________________________ ___________________________________________________________________________________. BIBLIOGRAFÍA: [1]http://www.monografias.com/trabajos-pdf/puertos-ordenador/puertos-ordenador.pdf [2]Manual de configuración del User Port. Web:http://hem.passagen.se/tomasf/UserPort/ [3]http://andersonramirez.tripod.com/rs232.htm 33 Figura Anexa (C) Diagrama de flujo propuesto para la programación. Inicio /*Declaración de librerías #include<…>*/ #include<conio.h> #include<stdio.h> #include<dos.h> /*Declaración de variables globales. En caso de que el programador lo desee*/ /*Declaración de la función principal */ Voidmain() { /*Declaración de variables locales. En caso de que se requiera su uso*/ Int a,b,c,d,e,f,g; int bios com(int cmd, char abyte, int port); //ver Tabla 2 float x; /*Se verifica la acción a ejecutar y se determina el código más adecuado para el programador: If, Else, For ,etc … */ Bioscom (0,0x83,0); /*(inicializar, parámetros, COM1)*/ /*Se finaliza la ejecución de la función principal*/ } Fin 34 Nombre de la Asignatura LABORATORIO DE PROGRAMACIÓN AVANZADA INTRODUCCIÓN AL USO DE MICROCONTROLADORES Nombre de la Práctica (PIC16F877A). Número de Práctica 5 Duración (Horas) 2 OBJETIVO (Resultado del aprendizaje) El alumno aprenderá a identificar las instrucciones básicas para controlar los puertos de salida de un Microcontrolador (µC), mostrando la salida en un tablero indicador de LEDs. MARCO TEÓRICO ¿Qué es un Microcontrolador (µC)? Muchos de los sistemas digitales pueden diseñarse empleando µC, la selección del dispositivo depende del tipo de aplicación. Un µC es un procesador que cuenta con memoria ROM y RAM, puertos de entrada/salida (E/S) y otros dispositivos de propósito especial como es el convertidor analógico/digital (A/D), contadores, temporizadores y puertos de comunicación, en otras palabras es un microcomputador con funciones especiales. En la Figura 1 se indica la estructura interna típica de un µC. Figura 1. Estructura interna tipica de un µC. En el mercado existen una serie de dispositivos para todas las aplicaciones. El nombre actual que se utiliza significa [1] PIC Peripheral Interface Controller (Controlador de Interfaz Periférico) . 35 Clasificación de µC. Un µC se caracteriza por su arquitectura Harvard con memorias de programas y de datos independientes, lo que permite la accesibilidad simultánea y la diversidad en la longitud de posiciones y el tamaño de ambas memorias (Figura 2). Figura 2.Esquema representativo de arquitectura Harvard. Genéricamente se clasifican según el tamaño de los datos en: • De 8 bits • De 16 bits • De 32 bits Microchip sólo fabrica de 8 y 16 bits. Estos de dividen en tres grandes gamas: 1. Gama Base 4. 33 instrucciones máquina de 12 bits de longitud cada una. 5. Su capacidad de memoria y el número de recursos internos son reducidos. 6. Está compuesto por 14 modelos de los cuales 6 están encapsulados con sólo 6 patitas. 7. Se los apoda como “enanos”. 2. Gama Media 11. El repertorio de instrucciones es de 35, de 14 bits cada una. 12. Dispone de un vector de interrupción. 13. Es una gama numerosa que alcanza 71 modelos diferentes. 14. Se hallan encapsulados con 8 patitas y llegan hasta los que tienen 68 patitas. 3. Gama Mejorada 1. Dispone de 77 instrucciones de 16 bits cada una. 2. 2 vectores de interrupción. 3. Esta gama responde a la nomenclatura: PIC18Xxxx. 4. Puede alcanzar una capacidad de memoria de programa de 128 Kb, la de datos 3963 bytes y la EEPROM hasta 1Kb. 5. Dispone de periféricos muy especializados, como un convertidor analógico/digital de 10 bits; hasta 5 temporizadores. Mientras tanto las características más relevantes de los PIC de 32 bits son las siguientes: 1. 2. 3. 4. 5. 6. 7. CPU de 80 MHz, 1.56 DMIPS/MHz. Cambio rápido de contexto y respuesta de interrupciones. Capacidad de manipulación individual de bits. 10/100 Ethernet, CAN2.0b, USB host/device/OTG Controlador de interrupciones anidadas. Puerto maestro de 16 bits para soporte de QVGA y memoria Tensión desde 2.3 a 3.6 v, tolerancia de I/O: 5v 36 Micro controladores Flash Los microcontroladores que ofrecen una mayor flexibilidad para la programación son los que cuentan con memoria eléctricamente borrable Flash, ya que permiten grabar y re grabar el integrado. El PIC16F877(Figura 3) cuenta con las siguientes características [2] : Memoria de Programa tipo Flash 8Kx14 Memoria Datos 368 bytes EEPROM 256 bytes 33 pines de Entrada/Salida Encapsulado: 40 pines DIP, 44 pines PLCC y 44 pines TQFP Soporta Xtal 20MHz Voltaje de Operación: 2.0 hasta 5.5VDC Periféricos: 1 Convertidor A/D de 10-bits (8 canales) 2 Módulos CCP (Captura, Comparador, PWM) 1 Modulo I2C 1 USART (Puerto Serie) 2 Timers de 8 bits 1 Timer 16 bits Figura 3. Configuración de pines del PIC16F877. Compilador CCS C Introducción Un compilador convierte el lenguaje de alto nivel a instrucciones en código máquina; un cross-compiler es un compilador que funciona en un procesador (normalmente una PC) diferente al procesador objeto. El [3] es un cross-compiles. Los programas son editados y compilados a instrucciones compilador CSS C máquina en el entorno de trabajo de la PC, el código máquina puede ser cargado de la PC mediante cualquier programador y puede ser depurado desde el entorno de trabajo de la misma. El CCS es C estándar y, además de las directivas estándar (#include, etc...), suministra unas directivas específicas para PIC (#device, etc...); además incluye funciones específicas (bit_set(), etc...). Se suministra con un editor que permite controlar la sintaxis del programa. 37 Estructura de un programa. Para escribir un programa en C con el CCS se deben tener en cuenta una serie de elementos básicos de su estructura (Figura 4). • Directivas de procesado: Controlan la conversión del programa a código máquina por parte del compilador. • Programas o Funciones: Conjunto de instrucciones. Puede haber uno o varios; en cualquier caso siempre debe haber uno definido como principal mediante la inclusión de la llamada main(). • Instrucciones: Indican cómo se debe comportar el PIC en todo momento. • Comentarios: Permiten describir lo que significa cada línea del programa. Facilitan la comprensión de las distintas expresiones tanto para el programador como para quien tiene que interpretar dicho programa. No afecta a la compilación. Figura 4. Estructura básica de un programa. Tipos de dato. CCS C acepta los siguientes tipos de datos (Tabla 1, Tabla 2): Tipo Tabla 1. Tipos de datos usados en CCS C. Tamaño Rango Descripción Int1 Short Un bit 0a1 Entero de 1 bit Int Int8 8 bit 0 a 255 Entero Int16 Long 16 bit 0 a 65535 Entero de 16 bit Int32 32 bit 0 a 4 294967295 Entero de 32 bit -38 Float 32 bit ±1,175x10 a -38 ±3,402x10 Coma flotante Char 8 bit 0 a 255 Carácter Void - - Sin valor Signed Int8 8 bit -128 a +127 Enero con signo Signed Int16 16 bit -32768 a +32767 Entero largo con signo Signed Int32 32 bit -2 -31 -31 a (+2 -1) Entero 32 bit con signo 38 Tabla 2. Tablas constantes y variables empleadas en CCS C. Decimal 123 Se pueden especificar en octal, decimal, binario o hexadecimal. Constantes Se pueden definir como sufijo También se pueden definir como caracteres especiales. 123 Octal (0) 0X123 Hexadecimal (0X) 0b010010 Binario (0b) 'X' Carácter '\010' Carácter Octal '\XA5' Carácter Hexadecimal Int8 127U Long 80UL Signed INT16 80L Float 3,14F Char Con comillas simples 'C' \n Cambio de línea \r Retorno de carro \t Tabulación \b Backspace Las variables pueden ser definidas con: Variables Las variables se utilizan para nombrar posiciones de memoria RAM; se deben declarar obligatoriamente, antes de utilizarlas; para ello se debe indicar el nombre y el tipo de dato que se manejará. Estas pueden ser del tipo : Local: Sólo se utilizan en la función en la que fueron declaradas. Global: Se pueden utilizar en todas las funciones del programa. Estas son puestas a cero cuando se inicia la función principal main () Se define de la siguiente forma: Tipo Nombre_variable[=valor inicia] TIPO hace referencia a cualquiera de los tipos de datos vistos. El NOMBRE_VARIABLE puede ser cualquiera y el valor inicial es opcional, ejemplo: Flota temp_limt=500; Static: Una variable local se activa como global, se inicializa a cero y mantiene su valor al entrar y salir de la función. Auto: (Usadas por defecto no hace falta que se indique) donde la variable existe mientras la función este activa. Esta variable no se inicializa a cero. Su valor se pierde cuando sale de la función. Extern: Permite el uso de variables en compilaciones múltiples. Funciones. Las funciones son bloques de sentencias; todas las sentencias se deben enmarcar dentro de las funciones, estas deben definirse antes de utilizarse. Una función puede ser invocada desde una sentencia de otra función. Una función puede devolver un valor a la sentencia que la ha llamado. El tipo de dato se indica en la definición de la función; en caso de no indicarse nada se entiende que es un int8 y en caso de no devolver un valor se debe especificar el valor void. La función, además de devolver un valor, puede recibir parámetros o argumentos. 39 La estructura de una función es: Tipo_datoNombre_Función (tipo param1, param2,…) { (sentencias); } La forma de devolver un valor es mediante la sentencia RETURN: return (expresión); return expersión; Donde la expresión debe manejar el mismo tipo de dato que el indicado en la definición de la función. En caso de no devolver nada se finaliza con RETURN (de esta forma el compilador vuelve a la ejecución de la sentencia de llamada). También se puede finalizar la función tan sólo con la llave de cierre “}”. Declaraciones de control. Las declaraciones son usadas para controlar el proceso de ejecución del programa (Tabla3). Tabla 3. Declaraciones de control aceptadas por el compilador CCS C. Instrucción. Estructura de la función. If-Else: Con ayuda de esta instrucción se pueden tomar decisiones. Pueden anidarse los IF-ELSE dando lugar a los ELSE- IF; esto permite decisiones múltiples. Switch: Es un caso particular de una decisión múltiple. NOTA: No pueden existir dos Case con la misma Constante. For: Se usa para repetir sentencias. Nota: Se pueden anidad bucles For utilizando distintas variables de control. While: se utiliza para repetir sentencias. Do-While: La condición de finalización se evalúa al final del bucle, por lo que las sentencias se ejecutan al menos una vez. If (expresión) Sentencia_1; Else Sentencia_2; Primero se evalúa la expresión y si es (TRUE ó 1) ejecuta la Sentencia_1, en el caso contrario (FALSE ó 0) ejecuta la Sentencia_2. Switch (expresión) { Case constante 1: Sentencias; Break; Case constante 2: Sentencias; Break; … Default: Sentencia; } Evalúa la expresión y en orden a la Constante adecuada realiza la sentencia asociada. Si ninguno de los Case corresponde a la constante se ejecuta Default (este comando es opcional).El comando Break provoca la salida del Switch, de los contrario se ejecuta el siguiente Case. For ( inicialización; condición de finalización; incremento) { Sentencias; } En las expresiones del For la inicialización es una variable la cual se le asigna una valor inicial con el que controlar el bucle. La condición de finalización sirve para evaluar antes de ejecutar las sentencias si es cierto o no, en el caso de ser cierta se ejecutan las sentencias y en caso contrario se sale del For. Por último, la expresión de incremento o decremento modifica la variable de control después de ejecutar el bucle. While (expresión) { Sentencias; } La expresión se evalúa y la sentencia se ejecuta mientras la expresión es verdadera, cuando es falsa se sale del While. Do { Sentencias; } While (expresión); 40 Return: Se emplea para devolver datos en las funciones. Break: Permite salir de un bucle, se utiliza para While, For, Do y Switch. Goto: Provoca un salto incondicional. Otros Comentarios. Los comentarios en el programa facilitan la comprensión de las distintas expresiones tanto para el programador como para quién tiene que interpretar dicho programa. No afectan a la compilación por lo que pueden ser tan extensos como el programador quiera. • Utilizando //. Al colocar estos signos se comienza el comentario y finaliza la línea. //comentario que termina al final de la línea. • Utilizando /* y */. Se debe utilizar al inicio y al final del comentario. /*Este comentario no finaliza al final de la línea finaliza cuando se cierra el comentario*/ Directivas. Las directivas de pre-proceso comienzan con el símbolo # y continúan con un comando específico. La sintaxis depende del comando. Algunos comandos no permiten otros elementos sintácticos en la misma expresión. Muchas de las directivas utilizadas por CCS son extensiones del C estándar (Tabla 4). Tabla 4. Directivas de acción particular #DEVICE chip: permite definir el PIC con el que se realizará #device PIC16F84 la aplicación. #FUSES options: Permite definir la palabra de configuración #device PIC16F84 #Fuse XT, NOWDT, PUT, NOPROTECT para programar un PIC. Para un PIC16F84 las opciones posibles son: LP, XT, HS, RC, NOWDT, WDT, NOPUT, PUT, PROTECT, NOPROTECT. #Include “file name”: Permite incluir fichero en el programa. #Include <16F84.h> #Fuse XT, NOWDT, PUT, NOPROTECT #Use Delay (Clock=Speed): Permite define las frecuencias del oscilador del PIC, el compilador lo utiliza para realizar cálculos de tiempo. Se puede utilizar M, MHz, K y KHz para definir frecuencias. #Include <16F877.h> #use delay (clock=40000000) Gestión de los puertos. Los microcontroladores PIC tienen terminales de entrada/salida divididos en puertos, que se encuentran nombrados alfabéticamente A, B, C, etc. Cada puerto puede tener hasta 8 terminales que, de manera básica, se comportan como una entrada/salida digital. En función de las características del PIC, cada puerto puede tener, además, asignado un bloque funciona (Tabla 5). • • La habilitación como entrada o salida se realiza a través del registro TRISx. Un valor 0 en estos registros indica que la terminal correspondiente del puerto es de salida, mientras que un valor 1 indica que será de entrada. La gestión del bus de datos se realiza a través de los registros PORTx. 41 Tabla 5. Instrucciones para gestión de puertos. #Byte variable= constante; #byte TrisA=0x85 //variable TrisA en 85h #byet PortA=0x05//variable PortA en 05h Una vez definidas estas variables se pueden configurar y controlar los puertos a través de los comandos de asignación. Tris A=0xFF; //8 terminales de entrada Tris B=0x00;//8 terminales de salida Tris C=0x0F;//4 terminales de mayor peso de salida, 4 terminales de menor peso de entrada. Escritura en los puertos: PORTC=0c0a;//Salida del dato 00001010 por el puerto C. Lectura de puertos: Valor=PORTA;//Asigna el dato del puerto A a VALOR Manejo de registros y variables bit a bit Bit_clear(var,bit); // pone a 0 el bit especifico(0-7) de la variable Bit_set(var,bit); //pone a 1 el bit especifico (0-7) de la variable. Bit_test(var,bit); //Muestra el bit especifico (0-7) de la variable. El primer programa. Los pasos más importantes para la ejecución de un primer programa son: 1. Utilizar la instrucción de cabecera donde se especifican las características del µC PIC. 2. Se definen, mediante las correspondientes directivas, la velocidad del PIC y el puerto utilizado. Es importante definir la velocidad inmediatamente después del PIC ya que muchos drivers (como el LCD) lo necesitan para configurarse. 3. Se puede describir la función principal MAIN () (desarrollo del programa principal).Y ampliar el programa para que ejecute las operaciones que deseemos empleando las diferentes directivas antes mencionadas. 4. Se procede a la compilación del programa. EQUIPO Y MATERIALES. • • • • • • PC. Programador de PICS. PIC 16f877A configurado para trabajar. LEDs Resistencias de 330 Ohms. Tablilla de pruebas. PRERREQUISITOS. Que el alumno acuda al laboratorio de Programación Avanzada contando con: 1. El PIC16F877A acondicionado para su uso. METODOLOGÍA. El alumno debe realizar las siguientes aplicaciones visible en un arreglo de LEDs: 15. Secuencia par e impar: Desarrollar e implementar un programa que muestre en una línea de salida donde se enciendan primero los indicadores correspondientes a número par y en seguida los correspondientes a número impar, secuencia dada en números binarios, ver ejemplo Figura 5. 42 Figura 5. Tablero de LEDs indicadores secuencia de números PAR e IMPAR. 16. Contador de 0-255: Desarrollar e implementar el programa necesario que muestre en una línea de datos una secuencia binaria correspondiente a un contador de 0 a 255, ver ejemplo Figura 6. Figura 6. Tablero de LEDs indicadores contador 0-255. 17. Corrimiento de izquierda a derecha: Desarrollar e implementar el programa que muestre en una línea de salida los datos correspondientes al corrimiento de bits de izquierda a derecha, ver ejemplo Figura 7. 43 Figura 7. Tablero de LEDs indicadores secuencia de Izquierda a Derecha. 18. Corrimiento del centro a los lados: Desarrollar e implementar el programa que muestre en una línea de datos el corrimiento de bits partiendo del centro del arreglo de LED hacia las laterales del mismo, ver ejemplo Figura 8. Figura 8. Tablero de LEDs indicadores secuencia de Derecha a Izquierda. EVALUACIÓN DE LA PRÁCTICA. Conclusiones:_________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________. Observaciones:_______________________________________________________________________ _____________________________________________________________________________________ ______________________________________________________________________. 44 BIBLIOGRAFÍA: [1]http://www.virtual.unal.edu.co/cursos/ingenieria/2000477/lecciones/110701.htm [2] Datasheet PIC16F877. [3] García Breijo Eduardo. Compilador C CCS y simulador PROTEUS para micro controladores PIC. Editorial Alfa Omega. 45 Figura Anexa (D) Diagrama de flujo propuesto para la programación. Inicio /*Declaración de librerías #include<PIC en uso.h>*/ #include<16F877A.h> #fuse XT, NOWDT, NOPROTECT #Use delay (clock=4000000) /*Declaración de variables globales. En caso de que el programador lo desee*/ #byte porta= 0x05 #byte portb= 0x06 /*Declaración de la función principal */ Voidmain() { /*Declaración de variables locales. En caso de que se requiera su uso*/ /*Se verifica la acción a ejecutar y se determina el código más adecuado para el programador: If, Else, For ,etc … */ Set_tris_a(0x1F); Set_tris_b(0x00); While (1) { Output_b(input_a());//salida del puerto } /*Se finaliza la ejecución de la función principal*/ } Fin 46 Nombre de la Asignatura LABORATORIO DE PROGRAMACIÓN AVANZADA Nombre de la Práctica USO DE µC CONFIGURADO PARA ENTRADA Y SALIDA DE DATOS (PIC16F877A). Número de Práctica 6 Duración (Horas) 2 OBJETIVO (Resultado del aprendizaje) El alumno aprenderá a identificar y manejar las instrucciones para controlar los puertos de un Microcontrolador (µC), usando como elemento de entrada un teclado matricial de 4x4, y como elemento de salida una pantalla LCD de 2x16. MARCO TEÓRICO Entradas y salidas. LCD. Se acostumbra utilizar LCD con un número de líneas variable y un número de caracteres por línea también variable, por ejemplo, con 2x16 (Figura 1) donde, se trabaja con dos líneas de 16 caracteres cada una [1] (Tabla 1) . Figura 1. LCD 2X16 tipo HD44780. 47 Tabla 1. Comandos de control para LCD en C. El bus de datos es de 8 bits, aunque también existe la posibilidad de trabajar con 4 bits (con un menor número de caracteres). El compilador C incluye un fichero (driver) que permite trabajar con un LCD. El archivo LCD.C y debe llamarse como un #include. Este archivo dispone de varias funciones definidas, como por ejemplo: Lcd_int();Es la primera función que debe ser Borra el LCD y lo configura en el formato de 4 bits, con dos líneas y con caracteres de 5x8 puntos, en modo encendido, cursor apagado y sin parpadeo. Configura el LCD con un auto incremento del puntero de direcciones y sin desplazamiento del display real. llamada. Indica la posición de acceso al LCD. Por ejemplo (1,1) indica la primera posición de la primera línea. Lcd_getc (byte x, byte y); Lee el carácter de la posición (x,y) S es una variable de tipo Char. Esta función escribe la variable en la posición correspondiente. Si además se indica: Lcd_putc(char s); \f se limpia el LCD. \n el cursor se va a la posición (1,2). \b el cursor retrocede una posición. El compilador de C ofrece una función más versátil para trabajar con el LCD: String es una cadena o array de caracteres, valueses una lista de variables separada por comas y fnamees una función. El formato es %ntdonde n es opcional y puede ser: 1-9: para especificar cuantos caracteres se deben especificar. 01-09: para indicar la cantidad de ceros a la izquierda. 1.1-9.9: para coma flotante. t puede indicar: Lcd_gotoxy(byte x, byte y); Printf (string) Prinf(cstring, values…) Printf(fname, cstring,values…) c carácter. s cadena de carácter. u Entero sin signo. d Entero con signo. Lu Entero largo sin signo. Ld Entero largo con signo. x Entero hexadecimal (minúsculas). X Entero hexadecimal (mayúsculas). Lx Entero largo hexadecimal (minúsculas). LX Entero largo hexadecimal (minúsculas). f Flotante con truncado. g Flotante con redondeo. e Flotante en formato exponencial. w Entero sin signo con decimales insertados. La 1º cifra indica el total, la 2º el número de decimales. El driver LCD.C está pensado para trabajar con el PORTD o el PORTB. Por defecto, utiliza el PORTD a menos que le indiquemos lo contrario mediante. #define use_portb_lcd TRUE Por defecto este driver usa siete terminales para la comunicación entre el LCD y el PIC. 48 Teclado (keypad). Las entradas a través de interruptores son muy habituales en los sistemas con microcontroladores para trabajar con una mayor información o información alfanumérica (Figura 2). Figura 2. Teclado matricial 4X4 El teclado 4x4 se utiliza para introducir los datos numéricos en el microcontrolador. Consiste en 16 botones organizados en forma de matriz en cuatro filas y cuatro columnas. El teclado se utiliza de la siguiente manera. 1. Cuatro pines del microcontrolador se debe configurar como salidas, mientras que los otros cuatro pines se deben configurar como entradas. Para que el teclado funcione apropiadamente, las resistencias del pulldown se deben conectar a los pines de entrada del microcontrolador. Así se define el estado lógico sin pulsar ningún botón (Figura 3) Figura 3. Esquema de conexión del teclado 4x4. 2. Los pines de salida están en uno lógico (1), mientras que se lee el estado lógico de los pines de entrada. Al pulsar un botón, un uno lógico aparece en algún pin de entrada. 3. Al combinar unos y ceros en los pines de salida se define cual botón fue pulsado. 49 El compilador de C incluye el driver KBD.C para manejar el teclado. Las funciones que se incorporan son las siguientes (Tabla 2): Tabla 2. Instrucciones para manejo de teclado matricial 4X4 en C. Kbd_init() Kbd_getc() Inicializa el sistema, debe ser la primera función en el programa. Devuelve el valor de la tecla pulsada en función de la tabla que tiene programada. (Figura3). A través de la modificación de esta tabla podemos adecuar el resultado del programa en distintas carátulas del teclado. Figura 4. Definición de teclas el archivo KBD.C El archivo KBD.C está pensado para trabajar con el PORTB o el PORTD. Activando o no la línea #define use.portb_lcd TRUE podemos seleccionar el PORTB. Se puede trabajar con el LCD y el teclado a través de puertos separados o compartiendo el mismo puerto. EQUIPO Y MATERIALES. • • • • • • PC. Programador de PICS. PIC 16F877A configurado para trabajar. Resistencias de 330 Ohms. Un LCD de 2x16. Un teclado matricial de 4x4. PRERREQUISITOS. El alumno debe acudir al laboratorio de programación avanzada contando con el PIC16F877A acondicionado para su uso, así como debidamente conectado para su interacción con el teclado matricial 4x4 y la pantalla LCD. METODOLOGÍA. El alumno debe desarrollar el programa que permita establecer como elemento de entrada de datos al teclado matricial, y como elemento de salida se muestre la información deseada en el Display, teniendo como interfaz de comunicación al PIC16F778A (Figura 5). 50 Figura 5. Ejemplo. Conexión entre PIC16F877A, Pantalla LCD y Teclado matricial. EVALUACIÓN DE LA PRÁCTICA. Conclusiones:_________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________. Observaciones:_______________________________________________________________________ _____________________________________________________________________________________ ______________________________________________________________________. BIBLIOGRAFÍA: [1]García Breijo Eduardo. Compilador C CCS y simulador PROTEUS para micro controladores PIC. Editorial Alfa Omega. 51 Figura Anexa (E) Diagrama de flujo propuesto para la programación. Inicio /*Declaración de librerías #include<PIC en uso.h>*/ #include<16F877A.h> #fuse XT, NOWDT, NOPROTECT #Use delay(clock=4000000) /*Declaración de variables globales. En caso de que el programador lo desee*/ #byte porta= 0x05 #byte portb= 0x06 /*Declaración de la función principal */ Voidmain() { /*Declaración de variables locales. En caso de que se requiera su uso*/ /*Se verifica la acción a ejecutar y se determina el código más adecuado para el programador: If, Else, For ,etc … */ Set_tris_a(0x1F); Set_tris_b(0x00); While (1) { Output_b(input_a());//salida del puerto } /*Se finaliza la ejecución de la función principal*/ } Fin 52 Nombre de la Asignatura LABORATORIO DE PROGRAMACIÓN AVANZADA Nombre de la Práctica TRANSMISIÓN/RECEPCIÓN DE DATOS VIA UN MÓDULO DE COMUNICACIÓN XBee. Número de Práctica 7 Duración (Horas) 2 OBJETIVO (Resultado del aprendizaje) El alumno implementará un programa para establecer una comunicación inalámbrica (empleando antenas XBee) entre dos PIC16F877 acondicionados a una pantalla LCD de 2x16 para mostrar los datos recibidos y un teclado matricial de 4X4 como elemento de entrada. MARCO TEÓRICO. Introducción. Los módulos XBee/XBee-PRO fueron diseñados para operar dentro del protocolo ZigBee soportando las necesidades particulares de las redes de sensores de bajo costo y consumo, requiriendo alimentación mínima y a la vez permitiendo el transporte confiable de datos entre dispositivos remotos. El módulo opera dentro de la banda ISM (Industrial, Scientific and Medical) utilizando una frecuencia de 2.4 GHz. Los requerimientos mínimos de conexión (Tabla 1) consisten en proveer alimentación mediante dos terminales (VCC y GND) y dos terminales de datos (Vin y Vout). Para la actualización de firmwares es necesario agregar las conexiones de los pines RTS y DTR. Los módulos XBee fueron diseñados para ser montados en un zócalo, no requiriendo ningún soldado. Para ello disponen dos hileras de 10 pines separadas entre ellas por 22 mm (Figura 1). Figura 1.Vista inferior y superior de móduloXBee. 53 Tabla 1. Detalles técnicos del móduloXBee. Circuito básico para el XBee. La Figura 2 muestra las conexiones mínimas que necesita el módulo Xbee para poder ser utilizado. Luego de esto, se debe configurar según el modo de operación que se desea para la aplicación requerida por el usuario. Figura 2. Conexiones mínimas requeridas para el móduloXBee. El módulo requiere una alimentación desde 2.8 a 3.4 V, la conexión a tierra y las líneas de transmisión de datos por medio del UART (TXD y RXD) para comunicarse con un micro controlador, o directamente a un puerto serial utilizando algún convertidor adecuado para los niveles de voltaje. 54 Configuración del módulo XBee. Modo Transparente En este modo todo lo que ingresa por el pin 3 (Data in), es guardado en el buffer de entrada y luego transmitido y todo lo que ingresa como paquete RF, es guardado en el buffer de salida y luego enviado por el pin 2 (Data out). El modo Transparente viene por defecto en los módulos Xbee. Este modo está destinado principalmente a la comunicación punto a punto, donde no es necesario ningún tipo de control. También se usa para reemplazar alguna conexión serial por cable, ya que es la configuración más sencilla posible y no requiere una mayor configuración. En este modo, la información es recibida por el pin 3 del módulo Xbee, y guardada en el buffer de entrada. Dependiendo de cómo se configure el comando RO, se puede transmitir la información apenas llegue un carácter (RO=0) o después de un tiempo dado sin recibir ningún carácter serial por el pin 3. En ese momento, se toma lo que se tenga en el buffer de entrada, se empaqueta, es decir, se integra a un paquete RF, y se transmite. Otra condición que puede cumplirse para la transmisión es cuando el buffer de entrada se llena, esto es, más de 100 bytes de información (Figura3). Figura 3.Correspondencia de buffer. Cable Virtual I/O Se utilizan para crear un canal de comunicación de manera transparente entre los pines de un módulo y otro. Cada pin de entrada tiene su propio pin de salida ya definido entre nodos, esto permite una forma totalmente simple de enviar información, controlar o medir de manera sencilla y rápida, sin necesidad de complicadas configuraciones. Figura 4. El esquemático de los pines. 55 El envío es transparente para el usuario, ya que el paquete recibido, puede o no ser entregado por el pin DOUT (pin 3), lo que permite utilizar ese pin para el envío de otro tipo de información e incluso seguir recibiendo desde otros módulos. Para crear un cable virtual, se debe notar que los pines de entrada/salida o I/O, están asociados entre sí, es decir, vienen en pares. Por esto, sólo se pueden crear cables entre estos pares de pines de distintos módulos (Tabla 2). Cabe mencionar que DIO8 (ni DO8 ni DI8, pines 4 y 9 respectivamente) no puede usarse como cable virtual. Tabla 2.Comandos para Cable Virtual. Nombre PIN Dn (Con n entre 0 y 8) Pn (con n entre 0 y 1) Configuración I/O Valor 0 1 2 3 4 5 0 1 2 IR 0x0-0xFFFF (x 1 ms) IT 0x0-0xFF IA 0x0-0xFFFFFFFFFFFFFFFF UI 0 1 Descripción Deshabilitado. ADC(excepto 7 y 8) Entrada Digital Salida Digital ‘L’ (Low) Salida Digital ‘H’ (High) Deshabilitado RSSI PWM Ajusta la tasa de muestreo de los conversores ADC y digitales DIO. Sin IR= 0x0A (10 en decimal), entonces la tasa será de 10ms o 100Hz Número de muestras que gurda en buffer antes enviarlas. Buffer del módulo es cercano a 93 bytes de datos de muestra. Como los conversores son de 10 bit, cada muestra tiene 2 bytes, por lo que deja un máximo de 46 muestras (IT=0x2C) para el tamaño del buffer. Indica la dirección del módulo al cual se le aceptarán los paquetes para cambiar las salidas I/O. Acepta direcciones de 16 y 64 bit. Si IA=0xFFFFFFFFFFFFFFFF no sé aceptaran paquetes de ningún módulo. Ésta es la configuración por defecto. Si IA=0xFFFF se aceptarán cambios de cualquiera de los paquetes. Este comando habilita o no la salida por UART de los paquetes recibidos. Deshabilitado. Habilitado. 56 Para su uso se debe escribir AT, más el comando y luego el valor que se desea asignar. Por ejemplo si se quiere configurar el pin 19 como convertidor analógico, se debe ingresar ATD12, donde D1 indica el convertidor AD1 ubicado en el pin 19, y el 2 indica que se utilizará como convertidor analógico según la tabla anterior. Montaje La XBee Break out Board es una placa necesaria para adaptar los pines de 2 mm de separación del módulo XBee a los 2.5 mm de separación del protoboard. Se deben montar los zócalos y las tiras de pines correspondientes a los puntos de conexión de esta placa. Direccionamiento de los módulos. Los módulos permiten 2 tipos de direccionamiento. La de 16 bit y la de 64 bits. La principal diferencia es que en la de 64 bit, es posible obtener una mayor cantidad de direcciones y por lo tanto, una mayor cantidad de nodos o equipos funcionando en la misma red. Son a través de estas direcciones que los módulos se comunican entre sí. 1. Direccionamiento de 16 bit. El comando MY, define un número de 16 bit como dirección del módulo dentro de la red. El rango se encuentra entre 0x0 y 0xFFFE (la dirección 0xFFFF y 0xFFFE son para habilitar la dirección de 64-bit, por lo que si se desea utilizar direccionamiento de 16 bits, estos valores no deben ser usados). Para definirla se ingresa ATMY y el número en formato hexadecimal, pero sin el 0x. El comando DL, permite definir un número de 16 bit como dirección del módulo de destino dentro de la red al cual se va a realizar la comunicación. El rango debe estar entre 0x0 y 0xFFFE(las direcciones 0xFFFE y 0xFFFF se utilizan para direccionamiento de 64 bits). Así para habilitar el direccionamiento de 16 bit, se debe utilizar una dirección menor a 0xFFFEcon el comando MY, de igual modo para DL y se debe dejar en cero el comando DH=0 (ATDH0). No se permite usar la dirección 0xFFFE ni 0xFFFE para el direccionamiento de 16. 2. Direccionamiento de 64 bits El número 0xFFFF y 0xFFFE del comando MY, se usa cuando se desea desactivar el direccionamiento de 16 bit, y se habilita el uso de la dirección de 64 bit. Con este direccionamiento ya no es posible definir la dirección de origen del módulo, ya que ésta se asigna automáticamente. En este caso, la dirección del módulo corresponde a su número serial, que viene de fábrica y el cual es imposible de cambiar. Este número se encuentra guardado en dos variables de 32 bit cada una (SL y SH) y es único. SL lee los 32 bit menos significativos del número serial y SH los 32 más significativos. Cuando se utiliza direccionamiento de 64 bit, para asignar una dirección de destino, se utilizan los comandos DL y DH. Éstos son de 32 bit cada uno (para el direccionamiento de 16 bit, DL se maneja como uno de 16, mientras que DH se mantiene en cero) y juntos (DL+DH) forman el número de 64 bit que debe corresponder con el número serial de otro módulo formado por SL+SH. Así para algún dato, DL debe ser igual a SL y DH debe ser igual a SH, donde SL+SH corresponden al número serial de un módulo destino configurado para direccionamiento de 64 bits. Para el direccionamiento de 64 bit, se debe dejar MY como 0xFFFF (ATMYFFFF) o 0xFFFE (ATMYFFFE) y elegir una dirección de destino usando DL+DH, que debe corresponder a una dirección de 64 bit de otro módulo, indicando su número serial dado por SL+SH. Para consultar este número se debe ingresar ATSL (32 bit menos significativos) y luego ATSH (32 bit más significativos), entregando como respuesta los números seriales en formato hexadecimal. 57 Software X-CTU. X-CTU, permite configurar al módulo XBEE de manera natural, fácil y rápida. Figura 5. Opción “PCsetting”. En la pestaña llamada PC Settings(Figura 5) es posible configurar el número y la velocidad del puerto serial, así como la paridad, entre otras cosas. Además permite configurar opciones más generales para los comandos AT, como el signo elegido para salir del modo de comandos, que por defecto corresponde al signo + (2B en hexadecimal). 58 Figura 6. Opción “Range Test”. En la pestaña Range Test (Figura 6) es posible enviar una cadena de datos de cualquier tipo para probar el rango de alcance de la señal. Esto genera automáticamente datos y los envía por el módulo, de tal forma que permite verificar cuales datos llegan buenos y cuales no y a partir de esa estadística determinar el rango o alcance de la señal. Figura 7. Opción “Terminal”. En la pestaña de Terminal (Figura 7), todo lo escrito aquí, entra directamente al módulo como si estuviera en el modo de comandos. Figura 8. Opción “Modem Configuration”. Esta pestaña de MODEM Configuration (Figura 8), permite leer, guardar o cargar cierta configuración predeterminada. Permite ver cómo está configurado cada módem, cambiar alguna característica o luego guardarla o cargarla de una previamente guardada. Usando Hyperterminal Para abrir el Hyperterminal ingresar en Windows a Inicio->Programas->Accesorios->Comunicaciones. Crear una nueva conexión utilizando el puerto al cual se encuentra el módulo. En este ejemplo el puerto es el COM31. Se elige la configuración básica de 9600 baudios 8N1 y sin Control de Flujo. Antes de iniciar la conexión se recomienda ingresar a Archivos->Propiedades. En la ventana emergente elegir la pestaña Settings y presionar el botón ASCII Setup. Activar las casillas “Echo typed characters locally” (permite ver lo que se envía por el puerto) y “Append line feeds to in comming line end” (agrega fin de línea a los mensajes entrantes). Lo anterior evita que se sobrescriban 59 los comandos AT que se envían con las respuestas del módem (Figura 9). Figura 9. Configuración hyperterminal Figura 10. Comando AT por hyperterminal. Se parte con el signo +++ que indica el ingreso al modo de comandos (Figura 10). El Hyperterminal llamado Xbee Explorer 2, será el que posea el ECHO en sus conectores. El comando SL y SH entregarán el número serial de 64 bit de cada módem. Este número servirá para diferenciarlos entre ellos en caso de cualquier error en la configuración, ya que este no se puede modificar. El comando BD=3, indica que la comunicación entre el Host y el módem es de 9600 baudios. El comando CH=0x0C, indica que se elige el canal 12. La PAN ID es ID=0x3332. Tanto BD, CH como ID poseen los valores indicados atrás como valores por defecto. La dirección del módulo 2 quedó como MY=0xBBBB, mientras que la de destino es DL=0xAAAA. Para el módulo 1, lo anterior es al revés. Al final el comando WR graba todos los parámetros en la memoria. Con el comando CN se sale del modo de comandos. La configuración anterior hará que los dos módems se comuniquen entre sí, donde todo lo que entra por el PIN DIN en uno, sale por el DOUT del otro. Luego se cortocircuitan los pines DIN y DOUT del mismo módem para provocar el ECHO. Esto hará que todo lo que se escriba en un módem, se devolverá y aparecerá en la pantalla de vuelta. 60 EQUIPO Y MATERIALES. • Módulo de comunicación XBee. • Zócalo de montaje para XBee. • PIC16F877A • Teclado matricial 4X4. • Pantalla LCD 2X16. PRERREQUISITOS. El alumno debe acudir al laboratorio de Programación Avanzada contando con el PIC16F877A acondicionado eléctricamente para interactuar con el modulo de comunicación XBee, teniendo como interfaz de entrada el teclado matricial 4x4 y como interfaz de salida la pantalla LCD. METODOLOGÍA. El alumno debe diseñare implementar un programa que permita establecer comunicación inalámbrica entre dos módulos XBee(configurados como elemento I/O), empleando como elemento de entrada un teclado matricial 4X4, como elemento de salida una pantalla LCD 2X16 y como elemento de control al PIC16F877A(Figura 5). Figura 5.Diagrama a bloques para transmisión y recepción mediante módulos XBee. EVALUACIÓN DE LA PRÁCTICA. Conclusiones:________________________________________________________________________ _____________________________________________________________________________________ ______________________________________________________________________. Observaciones:_______________________________________________________________________ _____________________________________________________________________________________ ______________________________________________________________________. 61 BIBLIOGRAFÍA: [1]Guía de usuario XBee serie 1: http://www.olimex.cl/pdf/Wireless/ZigBee/XBee-Guia_Usuario.pdf
Report "Manual de Prácticas Programacion Avanzada"