Entorno de Desarrollo para PIC
Entorno de Desarrollo para PIC
Entorno de Desarrollo para PIC
Sistemas Digitales
Trabajo Prctico final
Implementacin de un entorno de desarrollo para proyectos con microcontroladores
Hoja 1 de 19
Consigna. Desarrollar e implementar un entorno de programacin y grabado de un microcontrolador. Particularmente se aplicara lo desarrollado para implementar el uso de un conversor A/D externo y la comunicacin bi direccional entre un microcontrolador y una PC de escritorio. Utilidad. Tanto el software como el hardware desarrollado incrementarn las herramientas a disposicin de la Universidad Nacional de Quilmes, las cuales podrn brindarse como alternativas de los kits de desarrollo ya utilizados en la universidad. Por lo tanto la finalidad del proyecto se basa en brindar a los estudiantes un paquete de herramientas con su funcionamiento verificado, de modo tal que cada alumno que pretenda utilizar un microcontrolador, pueda utilizar este informe a modo de manual de uso para abordar cada proyecto en la instancia de programacin y no tener que desarrollar desde el inicio los entornos de grabacin y programacin, ni tampoco el hardware necesario. Objetivos mnimos propuestos.
1) Eleccin del microcontrolador Investigacin para la eleccin del microcontrolador apropiado. Recopilacin de informacin tcnica y anlisis de factibilidad de uso. 2) Eleccin del entorno de programacin del microcontrolador. Investigacin sobre el entorno de programacin ms adecuado para el proyecto. Obtencin del software a utilizar. Utilizacin del software para adquirir el manejo del mismo. 3) Eleccin del software y hardware para el grabado del microcontrolador. Investigacin sobre el esquema software-hardware ms conveniente para el proyecto. Obtencin del software a utilizar. Montaje del hardware para el grabado del microcontrolador. 4) Verificacin del funcionamiento del paquete completo de programacin del microcontrolador Realizacin de programas a modo de ejemplo para verificar y adoptar el modo de funcionamiento de los entornos de programacin y grabado. - Rutinas I/O, Timmers, Conversores, Comunicacin RS232, etc Comprobacin del funcionamiento del hardware para grabacin y aplicacin del microcontrolador. 5) Eleccin del conversor analgico digital Investigacin para la eleccin del conversor apropiado. Determinacin del uso de un nico conversor de dos canales, dos conversores de un canal o un conversor y el conversor interno del microcontrolador. Recopilacin de informacin tcnica y anlisis de factibilidad de uso. 6) Comunicacin microcontrolador-conversor Investigacin sobre el esquema IC Implementacin de la comunicacin microcontrolador-conversor 7) Actuacin PWM Investigacin sobre aplicacin PWM del microcontrolador Implementacin del PWM 8) Comunicacin microcontrolador-PC Investigacin para la eleccin del esquema de comunicacin ms adecuado. Guillermo H. Carrera 4213 Hoja 2 de 19
Hoja 3 de 19
Los microcontroladores ms populares son: 8048 (Intel). Es el padre de los microcontroladores actuales, el primero de todos. Su precio, disponibilidad y herramientas de desarrollo hacen que todava sea muy popular. 8051 (Intel y otros). Es sin duda el microcontrolador ms popular. Fcil de programar, pero potente. Est bien documentado y posee cientos de variantes e incontables herramientas de desarrollo. 80186, 80188 y 80386 EX (Intel). Versiones en microcontrolador de los populares microprocesadores 8086 y 8088. Su principal ventaja es que permiten aprovechar las herramientas de desarrollo para PC. 68HC11 (Motorola y Toshiba). Es un microcontrolador de 8 bits potente y popular con gran cantidad de variantes. 683xx (Motorola). Surgido a partir de la popular familia 68k, a la que se incorporan algunos perifricos. Son microcontroladores de altsimas prestaciones. PIC (MicroChip). Familia de microcontroladores que gana popularidad da a da. Fueron los primeros microcontroladores RISC. Es preciso resaltar en este punto que existen innumerables familias de microcontroladores, cada una de las cuales posee un gran nmero de variantes. En el caso particular de este proyecto la eleccin del microcontrolador se encontr influenciada por el uso en el entorno laboral de quin suscribe, de la familia de microcontroladores PIC. Por lo tanto casi a modo de necesidad se opt por utilizar un microcontrolador PIC, para adquirir experiencia con este tipo de microprocesadore. Por lo cual el proceso de eleccin tuvo su curso en sentido opuesto, es decir en lugar de enumerar las prestaciones que deba cumplir el microprocesador y en base a ello seleccionar el ms adecuado, se tom el PIC16F873A, que es el que utilizado en dicho entorno laboral, y se verific si el mismo cumpla los requisitos necesarios. Ampliando el estadio actual de la industria nacional, puede verificarse que los microcontroladores PIC son los mas utilizados. Los detalles ms importantes que hacen que la familia de microcontroladores PIC sea la ms utilizada hoy en da son los siguientes: - Sencillez de manejo: Tienen un juego de reducido de instrucciones (35). - Buena informacin, fcil de conseguir y econmica. - Precio: Su coste es comparativamente inferior al de sus competidores. - Poseen una elevada velocidad de funcionamiento. Buen promedio de parmetros: velocidad, consumo, tamao, alimentacin, cdigo compacto, etc. - Herramientas de desarrollo sencillas y de bajo costo. Muchas herramientas software se pueden obtener libremente a travs de Internet desde Microchip (http://www.microchip.com). - Existe una gran variedad de herramientas hardware que permiten grabar, depurar, borrar y comprobar el comportamiento de los PIC. En la hoja de datos anexa como 16F873.pdf del CD adjunto al informe, puede encontrarse el manual de uso de la familia de microcontroladores 16F8XX, en el cual se encontrar completa informacin sobre el funcionamiento y utilizacion del mismo.
Guillermo H. Carrera 4213 Hoja 4 de 19
Universidad Nacional de Quilmes Sistemas Digitales Algunas de las caractersticas ms relevantes son las que se detallan a continuacin:
Velocidad de operacin 20 MHz 8K x 14 words de memoria programable FLASH 368 x 8 bytes de RAM 256 x 8 bytes de EEPROM Data Memory Pinout compatible con PIC16C73B/74B/76/77 14 fuentes de interrupcin Modo de direccionamiento directo, indirecto y relativo Watchdog Timer (WDT) In-Circuit Serial Programming(ICSP) In-Circuit Debugging Timer0: 8-bit timer/counter con prescaler Timer1: 16-bit timer/counter con prescaler Timer2: 8-bit timer/counter con prescaler y postscaler Dos mdulos Capture, Compare o PWM Conversor 10-bit A/D multi-channel Synchronous Serial Port (SSP) con SPI(Master mode) y I2C(Master/Slave) Universal Synchronous Asynchronous Receiver Transmitter (USART/SCI) Parallel Slave Port (PSP)
Universidad Nacional de Quilmes Sistemas Digitales Teniendo en cuenta lo anterior se opt por utilizar una versin anterior, de distribucin gratuita, a la cual se le puede agregar un compilador en C. La versin anterior que se puede obtener en la pgina oficial de Microchip es la versin 7.10. Dicha versin de MPLAB se encuentra adjunta al informe en el CD correspondiente bajo el nombre MPLAB710. En el CD tambin se encuentra una gua de introduccin al entorno (MPLAB tutorial.pdf) donde se detalla el proceso de instalacin del mismo y los pasos a seguir para realizar los primeros proyectos, adems de un patch de actualizacin del programa (ver gua para uso de entorno microcontroladores). El siguiente paso fue la eleccin del compilador de lenguaje C a utilizar, para ello se busc en Internet cuales eran los compiladores ms difundidos que soporta el MPLAB 7.10, llegando a la determinacin de elegir entre dos compiladores a saber: CC5X Versin 3.2 CCSC Versin 3.216
Si bien ambos compiladores pueden utilizarse en el entorno MPLAB, se opt por utilizar el CCSC que se diferencia del CC5X al poseer mayor cantidad de funciones propias y libraras a incluir. Por ejemplo, para el caso de las comunicaciones va IC y SPI, el compilador CCSC incluye funciones propias de lectura, escritura y configuracin de los perifricos. El compilador CCSC no es de distribucin gratuita, de todos modos se adjunta al informe en el CD correspondiente. La instalacin del mismo no es sencilla y debido a la difusin de algunos parches se deben seguir los pasos indicados en la gua para uso de entorno microcontroladores anexa a este informe. El compilador CCSC posee una completa bibliografa sobre el uso de sus funciones internas, en el CD adjunto se brinda el manual del compilador bajo el nombre CCSC manual.pdf donde se puede encontrar una gua completa sobre el uso del compilador, el uso de sus funciones especficas as como tambin ejemplos de aplicacin.
Universidad Nacional de Quilmes Sistemas Digitales PIC sufre un reset, si ponemos el pin en alto (5v) el PIC trabaja normalmente mientras que si ponemos el pin a 12v el PIC se inicializa en modo programacin, quedando dos de los pines de E/S destinados a datos (SDA) y reloj (SCL). El integrado 74LS04 est formado internamente por seis buffers inversores. Estos permiten por un lado obtener niveles TTL a su salida y por el otro no cargar de forma excesiva al puerto. Se colocan las compuertas en serie para obtener a la salida el mismo nivel de entrada, sin invertir. Las resistencias de 1K dan seguridad al sistema para evitar que circule corriente excesiva. El control de la tensin de programacin lo efecta el transistor NPN. Estando el pin 5 del puerto paralelo a masa (en 0) tendremos al transistor abierto por lo que la corriente proveniente de +V (12v) pasar por el diodo LED el cual no encender y se portar como un diodo comn polarizado en directa, pasar por la resistencia limitadora de corriente del LED la cual no ofrecer mucha resistencia y ser inyectada al PIC en su terminal MCLR/VPP. Poniendo en 1 el bit que controla el pin 5 del puerto paralelo, en cambio, el transistor se cierra y hace circular masa hacia el PIC haciendo, adems, encender el LED al quedar a masa el otro extremo de la resistencia limitadora de corriente. La placa a disposicin de la universidad se diferencia de la representada en la figura 1 ya que en la misma se le agreg un transformador 220/12V y un circuito rectificador para poder conectar la misma a la red de alimentacin de 220V 50Hz.
Universidad Nacional de Quilmes Sistemas Digitales Por otro lado en el manual del compilador C, puede encontrarse una detallada explicacin de las funciones internas del compilador, acompaado por buena cantidad de ejemplos que ayudan a reforzar los conceptos.
Hoja 8 de 19
Dado el elevado costo de adquisicin del conversor MCP3221, se opt por seleccionar otro conversor de la lnea Microchip. Fue as que se opt por utilizar el conversor MCP3208 de Microchip, el cual cumple las condiciones preestablecidas con la diferencia que para su comunicacin utiliza el protocolo SPI en lugar del protocolo IC. Dado que el microcontrolador posee un mdulo de comunicacin SPI, y que este tipo de comunicacin es ms acorde al esquema a implementar (1 maestro 1 esclavo), se opt por el uso de dicho conversor En el CD adjunto, se incluye la hoja de datos con las caractersticas del conversor, las que en forma resumida se detallan a continuacin: 12-bit de resolucin 1 LSB max DNL 2 LSB max INL (MCP3204/3208-C) 8 canales de entrada On-chip sample and hold interface serial SPI 100 ksps max. sampling
Guillermo H. Carrera 4213 Hoja 9 de 19
6) Comunicacin microcontrolador-conversor
Interfaz SPI La interfaz SPI consta de cuatro seales bsicas que cada una de ellas corresponde a una interconexin de pines entre al microcontrolador y el conversor, las seales son: - MOSI (Master Output/Slave Input) - MISO (Master Input/Slave Output) - SCLK (Serial Clock), - SS (Slave Selector). La comunicacin se inicia desde el dispositivo maestro (microcontrolador) al colocar en bajo la seal en el canal SS del dispositivo esclavo. El primer pulso de reloj recibido con el SS en bajo y MOSI en alto establece el bit de strart (ver Figura 2). La comunicacin contina desde el dispositivo maestro escribiendo cuatro bits de configuracin en el dispositivo esclavo desde el canal MOSI. Los cuatro bits de configuracin establecen el modo de conversin del dispositivo esclavo, cada uno de ellos representa lo siguiente: 1 bit - Modo de conversin. Puede seleccionarse entre modo simple y modo diferencial. 2 a 4 bit - Seleccin del canal. Puede seleccionarse cualquiera de los 8 canales del conversor. La funcin de cada uno de los 4 bits de configuracin pueden apreciarse en resumen en la siguiente tabla:
Hoja 10 de 19
El conversor muestrea la entrada analogica del canal seleccionado a partir del cuarto pulso de reloj a partir del bit de start (ver figura 2). Una vez ingresado el bit de configuracin D0, es necesario un pulso ms de reloj para completar el perodo de muestreo y retencin. En el siguiente pulso de reloj el conversor pone en el canal de salida MISO un bit null (0). En los proximos 12 pulsos de reloj establece el resultado de la conversin colocando al inicio el bit ms significativo en el canal MISO. A continuacin se detalla un algortmo de lectura de dos canales analgicos de 0 a 5V que se imprimen va RS232.
void main() { long int value; adc_init(); printf("Sampling:\r\n"); do { delay_ms(1000); value = read_analog(0); printf("\n\rCh0: "); display_data( value ); value = read_analog(1); printf(" Ch1: "); display_data( value ); } while (TRUE); }
Las funciones a utilizar pueden agregarse en el mismo algortmo o mediante un include y son las siguientes:
#define MCP3208_CLK PIN_B0 #define MCP3208_DOUT PIN_B1 #define MCP3208_DIN PIN_B2 #define MCP3208_CS PIN_B3 void adc_init() { output_high(MCP3208_CS); } void write_adc_byte(BYTE data_byte, BYTE number_of_bits) { BYTE i; delay_us(2); for(i=0; i<number_of_bits; ++i) { output_low(MCP3208_CLK); if((data_byte & 1)==0) output_low(MCP3208_DIN); else output_high(MCP3208_DIN); data_byte=data_byte>>1; delay_us(50); output_high(MCP3208_CLK); delay_us(50); } } BYTE read_adc_byte(BYTE number_of_bits) { BYTE i,data; data=0; for(i=0;i<number_of_bits;++i) { output_low(MCP3208_CLK); delay_us(50); shift_left(&data,1,input(MCP3208_DOUT)); output_high(MCP3208_CLK);
Hoja 11 de 19
Hoja 12 de 19
Precauciones referentes al uso del conversor 1) Dada la precisin (12 bits) del conversor, debe eliminarse toda fuente de ruido que pueda afectar a la medicin. Son prcticas aconsejables la inclusin de un filtro pasa bajos en la entrada analgica del conversor y una correcta separacin de masas analgicas y digitales. 2) Debe tenerse principal precaucin de no aplicar tensin en el pin de referencia (Vref) si el chip no est alimentado en Vdd, de ocurrir esa secuencia el conversor se quema. Para evitar ese problema puede colocarse una resistencia en serie en la entrada Vref, que es de alta impedancia, de ese modo se limita la corriente aplicada.
7)
Actuacin PWM
El PIC 16F873 posee dos mdulos de captura, comparacin o PWM, dichos mdulos trabajan analizando alguno de los dos timers del dispositivo y pueden configurarse para realizar una comparacin, conteo o PWM en base al timmer seleccionado. Para este caso se utiliz el mdulo 1 (CCP1) para implementar un PWM, dicho mdulo trabaja con el timmer2 del PIC. Para la implementacin se utilizaron las siguientes funciones internas del compilador CCSC setup_ccp1(CCP_PWM); // Configura CCP1 como PWM setup_timer_2(T2_DIV_BY_4, 127, 1); // perodo=(1/clock)*4*t2div*(period+1)=512micS=>1,95Kh set_pwm1_duty(ct_pwm); // Setea ciclo de trabajo A continuacin se explica cada una: a) setup_ccp1 (mode) Esta funcin setea el modo de trabajo del CCP1. En modo conteo, cuenta los pulsos del timme1, en modo comparacin genera un evento en el pin de salida cuando el valor de timmer1 se iguala con el valor inicializado en el cmdulo, y en modo PWM genera una onda cuadrada en el pin de salida. - mode es una constante vlida definida en el archivo .h correspondiente al dispositivo y puede tomar: Anulacin del mpdulo CCP: Seteo del modulo CCP como conteo: CCP_OFF CCP_CAPTURE_FE Incrementa en pulso descendente CCP_CAPTURE_RE Incrementa en pulso descendente CCP_CAPTURE_DIV_4 Incrementa luego de 4 pulsos CCP_CAPTURE_DIV_16 Incrementa luego de 16 pulsos Seteo del mdulo CCP como comparador: CCP_CMP Seteo del mdulo CCP como PWM: CCP_PWM b) setup_timer_2 (mode, period, postscale) El timmer2 es un contador de 8 bits, y la funcin setup_timmer_2 se utiliza para inicializar el modo de funcionamiento del mismo, se debe prestar principal atencin al seteo del timmer ya que de ello depende la frecuencia del PWM
Hoja 13 de 19
Universidad Nacional de Quilmes Sistemas Digitales - mode especifica la divisin del oscilador y puede tomar: T2_DISABLED T2_DIV_BY_1 T2_DIV_BY_4 T2_DIV_BY_16 - period es un entero de 0 a 255 que determina en que valor se resetea el timmer. (recordar que cuenta 8 bits) - postscale es un nmero que determina cuantos reseteos del timmer deben ocurrir para que se produzca la interrupcin o evento. c) set_pwm1_duty (value) Esta funcin determina la el perodo que se mantiene la seal activa PWM, es decir determina el ciclo de trabajo. - value escribe el registro de 0 bits que determina el ciclo de trabajo del PWM. Debe tenerse en cuenta que segn la velocidad a la que trabaja el oscilador, el registro de 10 bits, puede reducirse a 8. Para ms informacin, referirse al pgina 61 de la hoja de datos del PIC16f873.
8) Comunicacin microcontrolador-PC
El primer paso a realizar en una comunicacin PIC-PC es la adaptacin de la etapa fsica del canal de comunicacin. Dado que el microcontrolador opera con niveles de tensin TTL (0-5V) y el protocolo RS-232 con niveles de 312V, se hace necesaria la inclusin de una adaptacin de los niveles de tensin utilizados por el PIC. Uno de los dispositivos ms utilizados para realizar dicha adaptacin de seal es el chip MAX-232. A continuacin se exponen sus principales caractersticas
Hoja 14 de 19
Funciones para la comunicacin RS232. El compilador CCSC brinda una gran cantidad de funciones de libreras C para el manejo de la comunicacin va RS232. En el siguiente cuadro se listan las funciones disponibles: En el lateral derecho de cada funcin se indica la pgina del manual CCSC, en donde se detalla el uso de cada una de las funciones.
Hoja 15 de 19
Algortmo desarrollado.
El cdigo utilizado para verificar el funcionamiento de los items desarrollados anteriormente es el siguiente:
#include <16F873A.h> #fuses HS,NOWDT,NOPROTECT #use delay(clock=20000000) #use rs232(baud=38400, xmit=PIN_C6, rcv=PIN_C7) // Jumpers: 8 to 11, 7 to 12 #include <mcp3208m1.c> #include <stdlib.h> #include<ctype.h> //---- Interrupcin por overflow Timer0 #INT_TIMER0 void control(void) { output_toggle(PIN_A5); } void main() { //-------------- Definicin de variables long int value_0=0,value_1=0 ; //lectura del conversor A/D char puerto; //Entrada desde RS232 long ct_pwm; //ciclo de trabajo PWM char escribir; //bandera para empezar a escribir int transmitir; //variable para seguir escribiendo char trama[4] ; int cont=0; //cantidad de conversiones transmitidas //-------------- Inicializacin de variables ct_pwm=0; //Rango 0 a 512 //-------------- Seteos set_tris_a(0xb100110); // Setea modo port A setup_ccp1(CCP_PWM); // Configura CCP1 como PWM setup_timer_2(T2_DIV_BY_4, 127, 1); // perodo=(1/clock)*4*t2div*(period+1)=512micS=>1,95Kh set_pwm1_duty(ct_pwm); // Setea ciclo de trabajo setup_timer_0(RTCC_DIV_16); // perodo=clock/16/256/4 256=8 bit timer0 //-------------- Inicializaciones adc_init(); //inicializa el conversor enable_interrupts(INT_TIMER0); //habilita interrupcin del timmer0 enable_interrupts(GLOBAL); do { //------------- Lectura RS232 if(kbhit()) { gets(trama); escribir=trama[0]; } //---------- Lectura del Conversor value_0 = read_analog(0); value_1 = read_analog(1); //---------- Escritura RS232 if(escribir==73) //Recibe una I parea empezar a transmititr { ct_pwm=512; set_pwm1_duty(ct_pwm); // Setea ciclo de trabajo printf("p"); printf("%04lu",value_0); printf("s"); printf("%04lu",value_1); printf("t"); printf("%03lu",ct_pwm); } // Primer Canal // Segundo Canal // Ciclo de trabajo //Si debe leer el puerto
Hoja 16 de 19
if(input(PIN_A1)==1 || input(PIN_A2)==1) { ct_pwm=0; set_pwm1_duty(ct_pwm); } } while (TRUE); } ARCHIVO mcp3208m1.c #ifndef MCP3208_CS #define MCP3208_CLK PIN_B0 #define MCP3208_DOUT PIN_B1 #define MCP3208_DIN PIN_B2 #define MCP3208_CS PIN_B4 #endif void adc_init() { output_high(MCP3208_CS); } //inicializa el conversor
void write_adc_byte(BYTE data_byte, BYTE number_of_bits) //Escribe los bits de configuracin en el conversor { BYTE i; delay_us(1); for(i=0; i<number_of_bits; ++i) { output_low(MCP3208_CLK); if((data_byte & 1)==0) output_low(MCP3208_DIN); else output_high(MCP3208_DIN); data_byte=data_byte>>1; delay_us(1); output_high(MCP3208_CLK); delay_us(1); } } BYTE read_adc_byte(BYTE number_of_bits) //Lee los bits de conversin { BYTE i,data; data=0; for(i=0;i<number_of_bits;++i) { output_low(MCP3208_CLK); delay_us(1); shift_left(&data,1,input(MCP3208_DOUT)); output_high(MCP3208_CLK); delay_us(1); } return(data); } long int read_analog(BYTE channel) //Arma una trama con los bits de configuracin y los 12 bits ledos del conversor { int l; long int h; BYTE ctrl_bits; delay_us(100); output_low(MCP3208_CS); output_low(MCP3208_CLK); output_high(MCP3208_DIN); if(channel==1) ctrl_bits=4; else
Hoja 17 de 19
El funcionamiento del programa puede verificarse mediante conexin del Pic con una PC mediante una herramienta de comunicacin como por ejemplo el Hiperterminal de Windows. Al escribir la letra i desde el Hiperterminal, se inicializa el proceso de conversin y se setea el PWM al 100% del ciclo de trabajo. La trama recibida tendr el siguiente formato: p D1 D2 D3 D4 s D1 D2 D3 D4 t D1 D2 D3 Donde los 4 datos luego de la letra p representan el valor convertido del canal 0 de 0 a 4096 (12 bits), los datos seguidos por s los del canal 1 y los datos seguidos por t el valor seteado del ciclo de trabajo de 0 a 512 (9 bits). Para verificar el funcionamiento del portA, si se pone un bajo 0 en el pin A1 o A2, el ciclo de trabajo pasa a 0%. Tambin puede verificarse el funcionamiento de las interrupciones midiendo con un osciloscopio el pin A5, donde puede observarse el toggle del mismo. El circuito utilizado es el siguiente:
Hoja 18 de 19
Hoja 19 de 19