laboratorio 6
LECTURA DE ENTRADA ANALÓGICAS Y SENSOR DE TEMPERATURA
competencia especifica de la sesion
- lectura analogica en un canal del PIC.
- configuracion de un sensor de temperatura .
- lectura analogica eb una pantalla LCD,
contenido a tratar
- entradas analogicas
- sensor de temperatura
materiales y equipos
- CCS compiler instalado
- entrenador de PICS
- pantalla LCD
- PIC 16F877A
- PC con software instalado
maco teorico.
¿ que son las señales analogicas?
una señal analógica es un tipo de señal generada por algún tipo de fenómeno electromagnético ;que es representable por una función matemática continua en la que es variable su amplitud y periodo en función del tiempo .
sensor de temperatura LM 35.
- el LM 35 es un sensor de temperatura de buenas prestaciones a un bajo precio .Posee un rango de trabajo desde -55 grados hasta 150 grados .su salida es de tipo analogica y lineal con una pendiente de 10 mV/c .el sensor es calibrado de fabrica a una precison de 0.5 grados.
- como el sensor en analógico, podemos medir con un voltimetro el voltaje de salidad del sensor .
características.
sensor de temperatura DS18B20
- El sensor digital de Temperatura DS18B20 , te permite conocer la temperatura utilizando solo 1 cable para datos (1-Wire), puedes utilizar simultáneamente varios sensores en el mismo bus, ya que cada sensor tiene un identificador de fábrica distinto.
- Entre sus aplicaciones más comunes está el sensado de ambientes en edificios, aire acondicionado, maquinaria, control y monitoreo de procesos industriales, etc.
características.
Evidencia de la tarea en el laboratorio
código del problema
//Desactivar dip switch de DISPLAYS para correcto funcionamiento.
//Entrada analógica en el puerto A3.
#include <16f877a.h> // Incluimos archivo con PIC a utilizar
#device adc=10 // Utilizamos 8 bits de RESOLUCION de lectura
#use delay (clock=20M) // Indicamos al compilador que trabajaremos a 20Mhz
#fuses HS, NOPROTECT, NOWDT // Configuración básica de los fusibles
#define LCD_ENABLE_PIN PIN_D3 //Definimos los pines a ser utilizados por la
#define LCD_RS_PIN PIN_D2 //pantalla LCD
#define LCD_RW_PIN PIN_A0
#define LCD_DATA4 PIN_D4
#define LCD_DATA5 PIN_D5
#define LCD_DATA6 PIN_D6
#define LCD_DATA7 PIN_D7
#include <lcd.c> // Incluimos librería para manejar Pantalla LCD
float lectura=0;
float voltaje=0;
void main ()
{
lcd_init () ; // Inicializamos pantalla LCD
//printf (lcd_putc, "\fCalefactor") ; // Mandamos mensaje por única vez
//Configuración del puerto analógico
setup_adc_ports (AN0_AN1_AN3);
setup_adc (ADC_CLOCK_INTERNAL);
set_adc_channel (3); //lectura del canal analogico 3
delay_us (20);
output_c(0b00000000);
WHILE (true)
{
lectura = read_adc (); // Leemos Canal A0
delay_ms (20) ; // esperamos para una correcta lectura
lcd_gotoxy(1,1); // ubicamos cursos en LCD
lectura = lectura / 10.23;
printf (lcd_putc, "Temp: %4.1f °C ", lectura); // imprimimos valor
delay_ms(100); // esperamos
lcd_gotoxy(1,2);
voltaje = read_adc ();
delay_ms (20) ;
lcd_gotoxy(1,2); // ubicamos cursos en LCD
voltaje = voltaje / 204.6;
printf (lcd_putc, "Voltaje: %4.1f V ", voltaje);
if (lectura > 90)
{
output_high(Pin_C0); // Sacamos por el puerto C el valor de salida (00000001)
delay_ms(20);
output_low(Pin_C1); // Sacamos por el puerto C el valor de salida (00000001)
delay_ms(20);
output_low(Pin_C2); // Sacamos por el puerto C el valor de salida (00000001)
delay_ms(20);
}
else if (lectura > 15 && lectura < 90)
{
output_high(Pin_C1); // Sacamos por el puerto C el valor de salida (00000001)
delay_ms(20);
output_low(Pin_C2); // Sacamos por el puerto C el valor de salida (00000001)
delay_ms(20);
output_low(Pin_C0); // Sacamos por el puerto C el valor de salida (00000001)
delay_ms(20);
}
if (lectura < 15)
{
output_high(Pin_C2); // Sacamos por el puerto C el valor de salida (00000001)
delay_ms(20);
output_low(Pin_C1); // Sacamos por el puerto C el valor de salida (00000001)
delay_ms(20);
output_low (Pin_C0); // Sacamos por el puerto C el valor de salida (00000001)
delay_ms(20);
}
}
}
preguntas sobre el codigo .
Donde dice “#device adc=8” cambie por “#device adc=10”; convierta la variable “lectura” en entero de 16 bits y la línea printf cambie “%4u” por “%4lu”. ¿Cuál es el cambio mostrado en la pantalla LCD? ¿por qué?.
-lo que hace es pasar de una lectura de un entero de 8 bits a un nuevo de 16 bits y asi el conteo cambia automáticamente que sera de 0 a 1023.
-Cambiar de "int" a "int16" es para convertir el entero a 16 bits y "%4u" a "%4lu" es para que realice la lectura del entero de 16 bits .
Convierta el valor leído en valor de voltaje de 0 a 5 voltios. Para esto cambie la variable “lectura” a variable tipo float y configure su forma de mostrarse en el LCD. Luego, en la función While(true), añada la instrucción “lectura = lectura / 204.6”. Cambie las instrucciones para que en la pantalla del LCD aparezca algo así “Tension: 3.456 v”.
-Cambiamos de "Puerto A3: % 4u" a "Tension: % 3.1f V", esto lo hacemos para que en el LCD apareza por ejemplo "voltaje : 5V", variando de 0-5V por eso ponemos el "%"
- se Modificamos de "lectura=lectura" a "lectura=lectura/204.6" esto lo hacemos para colocar como máximo a 5 V, así el rango será de 0-5V.
el codigo en CCS compiler .
Explicacion de su funcionamiento en proteus
cuando nuestro voltaje sea mayor que 90 grados se enciende el led C0.
cuando nuestro voltaje esta conplendido entre 15 grados y 90 grados se enciende el led C1.
cuando nuestro voltaje es menor que 15 grados se enciende el led C2
Funcionamiento
https://www.youtube.com/watch?v=UzoDYPF51lM&feature=youtu.be
Observaciones
Conclusiones
foto
bibliografia y paginas web recomendada
¿ que son las señales analogicas?
una señal analógica es un tipo de señal generada por algún tipo de fenómeno electromagnético ;que es representable por una función matemática continua en la que es variable su amplitud y periodo en función del tiempo .
sensor de temperatura LM 35.
- el LM 35 es un sensor de temperatura de buenas prestaciones a un bajo precio .Posee un rango de trabajo desde -55 grados hasta 150 grados .su salida es de tipo analogica y lineal con una pendiente de 10 mV/c .el sensor es calibrado de fabrica a una precison de 0.5 grados.
- como el sensor en analógico, podemos medir con un voltimetro el voltaje de salidad del sensor .
características.
- consumo de corriente :60 micro amperios
- esta calibrado para medir en grados
- tiene una precison de +-1/4 grados
- numero de pines : 3 pines GND,VCC, y Voltaje de salida
- resolucion;10mV por cada grado centrigrado
- tipo de medicion: salida analogica
- El sensor digital de Temperatura DS18B20 , te permite conocer la temperatura utilizando solo 1 cable para datos (1-Wire), puedes utilizar simultáneamente varios sensores en el mismo bus, ya que cada sensor tiene un identificador de fábrica distinto.
- Entre sus aplicaciones más comunes está el sensado de ambientes en edificios, aire acondicionado, maquinaria, control y monitoreo de procesos industriales, etc.
características.
- Voltaje de Operación: 3.0V – 5.5
- Rango de Trabajo: -55℃ hasta +125℃ (-67°F to +257°F)
- Precisión en el rango de -10°C hasta +85°C: ±0.5°C
- Resolución seleccionable de 9-12 bits
- No necesita componentes adicionales.
- Longitud de cable: 1m
- Cables: Rojo (+VCC), Blanco (DATA), Negro (GND
- Identificación única de 64 bits.
diferencia entre los encapsulado
La única diferencia entre ellos es la forma o encapsulado. Todos tienen tres pines útiles VDD, GND y DQ.
La única diferencia entre ellos es la forma o encapsulado. Todos tienen tres pines útiles VDD, GND y DQ.
- VDD: es la tensión de alimentación es decir, que voltaje necesita para que el sensor de temperatura DS18B20 funcione correctamente. Podemos alimentar desde 3V a 5,5V. Ojo con este dato ya que es muy interesante cuando queremos trabajar con placas como Arduino MKR1000 y NodeMCU que trabajan a 3,3V.
- GND: es la toma de tierra. A este pin conectaremos la referencia 0V de nuestro circuito.
- DQ: es el pin de datos. Por este pin es por donde se recibirán todos los datos en el protocolo 1-Wire. Este protocolo tiene una ventaja. Como su propio nombre indica (1-Wire significa un cable en español) solo es necesario utilizar un cable para conectar varios sensores de temperatura DS18B20. Por lo tanto, solo utilizaremos 1 pin de nuestro entrenador para conectar múltiples sensores.
Evidencia de la tarea en el laboratorio
código del problema
//Desactivar dip switch de DISPLAYS para correcto funcionamiento.
//Entrada analógica en el puerto A3.
#include <16f877a.h> // Incluimos archivo con PIC a utilizar
#device adc=10 // Utilizamos 8 bits de RESOLUCION de lectura
#use delay (clock=20M) // Indicamos al compilador que trabajaremos a 20Mhz
#fuses HS, NOPROTECT, NOWDT // Configuración básica de los fusibles
#define LCD_ENABLE_PIN PIN_D3 //Definimos los pines a ser utilizados por la
#define LCD_RS_PIN PIN_D2 //pantalla LCD
#define LCD_RW_PIN PIN_A0
#define LCD_DATA4 PIN_D4
#define LCD_DATA5 PIN_D5
#define LCD_DATA6 PIN_D6
#define LCD_DATA7 PIN_D7
#include <lcd.c> // Incluimos librería para manejar Pantalla LCD
float lectura=0;
float voltaje=0;
void main ()
{
lcd_init () ; // Inicializamos pantalla LCD
//printf (lcd_putc, "\fCalefactor") ; // Mandamos mensaje por única vez
//Configuración del puerto analógico
setup_adc_ports (AN0_AN1_AN3);
setup_adc (ADC_CLOCK_INTERNAL);
set_adc_channel (3); //lectura del canal analogico 3
delay_us (20);
output_c(0b00000000);
WHILE (true)
{
lectura = read_adc (); // Leemos Canal A0
delay_ms (20) ; // esperamos para una correcta lectura
lcd_gotoxy(1,1); // ubicamos cursos en LCD
lectura = lectura / 10.23;
printf (lcd_putc, "Temp: %4.1f °C ", lectura); // imprimimos valor
delay_ms(100); // esperamos
lcd_gotoxy(1,2);
voltaje = read_adc ();
delay_ms (20) ;
lcd_gotoxy(1,2); // ubicamos cursos en LCD
voltaje = voltaje / 204.6;
printf (lcd_putc, "Voltaje: %4.1f V ", voltaje);
if (lectura > 90)
{
output_high(Pin_C0); // Sacamos por el puerto C el valor de salida (00000001)
delay_ms(20);
output_low(Pin_C1); // Sacamos por el puerto C el valor de salida (00000001)
delay_ms(20);
output_low(Pin_C2); // Sacamos por el puerto C el valor de salida (00000001)
delay_ms(20);
}
else if (lectura > 15 && lectura < 90)
{
output_high(Pin_C1); // Sacamos por el puerto C el valor de salida (00000001)
delay_ms(20);
output_low(Pin_C2); // Sacamos por el puerto C el valor de salida (00000001)
delay_ms(20);
output_low(Pin_C0); // Sacamos por el puerto C el valor de salida (00000001)
delay_ms(20);
}
if (lectura < 15)
{
output_high(Pin_C2); // Sacamos por el puerto C el valor de salida (00000001)
delay_ms(20);
output_low(Pin_C1); // Sacamos por el puerto C el valor de salida (00000001)
delay_ms(20);
output_low (Pin_C0); // Sacamos por el puerto C el valor de salida (00000001)
delay_ms(20);
}
}
}
preguntas sobre el codigo .
Donde dice “#device adc=8” cambie por “#device adc=10”; convierta la variable “lectura” en entero de 16 bits y la línea printf cambie “%4u” por “%4lu”. ¿Cuál es el cambio mostrado en la pantalla LCD? ¿por qué?.
-lo que hace es pasar de una lectura de un entero de 8 bits a un nuevo de 16 bits y asi el conteo cambia automáticamente que sera de 0 a 1023.
-Cambiar de "int" a "int16" es para convertir el entero a 16 bits y "%4u" a "%4lu" es para que realice la lectura del entero de 16 bits .
Convierta el valor leído en valor de voltaje de 0 a 5 voltios. Para esto cambie la variable “lectura” a variable tipo float y configure su forma de mostrarse en el LCD. Luego, en la función While(true), añada la instrucción “lectura = lectura / 204.6”. Cambie las instrucciones para que en la pantalla del LCD aparezca algo así “Tension: 3.456 v”.
-Cambiamos de "Puerto A3: % 4u" a "Tension: % 3.1f V", esto lo hacemos para que en el LCD apareza por ejemplo "voltaje : 5V", variando de 0-5V por eso ponemos el "%"
- se Modificamos de "lectura=lectura" a "lectura=lectura/204.6" esto lo hacemos para colocar como máximo a 5 V, así el rango será de 0-5V.
el codigo en CCS compiler .
Guardamos el archivo (COMF) para si ejecución en proteus
Explicacion de su funcionamiento en proteus
cuando nuestro voltaje sea mayor que 90 grados se enciende el led C0.
cuando nuestro voltaje esta conplendido entre 15 grados y 90 grados se enciende el led C1.
cuando nuestro voltaje es menor que 15 grados se enciende el led C2
Funcionamiento
https://www.youtube.com/watch?v=UzoDYPF51lM&feature=youtu.be
Observaciones
- observamos que es importante saber cuales son las entradas y salida de nuestro PIC 16F877A, específicamente para este laboratorio ya que trabajos señales analógicas .
- observamos que teniamos que cambiar la lectura de 8 bits ha uno de 16 bit para poder apreciar mejor en el lcd."
- observamos que cuando hemos puesto lo siguiente "%4 lu" nos salia error(porque habia una ligaro espacio ) en la programación ya que la manera correcta era ponerlo sin ningún espacio,
- se observo que que en nuestra programacion teniamos que entender la función trabajas anteriormente en los laboratorios pasados
- observamos que para mover la temperatura usamos un potenciometro para poder hacer la variación
Conclusiones
- se concluyo que las entradas analógicas pueden ser voltaje ,corriente ,etc .
- concluimos que en nuestro lcd podemos utilizar para mostrar diversos mensajes como voltaje,grados ,temperatura,advertencia así sucesivamente nostras textos personalizados .
- se concluyo que para hacer la programación que llevamos con el PIC F877A ,tiene funciones y componentes que necesitamos saber como condiciones,bucles,etc para su correcto funcionamiento
foto
bibliografia y paginas web recomendada
- Marin, Francisco (2007) Diseño basado en microcontroladores . Malaga : Universidad de Malaga(004.16/M26D)
- Pereira; Fabio (2007) Microcontroladores PIC.Sao Paulo:s.n.(005.13/P43)










Revisado. El video tampoco está disponible
ResponderEliminar