Instrumentación Industrial Universidad Tecnológica De Camargo REPORTE DE PRACTICAS Integrantes: Jesus Adrian Rosas – Isaí Ochoa Castañeda Grupo: MT41M Carrera: Mecatrónica Profesor: Jose Cerda Lucero 1 REPORTE DE PRACTICAS CONTENIDO Introducción .......................................................................................................... 2 Practica 1 (Comunicación al PIC) ............................................................................ 3 Practicas Digitales .................................................................................................. 4 Practica 1.2 (Encendido de LED) ............................................................................. 4 Practica 2 (Encendido de LED por push button) ...................................................... 6 Practica 3 (Encendido de LED por 2 push button) ................................................... 8 Practica 4 (Semáforo) .......................................................................................... 11 Practica 5 (Secuencia LED) ................................................................................... 14 Practica 6 (Encendido y apagado de LED con push button)................................... 17 Practica 7 (Contador 0-9) ..................................................................................... 19 Practica 8 (Contador Ascendente Y Descendente Automático)............................. 21 Practicas Analógicas ............................................................................................ 24 Practica 1 (Mostrador de voltaje)......................................................................... 24 Practica 2 (Mostrador de temperatura) ............................................................... 26 Conclusión ........................................................................................................... 28 2 REPORTE DE PRACTICAS INTRODUCCION DE PRACTICAS DIGITALES Y ANALOGICAS Para el correcto uso de nuestro PIC18F4550 y para las simulaciones se hizo uso de lo siguiente: - PIC18F4550 (dispositivo PIC a utilizar) Programador PICkit 3 (dispositivo para escribir la programación) Base ZIF para programar el PIC (conexiones al PIC para leer, escribir y borrar código) Programa PIC C Compiler (para crear código fuente) Programa Proteus 8.8 SP1 (para simulaciones) Programa PICkit 3 v3.10 (para importar el código fuente en .hex) Después de tener todo lo primero que se debe hacer es empezar a hacer la estructura de la programación en el programa PIC C Compiler, luego de esto se construye y se compila el código que hemos escrito, si todo sale perfectamente bien, nuestro programa ya está listo para ser cargado en nuestro PIC, luego de que el código estuviera bien, abrimos el Proteus para probar nuestro código antes de poder meterlo al PIC físico, se hacen todas las conexiones, una vez hecho esto, si en el programa Proteus funciona, lo que harán serán abrir el programa de PICkit 3 v3.10 y checar comunicación con el PIC conectado a la base ZIF, si todo esta correcto, el programa debería reconocer su PIC18F4550, le damos a import HEX y luego una vez importado nuestro código, le damos a write(escribir) para que nuestro código se quede grabado en el PIC, una vez grabado el código, procedemos a conectar el PIC igual como en la simulación de Proteus, si todo esta correcto nuestro PIC debería funcionar igual al del programa. 3 REPORTE DE PRACTICAS Practica 1 – Comunicación al PIC Para esta práctica necesitaremos lo siguiente: - PICkit3 Cable USB Cables M-M 1 Protoboard PIC18F4550 Una vez tengamos el material necesario procederemos a conectar nuestro PIC de la siguiente forma: Una vez hecho esto, solamente pasan a abrir el programa de PICkit 3 v3.10 en modo administrador, luego se van a la pestaña “Tools>Check Communication” y si todo está correcto debería de reconocer su PIC18F4550 de manera inmediata y estaría listo para cargar sus programaciones. 4 REPORTE DE PRACTICAS Practica 1.2 – Digital (Encendido de LED) Material: - 1 PIC18F4550 1 Programador PICkit3 + cable + base ZIF 1 Arduino para voltaje y tierra (5V-GND) 1 LED 1 Protoboard 1 Resistencia de 330Ohm El código en PIC C Compiler quedaría de la siguiente manera: #include <18f4550.h> //Aquí se elige el dispositivo PIC que vamos a usar #fuses hs,nowdt #use delay(clock = 20M) void main(){ output_low(pin_B0); //PIN 33 DEL PIC 18F4550 while(TRUE){ output_high(pin_B0); delay_ms (100); output_low(pin_B0); delay_ms (100); }} Lo que hace este código es encender y apagar el led cada 100 ms de forma infinita 5 REPORTE DE PRACTICAS IMÁGENES EN SIMULACION Y EN FISICO 6 REPORTE DE PRACTICAS Practica 2 – Digital (Encendido de LED por push button) Para esta práctica usaremos lo siguiente: - 1 PIC18F4550 1 Programador PICkit3 + cable + base ZIF 1 Arduino para voltaje y tierra (5V-GND) 1 LED 1 Protoboard 1 Push button 1 Resistencia de 330Ohm y de 10KOhm Este es el código que debemos pasar al PIC: #INCLUDE <18f4550.h> #FUSES intrc, nowdt, noprotect #USE delay (clock=4000000) #BYTE trisa=0x85 #BYTE porta=0x05 #BYTE trisb=0x86 #BYTE portb=0x06 void main(){ trisb=(0b00000001); trisa=0; portb=0; porta=0; While (true){ if (input(pin_a0)==1){ output_high(pin_b0); delay_ms(1000); } else{ output_low(pin_b0); }}} Lo que hace este código es que, mediante un botón, se logra encender un LED cierto tiempo, eso ya depende del tiempo que tu le quieras poner de encendido al LED. 7 REPORTE DE PRACTICAS IMÁGENES EN SIMULACION Y EN FISICO 8 REPORTE DE PRACTICAS Practica 3 – Digital (Encendido de LED por 2 push button) Para esta práctica usaremos lo siguiente: - 1 PIC18F4550 1 Programador PICkit3 + cable + base ZIF 1 Arduino para voltaje y tierra (5V-GND) 1 LED 1 Protoboard 2 Push button 1 Resistencia de 330Ohm y 2 de 10Kohm El código quedaría de la siguiente manera: #INCLUDE <18f4550.h> #FUSES intrc, nowdt, noprotect #USE delay (clock=4000000) #BYTE trisd=0x88 #BYTE portd=0x08 #BYTE trisc=0x87 #BYTE portc=0x07 #BYTE trisa=0x85 #BYTE porta=0x05 #BYTE trisb=0x86 #BYTE portb=0x06 void main () { trisb=(0b00000001); trisa=0; portb=0; porta=0; While (true) { if (input(pin_a0) ==1) { output_high(pin_b0); delay_ms (2000); } else { 9 REPORTE DE PRACTICAS output_low(pin_b0); } if (input(pin_a1) ==1) { output_high(pin_b0); delay_ms (7000); } else { output_low(pin_b0); }}} Lo que hace este programa es cuando presionas un botón el LED prende durante 2 segundos, y luego este se apaga, y con el otro botón cuando lo presionas, el LED enciende durante 7 segundos e igualmente se apaga. 10 REPORTE DE PRACTICAS IMÁGENES EN SIMULACION Y EN FISICO 11 REPORTE DE PRACTICAS Practica 4 – Digital (Semáforo) Para esta práctica usaremos lo siguiente: - 1 PIC18F4550 1 Programador PICkit3 + cable + base ZIF 1 Arduino para voltaje y tierra (5V-GND) 6 LED’s (2 verde, 2 amarillo, 2 rojo) 1 Protoboard 6 Resistencias de 330Ohm El código quedaría de la siguiente forma: #include <18f4550.h> #fuses hs, nowdt #use delay(clock=20M) void main () { While (TRUE) //Damos inicio al programa al programa que se queda ciclado (mientras sea verdad) { output_high(pin_B1); //ROJO 1 output_low(pin_B2); //AMARILLO 1 output_low(pin_B3); // VERDE 1 output_low(pin_B4); //ROJO 2 output_low(pin_B5); //AMARILLO 2 output_high(pin_B6); //VERDE 2 delay_ms (624); output_high(pin_B1); //ROJO 1 output_high(pin_B5); //AMARILLO 2 output_low(pin_B6); //VERDE 2 delay_ms (100); output_low(pin_B5); //AMARILLO 2 delay_ms (100); output_high(pin_B5); //AMARILLO 2 delay_ms (100); output_low(pin_B5); //AMARILLO 2 delay_ms (100); 12 REPORTE DE PRACTICAS output_high(pin_B5); //AMARILLO 2 delay_ms (100); output_low(pin_B1); //ROJO 1 output_low(pin_B2); //AMARILLO 1 output_high(pin_B3); // VERDE 1 output_high(pin_B4); //ROJO 2 output_low(pin_B5); //AMARILLO 2 output_low(pin_B6); //VERDE 2 delay_ms (624); output_low(pin_B3); // VERDE 1 output_high(pin_B2); //AMARILLO 1 delay_ms (100); output_low(pin_B2); //AMARILLO 1 delay_ms (100); output_high(pin_B2); //AMARILLO 1 delay_ms (100); output_low(pin_B2); //AMARILLO 1 delay_ms (100); output_high(pin_B2); //AMARILLO 1 delay_ms (100); }} Como podemos ver en el codigo, es un semaforo de 2 pases. 13 REPORTE DE PRACTICAS IMÁGENES EN SIMULACION Y EN FISICO 14 REPORTE DE PRACTICAS Practica 5 – Digital (Secuencia LED) Para esta práctica usaremos lo siguiente: - 1 PIC18F4550 1 Programador PICkit3 + cable + base ZIF 1 Arduino para voltaje y tierra (5V-GND) 8 LED’s 1 Protoboard 8 Resistencias de 330Ohm El código queda de la siguiente forma: #include <18f4550.h> #fuses hs, nowdt #use delay(clock=20M) #use fast_io (B) void main () { set_tris_B (0B00000000); //Configura el Puerto B Como salidas OUTPUT_B(0B00000000); While (true) { //Secuencia infinita OUTPUT_B(0B10000000); delay_ms (100); OUTPUT_B(0B01000000); delay_ms (20); OUTPUT_B(0B00100000); delay_ms (20); OUTPUT_B(0B00010000); delay_ms (20); OUTPUT_B(0B00001000); delay_ms (20); OUTPUT_B(0B00000100); delay_ms (20); OUTPUT_B(0B00000010); delay_ms (20); OUTPUT_B(0B000000001); 15 REPORTE DE PRACTICAS delay_ms (20); OUTPUT_B(0B00000010); delay_ms (20); OUTPUT_B(0B00000100); delay_ms (20); OUTPUT_B(0B00001000); delay_ms (20); OUTPUT_B(0B00010000); delay_ms (20); OUTPUT_B(0B00100000); delay_ms (20); OUTPUT_B(0B01000000); delay_ms (20); OUTPUT_B(0B10000000); delay_ms (20); //Comienza secuencia del centro hacia los lados OUTPUT_B(0B00011000); delay_ms (20); OUTPUT_B(0B00100100); delay_ms (20); OUTPUT_B(0B01000010); delay_ms (20); OUTPUT_B(0B10000001); delay_ms (20); //Comienza secuencia de los lados hacia el centro OUTPUT_B(0B01000010); delay_ms (20); OUTPUT_B(0B00100100); delay_ms (20); OUTPUT_B(0B00011000); delay_ms (20); }} Lo que hace este código es que enciende una secuencia de leds de derecha a izquierda y viceversa, también del centro hacia los extremos y viceversa, esto lo hace de forma infinita. 16 REPORTE DE PRACTICAS IMÁGENES EN SIMULACION Y EN FISICO Debo aclarar que las resistencias se ponen al final de los leds, a negativo (GND) 17 REPORTE DE PRACTICAS Practica 6 – Digital (Encendido y apagado de LED con push button) Para esta práctica usaremos lo siguiente: - 1 PIC18F4550 1 Programador PICkit3 + cable + base ZIF 1 Arduino para voltaje y tierra (5V-GND) 1 LED 1 Protoboard 1 Resistencia de 330Ohm y 1 de 10Kohm El código queda de la siguiente forma para el switch del LED: #include <18f4550.h> #fuses nobrownout #use delay (internal = 4MHz) void main (void) { output_low (pin_b0); While (true) { While (! input (pin_a0)) { output_toggle (pin_b0); While (! input (pin_a0)); }}} Este código lo que hace es que enciende y apaga un LED mediante el mismo botón 18 REPORTE DE PRACTICAS IMÁGENES EN SIMULACION Y EN FISICO 19 REPORTE DE PRACTICAS Practica 7 – Digital (Contador 0-9) Para esta práctica usaremos lo siguiente: - 1 PIC18F4550 1 Programador PICkit3 + cable + base ZIF 1 Arduino para voltaje y tierra (5V-GND) 1 display 7 Segmentos Cátodo Común (+) 1 Protoboard 1 Resistencia de 10Kohm y de 330Ohm 1 Push button El código queda de la siguiente forma para el contador: #include <18f4550.h> #use delay(clock=4000000) //cristal de 4Mhz #fuses xt, nowdt, noprotect, noput #use standard_io(b) int conteo=0; byte display[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0xa7,0x7f,0x6f}; void main(void) { do { if(input(pin_a0)) { While(input(pin_a0)); delay_ms (20); if(conteo>9) conteo=0; output_b(display[conteo]); conteo++; }} While (1); } Lo que hace esta programación es que cada vez que presiones el botón, ira aumentando el numero de veces que le has dado al botón, va desde 0-9 y se vuelve a reiniciar de 0-9 y así sucesivamente. 20 REPORTE DE PRACTICAS IMÁGENES EN SIMULACION Y EN FISICO Les recuerdo que el display tiene que tener una resistencia de 330Ohm para que no se queme, esta va a tierra (GND). 21 REPORTE DE PRACTICAS Practica 8 – Digital (Contador Ascendente Y Descendente Automático) Para esta práctica usaremos lo siguiente: - 1 PIC18F4550 1 Programador PICkit3 + cable + base ZIF 1 Arduino para voltaje y tierra (5V-GND) 1 display 7 Segmentos Cátodo Común (+) 1 Protoboard 2 Resistencias de 10Kohm y 1 de 330Ohm 2 Push button El código a usar queda de la siguiente forma: #include <18f4550.h> //pic a utilizar #fuses XT, NOWDT, NOPROTECT, PUT, NOLVP, NOBROWNOUT #use delay (clock=4000000) #use fixed_io (b_outputs=PIN_B0, PIN_B1, PIN_B2, PIN_B3, PIN_B4, PIN_B5, PIN_B6) #use standard_io(A) ///DECLARACION DE FUNCIONES void up(void); //función cuenta ascendente void down(void); //función cuenta descendente ///DECLARACION VARIABLES GLOBALES signed char i; //contador para tabla 7 seg (se tiene en cuenta el signo) int tab7seg[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x67}; //7seg hex 0-9 ///PROGRAMA void main(void) { set_tris_a(0xFF); set_tris_b(0x00); disable_interrupts (GLOBAL); ///inicializamos el contador if(! input(PIN_A0)) i=10; 22 REPORTE DE PRACTICAS else i=-1; do { if (input (PIN_A0)) up (); if (input (PIN_A1)) down (); output_b (tab7seg [ i]); delay_ms (100); } While (TRUE); } void up(void){ i++; if(i>9) i=0; } void down(void){ i--; if(i==-1) i=9; } Lo que hacemos en este programa es que, al dejar presionado un botón asciende el número de manera automática de 0-9 y así sucesivamente, sin tener que estar picando y picando el botón, tan solo es dejarlo presionado, y al dejar presionado el otro de los botones, lo que hace es que envés de ascender el número, este desciende también de manera automática, algo mas sencillo para esto es usar 2 botones con enclave para que la secuencia siga de manera automática sin tener que estar ahí presionando el botón. 23 REPORTE DE PRACTICAS IMÁGENES EN SIMULACION Y EN FISICO Les recuerdo que el display tiene que tener una resistencia de 330Ohm para que no se queme, esta va a tierra (GND). 24 REPORTE DE PRACTICAS Practica 1 – Analógica (Mostrador de voltaje) Para esta práctica usaremos lo siguiente: - 1 PIC18F4550 1 Programador PICkit3 + cable + base ZIF 1 Arduino para voltaje y tierra (5V-GND) 1 Protoboard 1 Potenciómetro de 5k y 1k de 1 Display LCD 16x2 El código a usar queda de la siguiente forma: #include <18f4550.h> #device adc=10 #fuses hs, nowdt #use delay(clock=20M) #include <lcd.c> void main () { int16 pot; float x; setup_adc_ports (0); setup_adc(adc_clock_internal); lcd_init (); while (TRUE) { set_adc_channel (0); delay_us (20); lcd_gotoxy (1,1); pot=read_ADC (); /*FORMULA (V REF+)-(V REF-) RESOLUCION=V REF(----------------------) 5 =150(---------)=150X4.8mv=720mv=0.720v 1024*/ x=(5.0*pot) /1024.0; 25 REPORTE DE PRACTICAS printf (lcd_putc, "Entrada A0=%4LD”, pot); printf(lcd_putc,"\nVoltaje=%1.2f”, x); }} Lo que hace esta práctica, es que te muestra el voltaje de referencia que hay en la entrada del pic, conforme vayas moviendo la perilla ya sea a la izquierda o la derecha, esta te va a mostrar el voltaje suministrado de manera inmediata, va desde 0 – 1023. IMÁGENES EN SIMULACION Y EN FISICO 26 REPORTE DE PRACTICAS Practica 2 – Analógica (Mostrador de temperatura) Para esta práctica usaremos lo siguiente: - 1 PIC18F4550 1 Programador PICkit3 + cable + base ZIF 1 Arduino para voltaje y tierra (5V-GND) 1 Protoboard 1 Potenciómetro de 1K 1 Sensor LM35 1 Display LCD 16x2 El código a usar queda de la siguiente forma: #INCLUDE <18F4550.h> #DEVICE adc=10 #FUSES HS, NOWDT #USE DELAY (CLOCK=20M) #INCLUDE <lcd.c> void main(){ float sen1,t1; setup_adc_ports(all_analog); setup_adc(adc_clock_internal); lcd_init(); while (true){ set_adc_channel(0); delay_us(20); sen1=read_adc(); t1=((sen1*5.0)*100.0)/1023.0; printf(lcd_putc, "TEMPERATURA"); lcd_gotoxy(0,0); printf(lcd_putc, "\nACTUAL...%0.1f",t1); lcd_gotoxy(1,1); }} 27 REPORTE DE PRACTICAS IMÁGENES EN SIMULACION Y EN FISICO 28 REPORTE DE PRACTICAS CONCLUSION En conclusión, respecto a estas prácticas hechas en clase aprendimos a hacer más conexiones que antes no sabíamos en este nuevo circuito integrado (PIC). También aprendimos a usar el display LCD 16x2 para que nos muestre datos en tiempo real de lo que cada practica analógica hace, también aprendimos a encender y apagar un led mediante un solo botón, así como aprendimos a hacer un semáforo de 2 pasadas, y así como a poder comunicar, programar, y subir una programación a este IC.