Subido por Tecnonfone2000

Reporte De Practicas Instrumentación Industrial PIC

Anuncio
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.
Descargar