MICROPROCESADORES MICROPROCESADORES Y MICROCONTROLADORES MICROCONTROLADORES INFORME DE PRACTICA DE LABORAT L ABORATORIO ORIO TEMA: PROGRAMACIÓN Y COMPROBACIÓN DE LA COMUNICACIÓN SERIAL DE DOS MICROCONTROLADORES 16F877A NOMBRES:
SEMANATE CLINTON TOALOMBO INTI
FECHA:
LATACUNGA, 18 DE ENERO DEL 2016
NIVEL:
SÉPTIMO MECATRÓNICA
INDICE 1.
OBJETIVOS .................................................................................................................................. 3
3.
INFORMACIÓN BÁSICA SOBRE EL TEMA ........................................................................... 3
4.
PROCEDIMIENTO ..................................................................................................................... 11
5. ANÁLISIS DE RESULTADOS .................................................................................................. 15 6.
CONCLUSIONES . ...................................................................................................................... 15
7.
RECOMENDACIONES ............................................................................................................. 16
8.
BIBLIOGRAFÍA ........................................................................................................................... 16
|2
1. OBJETIVOS 1.1. 1.2. 1.3. 1.4. 1.5.
Operar y Reconocer las características del PIC 16F877A Aprender la distribución de pines del PIC16F877A Realizar la comunicación serial entre dos PIC 16F877A Realizar dos programas para cada PIC para trasmitir y receptar los datos Realizar el montaje de circuitos en el Protoboard para observar la comunicación serial visualizando en dos LCD
2. EQUIPOS QUE SE UTILIZARON 2.1. 2 PIC 16F877A 2.2. 2 LCD 16x2 2.3. 2 Osciladores de 4Mhz 2.4. 4 Potenciometros 2.5. 8 Resistencias de 4.7kΩ 2.6. 1 LM35 2.7. Multímetro 2.8. Cables de conexión 2.9. Programador de PIC 2.10. Fuente de Voltaje 2.11. Computador
3. INFORMACIÓN BÁSICA SOBRE EL TEMA Microcontrolador PIC 16F877A Microcontrolador
Ilustración 1 Microcontroladores estructura Física. [1]
Un microcontrolador es un circuito integrado, que posee la arquitectura de un computador, osea que tiene CPU, Memoria RAM, Memoria EEPROM, Circuitos de entrada y salida, conversores A/D D/A. [1] Además, es programable mediante una tarjeta electrónica llamada PROGRAMADOR, la cual nos ayudara a grabar el código (que hemos realizado previamente y compilado el computador) hacia el integrado (microcontrolador). |3
También hay que tener en cuenta que un Microcontrolador no es un PIC, pero un PIC si es un Microcontrolador, es bueno aclarar este detalle. En la categoría de microcontroladores existen diversas marcas que fabrican estos circuitos i ntegrados, los más reconocidos están Microchip(PIC), Atmel(AVR), Freescale, Parallax, Texas Instruments, entre otros fabricantes. Función de un Microcontrolador Un microcontrolador al ser programable, puede llevar a cabo cualquier tarea para la cual haya sido programado, desde un simple oscilador digital hasta un complejo sistema digital programable. [1] PIC Un microcontrolador PIC (Interfaz de Control de Periféricos), son fabricados por la empresa MICROCHIP Techology, esta empresa ocupa el primer lugar en ventas de microcontroladores de 8 bits. [1]
Uno de los microcontroladores más populares de todos los tiempos ha sido el legendario PIC16F84, pero en la actualidad es el PIC16F628A, este microcontrolador soporta hasta 100.000 ciclos de escritura en su memoria flash, y 1'000.000 de ciclos en su memoria EEPROM y se puede reescribir un sin número de veces. Nota: hay que tener en cuenta que los microcontroladores PIC tienen tecnología CMOS, esto quiere decir que consume muy poca corriente, pero a la vez es susceptible a daños por estática, se recomienda utilizar pinzas para manipular y así poder transportar desde el grabador al protoboard o viceversa, o a su vez utilizar una pulsera anti estática. En este proyecto se utilizó el PIC 16F877. Este microcontrolador es fabricado por MicroChip familia a la cual se le denomina PIC. El modelo 16F877 posee varias características que hacen a este microcontrolador un dispositivo muy versátil, eficiente y práctico para ser empleado en la aplicación que posteriormente será detallada. Algunas de estas características se muestran a continuación:
Soporta modo de comunicación serial, posee dos pines para ello. Amplia memoria para datos y programa. Memoria reprogramable: La memoria en este PIC es la que se denomina FLASH; este tipo de memoria se puede borrar electrónicamente (esto corresponde a la "F" en el modelo). Set de instrucciones reducido (tipo RISC), pero con las instrucciones necesarias para facilitar su manejo.
Características Principales del PIC 16F877A
|4
Ilustración 2 Distribución de Pines del PI C 16F877A
En siguiente tabla de pueden observar las características más relevantes del dispositivo [2] : CARACTERÍSTICAS
Frecuencia máxima
16F877
DX-20MHz
Memoria de programa flash palabra de 14 bits
8KB
Posiciones RAM de datos
368
Posiciones EEPROM de datos
256
Puertos E/S
A,B,C,D,E
Número de pines
40
Interrupciones
14
Timers
3
Módulos CCP
2
Comunicaciones Serie Comunicaciones paralelo Líneas de entrada de CAD de 10 bits Juego de instrucciones Longitud de la instrucción Arquitectura CPU
MSSP, USART PSP 8 35 Instrucciones 14 bits Harvard Risc
Canales Pwm
2
Pila Harware
-
Ejecución En 1 Ciclo Máquina
Descripción de los puertos [2]: Puerto A: |5
Puerto de e/s de 6 pines RA0 è RA0 y AN0 RA1 è RA1 y AN1 RA2 è RA2, AN2 y VrefRA3 è RA3, AN3 y Vref+ RA4 è RA4 (Salida en colector abierto) y T0CKI(Entrada de reloj del modulo Timer0) RA5 è RA5, AN4 y SS (Selección esclavo para el puerto serie síncrono)
Puerto B:
Puerto e/s 8 pines Resistencias pull-up programables RB0 è Interrupción externa RB4-7 èInterrupcion por cambio de flanco RB5-RB7 y RB3 è programacion y debugger in circuit
Puerto C: Puerto e/s de 8 pines
RC0 è RC0, T1OSO (Timer1 salida oscilador) y T1CKI (Entrada de reloj del módulo Timer1). RC1-RC2 è PWM/COMP/CAPT RC1 è T1OSI (entrada osc timer1) RC3-4 è IIC RC3-5 è SPI RC6-7 è USART
Puerto D:
Puerto e/s de 8 pines Bus de datos en PPS (Puerto paralelo esclavo) Puerto E: Puerto de e/s de 3 pines RE0 è RE0 y AN5 y Read de PPS RE1 è RE1 y AN6 y Write de PPS RE2 è RE2 y AN7 y CS de PPS
Dispositivos periféricos [2]:
Timer0: Temporizador-contador de 8 bits con preescaler de 8 bits Timer1: Temporizador-contador de 16 bits con preescaler que puede incrementarse en modo sleep de forma externa por un cristal/clock. Timer2: Temporizador-contador de 8 bits con preescaler y postescaler. Dos módulos de Captura, Comparación, PWM (Modulación de Anchura de Impulsos). Conversor A/D de 1 0 bits. Puerto Serie Síncrono Master (MSSP) con SPI e I2C (Master/Slave). USART/SCI (Universal Syncheronus Asynchronous Receiver Transmitter) con 9 bit.
APLICACIÓN
|6
El proyecto presentado tendrá como objetivo principal, diseñar un controlador de temperatura usando un microcontrolador. Se parte del hecho de que para realizar el control, hay que sensar la variable de proceso en primer lugar, posteriormente se debe enviar las señales e instrucciones respectivas al elemento de control (microcontrolador) para que este actué en consecuencias realizando la acción de control. Se tiene como elemento principal un microcontrolador PIC16F877, el cual recibirá a través de pulsadores, el valor de Setpoint que desee el usuario. Se utilizará una pantalla de LCD, donde se visualizarán los valores de Setpoint. El manejo de dicha pantalla se realizará a través de los puertos de salida del microcontrolador. Software Los softwares que utilizaremos son los siguientes: PIC C copiler PIC C Compiler es un inteligente y muy optimizado compilador C que contienen operadores estándar del lenguaje C y funciones incorporados en bibliotecas que son específicas a los registros de PIC, proporcionando a los desarrolladores una herramienta poderosa para el acceso al hardware las funciones del dispositivo desde el nivel de lenguaje C. [3] El compilador CCS contiene más de 307 funciones integradas que simplifiquen el acceso al hardware, mientras que la producción eficiente y altamente optimizado código. Se incluyen funciones de hardware del dispositivo de características tales como:
Temporizadores y módulos PWM Convertidores A / D de datos on-chip EEPROM LCD controladores Memoria externa buses
Ilustración 3 Ventana del Programa PIC C copiler para escribir el Código. [3]
|7
Proteus Proteus es una compilación de programas de diseño y simulación electrónica, desarrollado por Labcenter Electronics que consta de los dos programas principales: Ares e Isis, y los módulos VSM y Electra. [4] Isis El Programa ISIS, Intelligent Schematic Input System (Sistema de Enrutado de Esquemas Inteligente) permite diseñar el plano eléctrico del circuito que se desea realizar con componentes muy variados, desde simples resistencias, hasta alguno que otro microprocesador o microcontrolador, incluyendo fuentes de alimentación, generadores de señales y muchos otros componentes con prestaciones diferentes. [4] Es una herramienta indispensable para la simulación de circuitos electrónicos ya que evita quemar el microcontrolador y armar el circuito en el protoboard. [5]
Ilustración 4 Ventana del Programa Isis Profesional-Proteus para simular. [5]
LCD 16x2
Ilustración 5 LCD 16x2. [6]
|8
El LCD (Liquid Crystal Dysplay) o pantalla de cristal líquido es un dispositivo empleado para la visualización de contenidos o información de una forma gráfica, mediante caracteres, símbolos o pequeños dibujos dependiendo del modelo. Está gobernado por un microcontrolador el cual dirige todo su funcionamiento. [7] En este caso vamos a emplear un LCD de 16x2, esto quiere decir que dispone de 2 filas de 16 caracteres cada una. Los píxeles de cada símbolo o carácter, varían en función de cada modelo. Características principales:
Pantalla de caracteres ASCII, además de los caracteres Kanji y Griegos. Desplazamiento de los caracteres hacia la izquierda o la derecha. Proporciona la dirección de la posición absoluta o relativa del carácter. Memoria de 40 caracteres por línea de pantalla. Movimiento del cursor y cambio de su aspecto. Permite que el usuario pueda programar 8 caracteres. Conexión a un procesador usando un interfaz de 4 u 8 bits [8]
Conexión: En la siguiente imagen de Proteus se puede observar la estructura de sus pines. Lo podemos dividir en los Pines de alimentación, pines de control y los pines del bus de datos bidireccional. Por lo general podemos encontrar además en su estructura los pines de Ánodo de led backlight y cátodo de led backlight. [9]
Ilustración 6 LCD 16x2 en proteus. [9]
Tabla 1. Pines de Distribución
|9
Comunicación Serial
Ilustración 7 Comunicación Serial entre Dos PIC [10]
La comunicación serial es un protocolo muy común (no hay que confundirlo con el Bus Serial de Comunicación, o USB) para comunicación entre dispositivos que se incluye de manera estándar en prácticamente cualquier computadora. La mayoría de las computadoras incluyen dos puertos seriales RS-232. La comunicación serial es también un protocolo común utilizado por varios dispositivos para instrumentación; existen varios dispositivos compatibles con GPIB que incluyen un puerto RS-232. Además, la comunicación serial puede ser utilizada para adquisición de datos si se usa en conjunto con un dispositivo remoto de muestreo. [11] El concepto de comunicación serial es sencillo. El puerto serial envía y recibe bytes de información un bit a la vez. Aun y cuando esto es más lento que la comunicación en paralelo, que permite la transmisión de un byte completo por vez, este método de comunicación es más sencillo y puede alcanzar mayores distancias. Por ejemplo, la especificación IEEE 488 para la comunicación en paralelo determina que el largo del cable para el equipo no puede ser mayor a 20 metros, con no más de 2 metros entre cualesquier dos dispositivos; por el otro lado, utilizando comunicación serial el largo del cable puede llegar a los 1200 metros. [11] RS-232 RS-232 (Estándar ANSI/EIA-232) es el conector serial hallado en las PCs IBM y compatibles. Es utilizado para una gran variedad de propósitos, como conectar un ratón, impresora o modem, así como instrumentación industrial. Gracias a las mejoras que se han ido desarrollando en las líneas de transmisión y en los cables, existen aplicaciones en las que se aumenta el desempeño de RS-232 en lo que respecta a la distancia y velocidad del estándar. RS-232 está limitado a comunicaciones de punto a punto entre los dispositivos y el puerto serial de la computadora. El hardware de RS-232 se puede utilizar para comunicaciones seriales en distancias de hasta 50 pies. [11] Handshaking (o intercambio de pulsos de sincronización) El método de comunicación usado por RS-232 requiere de una conexión muy simple, utilizando sólo tres líneas: Tx, Rx, y GND. Sin embargo, para que los datos puedan ser transmitidos correctamente ambos extremos deben estar sincronizados a la misma velocidad. Aun y cuando este método es más que suficiente para la mayoría de las aplicaciones, es limitado en su respuesta a posibles problemas que puedan surgir durante la comunicación; por ejemplo, si el receptor se comienza a sobrecargar de información. Es en estos casos cuando el intercambio de pulsos de sincronización, o handshaking, es útil. En esta sección se describirán brevemente las tres formas más po pulares de handshaking con RS232: handshaking for software, handshaking por hardware, y XModem. [11] | 10
4. PROCEDIMIENTO 4.1. Previo a comprobar su funcionamiento de forma real se realiza la programación para el PIC en nuestro caso el microcontrolador 16F877A, los diferentes programas se realizan con ayuda del compilador para lenguaje C. a) Programa del PIC número 1- En este Pic se lee el dato del LM35 que va a tra nsmitir al Pic 2, al mismo tiempo recibirá el dato de voltaje leído por el Pic 2 CODIGO: #include <16F877A.h> #fuses XT, NOWDT #device ADC=10 #use delay (clock=4M) #include #use rs232(baud=9600,bits=9,xmit=pin_c6,rcv=pin_c7) int Dato; //Dato a transmitir int16 Temp; //leer el valor del conversor float v; #int_RDA void RDA_isr(){ Dato=getc(); }
//Interrupción por recepción de datos //En "valor" el dato recibido via RS232
void main(){ enable_interrupts(INT_RDA); //Habilitación interrupción por recepción RS232 enable_interrupts(GLOBAL); // Activar el adc setup_adc_ports(0); setup_adc(adc_clock_internal); lcd_init(); while(true){ set_adc_channel(0); Temp=read_adc(); v=((5.0*Dato)/1023.0); putc(Temp);//Envia este dato al PIC2 lcd_gotoxy(1,1); printf(lcd_putc,"Voltaje Recibido"); lcd_gotoxy(1,2); printf(lcd_putc,"PIC#2: %1.2f (V)",v); delay_ms(200); printf(lcd_putc,"\f"); } | 11
} b) Programa del PIC número 2- En este Pic se lee el dato de Voltaje del limitado por el Potenciómetro que va a transmitir al Pic 1, al mismo tiempo recibirá el dato de temperatura leído por el Pic 1 CODIGO #include <16F877A.h> #fuses XT, NOWDT #device ADC=10 #use delay (clock=4M) #include #use rs232(baud=9600,bits=9,xmit=pin_c6,rcv=pin_c7) int16 Dato; //Dato a transmitir int16 Voltaje; //leer el valor del conversor float t; #int_RDA //Interrupción por recepción de datos void RDA_isr(){ Dato=getc(); //En "valor" el dato recibido via RS232 } void main(){ enable_interrupts(INT_RDA); //Habilitación interrupción por recepción RS232 enable_interrupts(GLOBAL); // Activar el adc setup_adc_ports(0); setup_adc(adc_clock_internal); lcd_init(); while(true){ set_adc_channel(0); Voltaje=read_adc(); t=((500.0*Dato)/1023.0); putc(Voltaje);//Envia este dato al PIC1 lcd_gotoxy(1,1); printf(lcd_putc,"Temperatura Recibida:"); lcd_gotoxy(1,2); printf(lcd_putc,"PIC#1: %1.2f (C)",t); delay_ms(200); printf(lcd_putc,"\f"); } }
| 12
4.2. Compilar cada uno de los programas del paso 4.1 y verificar que no existan errores de sintaxis y de programación.
4.3. Simular el circuito con ayuda del software Proteus, cargar el programa y verificar el funcionamiento de forma visual.
4.4. Ubicar el PIC en el programador y verificar que este correctamente colocado.
| 13
4.5. Esperar que el microcontrolador 16F877A sea identificado.
4.6. Una vez reconocido el PIC, se procede a borrar cualquier programa que haya estado en PIC anteriormente. 4.7. Una vez verificado el correcto funcionamiento del programa, se procede a cargar el programa .hex al PIC y se programa en el PIC el código.
4.8. Realizar las conexiones pertinentes de forma real en el protoboard, importante tomar en cuenta las polarizaciones del PIC.
| 14
4.9. Alimentar el circuito con 5 voltios de corriente continua 4.10. Observar y anotar los resultados para el posterior análisis.
5. ANÁLISIS DE RESULTADOS 5.1. Es necesario realizar la comprobación del programa con ayuda de un compilador para lenguaje C y simular de manera visual el circuito esto se los puede realizar con el simulador proteus, se realiza esto para evitar cometer errores en la implementación real del circuito en el protoboard. 5.2. Para cargar el programa en el PIC 16F877A es necesario utilizar un software para el efecto en este caso el Software K150 que es instalado en una máquina virtual, se debe asegurar a demás que al momento de ubicar el PIC en el programador esté seguro ,y borrar cualquier programa que haya estado grabado en la memoria del PIC con el fin de cargar el nuevo programa ,siempre elegir el programa con la extensión .hex. 5.3. Cuando se realiza el código es obligatorio asignar fuses, y se debe configurar los puertos A y B como entradas o salidas, según la conveniencia del programador, indispensable establecer la frecuencia del oscilador interno del PIC ya que sin este no será posible el funcionamiento del PIC. 5.4. Una vez montado el circuito en el protoboard se pudo comprobar el correcto funcionamiento del PIC 16F877A y su comunicación serial, se trabajó con una alimentación de 5Vcc.
6. CONCLUSIONES 6.1. El PIC utilizado en la práctica se puede programar y reprogramar (escribir y borrar) muchas veces, siempre que se lo utiliza de forma correcta, el fabricante especifica el número máximo de escritura y borrado. 6.2. La comunicación serial necesitan la librería #int_RDA y #uses rs232 necesarias para su compilación correcta y se debe establecer una frecuencia del oscilador. 6.3. La parte visual se lo comprueba en el simulador proteus pero no siempre funciona tal cual una vez que se monta el circuito de forma física, porque se debe tomar en cuenta muchos parámetros que el simulador ya lo hace por default como por ejemplo la polarización. | 15
7. RECOMENDACIONES 7.1. Es recomendable alimentar el PIC con un voltaje no mayor a Voltios de corriente continua para obtener un funcionamiento óptimo del PIC. 7.2. Tomar en cuenta todos los parámetros tales como la polarización que el en simulador Poteus no lo considera. 7.3. Se recomienda borrar cualquier programa que haya estado grabado en el microcontrolador con el fin de guardar el nuevo programa.
8. BIBLIOGRAFÍA Bibliografía [1] M. Angel, «Blogspot,» 10 Diciembre 2014. [En línea]. Available: http://microcontroladoresdev.blogspot.com/2010/12/microcontroladores.html. [Último acceso: 10 11 2015]. [2] D. Herrera, «Monografías,» 08 06 2015. [En línea]. Available: http://www.monografias.com/trabajos18/descripcion-pic/descripcionpic.shtml#ixzz3xcMJGsmr. [3] Electrox, «Electrox,» 24 05 2008. [En línea]. Available: https://sites.google.com/site/ielectrox/home/programas-1/pic-c-compiler. [Último acceso: 10 11 2015]. [4] Wikipedia, «Wikipedia,» [En línea]. Available: https://es.wikipedia.org/wiki/Proteus_(electr%C3%B3nica). [Último acceso: 10 11 2015]. [5] EPN, «Biblioteca Digital,» [En línea]. Available: http://bibdigital.epn.edu.ec/bitstream/15000/2207/1/CD-1982.pdf. [Último acceso: 10 11 2015]. [6] E. Experimental, «Gravitech,» 06 11 2014. [En línea]. Available: http://www.gravitech.us/16chbllcdwib.html. [7] Anónimo, «Wikipedia,» 18 11 2015. [En línea]. Available: https://es.wikipedia.org/wiki/Pantalla_de_cristal_l%C3%ADquido#Especificaciones. [Último acceso: 15 12 2015]. [8] L. Rosero, «Scribd,» 05 09 2013. [En línea]. Available: https://es.scribd.com/doc/44252680/LCD-16X2. [Último acceso: 16 12 2015]. [9] T. Electrodo, «Blogspot,» 10 02 2013. [En línea]. Available: http://todoelectrodo.blogspot.com/2013/02/lcd-16x2.html. [Último acceso: 15 12 2015]. [10] RobotyPIC. [En línea]. Available: http://robotypic.blogspot.com/2011/03/comunicacion-rs232entre-dos-pic.html. [Último acceso: 18 01 2016].
| 16
[11] N. Instrument. [En línea]. Available: http://digital.ni.com/public.nsf/allkb/039001258CEF8FB686256E0F005888D1. [Último acceso: 18 01 2016].
| 17