LECTURA DE ENTRADAS ANALÓGICAS
- Utilizar al microcontrolador en aplicaciones de control electrónico.
- Desarrollar y ejecutar programas en un microcontrolador PIC
- Programar y configurar interfaces básicas del microcontrolador.
- Lecturas analógicas de un canal del PIC.
- Configuración de un sensor de temperatura.
- Lectura analogica en una pantalla LCD.
2. MARCO TEÓRICO:
2.1. MICROCONTROLADORES:
![al-mundo-de-los-microcontroladores-chapter-01-fig0-1](https://cdn.mikroe.com/ebooks/img/37/2016/02/al-mundo-de-los-microcontroladores-chapter-01-fig0-14.gif)
2.2. PIC16F877A:
Es un microcontrolador de MicroChip Technology familia a la cual se le denomina PIC, fabricado por tecnología CMOS. Tiene ventajas como su consumo de potencia que es muy bajo y ademñas es completamente estático (el reloj puede detenerse y los datos de la memoria no se pierden). Tiene una memoria de programa tipo FLASH, lo que representa gran facilidad en el desarrollo de prototipos y en su aprendizaje, pues permite reprogramarlo nuevamente sin ser borrado con anterioridad.
CARACTERÍSTICAS
Las características principales de estos dispositivos son:
- CPU de arquitectura RISC (Reduced Instruction Set Computer).
- Set de 35 instrucciones.
- Frecuencia de reloj de hasta 20MHz (ciclo de instrucción de 200ns).
- Todas las instrucciones se ejecutan en un único ciclo de instrucción, excepto las de salto.
- Hasta 8K x 14 palabras de Memoria de Programa FLASH.
- Hasta 368 x 8 bytes de Memoria de Datos tipo RAM.
- Hasta 256 x 8 bytes de Memoria de Datos tipo EEPROM.
- Hasta 15 fuentes de Interrupción posibles.
- 8 niveles de profundidad en la Pila hardware.
- Modo de bajo consumo (Sleep).
- Tipo de oscilador seleccionable (RC, HS, XT, LP y externo).
- Rango de voltaje de operación desde 2,0V a 5,5V.
- Conversor Analógico/Digital de 10 bits multicanal.
- 3 Temporizadores.
- Watchdog Timer o Perro Guardián.
- 2 módulos de captura/comparación/PWM.
- Comunicaciones por interfaz USART (Universal Synchronous Asynchronous Receiver Transmitter).
- Puerto Paralelo Esclavo de 8 bits (PSP).
- Puerto Serie Síncrono (SSP) con SPI e I²C.
ENCAPSULADOS
![](https://1.bp.blogspot.com/-TWeqHBo5Qfw/XavNev30gZI/AAAAAAAAAkg/KgGb6XAZUwYdtsxmsA6u7BKT2MQm3S1EQCLcBGAsYHQ/s640/Screenshot_20191019-215639.jpg)
REGISTROS INTERNOS
DIAGRAMA INTERNO
2.3. ENTRADAS ANALÓGICAS
2.4. SENSOR DE TEMPERATURA
Lectura de un valor analogico
Esta característica es muy importante a la hora de trabajar con sensores, debido a que estos entregan valores de tensión para reflejar la variable física que esta midiendo.
En estas entradas se pueden sensar valores de 0 a 5 V y se pueden representar(según el PIC) con diferentes resoluciones, como por ejemplo 256 valores, 1024(revisar datasheet).
Así si trabajamos con una resolución de 256 tendremos para 0V una salida de 0 y para los 5V veremos el numero 255, lo mismo con otras resoluciones y valores intermedios.
Para configurar las entradas analógicas debemos ir a Analog en el wizard y seleccionar que entradas ocuparemos para nuestros propósitos, por ejemplo yo configurare A0, A1 y A3.
setup_adc_ports(AN0_AN1_AN3);
Y al lado en Units una resolucion de 0-1023(1024 valores).
Display alfanumerico
Los displays son muy usados para permitir al usuario leer de una forma fácil alguna variable, mensaje, dato, etc.
Los hay en varios modelos y características donde las principales son el numero de filas y columnas que tienen disponible para desplegar mensajes. Estos se expresan como una matriz donde por ejemplo si el display puede desplegar 16 caracteres en dos filas se dice que es un display alfanumérico de 16x2.
Configurarlo en CCS es muy fácil y para eso en el mismo wizard nos dirigimos a Drivers y seleccionamos LCD driver. Las conexiones las podemos ver en I/O Pins pero yo las expondré en los ejemplos descargables.
Ya con el código hecho por el wizard nos queda leer el valor analógico y desplegar caracteres en el display. Expondré el código en el cual están comentado todas las lineas importantes.
#include <16F873A.h>
#device adc=10 //resolucion de 1024 valores
#FUSES NOWDT //No Watch Dog Timer
#FUSES HS //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#FUSES NOPUT //No Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection
#FUSES NOWRT //Program memory not write protected
#FUSES RESERVED //Used to set the reserved FUSE bits
#use delay(clock=20000000) //oscilador externo de 20MHz
#include <LCD.C>
float a=0; //definimos la variable "a"
void main()
{
setup_adc_ports(AN0_AN1_AN3); //especifica que canales son configurados como analogicos
setup_adc(ADC_CLOCK_DIV_2);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
lcd_init(); //se inicializa el display
while(true){
set_adc_channel(0); //especifica de que canal se leera el valor analogico
a=read_adc(); //se lee el valor analogico y se guarda digitalmente en la variable "a"
printf(lcd_putc,"\f"); //limpiamos el display alfanumerico
printf(lcd_putc,"Valor Digital"); //en la primera linea aparece el mensaje "Valor Digital"
lcd_gotoxy(1,2); //saltamos al primer cuadro de la segunda linea del display
printf(lcd_putc,"%f",a); //imprimimos el valor digital "a" en la segunda linea
delay_ms(100); //esperamos un tiempo de 100ms para esperar a la siguiente conversion
}
}
El sensor que nosotros vamos a utilizar para este circuito es el LM35, este sensor LM35 es un sensor de temperatura digital. A diferencia de otros dispositivos como los termistores en los que la medición de temperatura se obtiene de la medición de su resistencia eléctrica, el LM35 (parecido a un transistor de gama baja) es un integrado con su propio circuito de control, que proporciona una salida de voltaje proporcional a la temperatura.
La salida del LM35 es lineal con la temperatura, incrementando el valor a razón de 10mV por cada grado centígrado. El rango de medición es de -55ºC (-550mV) a 150ºC (1500 mV). Su precisión a temperatura ambiente es de 0,5ºC.
Los sensores LM35 son relativamente habituales en el mundo de los aficionados a la electrónica por su bajo precio, y su sencillez de uso, tiene tan solo 3 pines.
CARACTERÍSTICAS
- Calibrado en centígrados °C.
- Factor de escala lineal 10.0 mV/°C
- Rango de medición de -55° a +150°C
- Ideal para aplicaciones remotas.
- Funciona de 4 - 30 V.
- Consumo menor a 60 uA.
- Baja impedancia.
3. EVIDENCIA DE TAREAS EN LABORATORIO:
4. OBSERVACIONES:
- Debemos declarar en el código una librería especifica, para poder programar la pantalla LCD de forma sencilla.
- La programación ejecutada en el software de Proteus presenta algunos errores en la simulación; por lo cual es conveniente probar nuestros programas en el modulo PIC físico.
- Debemos ajustar el rango de nuestro sensor de temperatura; de tal forma que, este se encuentre en un valor de 0 a 100 grados centígrados.
5. CONCLUSIONES
- Logramos reconocer el funcionamiento y la configuración de las lecturas analógicas de un canal de PIC.
- Realizamos la configuración de un sensor de temperatura; de tal forma que, este trabaje en un rango determinada y cumpla un numero de condiciones relevantes al laboratorio.
- Programamos y configuramos las interfaces básicas y generales de un microcontrolador PIC.