SEMINARIO TALLER GRABACION DE MICROCONTROLADORES “PIC” APLICADOS A LA ROBOTICA EXPOSITOR: ING. MELVIN GUSTAVO BALLADARES ROCHA
INTRODUCCION • QUE ES UN MICROCONTROLADOR • Un microcontrolador es un circuito integrado, en cuyo interior posee toda la arquitectura de un computador, esto comprende lo que es CPU, memorias RAM, EEPROM, y circuitos de entrada y salida.
• Existen muchas familias fabricantes de microcontroladores, entre las más comunes están: •
Atmel (AVR ), Hitachi (H8), Intel de 8 bits (8XC42, MCS51, 8xC251) o Intel de 16 bits (MCS96, MXS296), National Semiconductor (COP8), Microchip, Motorola de 8 bits (68HC05, 68HC08, 68HC11) o de 16 bits (68HC12, 68HC16) o de 32 bits (683xx ), NEC (78K), Texas Instruments (TMS370) y Zilog (Z8, Z86E02).
APLICACIONES DE LOS MICROCONTROLADORES
ESTRUCTURA INTERNA
Un microcontrolador de fรกbrica, no realiza tarea alguna, este debe ser programado para que realice desde el simple parpadeo de un led hasta el sofisticado control de un robot.
Un microcontrolador es capaz de realizar la tarea de muchos circuitos lĂłgicos como compuertas AND, OR, NOT, NAND, conversores A/D, D/A, temporizadores, decodificadores, etc., simplificando todo el diseĂąo a una placa de reducido tamaĂąo y pocos elementos.
• Los PIC son una familia de microcontroladores tipo RISC fabricados por Microchip Technology Inc. y derivados del PIC1650, originalmente desarrollado por la división de microelectrónica de General Instrument. • El nombre actual no es un acrónimo. En realidad, el nombre completo es PICmicro, aunque generalmente se utiliza como Peripheral Interface Controller (controlador de interfaz periférico).
TIPOS DE CRISTALES Y OSCILADORES
EL MICROCONTROLADOR PIC 16F628A Los microcontroladores PIC (Peripheral interface Controller). Uno de los microcontroladores más populares en la actualidad es el PIC16F628A y sus variantes PIC16F627A y PIC16F648A, estos modelos (serie A) soportan hasta 100.000 ciclos de escritura en su memoria FLASH, y 1’000.000 ciclos en su memoria Eeprom, este reemplaza rápidamente al popular PIC16F84A, pues presenta grandes ventajas como son: • • • •
oscilador interno RC de 4MHZ, MCLR programable, mayor capacidad de corriente, programación en bajo voltaje
Lo hacen al PIC16F628A, como el microcontrolador ideal para estudiantes y aficionados, ya que al tener oscilador interno y el MCLR (master clear) sea programable, es mucho mรกs sencillo ponerlo en funcionamiento, basta con conectar al pin 14 a 5V y el pin 5 a tierra para que empiece a trabajar.
CARACTERISTICAS GENERALES Hasta aquí se puede resumir las características más relevantes del PIC16F628A, estas son: • Velocidad de operación hasta 20 MHZ con oscilador externo. • Oscilador interno RC (resistencia condensador) de 4 MHZ calibrado de fábrica al ±1 %. • Admite 8 configuraciones de oscilador. • 8 niveles de PILA. • Procesador con arquitectura HARVARD. • Conjunto reducido de instrucciones RISC (35) gama media. • Instrucciones de un ciclo excepto los saltos (200nS por instrucción a 20 MHZ). • Resistencias PULL-UP programables en el puerto B. • Pin RA5 MCLR programable como reset externo o pin de entrada. • Rango de operación desde 3V. hasta 5.5V. • 15 pines de I/O y 1 sólo de entrada (RA5). • Temporizador Perro guardián WDT independiente del oscilador. • Programable con bajo voltaje LPV (5V.). • Programación serial en Circuito ICSP por 2 pines: RB6 reloj y RB7 datos. • Código de protección programable por sectores.
CARACTERISTICAS GENERALES • Memoria de programa FLASH 2048K. de 100.000 ciclos escritura/borrado. • Memoria de datos EEPROM de 1.000.000 ciclos escritura/borrado de 100 años retención. • 2 circuitos comparadores análogos con entradas multiplexadas. • 3 Timers, Timer 0 a 8 bits, Timer 1 a 16 bits y Timer 2 a 8 bits. • Módulos CCP, Captura compara 16 bits, y PWM, modulación de ancho de pulso 10 bits. • 10 fuentes de interrupción. • Módulo de comunicación serial USART/SCI. • Capacidad de corriente para encender led's directamente (25 mA I/O) por cada pin.
RECONOCIMIENTO DE PINES Y SUS FUNCIONES Excluyendo los dos pines de alimentaciรณn, todos los 16 pines restantes pueden ser configurados como entradas o salidas, algunos de ellos tienen funciones especiales.
RECONOCIMIENTO DE PINES Y SUS FUNCIONES
HERRAMIENTAS PARA EL MONTAJE DE PROYECTOS • Protoboard. • Resistencias de varios valores, • Una PC con el siguiente software instalado: PROTEUS, SOFTWARE DIY K150, MICROCODE STUDIO.( ademas de librerias de microcontroladores) • leds • Grabador pick150, microcontrolador PIC 16F628A, fuente de alimentación.
CALCULOS PARA EL MONTAJE DE PROYECTOS Es muy importante saber que en las salidas del microcontrolador al ser encendidas mediante el programa, esta salida entrega el mismo valor de tensión con el que se energiza el microcontrolador, es decir, si el microcontrolador es alimentado con 5V en sus salidas tendremos 5V. Por defecto del fabricante este recomienda que como máximo de carga para una salida del microcontrolador solo se puede alimentar dos led’s. Si por algún motivo se desea mayor corriente se utiliza un transistor. Para realizar el cálculo de la resistencia para energizar el led debemos saber lo siguiente: Tensión de trabajo del led 1.5V Corriente nominal de un led 0.016A Tensión de trabajo (salida microcontrolador) 5V
CALCULOS PARA EL MONTAJE DELaPROYECTOS caída de tensión de la resistencia es: Ur = Ut - Uled Ur = 5V – 1.5V Ur = 3.5V
EMPEZANDO CON LA PROGRAMACION Para poder entender la diferencia entre los dos lenguajes de programación, se debe tener en claro qué es un lenguaje de alto nivel y qué es un lenguaje de bajo nivel, a través del siguiente cuadro podemos ver los niveles de programación.
DECLARACIONES DISPONIBLES EN EL COMPILADOR Debemos entender que declaraciones son cada una de las palabras que el compilador pbp 2.47 tiene reservado para realizar una tarea específica, las más utilizadas son: HIGH, LOW, PAUSE, GOSUB, GOTO, LCDOUT, SERIN, SEROUT, FOR, NEXT, IF, THEN, SOUND, END, un ejemplo: HIGH portb.3
A continuaciรณn las 83 instrucciones disponibles con una breve explicaciรณn.
DECLARACIONES DISPONIBLES EN EL COMPILADOR
DECLARACIONES DISPONIBLES EN EL COMPILADOR
DECLARACIONES DISPONIBLES EN EL COMPILADOR
DEFINE ADC_BITS 8 'Number of bits in ADCIN result DEFINE ADC_CLOCK 3 'ADC clock source (rc = 3) DEFINE ADC_SAMPLEUS 50 'ADC sampling time in microseconds DEFINE BUTTON_PAUSE 10 'Button debounce delay in ms DEFINE CCP1_REG PORTC 'Hpwm 1 pin port DEFINE CCP1_BIT 2 'Hpwm 1 pin bit DEFINE CCP2_REG PORTC 'Hpwm 2 pin port DEFINE CCP2_BIT 1 'Hpwm 2 pin bit DEFINE CHAR_PACING 1000 'Serout character pacing in us DEFINE DEBUG_REG PORTB 'Debug pin port DEFINE DEBUG_BIT 0 'Debug pin bit DEFINE DEBUG_BAUD 2400 'Debug baud rate DEFINE DEBUG_MODE 1 'Debug mode: 0 = True, 1 = Inverted DEFINE DEBUG_PACING 1000 'Debug character pacing in us DEFINE DEBUGIN_REG PORTB 'Debugin pin port DEFINE DEBUGIN_BIT 0 'Debugin pin bit DEFINE DEBUGIN_MODE 1 'Debugin mode: 0 = True, 1 = Inverted DEFINE HPWM2_TMR 1 'Hpwm 2 timer select DEFINE HPWM3_TMR 1 'Hpwm 3 timer select
DECLARACIONES DISPONIBLES EN EL COMPILADOR DEFINE HSER_BAUD 2400 'Hser baud rate DEFINE HSER_CLROERR 1 'Hser clear overflow automatically DEFINE HSER_SPBRG 25 'Hser spbrg init DEFINE HSER_RCSTA 90h 'Hser receive status init DEFINE HSER_TXSTA 20h 'Hser transmit status init DEFINE HSER_EVEN 1 'Use only if even parity desired DEFINE HSER_ODD 1 'Use only if odd parity desired DEFINE HSER_BITS 9 'Use 9th bit for parity DEFINE HSER2_BAUD 2400 'Hser(2) baud rate DEFINE HSER2_CLROERR 1 'Hser(2) clear overflow automatically DEFINE HSER2_SPBRG 25 'Hser(2) spbrg init DEFINE HSER2_RCSTA 90h 'Hser(2) receive status init DEFINE HSER2_TXSTA 20h 'Hser(2) transmit status init DEFINE HSER2_EVEN 1 'Hser(2) Use only if even parity desired DEFINE HSER2_ODD 1 'Hser(2) Use only if odd parity desired DEFINE HSER2_BITS 9 'Hser(2) Use 9th bit for parity DEFINE I2C_HOLD 1 'Pause I2C transmission while clock held low DEFINE I2C_INTERNAL 1 'Use for internal EEPROM on 16CExxx and 12CExxx DEFINE I2C_SCLOUT 1 'Set serial clock to bipolar instead of open-collector
DECLARACIONES DISPONIBLES EN EL COMPILADOR DEFINE I2C_SLOW 1 'Use for >8MHz OSC with standard speed devices DEFINE I2C_SDA PORTA,0 'Data pin for I2C (12-bit core only) DEFINE I2C_SCL PORTA,1 'Clock pin for I2C (12-bit core only) DEFINE LCD_DREG PORTA 'LCD data port DEFINE LCD_DBIT 0 'LCD data starting bit 0 or 4 DEFINE LCD_RSREG PORTA 'LCD register select port DEFINE LCD_RSBIT 4 'LCD register select bit DEFINE LCD_EREG PORTB 'LCD enable port DEFINE LCD_EBIT 3 'LCD enable bit DEFINE LCD_RWREG PORTE 'LCD read/write port DEFINE LCD_RWBIT 2 'LCD read/write bit DEFINE LCD_BITS 4 'LCD bus size 4 or 8 DEFINE LCD_LINES 2 'Number lines on LCD DEFINE LCD_COMMANDUS 2000 'Command delay time in us DEFINE LCD_DATAUS 50 'Data delay time in us DEFINE LOADER_USED 1 'Bootloader Used DEFINE NO_CLRWDT 1 'Forces manual use of CLRWDT DEFINE ONINT_USED 1 'Serves as LOADER_USED for versions before 2.33 DEFINE PULSIN_MAX 1000 'Maximum counts allowed before pulsin times out DEFINE OSC 4 'Oscillator speed in MHz: 3(3.58) 4 8 10 12 16 20 24 25 32 33 40
DECLARACIONES DISPONIBLES EN EL COMPILADOR DEFINE OSCCAL_1K 1 'Set OSCCAL for PIC12C671/CE673 DEFINE OSCCAL_2K 1 'Set OSCCAL for PIC12C672/CE674 DEFINE SER2_BITS 8 'Set number of data bits for Serin2 and Serout2 DEFINE SER2_ODD 1 'Use odd parity instead of even parity DEFINE SHIFT_PAUSEUS 50 'Slow down the Shiftin and Shiftout clock DEFINE USE_LFSR 1 'Use 18Cxxx LFSR instruction DEFINE XINXLAT_OFF 1 'Don’t translate Xin commands to BS2 format DEFINE XOUTXLAT_OFF 1 'Don’t translate Xout commands to BS2 format
MICROCODE ESTUDIO Antes o despuĂŠs de realizar el programa seleccionamos el microcontrolador a ser utilizado en el programa MICROCODE STUDIO que se encuentra que se encuentra en la tercera barra de herramientas en la parte superior izquierda por defecto se encuentra el pic16f628, nosotros lo cambiamos a pic16f628a.
MICROCODE ESTUDIO Terminado nuestro programa y seleccionado el microcontrolador guardamos el archivo con el nombre deseado.
MICROCODE ESTUDIO Seleccionamos el directorio donde empezaremos a compilar y guardar nuestros proyectos.
MICROCODE ESTUDIO Terminado nuestro programa y seleccionado el microcontrolador guardamos el archivo con el nombre deseado.
Guardado el programa realizamos la compilaciรณn del mismo con la primera herramienta de la tercera barra de herramientas con la tecla rรกpida F9.
MICROCODE ESTUDIO Para finalizar debemos simular nuestro programa y verificar si no tiene fallas.
Si el programa no contiene errores la compilaciรณn serรก correcta y en la parte inferior izquierda aparecerรก un mensaje indicando las palabras utilizada de la memoria del pic16f628a.
PROTEUS
La simulaciรณn se la realiza en el programa PROTEUS con la herramienta ISIS:
PROTEUS
Los materiales para la simulación son los siguientes: • pic16f628a • led • resistencia 220Ω Para extraer los materiales abrimos la ventana de librerías, escribimos el código de la pieza a ser utilizada y aceptamos con doble clic o pulsamos el icono de OK.
PROTEUS De la misma manera para el led pero con el nombre de “led animated� para poder simular nuestro programa y visualizar la luminosidad del led, escogemos el color de nuestro agrado.
PROTEUS Para la resistencia buscamos “resistor” en la lista de “category”, en la lista de “sub category” buscamos la potencia de la resistencia en este caso 0.6W.
PROTEUS En la parte izquierda aparecen los dispositivos extraĂdos de las librerĂas en una lista para poderlos simular hacemos un clic sobre el dispositivo y clic en la hoja de trabajo armando el circuito, acomodamos el dispositivo donde nos sea mĂĄs ordenado.
PROTEUS Realizamos las conexiones con el puntero del ratรณn sobre el extremo del pin que queremos conectar damos un clic y desplazamos al primer extremo de la resistencia terminado la conexiรณn con otro clic y luego del segundo extremo de la resistencia al รกnodo del led.
PROTEUS Para que el led trabaje el cátodo debe ir conectado a negativo o a tierra. Para realizar la conexión a tierra hacemos clic en el icono de “terminals mode”, clic en”ground” y clic en el la hoja de trabajo para realizar la conexión. En la cuarta línea que indica “programa file” hacemos clic en el icono de la carpeta abierta, para cargar el programa buscamos el archivo. HEX donde guardamos el programa compilado del MICROCODE STUDIO
PROTEUS Con esto termina la conexiรณn ahora solo queda cargar el programa al pic, para esto damos doble clic en el microcontrolador y nos aparecerรก una venta:
PROTEUS
PROTEUS Clic sobre el archivo y abrir, despuĂŠs el programa vuelve a la anterior ventana donde ajustamos el valor del cristal a utilizar en la quinta lĂnea en este caso de 4Mhz.
PROTEUS Y por último OK para cerrar la ventana y play para empezar la simulación.
Realizado todo esto verificamos que nuestro programa funcione correctamente para llevarlo a la forma física.
GRABANDO EL PROGRAMA AL PIC Antes de gravar el programa debemos aumentar 3 lĂneas principales: Define CLOCK_FREQUENCY = 4 ' (4 Mhz) para el compilador => Pic Simulator Ide DEFINE OSC 4 (Indicamos que el valor del cristal es de 4Mhz). Define mclr_of (Desactivamos el reseteo externo del pic para poder utilizar el pin RA.5). CMCON = 7 (Desactivamos los comparadores de voltaje para que la compuerta A trabaje como digital). Entonces el cĂłdigo queda de la siguiente forma:
GRABANDO EL PROGRAMA AL PIC Todo completo sera: trisb.0=0 ;Convertimos Puerto b en Salidas inicio: ; nombre de subrutina inicio HIGH portb.1 ; enciende el led que esta conectado en el pin 7 PAUSE 1000 ; espera un segundo LOW portb.1 ; apaga el led PAUSE 1000 ; espera un segundo GOTO inicio ; continĂşa el programa para siempre
Volver diapositiva 45
GRABANDO EL PROGRAMA AL PIC Guardamos el código y lo compilamos nuevamente. Si no colocamos estas cuatro líneas tendremos problemas al montar el circuito ya que por defecto el programa utiliza cristal externo, reseteo del pic y los comparadores de tensión, este último trae problemas al utilizar la compuerta A como entrada. El programa que utilizaremos es el MICROBURN, el primer paso a realizar es abrir el soft observar el modelo y colocar el pic en el grabador luego conectar este a la PC. Una vez conectado abrimos el programa y este reconocerá el pic inmediatamente.
GRABANDO EL PROGRAMA AL PIC Si el pic es reconocido debemos cargar el programa en la herramienta “Load” e “Import HEX”.
GRABANDO EL PROGRAMA AL PIC
Una vez cargado se podrá apreciar que los números hexadecimales encontrados en “Program Memory” cambian.
GRABANDO EL PROGRAMA AL PIC Presionamos el icono de “Program” y el programa será grabado al pic, podremos notar que los led’s del grabador parpadean y si la grabación es correcta aparecerá un mensaje con el fondo de color verde.
GRABANDO EL PROGRAMA AL PIC
MONTAJE DEL CIRCUITO
Por último armamos el circuito.
NOMBRES DE LOS PUERTOS PARA LOS DIFERENTES MC Nombre de los puertos para los diferentes Microcontroladores (12fxx,16fxx,18fxx)
Nombre de los puertos para los diferentes Microcontroladores (12fxx,16fxx,18fxx)
EJEMPLOS Existen diferentes formas para realizar el parpadeo de un led a continuaciรณn veremos las mรกs utilizadas que nos servirรกn para los proyectos mรกs avanzados y para obtener comodidad al momento de programar.
Etiquetar o nombrar una puerta. Nombre de los puertos para Las formas de etiquetar una puerta son varias, algunas ya vimos antes pero las mostramos a continuaciรณn. los diferentes Led VAR Portb.0 Microcontroladores Rojo VARPorta.0 (12fxx,16fxx,18fxx)
EJEMPLOS Diseñar una señal de tipo cuadrada con ciclo útil de 50% on y 50% of frecuencia de 1 Hz (Prender y apagar un led con lapso de un 1s)
Nombre de los puertos para los diferentes Microcontroladores (12fxx,16fxx,18fxx)
En el siguiente programa daremos un nombre a un puerto para facilitar la programación.
Las diferencias son LED VAR PORTB.3 con esta línea etiquetamos a portb.3 con el nombre de led, HIGH LED con esta línea encendemos el led y LOW LED apagamos el led. En este ejemplo no se colocó la instrucción END ya que tenemos GOTO INICIO y el programa se convertirá un ciclo sin fin.
EJEMPLOS
El programa es el siguiente:
ProgramaciĂłn con nĂşmeros binarios.
Nombre de los puertos para los diferenteEl programa es el siguiente: s Microcontroladores (12fxx,16fxx,18fxx)
EJEMPLOS Juegos de luces. Diseñar una secuencia la intercalaremos las puertas del puerto B (0,2,4,6) encendidos y (1,3,5,7) apagados por medio segundo, después de este (0,2,4,6) se apagaran y (1,3,5,7) se encenderán por otro medio segundo después este proceso se repetirá.
Nombre de los puertos para los diferentes Microcontroladores (12fxx,16fxx,18fxx)
EJEMPLOS Diseñar un sistema de control de trafico (semáforo) en el cual tenga la calle 1 tenga 12s para conducir, 3 s para preparar el arranque y 12s para no circular. La calle 2 12 s para no circular, 3 para preparar motor y 12 para circular. Utilizar la asignación de variables de tipo “VAR”
Nombre de los puertos para los diferentes Microcontroladores (12fxx,16fxx,18fxx)
EJEMPLOS Diseñar un sistema de arranque de 8 motores no simultaneo, el arranque de motor deberá ser cada 2 segundo y cuando el ultimo motor se apague después de 11 segundos prender todos durante 10s (no tomar en cuentas la corriente de arranque por motor, ni la caída de tensión en el enganche)
Nombre de los puertos para los diferentes Microcontroladores (12fxx,16fxx,18fxx)
SUBRUTINAS ESPECIALES SUBRUTINAS ESPECIALES.Una subrutina especial como asi la podriamos llamar seria la “GOSUB y el RETURN”
Ejemplo.Inicio: Portb.0=%00000001 GUSUB tiempo Portb.1=%11111111 GOSUB tiempo Tiempo: Pause 1000 RETURN
INSTRUCCIONES FOR- NEXT La instrucciĂłn FOR-NEXT permite a un programa realizar n veces lo programado y su sintaxis es la siguiente:
Donde R es la variable asignada con el valor de 1 hasta 5, es decir se realizara 5 veces lo que este dentro del cuerpo del programa. Ejemplo DiseĂąar las luces de desplazamiento de izquierda a derecha, 7 veces a la izquierda y 7 a la derecha con intervalos de tiempo de 200ms.
ENTRADAS Proyectos con pulsadores. En este capĂtulo veremos cĂłmo utilizar entradas a un pic para esto tenemos dos opciones de circuitos.
En la conexión de la parte izquierda es cuando el pic recibe 5V o 1 lógico constantemente y cuando sea oprimido el pulsador este recibirá 0V o 0 lógico. En la conexión de la parte derecha pasa lo contrario el pic recibe 0V o cero lógico constantemente y cuando sea oprimido el pulsador este recibirá 5V o 1 lógico. Instrucciones IF-THEN-ELSE-ENDIF Las siguientes instrucciones son muy utilizadas en los lenguajes de alto nivel, en el caso de la programación de microcontroladores se utilizaran para diversas aplicaciones una de ellas seran lo pulsadores.