Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
CECYT 9 JUAN DE DIOS BÁTIZ PAREDES IPN PROGRAMACIÓN DE MICROCONTROLADORES PIC 18F4550 ING. OSCAR GARIBAY CASTELLANOS, ING. OSCAR MEDINA SÁNCHEZ 1 MICROCONTROLADORES PIC (PERIPHERICAL INTERFACE CONTROLLER) Los Pic´s son una familia de microcontroladores tipo RISC (Reduced Instruction Set Computer) fabricados por Microchip Technology Inc. y derivados del PIC1650 originalmente desarrollado por la división de microelectrónica de General Instruments. CISC (Complex Instruction Set Computer). -Procesadores con un juego de instrucciones complejo. RISC (Reduced Instruction Set Computer). -Procesadores con un repertorio reducido de instrucciones. SISC (Specific Instruction Set Computer). -Procesadores con un juego de instrucciones específico para cada aplicación. El nombre actual no es un acrónimo, en realidad el nombre completo es PICmicro, aunque generalmente se utiliza Peripheral Interface Controller (Controlador de Interfaz Periférico). El PIC original se diseñó para ser usado con la nueva CPU de 16 bits CP16000. Siendo en general una buena CPU, ésta tenía malas prestaciones de E/S, el PIC de 8 bits se desarrolló en 1975 para mejorar el rendimiento del sistema quitando peso de E/S a la CPU. El PIC utilizaba micro-código simple almacenado en ROM para realizar estas tareas; y aunque el término no se usaba por aquel entonces, se trata de un diseño RISC que ejecuta una instrucción cada 4 ciclos. En 1985 la división de microelectrónica de General Instruments se separa como compañía independiente que es incorporada como filial y el nuevo propietario cancelo la mayoría de los desarrollos, que para ese entonces ya eran obsoletos. El PIC sin embargo se mejoró con EPROM para conseguir un controlador de canal programable. Actualmente los PIC´s contienen varios periféricos y memorias programables de 512 a 32000 palabras (Una palabra corresponde a una instrucción en lenguaje ensamblador y puede ser 12, 14 o 16 bits dependiendo del tipo de PIC). CECYT 9 JUAN DE DIOS BÁTIZ PAREDES IPN PROGRAMACIÓN DE MICROCONTROLADORES PIC 18F4550 ING. OSCAR GARIBAY CASTELLANOS, ING. OSCAR MEDINA SÁNCHEZ 2 CARACTERÍSTICAS ELÉCTRICAS DEL PIC 18F4550 Los microcontroladores PIC 18F4550 tienen características de operación que debemos conocer, para tomar las precauciones necesarias en su manejo, para evitar causarle algún daño al dispositivo. A continuación, citamos las características más importantes de los microcontroladores PIC 18F4550: F = Memoria Flash habilitada para trabajar de 4.2 a 5.5 Volts LF = Bajo voltaje de 2.0 a 5.5 Volts. Rango de temperatura de sesgo -40°C a 85°C Temperatura mantenida -65°C a 150°C Voltaje en VDD con respecto a VSS -0.3 a 7.0Volts Corriente Máxima en VDD = 300mA Corriente Máxima en VSS = 250mA Corriente Máxima en cualquier pin = 25mA Corriente Máxima en todos los puertos = 200 mA. ENCAPSULADO DEL PIC 18F4550. En la siguiente figura se muestra la estructura interna del microcontrolador PIC 18F4550, esta nos será de gran utilidad debido a que físicamente corresponde al encapsulado, y por lo tanto será la base del alambrado de todo circuito de control desarrollado con este microcontrolador. CECYT 9 JUAN DE DIOS BÁTIZ PAREDES IPN PROGRAMACIÓN DE MICROCONTROLADORES PIC 18F4550 ING. OSCAR GARIBAY CASTELLANOS, ING. OSCAR MEDINA SÁNCHEZ 3 PERIFÉRICOS. Los periféricos son todos aquellos dispositivos externos que se conectan al microcontrolador, tienen como objeto acondicionar las señales externas para poder ser ingresadas al dispositivo, así como para acoplar las señales de salida del microcontrolador hacia la etapa de potencia. Sabemos que cada pin de Entrada/Salida (E/S) del microcontrolador soporta cargas máximas de 25mA, y voltajes tipo TTL (5 volts), esto nos permite ver que solo podemos conectar a estos elementos, dispositivos de baja potencia como el LED o algún tipo de transistor similar. Para activar elementos de mayor potencia es necesario usar configuraciones especiales que nos permitan generar etapas escalonadas de potencia, realizando la función de transductores, como es el caso de los arreglos Darlington con transistores, o a través de optoacopladores y optotriacs. Existen arreglos encapsulados en circuitos integrados, como es el caso del ULN2003 que cuenta con 7 arreglos de transistores tipo Darlington, los cuales se pueden alimentar en su entrada a 5 volts de corriente directa y consume corrientes menores a 20mA, en su salida funcionan como inversores, soportan corrientes de hasta 500mA y voltajes que van de 5 hasta 36 volts de corriente directa, lo que los convierte en un sistema de acoplamiento efectivo entre las etapas de control, y potencia. A continuación, mostramos algunos elementos empleados para el acoplamiento entre etapas. TRANSISTOR BD135 CORRIENTE DE COLECTOR MÁXIMA 1.5 A VOLTAJE DE COLECTOR MÁXIMO 45 BETA (β) 40 / 250 CECYT 9 JUAN DE DIOS BÁTIZ PAREDES IPN PROGRAMACIÓN DE MICROCONTROLADORES PIC 18F4550 ING. OSCAR GARIBAY CASTELLANOS, ING. OSCAR MEDINA SÁNCHEZ 4 MODELO Ic max Vcc max BETA (β ) 2N22 600 mA 40 V 100/300 BC107 100 mA 45 V 100/450 BD135 1.5 A 45 V 40/250 TIP122 5A 100 V 1000 CARACTERÍSTICAS ELÉCTRICAS DE RELEVADORES MODELO SUN HOLD. VOLTAJE AL QUE OPERAN RESISTENCIA DE LA BOBINA CORRIENTE DE ENERGIZACIÓN 5 VOLTS. 69 Ω 72 mA. 6 VOLTS. 100 Ω 60 mA. 9 VOLTS. 225 Ω 40 mA. 12 VOLTS. 400 Ω 30 mA. 18 VOLTS. 900 Ω 20 mA. Los microcontroladores PIC 18F4550 son dispositivos empleados en el diseño de sistemas automatizados, su programación es a través del lenguaje ensamblador, ó por medio de un compilador (Un software cuya función es convertir un código en lenguaje de alto nivel a código máquina). Nosotros utilizaremos el compilador “PIC C Compiler”, posteriormente lo grabaremos al microcontrolador con la ayuda de un software conocido como PIC Kit 2, y un programador. Debido a que el compilador es un convertidor de código es necesario que conozcamos el lenguaje de alto nivel que emplearemos (en este caso se trata del lenguaje c), las librerías, tipos de variables, funciones, arreglos etc. USO DE LOS PUERTOS COMO ENTRADAS-SALIDAS DIGITALES. Los microcontroladores en general están constituidos por grupos funcionales que reciben el nombre de puertos, cada uno contiene un conjunto de pines, según su uso realizaran una con función en especial. El primer caso es el manejo de pines como líneas de entrada-salida. Empezaremos por establecer que cada puerto corresponde a un byte (8bits) de información, ahora bien, un bit físicamente corresponde a un pin del dispositivo en específico, sin embargo, esto no quiere decir que un puerto cuente con 8 pines físicamente (tal vez solo tenga dos pines). A pesar de esto en la configuración inicial del programa consideraremos la existencia de los 8 bits. Cada pin podrá ser utilizado como una línea de entrada o salida, al emplearse como entrada, en la configuración se le declarará el número 1, de lo contrario (si se usa el pin como salida) se declara el número 0. CECYT 9 JUAN DE DIOS BÁTIZ PAREDES IPN PROGRAMACIÓN DE MICROCONTROLADORES PIC 18F4550 ING. OSCAR GARIBAY CASTELLANOS, ING. OSCAR MEDINA SÁNCHEZ 5 Ahora veamos el primer ejemplo de la programación para un PIC 18F4550, el cual realizará el arranque y paro de un motor (primero manejaremos el ciclo repetitivo DO-While). #include “arranque.h” //Archivo generado por el usuario void main() //Inicio del programa { setup_oscillator(OSC_8MHZ|OSC_NTRC|osc_31250|osc_pll_off); set_tris_a(0b0000011); // Configuración del Puerto E/S los pines a0 y a1 sedefinen como entradas, los demás como salidas do //Inicio del ciclo repetitivo do-while { if(input(pin_a0)) //Condicional si hay señal en la entrada a0 { output_high(pin_a7); // Activación de la salida a7 } if(input(pin_a1)) //Condicional si hay señal en la entrada a1 { output_low(pin_a7); // Desactivación de la salida a7 } } while (true); //Fin del ciclo repetitivo do-ba7); } if(input(pin_a1)) { output_low(pin_a7); } } } Como podemos ver en los dos casos la secuencia realiza la misma función, aunque con la única variación del uso de diferentes estructuras repetitivas. A continuación, mostramos una serie de ejercicios en los que se emplean ambas estructuras (for y do-while), bajo diferentes condiciones. CECYT 9 JUAN DE DIOS BÁTIZ PAREDES IPN PROGRAMACIÓN DE MICROCONTROLADORES PIC 18F4550 ING. OSCAR GARIBAY CASTELLANOS, ING. OSCAR MEDINA SÁNCHEZ 6 El siguiente ejercicio corresponde a una prensa que troquela un producto, para que el cilindro realice la acción se considera que el operador debe cerrar una guarda de seguridad y presionar el botón de inicio. Solamente se inicia el proceso si se cumplen las dos condiciones. CECYT 9 JUAN DE DIOS BÁTIZ PAREDES IPN PROGRAMACIÓN DE MICROCONTROLADORES PIC 18F4550 ING. OSCAR GARIBAY CASTELLANOS, ING. OSCAR MEDINA SÁNCHEZ 7 PRENSA #include “arranque.h” void main() { setup_oscillator(OSC_8MHZ|OSC_NTRC|osc_31250|osc_pll_off); set_tris_a(0b00000111); do { if(input(pin_a0) && input(pin_a1)) { output_high(pin_a3); } if(input(pin_a2)) { output_low(pin_a3); } } while (true); } PRENSA #include “arranque.h” void main() { setup_oscillator(OSC_8MHZ|OSC_NTRC|osc_31250|osc_pll_off); set_tris_a(0b00000111); for(;;) { if(input(pin_a0) && input(pin_a1)) { output_high(pin_a4); } if(input(pin_a2)) { output_low(pin_a4); } } CECYT 9 JUAN DE DIOS BÁTIZ PAREDES IPN PROGRAMACIÓN DE MICROCONTROLADORES PIC 18F4550 ING. OSCAR GARIBAY CASTELLANOS, ING. OSCAR MEDINA SÁNCHEZ 8 Ahora veremos el ejemplo en el cual un motor eléctrico se puede arrancar desde dos puntos diferentes, además la marcha también podrá detenerse desde dos lugares diferentes como se ve a continuación. ARRANQUE Y PARO DESDE DOS PUNTOS DIFERENTES #include “arranque.h” void main() { Setup_oscillator(OSC_8MHZ|OSC_NTRC|osc_31250|osc_pll_off); set_tris_a(0b00001111); do { if(input(pin_a0) || input(pin_a1)) { output_high(pin_a4); } if(input(pin_a2)||input(pin_a3)) { output_low(pin_a4); } } while (true); } ARRANQUE Y PARO DESDE DOS PUNTOS DIFERENTES #include “arranque.h” void main() { Setup_oscillator(OSC_8MHZ|OSC_NTRC|osc_31250|osc_pll_off); set_tris_a(0b00001111); for(;;) { if(input(pin_a0) || input(pin_a1)) { output_high(pin_a4); } if(input(pin_a2)||input(pin_a3)) { output_low(pin_a4); } } } CECYT 9 JUAN DE DIOS BÁTIZ PAREDES IPN PROGRAMACIÓN DE MICROCONTROLADORES PIC 18F4550 ING. OSCAR GARIBAY CASTELLANOS, ING. OSCAR MEDINA SÁNCHEZ 9 Ahora veremos la utilidad del uso de variables en el desarrollo de sistemas, en los cuales se lleva a cabo una acción (o no) dependiendo del estado anterior del sistema. El caso más simple es el que se presenta a continuación, en este caso se pretende que al presionar un botón arranque un motor eléctrico en sentido horario, al presionar un segundo botón deberá iniciar su marcha en sentido anti-horario, un tercer botón servirá para detener la marcha del motor independientemente del sentido al que se encuentre girando, la condición primordial de este sistema es que si el motor está en marcha hacia uno de los sentidos, la máquina no pueda ser activada en sentido contrario. ARRANQUE, PARO Y REVERSA DE UN MOTOR TRIFÁSICO. #include “arranque.h” Int A,R; void main() { setup_oscillator(OSC_8MHZ|OSC_NTRC|osc_31250|osc_pll_off); set_tris_a(0b00000111); doh { if(input(pin_a0) && R==0 &&!input(pin_a2)) { output_high(pin_a3); A=1; } if(input(pin_a1)&&A==0&& !input(pin_a2)) { output high(pin_a4); R=1; } If(input(pin_a2)) { output low(pin_a3); output low(pin_a4); A=0; R=0; } } while (true); } CECYT 9 JUAN DE DIOS BÁTIZ PAREDES IPN PROGRAMACIÓN DE MICROCONTROLADORES PIC 18F4550 ING. OSCAR GARIBAY CASTELLANOS, ING. OSCAR MEDINA SÁNCHEZ 10 ARRANQUE, PARO Y REVERSA DE UN MOTOR TRIFÁSICO. #include “arranqueyreversa.h” Int A,R; void main() { setup_oscillator(OSC_8MHZ|OSC_NTRC|osc_31250|osc_pll_off); set_tris_a(0b00000111); for(;;) { if(input(pin_a0) && B==0 &&!input(pin_a2)) { output_high(pin_a3); A=1; } if(input(pin_a1)&&A==0&& !input(pin_a2)) { output high(pin_a4); R=1; } If(input(pin_a2) { output low(pin_a3); output low(pin_a4); A=0; R=0; } } } CECYT 9 JUAN DE DIOS BÁTIZ PAREDES IPN PROGRAMACIÓN DE MICROCONTROLADORES PIC 18F4550 ING. OSCAR GARIBAY CASTELLANOS, ING. OSCAR MEDINA SÁNCHEZ 11 Como podemos ver en el caso anterior las variables nos han servido como seguros para evitar que se active la máquina en el sentido opuesto. Ahora veamos un ejemplo con una selladora automática que al presionar el botón de inicio es desplazado el objeto a sellar, posteriormente se activa el cilindro que realiza el sellado, finalmente un tercer cilindro desplaza la pieza ya sellada. SELLADORA #include “arranque.h” Int A,B; void main() { setup_oscillator(OSC_8MHZ|OSC_NTRC|osc_31250|osc_pll_off); set_tris_a(0b00011111); for(;;) { if(input(pin_a1) &&! input(pin_a0) &&A==0 && B==0 ) { output_high(pin_a5); } If(input(pin_a2)) {output low(pin_a5); output high(pin_a6); A=1; B=0; } If (input(pin_a3)) { output low(pin_a6); output high(pin_a7); A=0; B=1; } If (input(pin_a4)) { output low(pin_a7); A=0; B=1; } } } CECYT 9 JUAN DE DIOS BÁTIZ PAREDES IPN PROGRAMACIÓN DE MICROCONTROLADORES PIC 18F4550 ING. OSCAR GARIBAY CASTELLANOS, ING. OSCAR MEDINA SÁNCHEZ 12 SELLADORA #include “arranque.h” Int A,B; void main() { setup_oscillator(OSC_8MHZ|OSC_NTRC|osc_31250|osc_pll_off); set_tris_a(0b00011111); do { if(input(pin_a1) &&! input(pin_a0) &&A==0 && B==0 ) { output_high(pin_a5); } If(input(pin_a2)) {output low(pin_a5); output high(pin_a6); A=1; B=0; } If (input(pin_a3)) { output low(pin_a6); output high(pin_a7); A=0; B=1; } If (input(pin_a4)) { output low(pin_a7); A=0; B=1; } } while (true); } Como podemos ver en este caso las variables se han utilizado para establecer si una acción se ha llevado a cabo e iniciar la nueva etapa. Otra aplicación de las variables es cuando deseamos llevar a cabo el conteo de eventos, que nos permitirá iniciar un proceso o detenerlo basándonos en el resultado de dicha acción. CECYT 9 JUAN DE DIOS BÁTIZ PAREDES IPN PROGRAMACIÓN DE MICROCONTROLADORES PIC 18F4550 ING. OSCAR GARIBAY CASTELLANOS, ING. OSCAR MEDINA SÁNCHEZ 13 Ejemplo: La puerta de un auditorio se encuentra abierta, y así se mantendrá hasta que un sensor detecte que han ingresado 20 persona, después de esto se cerrara la puerta por 10 segundos para después abrirse nuevamente e iniciar el conteo una vez más a partir de cero. Nota: El cierre y la apertura de la puerta se realiza a través de un cilindro de doble efecto, controlado por una electroválvula 4/2 monoestable. #include "contador1.h" void main() { int A=0; setup_oscillator(OSC_8MHZ|OSC_INTRC|OSC_31250|OSC_PLL_OFF); set_tris_a(0b11111111); set_tris_b(0b00000000); for(;;) { if (input(pin_a0)) {A=A++; delay_ms(500); } if(A==20) { output_high(pin_b0); delay_ms(10000); output_low(pin_b0);A=0; } } } CECYT 9 JUAN DE DIOS BÁTIZ PAREDES IPN PROGRAMACIÓN DE MICROCONTROLADORES PIC 18F4550 ING. OSCAR GARIBAY CASTELLANOS, ING. OSCAR MEDINA SÁNCHEZ 14 Ejemplo: Ahora veremos el caso de una habitación en la cual solo pueden entrar 20 personas, se tiene una puerta de entrada y una de salida, cuando la habitación tiene el cupo máximo, la puerta de acceso se cierra, en el momento en que la habitación libera uno o más espacios la puerta de acceso se abre. Nota: Se cuenta con dos sensores uno a la entrada y otro a la salida para realizar el conteo. El cierre y la apertura de la puerta se realiza a través de un cilindro de doble efecto, controlado por una electroválvula 4/2 biestable. #include "contador2.h" void main() { int A=0; setup_oscillator(OSC_8MHZ|OSC_INTRC|OSC_31250|OSC_PLL_OFF); set_tris_a(0b11111111); set_tris_b(0b00000000); for(;;) { if (input(pin_a0)) { A=A++; delay_ms(500); } if(input(pin_a1)) { A=A--; delay_ms(500); } if(A==0) { output_high(pin_b0); output_low(pin_b1); } if(A==20) { output_low(pin_b0); output_high(pin_b1); } } } CECYT 9 JUAN DE DIOS BÁTIZ PAREDES IPN PROGRAMACIÓN DE MICROCONTROLADORES PIC 18F4550 ING. OSCAR GARIBAY CASTELLANOS, ING. OSCAR MEDINA SÁNCHEZ 15 SECUENCIAS TEMPORIZADAS En muchos procesos automáticos se llevan a cabo acciones que deben ejecutarse después de que se ha pulsado un botón, arrancado un dispositivo, detectado una actividad, etc. El compilador CCS contiene en su librería principal una serie de instrucciones que nos sirven para establecer retardos de tiempo entre dos ó más acciones, las cuáles deben seguir una sintaxis, que mostramos en la siguiente tabla. Sintáxis Tipo de retardo delay_cicles ( ) Retardo de tiempo en ciclos delay_us ( ) Retardo de tiempo en micro-segundos delay_ms ( ) Retardo de tiempo en mili-segundos Para visualizar un poco la aplicación de los retardos de tiempo tomaremos como ejemplo un generador de pulsos, basado en el circuito integrado 555 en su configuración astable (Como veremos, este generador de pulsos es más sencillo en su forma física con el PIC 18F4550 que de la forma tradicional). 555 astable #include “parpadeo” #define DEL 2000 void main () { setup_oscillator(OSC_8MHZ|OSC_INTRC|OSC_31250|OSC_PLL_OFF); set_tris_a(0b00000000); do { output_low(pin_a2); delay_ms(DEL); output_high(pin_a2); delay_ms (DEL); } while (true); } CECYT 9 JUAN DE DIOS BÁTIZ PAREDES IPN PROGRAMACIÓN DE MICROCONTROLADORES PIC 18F4550 ING. OSCAR GARIBAY CASTELLANOS, ING. OSCAR MEDINA SÁNCHEZ 16 Ahora tomaremos el ejemplo en el cual al presionar el botón de arranque inicia la marcha un primer motor, después de un tiempo que en este caso son 3 segundos se activa el segundo motor, al presionar el botón paro el último motor en arrancar deberá detener primero la marcha, y el primero en arrancar se detendrá tres segundos después. SECUENCIA DE MOTORES #include “sec.h” #define DEL 3000 void main() {setup………….. set_tris_a(0b00000011); set_tris_b(0b00000000); do { if(input(pin_a0)) { output_high(pin_b0); delay_ms(DEL); output_high(pin_b1); } if(input(pin_a1)) { output_low(pin_b1); delay_ms(DEL); output_low(pin_b0); } } while (true); } Ahora realizamos un ejercicio para construir una expendedora de refrescos. Según sea la elección del usuario se activará una salida que será acorde al producto deseado. CECYT 9 JUAN DE DIOS BÁTIZ PAREDES IPN PROGRAMACIÓN DE MICROCONTROLADORES PIC 18F4550 ING. OSCAR GARIBAY CASTELLANOS, ING. OSCAR MEDINA SÁNCHEZ 17 EXPENDEDORA DE REFRESCOS #include “refresco.h” Int A; void main() { setup_oscillator(OSC_8MHZ|OSC_NTRC|osc_31250|osc_pll_off); set_tris_a(0b11111111); set_tris_b(0b00000000); do { if(input(pin_a0)) {A=1;} If(input(pin_a1)) {A=2;} If (input(pin_a2)) {A=3;} If (input(pin_a3)) {A=4;} switch(A) { case 1: {output high(pin_b0); delay_ms(5000); output low(pin_b0); break; } case 2: {output high(pin_b1); delay_ms(5000); output low(pin_b1); break; } case 3: {output high(pin_b2); delay_ms(5000); output low(pin_b2); break; } case 4: {output high(pin_b3); delay_ms(5000); output low(pin_b3); break; } } while (true);} CECYT 9 JUAN DE DIOS BÁTIZ PAREDES IPN PROGRAMACIÓN DE MICROCONTROLADORES PIC 18F4550 ING. OSCAR GARIBAY CASTELLANOS, ING. OSCAR MEDINA SÁNCHEZ 18 Nota: En este último ejemplo utilizamos le estructura de selección múltiple switch (aunque también se pudo haber empleado la condicional if ó if-else), por lo que podemos concluir que según los recursos o imaginación del programador se pueden emplear diferentes elementos de la programación en C. PANTALLA LCD En un sistema de control, es importante visualizar el estado del proceso, esta función la realiza un dispositivo conocido como “display”. El primer display que se construyo está conformado por siete LED´s conectados en un punto común (ánodo o cátodo), por lo que se le conoce como display de siete segmentos. Al tener que alimentar siete LED´s para formar un número, este tipo de dispositivos requiere una gran cantidad de salidas, lo que implica un mayor uso de recursos (pines) por parte del PIC´s sin embargo en la actualidad se cuenta con dispositivos más eficientes conocidos como LCD (Display de Cristal Líquido). Estos dispositivos cuentan con elementos que nos permiten manejar números y caracteres al mismo tiempo utilizando 8 pines del microcontrolador, la configuración del LCD con relación al Microcontrolador PIC 18F4550 se presenta en la siguiente tabla. PIN DEL LCD PIN DEL MICROCONTROLADOR ENABLE D0 RS D1 RW D2 DATO 4 D4 DATO 5 D5 DATO 6 D6 DATO 7 D7 Además de conocer la configuración de la pantalla LCD con el Microcontrolador PIC 18F4550, es necesario que conozcamos la función de algunos comandos empleados en la programación de la pantalla. La siguiente tabla muestra el comando y la función de cada uno. #include “lcd.c” Le indica al programa que se va a utilizar la biblioteca de la LCD lcd_init(); Inicializa la biblioteca de la LCD lcd_gotoxy(x,y); Indica la posición de acceso al LCD lcd_putc(char s); \f \n \b Limpia el LCD. El cursor se va a la posición (1,2) El cursor retrocede una posición Para visualizar la aplicación de los elementos antes mencionados realicemos el siguiente ejercicio. CECYT 9 JUAN DE DIOS BÁTIZ PAREDES IPN PROGRAMACIÓN DE MICROCONTROLADORES PIC 18F4550 ING. OSCAR GARIBAY CASTELLANOS, ING. OSCAR MEDINA SÁNCHEZ 19 La pantalla desplegará la palabra buenos días, un segundo después en el segundo renglón aparecerá la palabra bienvenido, un segundo más tarde se borra el mensaje y aparece la palabra prueba, finalmente un segundo después aparece la palabra hasta luego, repitiéndose en forma cíclica. #include "pantalla.h" #include "lcd.c" void main() { setup_oscillator(OSC_8MHZ|OSC_INTRC|OSC_31250|OSC_PLL_OFF); lcd_init(); for(;;) { lcd_putc("\f"); lcd_gotoxy(2,1); lcd_putc("Buenos Dias"); delay_ms(1000); lcd_gotoxy(4,2); lcd_putc("Bienvenido"); delay_ms(1000); lcd_putc("\f"); lcd_gotoxy(1,1); lcd_putc("PRUEBA"); delay_ms(1000); lcd_putc("\f"); lcd_gotoxy(1,1); lcd_putc("Hasta Luego"); delay_ms(1000); } } CECYT 9 JUAN DE DIOS BÁTIZ PAREDES IPN PROGRAMACIÓN DE MICROCONTROLADORES PIC 18F4550 ING. OSCAR GARIBAY CASTELLANOS, ING. OSCAR MEDINA SÁNCHEZ 20 #include "pantalla.h" #include "lcd.c" void main() { setup_oscillator(OSC_8MHZ|OSC_INTRC|OSC_31250|OSC_PLL_OFF); lcd_init(); set_tris_a(0b00000000); set_tris_b(0b11111111);lcd_putc("\f"); delay_ms(1000); lcd_gotoxy(4,1); lcd_putc("Bienvenido"); for(;;) { If (input(pin_a0)) { output_high(pin_b0); lcd_putc("\f"); lcd_gotoxy(4,1); lcd_putc("MOTOR EN"); delay_ms(1000); lcd_gotoxy(5,2); lcd_putc("MARCHA"); } If (input(pin_a1)) { output_low(pin_b0); lcd_putc("\f"); lcd_gotoxy(5,1); lcd_putc("MOTOR"); delay_ms(1000); lcd_gotoxy(4,2); lcd_putc("DETENIDO"); } } } CECYT 9 JUAN DE DIOS BÁTIZ PAREDES IPN PROGRAMACIÓN DE MICROCONTROLADORES PIC 18F4550 ING. OSCAR GARIBAY CASTELLANOS, ING. OSCAR MEDINA SÁNCHEZ 21 CONVERTIDORES ANALÓGICOS Un convertidor Analógico-Digital (CAD), es un circuito electrónico integrado, cuya salida es una palabra digital resultado de convertir la señal analógica de entrada; esta conversión se realiza en dos fases: cuantificación y codificación. Durante la cuantificación se muestrea la entrada y a cada valor analógico obtenido se le asigna un estado, que depende del número de bits del CAD, el resultado se codifica en binario, es decir, en una palabra, digital cuyo número de bits está condicionado por el número de líneas de salida del convertidor. Para manejar los convertidores analógico-digitales el compilador CCS utiliza las siguientes funciones: Función Características setup_adc(modo) Modo.-Para la configuración del módulo conversor A/D correspondiente a los bits. setup_adc_ports(valor) Valor.-Definición de las entradas analógicas a emplear. set_adc_channel(canal) Selección del canal analógico correspondiente a los bits. Canal 0(AN0) Canal 1(AN1) Canal 2(AN2) Canal 3(AN3) Canal 4(AN4) Canal 6(AN6) Valor=read_adc(); Lectura del resultado donde valor es un entero de 16 bits Ahora veamos un ejemplo de aplicación del CAD en su forma más simple. CECYT 9 JUAN DE DIOS BÁTIZ PAREDES IPN PROGRAMACIÓN DE MICROCONTROLADORES PIC 18F4550 ING. OSCAR GARIBAY CASTELLANOS, ING. OSCAR MEDINA SÁNCHEZ 22 Ejemplo: Tomemos como base una fuente de alimentación variable de 0 a 5 volts de corriente directa. Deseamos conocer la variación del voltaje en dicha fuente a través de un microcontrolador y una pantalla LCD. La estructura del programa será la siguiente: #include "voltmetro.h" #include “lcd.c” long volt_ent; void main() { float voltaje; lcd_init(); setup_adc_ports(AN0|VSS_VDD); setup_adc(ADC_CLOCK_DIV_4); setup_oscillator(OSC_8MHZ|OSC_INTRC|OSC_31250|OSC_PLL_OFF); set_tris_b(0b00000000); for(;;) { setup_adc_ports (AN0|VSS_VDD); set_adc_channel(0); delay_us(10); volt_ent=read_adc(); voltaje=((5.0/1023.0)*volt_ent); lcd_gotoxy(5,1); lcd_putc("VOLTAJE:"); delay_us(10); lcd_gotoxy(3,2); printf(lcd_putc,"%f volts",voltaje); } } CECYT 9 JUAN DE DIOS BÁTIZ PAREDES IPN PROGRAMACIÓN DE MICROCONTROLADORES PIC 18F4550 ING. OSCAR GARIBAY CASTELLANOS, ING. OSCAR MEDINA SÁNCHEZ 23 Ahora construiremos un sistema que controle la temperatura a través de un sensor de temperatura (LM35), que genera 10mv por cada grado centígrado y que es alimentado a 5 volts de corriente directa. Los niveles de temperatura son 24ºC para activar la calefacción y 30ºC para activar el aire acondicionado, manteniendo la temperatura de la habitación entre los 24ºC y 30ºC. #include "acondicionado.h" #include <lcd.c> long temp_ent; void main() { float voltaje,temperatura; lcd_init(); setup_adc_ports(AN0|VSS_VDD); setup_adc(ADC_CLOCK_DIV_4); setup_oscillator(OSC_8MHZ|OSC_INTRC|OSC_31250|OSC_PLL_OFF); set_tris_b(0b00000000); for(;;) { setup_adc_ports (AN0|VSS_VDD); set_adc_channel(0); delay_us(10); temp_ent=read_adc(); voltaje=((5.0/1023.0)*temp_ent); temperatura=(voltaje*100); lcd_gotoxy(2,1); lcd_putc("Temperatura:"); delay_us(10); lcd_gotoxy(5,2); printf(lcd_putc,"%f°C",temperatura); if(temperatura<24) { output_high(pin_b1); output_low(pin_b0); } if(temperatura>30) { output_low(pin_b1); output_high(pin_b0); } } } CECYT 9 JUAN DE DIOS BÁTIZ PAREDES IPN PROGRAMACIÓN DE MICROCONTROLADORES PIC 18F4550 ING. OSCAR GARIBAY CASTELLANOS, ING. OSCAR MEDINA SÁNCHEZ 24 #include “refresco.h” void main() { setup_oscillator(OSC_8MHZ|OSC_NTRC|osc_31250|osc_pll_off); set_tris_a(0b11111111); set_tris_b(0b00000000); do { if(input(pin_a0)) {output high(pin_b0); delay_ms(5000); output low(pin_b0); } If(input(pin_a1)) { output high(pin_b1); delay_ms(5000); output low(pin_b1); } If (input(pin_a2)) { output high(pin_b2); delay_ms(5000); output low(pin_b2); } If (input(pin_a3)) { output high(pin_b3); delay_ms(5000); output low(pin_b3); } } while (true); } CECYT 9 JUAN DE DIOS BÁTIZ PAREDES IPN PROGRAMACIÓN DE MICROCONTROLADORES PIC 18F4550 ING. OSCAR GARIBAY CASTELLANOS, ING. OSCAR MEDINA SÁNCHEZ 25 Configuración del Wizard PIC C A continuación, se dan los pasos a seguir para realizar y configurar un proyecto dentro de la herramienta PIC-C y de esta manera desarrollar una aplicación. Lo primero que hay que realizar es localizar un acceso directo en el escritorio O bien: Una vez que hayamos abierto la aplicación estaremos adentro de IDE, que será nuestro entorno de trabajo, localizamos el PIC Wizard dentro del menú o pestaña de Project. Cuando seleccionamos la opción Wizard nos aparecerá una ventana en la que daremos nombre al proyecto y la ubicación en la que queremos guardar los archivos que generará el Wizard. CECYT 9 JUAN DE DIOS BÁTIZ PAREDES IPN PROGRAMACIÓN DE MICROCONTROLADORES PIC 18F4550 ING. OSCAR GARIBAY CASTELLANOS, ING. OSCAR MEDINA SÁNCHEZ 26 Cuando hayamos guardado el proyecto aparecerá el Wizard para configurar las opciones que necesitemos según la aplicación que vayamos a realizar. Dentro delos ajustes que normalmente modificaremos serán los que aparecen en la parte izquierda del menú y son los siguientes. General Communications Intr. Oscillator Config. En la parte General cambiamos lo siguiente: o El dispositivo en Device y seleccionamos el PIC18F4550. o Frecuencia del oscilador Frquency cambiamos a 8,000,000 (8MHz). Dentro del Bloque Fuses tenemos que hacer varias modificaciones: o Seleccionar Interna RC Osc, no CLKOUT. o Seleccionar Power Up Timer Si continuamos bajando dentro del menú Fuses encontraremos más opciones, de las cuales tenemos que dejar de la siguiente manera: o Quitar selección de Low Voltaje Programming on B3 (PIC16) o B5 (PIC18F4550). o Quitar selección PORTB pins are configured as analog input channels on RE: o Quitar selección Master Clear pin enabled. o Dentro de Communications deseleccionamos o quitamos la selección de Use RS-232 ya que no usamos el puerto COM. CECYT 9 JUAN DE DIOS BÁTIZ PAREDES IPN PROGRAMACIÓN DE MICROCONTROLADORES PIC 18F4550 ING. OSCAR GARIBAY CASTELLANOS, ING. OSCAR MEDINA SÁNCHEZ 27 En la parte Intr. Oscillator Config habilitamos la opción de Enable Internal Oscillator, ya que en nustro caso usamos el relij interno del PIC quedando de la siguiente manera: Cuando hayamos configurado los pasos anteriores sólo presionamos OK y nos mostrará de nuevo el IDE del PIC y nos aparecerá un archivo fuente *(nombre).c en el cual podemos empezar a insertar el código del programa o bien empezar a programar, y un archivo *(proyecto).h en donde se definen los fuses que necesitamos, de esta manera configuramos un proyecto en Wizard. CECYT 9 JUAN DE DIOS BÁTIZ PAREDES IPN PROGRAMACIÓN DE MICROCONTROLADORES PIC 18F4550 ING. OSCAR GARIBAY CASTELLANOS,ING. OSCAR MEDINA SÁNCHEZ 28 Las opciones sombreadas no son necesarias y por lo tanto se pueden quitar. En caso de que la aplicación requiera del uso del Convertidor Analógico Digital podemos también hacer la modificación desde el Wizard. Dentro de las opciones en la parte izquierda del Wizard encontramos Analog que es donde escogemos cuáles serán los pines que utilizaremos como entrada analógica del PIC, para la práctica del CAD nuestra aplicación utilizará de los pines A0 a A3 como entradas analógicas y seleccionamos lo siguiente: o Analog Pins – A0, A1, A2, A3. o Range 0-Vdd. o Units: 0-1023. o Clock 2-6us. CECYT 9 JUAN DE DIOS BÁTIZ PAREDES IPN PROGRAMACIÓN DE MICROCONTROLADORES PIC 18F4550 ING. OSCAR GARIBAY CASTELLANOS, ING. OSCAR MEDINA SÁNCHEZ 29 En caso de que vayamos a utilizar el Modulador de Ancho de Pulso, lo podemos configurar en la opción Other, seleccionando: o El módulo CCP1. o PWM. o Freq Range. o Duty cycle%. Con los valores deseados, aunque cabe mencionar que esto se puede realizar manualmente en el código del programa. Para la práctica de USB cambiamos la frecuencia del oscilador a 48MHz y dentro de los Fuses también cambiamos ciertas opciones: o Seleccionamos High Speed Crystal/resonador with PLL enabled en lugar de Interna RC Osc, no CLKOUT. o En el divisor de frecuencia seleccionamos Divide By 5(20MHz oscillator input), porque la tarjeta de desarrollo delPIC usa un cristal resonador de 20 MHz. CECYT 9 JUAN DE DIOS BÁTIZ PAREDES IPN PROGRAMACIÓN DE MICROCONTROLADORES PIC 18F4550 ING. OSCAR GARIBAY CASTELLANOS, ING. OSCAR MEDINA SÁNCHEZ 30 o Siguiente opción es No System Clock Postcaler en lugar del System Clock by 4. Cabe mencionar que aquí no tiene relevancia las opciones de Intr. Oscillator Config ya que no utilizamos las opciones del reloj interno, por tanto, no hay necesidad de hacer los cambios que se mencionan para las demás prácticas.
Compartir