Proyectos Con Microcontroladores PIC

March 27, 2018 | Author: sinchy | Category: Microcontroller, Pic Microcontroller, Booting, Usb, Integrated Circuit


Comments



Description

Proyectos con microcontroladores PIC.Estos microcontroladores de la empresa Microchip, son los más populares actualmente, puede ser por tener versiones económicas de pequeño tamaño, porque tiene set de instrucciones reducidas, por la disponibilidad de herramientas de programación y por la facilidad para grabarlo. Si estamos diseñando un circuito compuesto por varios circuitos integrados de compuertas lógicas, temporizadores, etc, debemos considerar que es más conveniente utilizar un microcontrolador. La cantidad de componentes externos será menor, el circuito impreso más sencillo, y el circuito más fácil de actualizar o modificar, así que vale la pena aprender a usarlos. Dentro de las cosas que debemos hacer para aprender sobre estos microcontroladores: 1. Leer las hojas técnicas de un microcontrolador pequeño y económico, para empezar. Puede ser el PIC16F84A o el más reciente PIC16F716. 2. Conseguir las herramientas de compilación y simulación. MPLAB funciona bien y está disponible gratis en la página de Microchip. 3. Crear programas para ejercicios sencillos y comprobarlos con el simulador. 4. Comprar o construir un grabador. Los grabadores “Pickit2” y “Pickit 3” son oficiales de Microchip y son económicos. Se conectan al PC a través de puerto USB, a través del cual también se alimentan. Si pretendemos construirnos nuestro grabador conviene elegir alguno del listado que funciona con icprog, este programa funciona bien y también es gratis. Además debemos asegurarnos de contar con algún equipo antiguo con puerto paralelo o serial según requiera el grabador. Timer 0 del 16F84. Una forma para guiarse en la configuración del Timer 0 y otras funciones de los microcontroladores es utilizar los diagramas de bloques equivalentes de las hojas técnicas. Así en la figura, de izquierda a derecha, se puede ver un cuadro que corresponde al pin RA4/TOCKI que es al que se le aplican los pulsos en el caso que se quiera un clock externo, luego vemos una compuerta ORex en la que una de las entradas es TOSE(Timer 0 Source edge), que permite elegir el canto del pulso con el que se incrementará el registro del timer, luego vemos un mutiplexor de 2 entradas, si T0CS (Timer 0 clock source) está en 1 la rama que viene del pin RA4 alcanza la salida, y si T0CS está en 0 el clock del uC/4 alcanza la salida. El próximo multiplexor depende del estado del bit PSA(Pre escalar assignment) y si está en 0 recibe los pulsos del clock que elegimos con TOCS y lo divide según el pre escalar que elijamos con PS2, PS1 y PS0. Y si PSA lo configuramos con 1 recibimos los pulsos desde TOCS directamente. Luego de pasar por un bloque de sincronización los pulsos alcanzan el registro TMR0 incrementándolo. Cuando el registro TMR0 rebose (llegue al valor máximo y vuelva a cero) se activará el flag de interrupción del Timer 0 T0IF, el cual producirá una interrupción si es que la interrupción del Timer 0 está habilitada en el registro INTCON. Para producir un tiempo determinado debemos primero considerar que el uC incrementa el registro del Timer con una frecuencia igual a la de su oscilador dividida por 4, o lo que es lo mismo con un periodo de 4 veces el de su clock, sin considerar el pre escalar. (En el caso de elegir usar el clock del uC con T0CS). Por ejemplo si el oscilador del uC es de 4MHz, entonces incrementará el registro del timer TMR0 con una frecuencia de 1MHz o cada 1uS. Por lo tanto el tiempo máximo que se puede obtener sin pre escalar es de 255uS. Porque 255 es el numero máximo de TMR0. Si queremos un tiempo, por ejemplo de 20uS entonces debemos restar 20 al valor máximo de TMR0, es decir debemos inicializar TMR0 en 235. El clock externo es útil en el caso de que necesitemos usar como contador de eventos externos el TMR0, por ejemplo cuando se reciban 10 pulsos de un sensor, o también si queremos usar un clock más lento que el del uC para obtener retardos más largos. Implementar ICSP de Microchip en nuestros proyectos. Los protocolos de grabación serial de los microcontroladores actuales, como el ICSP (In Circuit Serial Programming) de Microchip fueron concebidos para programar los microcontroladores en la aplicación, es decir, sin retirar el microcontrolador de la tarjeta, con ventajas evidentes sobre todo para producción masiva. Es por esto que los grabadores como Pickit2 de Microchip no traen un zócalo ZIF (Zero Insertion Force). Cuando desarrollamos prototipos necesitaremos probar el programa del microcontrolador en protoboard. En este caso nos conviene construir un cable con un conector “Slim” hembra de 6 pines en un extremo y en el otro puntas para el protoboard. Podemos mantener el cable conectado al protoboard mientras no lo necesitemos para otro proyecto. Cable conexión ICSP para conectar grabador con protoboard. Conexión grabador a protoboard. De todas maneras nos va a resultar más cómodo construir este cable una sóla vez, que retirar muchas veces el microcontrolador del protoboard para grabarlo cada vez que se necesite corregir el programa. Además:  es usual que queden puentes o componentes atravesados por encima del microcontrolador. Por ejemplo el típico condensador de 0,1uF en los pines de alimentación.  el cable nos permite en el futuro aprovechar la función de depuración en circuito (In Circuit Debugger) que está disponible en los microcontroladores de rango alto y en los más recientes de rango medio.  con el cable podemos prescindir de una fuente de alimentación externa y usar los 5V del USB del computador a través del grabador para alimentar el circuito. La aplicación de Pickit2 tiene una casilla de verificación para activar o desactivar la alimentación. El conector del grabador tiene 6 pines. Se utilizan 5 para grabar microcontroladores y se dejó un sexto para posibles funciones auxiliares: 1. VPP Voltaje de programación. 2. VDD Positivo de fuente de alimentación 3. VSS Negativo de fuente de alimentación 4. PGD Dato de programación. 5. PGC Clock de programación. 6. AUX Auxiliar. Nota. Pin 1 marcado con flecha blanca en Pickit2 Para grabar con éxito nuestro microcontrolador “en circuito” debemos evitar que los componentes de nuestra aplicación, conectados a los pines que intervienen en la grabación interfieran con las señales de grabación. Para el pin VPP que se conecta al MCLR del microcontrolador basta con un circuito “Power on reset” y una resistencia de 470Ω para aislarse de éste. NO SE PUEDE USAR MCLR DIRECTAMENTE A +V Las señales PGD y PGC se conectan a RB7 y RB6 respectivamente y para aislarse de la aplicación se puede poner resistencias en serie si la aplicación lo permite. En último caso si no queremos complicarnos y nos sobran pines de IO dejamos RB6 y RB7 exclusivos para ICSP. Implementar ICSP en protoboard. Uso de interrupciones externas de microcontroladores. Muchos de los pulsos que deseamos leer con el microcontrolador aparecen de forma breve e inesperada. Si bien los microcontroladores actuales pueden ejecutar instrucciones en fracciones de microsegundo, evaluar el estado de una entrada permanentemente a través de un “loop” no garantiza la lectura del evento. (ej teclados, señales “Ready” de un ADC, etc.) Para resolver este problema, los microcontroladores disponen de un mecanismo llamado interrupción, que en este caso serían externas, pues las hay también internas (timers, módulos de comunicación, etc.). Los microcontroladores PIC de Microchip constan con una interrupción externa asociada al pin RB0 y una interrupción “on change“ (al cambio) que se activa al cambiar el estado de los pines RB7, RB6, RB5 y RB4. Al producirse un cambio en un pin de entrada asociado a una interrupción, hardware interno del microcontrolador activa un “flag”. Si la interrupción está habilitada el programa altera su flujo normal y salta a una dirección asignada, llamada “Vector de interrupción” y a partir de esa dirección está escrito el código a ejecutar al producirse la interrupción: “Rutina de servicio de interrupción” o RSI o ISR. Logrando de esta manera atender inmediatamente un evento. Para producir una interrupción, el pin debe estar configurado como entrada y la interrupción debe estar habilitada en los registros correspondientes. Para probar el funcionamiento de la interrupción en el simulador de MPLAB de Microchip podemos crear un “Workbook” en “Debugger”/ “Stimulus”/ “New Workbook”. Se abre una ventana que nos permite aplicar distintos niveles a los pines de entrada. Hacer click en un campo en blanco de la columna “Pin/Sfr” y aparece una flecha para desplegar un menú, aquí elegimos el pin que nos interesa cambiar y en la columna “Action” elegimos la acción que se le aplicara al pin. Puede ser “Toggle” que conmuta el estado del pin. Para activar el estímulo elegido debemos hacer click en la casilla “Fire” de la fila correspondiente. Si la interrupción esta bien configurada, el flujo del programa debe saltar al vector de interrupción al producirse un canto de subida o de bajada, según cómo se configuró la interrupción. Según lo que se necesite hacer con el programa, a veces resulta más conveniente no habilitar la interrupción y evaluar con un “loop” el estado del flag correspondiente a la interrupción. A diferencia del método que explicaba al principio, de esta forma sí se asegura recibir el evento, pues aunque no sea inmediatamente, aunque el evento desaparezca, el flag de interrupción queda activado. Empezando con lenguaje C para microcontrolador PIC. Primero aclaremos que a diferencia de terceras empresas, Microchip no tiene compilador C para los microcontroladores pequeños, sólo para los de gama alta como la familia PIC18 y superiores, los cuales han sido diseñados para trabajar con lenguaje C. El compilador C18 se baja de forma gratuita de la página de Microchip. Aunque el lenguaje Assembler nos permite resolver cualquier problema y debemos primero pensar en resolverlo con Assembler, pues el microcontrolador puede ser más económico, hay requerimientos que nos obligan a programar en un lenguaje de nivel más alto, como lenguaje C:  Evitar complejos algoritmos de aritmética de Assembler.  Simplificación del código y disminución del tiempo de desarrollo. El costo de un uC PIC18F4550 de 40 pines está alrededor de $6.000(Chile). Herramientas: Debemos tener instalado en el computador MPLAB y el compilador C18. Ambos se descargan de forma gratuita de la página de Microchip. Primero debemos instalar MPLAB y después C18, el cual se instala en el raíz y configurará a MPLAB para integrar C18 en MPLAB. Haremos un ejemplo muy simple con las siguientes herramientas de desarrollo:  MPLAB versión 8.56  C18 versión 3.36  Aplicación Microchip HID bootloader v2.6a  Tarjeta de evaluación PICDEM FS USB con uC 18F4550.  Cable USB A a B. El de impresoras sirve. Para quienes deseen conseguir una de mis tarjetas compatibles PICDEM FS USB: Ver sección "Ventas y servicios" CARACTERÍSTICAS DEL MICROCONTROLADOR PIC18F4550:  40 pines  35 pines I/O.  puerto USB 2.0  4 timers  Salida PWM  ADC 10 bit y 13 canales  Arquitectura optimizada para compilador C.  32K memoria flash, 2048 SRAM, 256 EEPROM CARACTERÍSTICAS TARJETA PICDEM FS USB:  Conector USB tipo B  Pulsador y LEDs incorporados en pines I/O.  Microcontrolador PIC18F4550.  Conector e interface serial RS232.  Incluye bootloader HID. (Es reconocido por PC sin necesidad de driver).  Conector ICSP  Incluye potenciómetro en entrada ADC. Debemos revisar y tener una copia de estos archivos a mano:  39632e.pdf datasheets de PIC18F4550  c18_user_guide_51288j.pdf guía de usuario de C18  p18f4550.inc definiciones de registros Ubicados en: C:Archivos de programaMicrochipMPASM Suite  mplab_c18_getting_started_51295f.pdf  mplab-c18-libraries_51297f.pdf  hlppic18configset.chm Ubicados en C:MCC18doc También es recomendable tener algún libro de lenguaje C ANSI aunque sea para PC, para consultar la sintaxis, estructuras de bucles, etc. Descargar archivos (31KB) CREAR PROYECTO EN MPLAB: 1. Crear una carpeta con el nombre que le queramos dar a nuestro proyecto. 2. Copiar en la carpeta archivo fuente main.c disponible en link abajo. 3. Copiar en la carpeta archivo linker. Usar: “rm18f4550 - hid bootload.lkr” para usar con Bootloader HID. 4. En menú “Project” click en “Project Wizard” y en la siguiente ventana click en botón “Siguiente”. 5. En esta ventana elegir “PIC18F4550” y hacer click en siguiente. 6. En campo “Active Toolsuite” elegir “Microchip C18 Toolsuite” y hacer click en siguiente. 7. Ahora click en “Browse” y abrir la carpeta que creamos anteriormente. 8. Elegir nombre de proyecto y click en “Guardar”. 9. En esta ventana, “Step Three” click en “Siguiente”. 10. Ahora en la ventana “Step Four” localizar la carpeta de nuestro proyecto y seleccionar cada uno de los 2 archivos y agregarlos al proyecto haciendo click en “Add”. Luego click en “Siguiente”. 11. En la ventana “Sumary” click en “Finalizar” para crear el proyecto. 12. Nos aparece un esquema de nuestro proyecto en estructura de árbol. Confirmar que aparezcan nuestros 2 archivos: main.c en “Source files” y rm18f4550 - hid bootload.lkr en “Linker script”. Si revisamos con el explorador de archivos la carpeta de nuestro proyecto, veremos que ahora se agregaron 3 archivos más. Estos archivos mantienen la información sobre el proyecto. El que tiene extensión “mcw” guarda la información de las ventanas abiertas y su distribución sobre el espacio de trabajo. Posteriormente podemos abrir nuestro proyecto con este archivo o con el de extensión “mcp”. 13. Ahora ya estamos en condiciones de compilar y ejecutar nuestro proyecto con “Project” “Build All”. Si todo está bién deberíamos obtener “Build Succeeded” en la ventana “Ouput”. Y si revisamos en este momento, con el explorador de archivos, la carpeta de nuestro proyecto veremos que se agregaron 3 archivos más. El que nos interesa por ahora es el que tiene extensión “hex” pues es el que se cargará en el microcontrolador. Para ver en detalle la ejecución del programa debemos aprender a usar el simulador de MPLAB. Ver sección: Uso de Simulador de MPLAB. Es un ejemplo muy sencillo de la guía “Getting started” al cual se le cambió el puerto de salida al puerto D, pues éste incorpora 4 LEDs en la tarjeta PICDEM FS USB. El programa configura el puerto D como salida, lo resetea, y luego lo deja permanentemente en estado alto. Pueden modificarlo ustedes posteriormente para dejar los LEDs permanentemente apagados. Cargar programa al microcontrolador. Una de las características de la tarjeta de evaluación es que ya viene con un bootloader grabado, esto nos permite cargar el programa al microcontrolador sin necesidad de un grabador, pues el bootloader se encarga de recibir el archivo “hex” a través del puerto USB y hacer que el microcontrolador se grabe a si mismo con el programa de nuestra aplicación a continuación del espacio que ocupa el programa del “Bootloader”. E bootloader usado es el denominado HID, que es el que usa Microchip en sus últimas bibliotecas de aplicación MAL (Microchip Aplication Library). Este bootloader es declarado al sistema como un dispositivo de interfaz humana (HID), los cuales Windows reconoce directamente sin necesidad de driver. 1. Ejecutar aplicación “HID bootloader” y nos aparecerá esta ventana: La tarjeta de evaluación PICDEM FS USB normalmente ejecuta el programa que se le ha cargado y si mantenemos presionado uno de sus pulsadores (S2) y reseteamos entra al modo bootloader. Al entrar a este modo será reconocida por el sistema y por la aplicación Bootloader, recuerden que no necesita driver, y se habilitará el botón “Open Hex File” de la aplicación en el PC. 2. Haciendo click en botón “Open Hex File” podemos cargar el archivo con extensión “hex” que generamos anteriormente. 3. Click en “Program/Verify” para cargar el microcontrolador con nuestro programa. Confirmar que la operación se realizó con éxito en la parte informativa de la ventana principal. 4. Presionar pulsador “Reset” de la tarjeta lo que hace que salga del modo bootloader y ejecute nuestro programa. Deben encenderse los 4 LEDs que la tarjeta tiene conectados en el Puerto D. A continuación analizamos el programa para que lo entienda y puedan usarlo como plantilla y modificarlo de acuerdo a sus necesidades. Análisis del programa. 1. Lo que está encerrado entre /* y */ son comentarios y aparecen en MPLAB de color gris claro: /*Ejemplo 2 capítulo "Getting started" "Light LED" modificado para puerto D que tiene LEDs en tarjeta USB_BOARD_4550 XTAL = 20MHz versión: 10 para bootloader HID Modificado: 13 Agosto 2012 */ 2. “//” se usa para agregar comentarios desde que aparece hasta el final de la línea: #pragma config PLLDIV = 5 // 20 MHz crystal/5 = 4MHZ para PLL 96MHz A veces se usan también para deshabilitar una línea del programa sin borrarla: //#pragma config CP2 = OFF 3. Los comandos “#pragma config” le indican al programa grabador el valor de los distintos bytes de fusibles de configuración que tiene el microcontrolador: #pragma config PLLDIV = 5 // 20 MHz crystal/5 = 4MHZ para PLL 96MHz 4. Ya que el programa bootloader ocupa permanentemente un espacio al inicio de la memoria de programa donde se encuentran los vectores de reset e interrupción, debemos re-direccionar estos vectores: // (PROGRAMMABLE_WITH_USB_HID_BOOTLOADER) #define REMAPPED_RESET_VECTOR_ADDRESS 0x1000 extern void _startup (void); // See c018i.c in your C18 compiler dir #pragma code REMAPPED_RESET_VECTOR = REMAPPED_RESET_VECTOR_ADDRESS void _reset (void) { _asm goto _startup _endasm } 5. Con “void main(void)” comienza nuestro programa principal. Está encerrado entre paréntesis de llaves ¨{}” 6. “TRISD = 0;” configura el puerto D como salida. 7. El valor que asignemos a “PORTD” se verá reflejado en la salida: PORTD = 0x0f; Con esto los 4 bits menos significativos se activan, por lo tanto los LEDs se encienden. Uso de Simulador de MPLAB. 1. Si no vemos el código fuente de nuestro programa en este momento y sólo vemos el esquema de árbol. Hacer click en el archivo con extensión .c para abrirlo. 2. Si seleccionamos “Debugger/Select tool” podemos ver varias herramientas de depuración. “MPLAB SIM” no requiere hardware adicional y nos permite simular en pantalla. Elegir esta opción. 3. Se agregará una barra con iconos que nos permiten ejecutar el programa paso a paso, de una sóla vez, saltarse funciones, salir de éstas, etc. Nota: F5, F6, F7, F8, F9 corresponden a los íconos de la barra de depuración. 4. Teniendo abierto nuestro proyecto presionar “F5” (Halt) y luego “F6” (Reset) para asegurarnos que no haya una ejecución en progreso. Nota: Es necesario hacer click en la parte blanca de la ventana que contiene el código para enfocarla y luego ejecutar los comandos de depuración. 5. Presionar “F7” para ejecutar paso a paso. Pasaremos por varias sentencias de funciones que implementan C18 y que aparecen en una ventana separada. Nos concentraremos en llegar a la función “main” de nuestro programa. 6. En la primera línea después de la llave de apertura de main podemos hacer doble click para poner un “Breakpoint”, lo que nos permitirá ejecutar hasta este punto de una sóla vez la próxima vez que corramos el programa desde el principio con F9. 7. Presionar F5 y F6 para resetear, luego F9 y llegaremos al “Breakpoint”. Luego podemos seguir paso a paso. 8. Para ver cómo cambian los registros del microcontrolador ejecutar “View/Watch”: Elegir el registro que queremos observar en la caja combo izquierda, por ejemplo para nuestro programa “Prog2”, elegir “PORTD” y luego click en el botón “Add SFR”. Ejecutemos nuevamente paso a paso observando cómo cambia el estado de “PORTD”. 9. Cuando cerremos el proyecto debemos guardar también el “Work space”. Grabación de E2PROM 93LC46 con Pickit2. Aunque las memorias E2PROM seriales no se comunican a través de ICSP como los microcontroladores, de todas maneras la aplicación de Pickit2 permite grabarlas. En el archivo “pickit 2 readme.txt” (ubicado en C: ARCHIVOS DE PROGRAMAMICROCHIPPICKIT 2 V2) se puede ver la conexión entre los pines del grabador y los de la memoria: PICkit 2 Pin 93LC Device Pin (DIP) (1) VPP 1 CS (2) Vdd 8 Vcc (3) GND 5 Vss (4) PGD 4 DO (5) PGC 2 CLK (6) AUX 3 DI 7 PE - enabled (Vdd) 6 'C' Device ORG Set to select word size Nota. No se conectaron pines 6 y 7 de E2PROM pues en Datasheet se ve que son "NC". Conexión entre Pickit2 y E2PROM 93LC46. También aparecen las conexiones para grabar memorias E2PROM de otras familias como las: 11LC… 24LC 25LC
Copyright © 2024 DOKUMEN.SITE Inc.