UNIVERSIDAD NACIONAL AUTÓNOMA . DE MÉXICO FACULTAD DE INGENIERÍA INTRODUCCION A MICROCONTROLADORES PIC CON C Diseñadores Gerardo Ramos Vásquez Juan Francisco Hernández Medina Carlos Ignacio García Sánchez Presentación. Este curso tiene como propósito difundir el uso de las tecnologías asociadas a los micros controladores para crear materiales de apoyo a los alumnos que les permita tener un mejor desarrollo en sus clases y entender mejor el concepto desde un enfoque teórico práctico. Con una herramienta “micro controladores” que es de uso cotidiano en dispositivos electrónicos digitales actuales (hornos de microondas, relojes, alarmas de incendios, de automóviles, cerraduras electrónicas, etc.). Actividades. El curso está formado en tres partes, la primera es una introducción en la que a los asistentes se les motiva al estudio de la teoría básica necesaria para entender el funcionamiento y programación de los micros controladores, así como las aplicaciones actuales de estos dispositivos. La segunda parte consta de sesiones donde se exponen los conceptos necesarios para poder emplear de manera correcta los micros controladores. En la tercera y última parte se realizaran sesiones prácticas donde los asistentes ponen a prueba los conocimientos adquiridos en el curso al programar micro controladores para crear aplicaciones. Evaluación. A considerar para el instructor. Materiales Para el instructor: • • • Proyector para computadora Manual Sala de computo Se requiere por equipo o brigada: • • • • • • • • • • • • • • Una PC, con sistema operativo Windows donde se pueda instalar el software para la programación de los micro controladores. Software y manuales necesarios para el curso. PIC16F877A Cable de conexión para puerto serial. Display tipo LCD de 16x2 caracteres. Sensor de temperatura LM35. 8 Resistencias de 680Ω a ¼ de watt. 8 Leds de colores de 5mm. 4 Push botton de dos terminales 4 Resistencias de 10 kΩ a ¼ de watt. Eliminador de baterías de 9V. Circuito Integrado L293D driver de motores. Una tableta tipo Protoboard de las grandes para armar los circuitos. Pinzas de punta y de corte para electrónica. TEMA 1 MICROCONTROLADOR PIC16F877A 1. ¿Qué es un micro controlador? 1.1. Diferencia entre micro controladores y microprocesadores. 1.2. Conceptos importantes 1.3. Condigo fuente 1.4. Ensambladores 1.5. Interpretes 1.6. Compiladores 2. La familia de los PICs 2.1. Porque los PICs se han colocado en el mercado 2.2. Gama baja o básica 2.3. Gama media 2.4. Gama alta 2.5. Gama mejorada 2.6. Los de 8 pines 3. El PIC16f877 3.1. El micro controlador PIC 16F877A 3.2. Recursos 3.3. Diagrama de sus pines 3.4. Descripción de sus pines y puertos 3.5. Organización de la memoria 3.6. Bancos y registros 3.7. Palabra de configuración 3.8. Instrucciones orientadas a bits 3.9. Instrucciones orientadas a constantes y de control 3.10. Instrucciones básicas para el compilador CCS 3.11. Un poco de orden 3.12. El PWM (pulse wide modulation) TEMA 2 PROGRAMACION EN “C” E IMPLEMENTACION DEL PIC16F877 1. El WinPIC800. 2. El bootloader. 3. Estructuras de control con el PIC. 4. Puerto serie para programar y comunicarse con el PIC. 5. Modulo LCD (cristal líquido). 6. Sensor de temperatura. 7. Construcción de un termómetro con el PIC. 8. Control de un motor de pasos con el PIC. 9. Control de un motor de DC (corriente continua con el PIC). 10. Utilización de un “encoder” (contador de pulsos) para mover un motor. 11. Simulación de un control remoto con un diodo infrarrojo a través del PIC. TEMA 1 MICROCONTROLADOR PIC16F877 1¿Qué es un micro controlador? Un microcontrolador es un tipo de computadora en miniatura que puedes encontrar en los pequeños dispositivos electrónicos. Unos ejemplos comunes de aparatos que utilizamos a diario y que en su interior tienen uno 0 varios micro controladores se muestran en la figura siguiente. Si estos dispositivos solo tienen botones y displays, es muy probable que posean un cerebro constituido por un microcontrolador programable. Microcontrolador Dispositivo electrónico que posee todas las características de una PC, claro que en pequeña escala. Pues cuenta con puertos de entrada y salida de información, puertos de comunicación, Unidad aritmética Lógica, memoria interna (RAM y ROM), Y una Unidad Central de Procesos. Microprocesador Este elemento en cambio, solo es un Unidad Central de Procesos, que de manera externa (desde un punto de vista de una PC) hay que conectarle la memoria, puertos y unidades de almacenamiento (por eso se monta en una tarjeta madre para poder utilizarlo), tiene la ventaja de ser mas escalable que un microcontrolador. Algo muy importante cuando se estudia cualquier microcontrolador, es el entender cuál es la diferencia entre código fuente, código objeto, compilador y ensamblador. Código Fuente EI código fuente, es almacenado en el archivo fuente, este archivo está escrito con el American Standar Code for Information Interchange (ASCII) y contiene las sentencias del programa y comentarios (utilizados para que los humanos puedan entender lo que el programa está ejecutando). EI archivo fuente es creado en un editor estándar (como NotePad 0 WordPad) 0 puede ser construido en un editor IDE (ambientes de desarrollo integrado) que posee múltiples aplicaciones que apoyan en el desarrollo de la aplicación. EI archivo fuente es usado como entrada para los ensambladores, interpretes 0 compiladores que producen las instrucciones necesarias para controlar un dispositivo. En el caso de un ensamblador 0 compilador, el código fuente es convertido en un archivo objeto o archivo hex, que finalmente será grabado dentro del microcontrolador que controla el dispositivo. El intérprete es construido dentro del microcontrolador del dispositivo y ejecuta el archivo fuente que es una serie de instrucciones y comandos que determinan inmediatamente salidas a procesos intermedios. El archivo fuente puede incluir otros archivos que proveen que adiciones al código fuente o prototipos para las librerías de funciones o datos requeridos por la aplicación. Los archivos “include” para ensamblar lenguajes de programación generalmente terminan con *.inc que es la extensión con la que terminan los archivos de sistema. Los archivos “include” para el lenguaje de programación C tienen como extensión una *.h los ensambladores y compiladores proveen de estos archivos “include” para hacer las tareas del desarrollo de aplicaciones más sencillas, basándose en los requerimientos de tu aplicación. Al finalizar las operaciones de ensamblar o compilar se produce en un archivo objeto (usualmente terminado en *.obj) o un archivo hex. El archivo hex es la aplicación completa, lista para programarse dentro de un microcontrolador. El archivo objeto está conectado a otros archivos objeto para producir el archivo hex. El más popular de los formatos para archivos hex es el formato Intel 8 bit conocido como INHXM8. Otros ejemplo de un formato diferente utilizado por los microcontroladores y programadores de microcontroladores de Motorola es el llamado *.S9 o *.S19. Ensambladores Al programar en un lenguaje ensamblador se producen los códigos más eficientes en cuanto a tamaño, numero de instrucciones y manejo de recursos del microprocesador. En mi opinión es un lenguaje diseñado por ingenieros electrónicos para ingenieros electrónicos, las muchas críticas que recibe de los ingenieros en computación es el no poder implementar estructuras de control avanzados de manera estructurada. En defensa del ensamblador podemos decir que con dos o tres líneas podemos prender un led, resultado que no alcanzara ningún lenguaje de alto nivel después de ser compilado. Moraleja si el objeto es manejar en su totalidad y de manera eficiente un microprocesador o microcontrolador programar en ensamblador. Si los recursos no son limitados en cuanto a la memoria, pues se puede comprar el dispositivo que soporte las necesidades del lenguaje de alto nivel y además se requiere realizar operaciones aritméticas complejas la mejor opción es programar en un lenguaje de alto nivel. Hay que decir que el lenguaje ensamblador es complicado. A pesar de esto, es el lenguaje más utilizado en los robots prototipo. Los pic tienen un juego reducido de 35 poderosas instrucciones (familia 16Fxxx). Cabe decir que los diferentes tipos de microprocesadores tienen muchas instrucciones parecidas que son muy similares, lo cual hace muy difícil el poder programar diferentes microcontroladores sabiendo utilizar un lenguaje Ensamblador de manera eficiente. Simulador: Cuando tu ya estás viendo fluir tu código en algún simulador, estas en el comienzo de convertirte en un experto desarrollador de lenguaje ensamblador. "Myke Predko" Los inconvenientes de programar en ensamblador son: 1.- EI código no es totalmente portable. (Un código para un micro puede no funcionar en un micro diferente). 2.- Es muy difícil explicar la película que observamos en nuestra cabeza a otro programador. 3.- Es difícil pasar de un lenguaje ensamblador a uno de alto nivel. PRINCIPALMENTE a pesar de los comentarios negativos anteriores, el programar en ensamblador es muy conveniente en los siguientes casos: 1.- Desarrollo de prototipos robóticos sencillos. 2.- Programación de interfaces dedicadas 0 especificas. 3.- Cuando nuestra aplicación tiene mucho contacto con el exterior y el procesamiento no sea complejo. Interpretes Cuando las computadoras estuvieron disponibles, prácticamente en todos los desarrollos en software se utilizo un intérprete (usualmente BASIC) que era automáticamente cargado dentro de las computadoras cuando eran arrancadas par primera vez. Si eres joven esta sentencia te sorprenderá, pues ya conoces la maravilla del sistema operativo que controla tu computadora. Los intérpretes realizaban muchas de las funciones básicas que se consideran normales para los sistemas operativos. La IBM PC cambio esto con la introducción de un simple sistema operativo que podía ejecutar aplicaciones binarias 0 ejecutar constructores con el interprete BASIC. Un intérprete es un programa que corre dentro de la computadora y lee y ejecuta otro programa que no necesita convertir a algún formato específico para la computadora. Esto es solamente una simple interfaz dentro de la computadora. Compiladores Los compiladores trabajan bajo una serie de reglas lógicas simples para convertir sentencias de lenguajes de alto nivel al lenguaje ensamblador. Los modernos compiladores permiten simplificar el código ensamblador, dando como resultado aplicaciones más pequeñas y más eficientes. Si estas· interesado en aprender un lenguaje ensamblador para un procesador especifico, no debes de sorprenderte al descubrir que el código que producen los modernos compiladores son unos excelentes ejemplos para aprenderlo. Par ejemplo los programas en C son convertidos sentencia par sentencia en instrucciones de lenguaje ensamblador (compilado) a partir de este código ensamblador se obtiene el código objeto que finalmente es programado dentro del procesador. La familia de los PICS En la corta vida de los PICs ya ocupan las posiciones de cabeza en el ranking mundial, compartiendo codo a codo con gigantes como Intel y Motorola. En 1990 ocupaban el puesto vigésimo y actualmente son más de 100 millones de PICs los que vende Microchip cada ario, 10 que ha alzado al segundo puesto del ranking mundial. 1.2.1 EI por que los PICS se han colocado en el mercado Los PIC tienen una gran aceptación en la comunidad de técnicos y aficionados que trabajan con microcontroladores. Las características que han provocado esta gran aceptación son: • • • Sencillez de Manejo Buena Información Precio • Buen promedio de parámetros: velocidad, consumo, tamaño, alimentación, código compacto, etc. • Herramientas de desarrollo fáciles y baratas • Diseño rápido • Disponibilidad inmediata • Compatibilidad del software en todos los modelos de la misma gama • Su coste es comparativamente inferior al de los competidores • Poseen una elevada velocidad de funcionamiento • Tienen un juego de instrucciones reducido • Bajo consumo unido a un amplio rango de voltajes de alimentación. •Muchas herramientas se pueden recoger gratuitamente por Internet (www.microchip.com). • Existen una gran variedad de herramientas que permiten grabar, depurar, borrar y comprobar el comportamiento de los PICs. • La gran variedad de modelos de PIC permite elegir el que mejor responde a los requerimientos de la aplicación. 1.2.2 Gama baja 0 básica PIC16C5X Se trata de una serie de PIC de recursos limitados, pero con una de las mejores relaciones coste/presentación. Sus versiones están encapsuladas con 18 y 28 pins y pueden alimentarse a partir de una tensión de 2.5 en el caso de los "LF", 10 que les hace ideales en las aplicaciones que funcionan con pilas. Tienen un repertorio de 33 instrucciones cuyo formato de 12 bits. No admiten ningún tipo de interrupción y la pila s610 dispone de dos niveles. 1.2.3 Gama Media PIC16FXXX Es la gama más variada y completa de los PICs. Abarca modelos con encapsulado desde 18 patitas hasta 68, cubriendo varias opciones que integran abundantes periféricos. Dentro de esta gama se halla el PIC16F877A que es el microcontrolador que vamos a utilizar en el robot. El repertorio de Instrucciones es de 35 a 14 bits cada una y compatible con el de la gama baja. Sus distintos modelos contienen todos los recursos que se precisan en las aplicaciones de los microcontroladores de 8 bits. También dispone de interrupciones y unas Pila (stack) de 8 niveles que permite el anidamiento de subrutinas. 1.2.4 Gama Alta PIC17CXXX con instrucciones de 16 bits Se alcanzan las 58 instrucciones de 16 bits en el repertorio y sus modelos disponen de un sistema de gestión de interrupciones sectorizadas muy potente. También incluyen variados controladores de periféricos, puertas de comunicación serie y paralelo con elementos externos y un multiplicador hardware de gran velocidad. Quizás la característica más destacable de los componentes de esta gama es su arquitectura abierta, que consiste en la posibilidad de ampliación del microcontrolador con elementos externos. Para este fin, las patitas sacan el exterior las líneas de los buses de datos, direcciones y control, a las que se conectan las memorias o controladores de periféricos. Esta filosofía de construcción del sistema es la que se emplea en los microprocesadores y no suele ser práctica habitual cuando se emplean microcontroladores. 1.2.5 Gama Mejorada PIC18FXXX con instrucciones de 16 bits En los inicios del tercer milenio Microchip presentó la gama mejorada de los microcontroladores PIC con la finalidad de soportar las aplicaciones avanzadas en las áreas de automoción, comunicaciones, Ofimática y control industrial. Sus modelos destacaron por su alta velocidad (40 MHz) y su gran rendimiento. 1.2.6 Los de 8 pines PIC12(C) FXXX Se trata de PICs que ha acaparado la atención del mercado. Su principal característica es su reducido tamaño, al disponer un encapsulado de 8 patitas. Se alimenta con un voltaje de corriente continua comprendido entre 2.5 V Y 5.5 V, Y consumen menos de 2 mA cuando trabaja a 5 V Y 4 MHz El formato de sus instrucciones puede ser de 12 o 14 bits y su repertorio es de 33 o 35 instrucciones, según pertenezca a la gama baja o media respectivamente. •• 1.3. El PIC16F877 A 1.3.1 El microcontrolador PIC16F8777 A Este microcontrolador pertenece a la familia PIC 16F87x, son una combinación del PIC16F84 con la inclusión de los recursos de los PIC16C73 y 74. Incorporan la memoria FLASH, con una capacidad de 4k ó 8k (según el modelo), sin cambiar la estructura interna del procesador y conservando el mismo repertorio de instrucciones. 1.3.2 Recursos Tiene una estructura de 4 bancos, seleccionables a través de con los bits RPO y RP1 del registro STATUS. El número de puertos en los PIC16F876 y 873 es de 3 (28 pines) y el número de puertos en los PIC16F877 y 874 es de 5 (40 pines). Características: 1.- Poseen dos módulos CCP (captura, comparación y pwm). 2.- Comunicación Serie (rs232, 12C y SPI) 3.- Comunicación Paralelo 4.- Convertidor AD. Diagrama de pines • Descripción de sus pines y puertos Los microcontroladores PIC16F87X encapsulados con 28 pines disponen de tres puertos de E/S (A, S Y C), mientras que los que tienen 40 pines poseen cinco (A, S, e, D y E). Todas las líneas de estas puertas son multifuncionales, es decir, realizan diversas funciones según estén programadas. Sin embargo, todas tienen la capacidad de trabajar como líneas de E/S digitales. Puerto A Sólo dispone de 6 líneas, denominadas RAO-RA5. El registro que las configura como entras o salidas se llama TRISA. Si el bit O del registro TRISA se pone a 1, la línea O (RAO) de la puerta A funciona como entrada. Si se pone a O funciona como salida. Los pines RAO/ANO, RA1/AN1, además de funcionar como E/S digitales también pueden actuar como canales de entrada al convertidor analógico digital (CAD). Los pines RA2/AN2Nrefy RA3/AN3Nref+, pueden funcionar como E/S digitales, como canales AN2 y AN3 del CAD y como entradas de voltaje de referencia para el CAD. El pin RA4/TOCKI actúa como E/S digital y como entrada de la señal de conteo para el Timer 0. Por último, la patita RA5/AN4/ SS tiene tres funciones E/S digital, canal 4 del CAD y selección del modo esclavo cuando se trabaja con la comunicación serie síncrona. Puerto B Dispone de 8 líneas bidireccionales digitales cuya función se elige mediante la programación del registro TRISS. Todos los pines del Puerto S poseen de una resistencia interna de pull-up al positivo de la alimentación, que queda conectada cuando el bit RSPU (7) del registro OPTION, tiene valor O. Las líneas RS<7-4> ~y RSO/ INT pueden programarse para generar una interrupción externa cuando alguna de ellas cambia de estado. Puerto C Consta de 8 líneas bidireccionales cuyo sentido se configura mediante el registro TRISC. Todas las patitas de esta puerta tienen multiplexadas diferentes funciones. RCOIT10S01T1CKI: Esta línea puede actuar como E/S digital, como salida del Timer1 o como entrada de impulsos para el Timer1. RC11T10SIICCP2: E/S digital, entrada del oscilador del Timer1, entrada del módulo de captura2, salida del comparador 2, salida del PWM2. RC2/CCP1: E/S digital, entrada del modulo de de captura1, salida del comparador, 1 salida del PWM1. . RC3/SCK/SCL: E/S digital, señal de reloj en modo SPI, señal de reloj en modo 12C. RC4/SDI/SDA: E/S digital, entrada de datos en modo SPI, línea de datos en modo 12C. RC5/SDO: E/S digital, salida de datos en modo SPI. • RC6ITX/CK: E/S digital, línea de Tx en el USART, señal de reloj síncrona en transmisión serie. RC7IRX1DT: E/S digital, línea de Rx en el USART, línea de datos en transmisión serie síncrona. Puerto D Este puerto es de 8 bits, sólo lo poseen los encapsulados de 40 pines de la familia P16F877x, su registro de configuración es el TRISD. Además de usarse como líneas de E/S digitales normales, implementan una puerta paralela esclava de 8 líneas (PSP), que sirve para permitir la comunicación en paralelo con otros elementos del sistema. . Puerto E Este puerto es de 3 bits, sólo lo poseen los encapsulados de 40 pines de la familia P16F877x, su registro de configuración es el TRISE, las funciones de capa patita son las siguientes: REOI RDIAN5: E/S digital, señal de lectura en el modo de PSP, canal 5 del CAD. RE1/WRIAN6: E/S digital, señal de escritura en modo PSP, canal 6 del CAD. RE21 es IAN7: E/S digital, selección de chip en el modo PSP, canal 7 del CAD. 1.3.5 Organización de la memoria En primer lugar tenemos que distinguir claramente entre tres tipos de memoria: Una: la memoria EEPROM donde almacenaremos el programa que haremos haremos, esta memoria solo podrá ser leída por el pic (el pic va leyendo las instrucciones de del programa almacenado en esta memoria y las va ejecutando). ejecutando . Al apagar el pic esta memoria no se borra. Dos: la memoria RAM en cuyos registros se irán almacenando los valores de las variables que nosotros queramos y cuando nosotros queramos (por programa programa), al apagar el pic esta memoria se borra. Tres: la memoria EEPROM para datos, datos es un espacio de memoria EEPROM en la que se pueden guardar variables que queremos conservar aunque se apague el pic pico No se tratará aquí por ser una memoria más difícil de emplear. Bancos-y-registros registros 1.3.7. Palabra de configuración Es una Posición reservada de la memoria de programa FLASH, que ocupa la dirección Ox2007 y que sólo es accesible durante la programación del PIC. El valor de sus bits determina algunas características de funcionamiento. CP Bit de protección de la memoria flash del programa (bit 13) 1 = Protección del código activada O = Código no protegido. No implementado (bit 12) DEBUG Modo de (monitoreo) debug en circuito. (Bit 11) 1 = Monitoreo en el circuito desactivado, RB6 y RB7 son pines de propósito WRT1: WRTO Bits de escritura a la memoria flash de programa (bit 10-9) Para el PIC16F877 A/876: 11 = La protección de la escritura esta desactivada. 10 = Protegido desde 0x0000 a 0x00FF 01 = Protegido desde 0x0000 a 0x07FF 00 = Protegido desde 0x0000 a 0x0FFF Instrucciones orientadas a bits output_low (GP0); output_high (GP0); output_low (GP1); output_high (GP1); Instrucciones orientadas a constantes y de control #define GP0 PIN_A0 #define GP1 PIN_A1 Float A=4, B=23; Instrucciones básicas para el compilador CCS #include "16f877A.h" #device adc=10 //Usa resolución de 10 bits. #use delay (clock=4000000) #fuses xt,nowdt,noput,nobrownout,nolvp,noprotect Void main (void) { Instrucciones del programa a ejecutar } Un poco de orden (ejemplo) #include <12F629.h> #FUSES NOWDT #FUSES INTRC #FUSES NOCPD #FUSES NOPROTECT #FUSES MCLR #FUSES NOPUT #FUSES BROWNOUT //No Watch Dog Timer} //Internal RC Osc //No EE protection //Code not protected from reading //Master Clear pin disabled //No Power Up Timer //Reset when brownout detected #use delay (clock=4000000) Void main () { setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); setup_timer_1(T1_DISABLED); setup_comparator(NC_NC); setup_vref(FALSE); set_tris_a(0x00); //con esta instruccion programas que el puerto sea unicamente salida for(;;) { output_high(PIN_A0); delay_us(9); output_low(PIN_A0); delay_us(9); } // TODO: USER CODE!! } El PWM (pulse wide modulation) En este modo de trabajo, se consiguen impulsos lógicos cuya anchura del nivel alto es de duración variable, que son de enorme utilidad para controlar motores, dispositivos de estado sólido o grabar información al digitalizarla. El pin RC2/CCP1 es la salida del primer módulo PWM, es decir varía entre los niveles lógicos O y 1 a intervalos de tiempo diferentes en base a un periodo establecido en la programación. La variación del nivel alto con respecto al nivel bajo se llama ciclo de trabajo (Duty Cycle). Para lograr el cambio del pin de salida RC2/CCP1, o bien ya sea el pin RC1/CCP2 donde se encuentra el segundo modulo PWM que contiene este modelo de PIC, se utiliza un comparador que pone a 1 el set en un flip-flop cuando el valor del registro PR2 coincide con la parte alta del TMR2, instante en el que el TMR2 toma el valor 0x00. Acto seguido el flip-flop se resetea (se pone a 0) cuando otro comparador detecta la coincidencia del valor existente en CCPR1H con el de la parte alta del TMR2. De esta manera, variando los valores que se cargan en PR2 y en CCPR1 L (que luego se pasa a CCPR1 H) se varía el intervalo de tiempo en el que el pin de salida está en 1 ó 0. Ejemplo #include <18F452.h> #fuses HS,NOWDT,NOPROTECT,NOLVP #use delay(clock=20000000) void main() { setup_ccp1(CCP_COMPARE_CLR_ON_MATCH); // Configure CCP1 in COMPARE mode setup_timer_1(T1_INTERNAL); // Set up timer to instruction clk while(TRUE) { while(input(PIN_B0)) ; // Wait for keypress setup_ccp1(CCP_COMPARE_SET_ON_MATCH); // Configure CCP1 to set CCP_1=0; // C2 high now set_timer1(0); CCP_1 = 500; // Set high time limit // to 100 us // limit is time/(clock/4) // 500 = .0001*(20000000/4) setup_ccp1(CCP_COMPARE_CLR_ON_MATCH); // Configure CCP1 in COMPARE // mode and to pull pin C2 // low on a match with timer1 delay_ms(1000); } } // Debounce - Permit only one pulse/sec TEMA 2 PROGRAMACiÓN EN "C" E IMPLEMENTACIÓN DEL PIC16F877 Una gran ventaja de los PIC y que los hace estar entre el microcontrolador preferido a nivel mundial; es su bajo costo, tanto del chip en si, como de sus componentes electrónicos necesarios para hacerla funcionar. Otra situación es que Microchip opto por que sus software's programadores fueran sencillos y no necesitaran de licencias especiales para programar la memoria de los integrados. Estas dos estrategias le han funcionado de maravilla a Microchip. Actualmente hay un esfuerzo mundial entre fanáticos de los PICs para crear herramientas para programarlos y el mejoramiento de estas herramientas es constante. Actualmente el software más rápido para programar un Pie y que tiene muy buena compatibilidad con muchas PCs es el WinPIC800. Para instalar el software WinPic800, bastará con ejecutar el archivo Winpic800.exe, se instalara en la carpeta C:\Winpic800. Una vez hecho esto ejecutar el EXE con doble click y establecer la configuración del hardware. Para grabar un Pic: 1. Seleccionar el dispositivo a programar, elegimos Pie F, luego el Pie 16F877 por ejemplo. 2. Abrir el archivo que contiene los datos a programar en el Pic. El programa trabaja con ficheros .HEX. En el menú Archivo seleccionamos Abrir archivo, en el cuadro de diálogo que nos aparece seleccionamos el fichero que deseamos grabar en el Pic. 3. Pulsamos el botón Config. para ajustar el tipo de oscilador y los bits de configuración (de ser necesario). 4. Para programar el dispositivo seleccionamos Programar todo del menú Dispositivo. Con ello comenzará la grabación. El bootloader es un programa pequeño que nos permite escribir solamente en la memoria de programa flash del microcontrolador PIC a través del puerto serie de una computadora utilizando únicamente el botón de reset y la electrónica necesaria para la comunicación 232 serial. La primera vez tiene que ser grabado con un programador quemador, pero una vez instalado, el grabar sobre la memoria flash es muy rápido y práctico. Tiny Bootloader • • • • Es muy pequeño para todas las versiones de PIC 16F, 18F Y dsPIC. (ocupa menos de 100 palabras). Permite escribir en memoria FLASH o EEPROM y las palabras de configuración. Después de un reset espera 1 segundo (puede ajustarse a mas o menos tiempo) a que la PC responda. Permite seleccionar fácilmente la velocidad de baudaje. 2.2 COMUNICACIÓN USANDO EL PUERTO SERIE DE UNA PC CON UN PIC. La comunicación serial o serie surgió debido a la necesidad que se tenía de reducir el número de cables para trasmitir señales digitales a grandes distancias. Una forma para hacer esto fue a través de las líneas telefónicas y el uso de los modems. Un modem (modulador-demulador) es un dispositivo que, del lado trasmisor, modula las señales digitales para enviarlas por la línea telefónica en forma de cambios de frecuencia y, del lado del receptor, remodula estos cambios de frecuencia para convertirlos en pulsos digitales. Comunicación Síncrona y comunicación Asíncrona. A grandes rasgos en la comunicación síncrona debe esperarse una señal de tiempo para empezar a trasmitir y recibir, mientras que en la asíncrona, el envío y recepción de datos no depende de ninguna señal de tiempo. Debido a que puede existir transmisión de datos en cualquier momento, es necesario que la palabra digital que se vaya a trasmitir, tenga cierto formato que reconozcan todos los dispositivos serie. • El bit de inicio debe ser siempre un nivel bajo. Los bits de datos, marcados con Dn, pueden ser 4,5,6,7 u 8. El bit de paridad puede estar o no presente. También existe el bit de parada que puede ser 1, 1 1/2, ó 2 bits. De esta forma, una comunicación serie debe empezar siempre con un nivel bajo y acabar con un nivel alto. El bit de paridad sirve para detectar errores en la comunicación. Estandar RS-232C Para que una comunicación serie funcione correctamente se necesita, a parte de las características ya mencionadas, que los niveles de voltaje, que representan el "1" Y el "O" sea iguales para cada caso; se necesita también de unas señales de protocolo para preparar a los dispositivos a trasmitir o recibir. Todo esto se incluye en el estándar RS-232C que se explica a continuación. Publicado par la Asociación de Industrias Electrónicas (EIA por sus iníciales en inglés), el estándar RS-232C define las señales de protocolo, los niveles de voltaje de las señales y un conectar de 25 terminales, necesarios para la comunicación serie actualmente este estándar es el más usado para la comunicación serie y es el que viene incluido en la mayoría de las computadoras personales. Esta especificado para una distancia máxima de 15m (50 pies) a una velocidad máxima de 20,000 baudios (bits por segundo). Para velocidades de transmisión menores, se pueden usar cables de 610 a 915 m (2000 a 3000 pies). Existen otras versiones de este estándar, como el RS-422 y el RS-423, en los que se ve mejorada la velocidad de transmisión principalmente. El conectar RS-232C tiene 25 terminales, aunque en la mayoría de los sistemas serie, sólo se ocupan las terminales 1 a 8 y I~ 20; existiendo inclusive computadoras que traen un conectar serie RS-232 de 9 terminales. La razón de esta reducción de terminales es que las patas restantes son líneas secundarias, es decir, líneas que tienen la misma función pero que nos son usadas a menos que sean sistemas muy complejos de transmisión. Por este motivo se describirán sólo las terminales más comunes. • Las terminales descritas en amabas figuras con excepción de TxD, RxD y GND, son las que conforman las señales de protocolo. Un protocolo es la forma en que la computadora y la interfaz se piden permiso para trasmitir datos, para avisar que ya están preparados para recibir datos, para interrumpir la transmisión, etc. El protocolo es la forma en que dialogan computadoras e interfaz y se lleva a cabo de la siguiente manera: después de encender la computadora, ésta corre una rutina de auto verificación y envía la señal DTR a la interfaz. La interfaz responde con la señal DSR para indicar que está funcionando. La computadora envía la señal RTS a la interfaz y después de un intervalo apropiado de tiempo, la interfaz responde con CTS. La computadora entonces envía los datos serie por la terminal TxD. Cuando la computadora debe recibir datos, el protocolo es el mismo, sólo que la computadora envía las señales que enviaba la interfaz y viceversa, enviando la interfaz, además, la señal CD. Un protocolo posterior puede llevarse a cabo, ya dentro del programa, para indicarle al dispositivo externo el inicio de la transmisión y el fin de datos, o por parte del dispositivo hacia la computadora para pedirle más datos, etc. Este protocolo se explicará cuando se desarrolle el programa de comunicación definitivo. En cuenta a los niveles de voltaje, las señales RS-232C están estandarizadas a los siguientes valores; Un "1" lógico o marca es un voltaje entre -3 y -15 volts. Un "O" lógico o espacio es un voltaje entre +3 y +15 volts. Debido a que la interfaz trabajará con circuitos TIL y CMOS deben convertirse estos voltajes a niveles de +5 volts para el "1" Y O volts para el "O". Esto se logra utilizando un circuito integrado el MAX232. Comunicación síncrona La comunicación se realiza sobre dos líneas, la DT que traslada en los dos sentidos los bits a la frecuencia de los impulsos de reloj que salen por la línea CK desde el maestro. Se utiliza para comunícarse con periféricos como memorias, conversores, etc. En ambos modos las líneas de comunicación son las dos de más peso de la Puerta C: RC6ITX/CK y RC7/RX/DT. Como nuestro fin es la comunicación con un dispositivo que posea comunicación serie y no a un nivel de comunicación circuito integrado con circuito integrado (esclavo y maestro). Se describirá la comunicación Asíncrona. Configuración Comunicación Asíncrona Los cuatro bloques que configuran la arquitectura del USART, en modo asíncrono, son: 1. Circuito Maestro 2. Generador de baudios 3. Transmisor asíncrono Módulo de comunicación USART del PIC16F877 Este módulo es capaz de soportar la comunicación serie síncrona y asíncrona Comunicación asíncrona Las transferencias de información se realizan sobre dos líneas TX (transmisión) y RX (recepción), saliendo y entrando los bits por dichas líneas al ritmo de una frecuencia controlada internamente por el USART (Universal Synchronous Asynchronous Receiver Transmitter). Se utiliza para comunicarse con dispositivos tales como el monitor CRT, el ratón, módems o el ordenador PC. Receptor asíncrono Circuito maestro Actúa sobre la patita RC7/RX/DT, que es por donde se recibe el bit de información o control y se encarga de muestrear tres veces su valor, para decidir éste por mayoría. Transmisor asíncrono El dato que se desea transmitir por el USART transmisor se deposita en el registro TXREG y a continuación se traspasa al registro de desplazamiento TSR, que va sacando los bits secuencialmente y a la frecuencia establecida. Además, antes de los bits del dato de información incluye un bit de inicio y después de sacar todos los bits añade un bit de PARADA. El USART receptor recibe uno a uno, los bits, elimina los dos de control y los de información una vez que han llenado el registro de desplazamiento RSR los traslada automáticamente al registro RCREG, donde quedan disponibles para su posterior procesamiento. Le secuencia de pasos para configurar la transmisión en el USART es la siguiente: 1. Hay que configurar las líneas RC6 como salida y RC7 como entrada 2. Poner SYNC = O Y SPEN = 1 para activar la comunicación asíncrona y la comunicación puerto serie respectivamente. 3. Si se desea trabajar con interrupción poner TXIE = 1, además de habilitar las interrupciones en general (registro INTCON). 4. Si el dato consta de 9 bits, en lugar de los 8 típicos, poner el bit TX9 = 1. El noveno bit se coloca en TX9D (TESTA). 5. Se carga el valor X adecuado en el registro SPBRG, para producir la frecuencia de trabajo deseada. Hay que controlar el bit BRGH (alta y baja velocidad) 6. Activar la transmisión con TXEN = 1. El bit TXIF tendrá valor 1, ya que TXREG se encuentra vacío. 7. Cargar en TXREG el dato a transmitir. Comienza transmisión. Receptor asíncrono Los datos se reciben en serie, bit a bit, por la patita RC7 y se van introduciendo secuencialmente en el registro desplazamiento RSR, que funciona a una frecuencia 16 veces más rápida que la de trabajo. Cuando el dato consta de 9 bits hay que programar el bit RX9 = 1 Y el noveno bit de información se colocará en el bit RX9D del registro RESTA. Cuando CREN = 1 en el registro RCSTA, se habilita la recepción. 1. Hay que configurar las líneas RC6 como salida y RC7 como entrada 2. Poner SYNC = O Y SPEN = 1 para activar la comunicación asíncrona y la comunicación puerto serie respectivamente. 3. Se carga con el valor X al registro SPBRG para trabajar con la frecuencia deseada, controlando además el valor de BRGH. 4. Si se desea que se genere una interrupción con la llegada del bit PARADA, se pone RCIE = 1, además de habilitar las interrupciones en general. 5. Poner RX9 = 1 para permitir la recepción del bit 9. 6. Para detectar la dirección, poner ADDEN = 1. 7. SE habilita la recepción poniendo CREN= 1. 8. Al complementarse la recepción RCIF se pondrá a 1 y se produce una interrupción si se había permitido. 9. Se lee el registro Resta y se averigua si se ha producido algún error. 10. Lee los 8 bits del registro RCREG para determinar si el dispositivo ha sido el direccionado. 11. Si se ha producido algún error, poner CREN=0. 12. Si ha sido direccionado el dispositivo, poner ADDEN=0 para permitir la recepción de la información. Configuración del circuito completo de la interfaz serie. http://verona.fi-p.unam.mx/crofi/ http://www.microchip.com/ http://es.wikipedia.org/wiki/Microcontrolador_PIC http://ww1.microchip.com/downloads/en/devicedoc/39582b.pdf