MICROCONTROLADORES
Laboratorio Nº 13
(Lecturas de entradas analógicas)
1. CAPACIDAD TERMINAL:
- 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.
2. COMPETENCIA ESPECÍFICA DE LA SESIÓN:
- Lecturas analógicas de un canal del PIC
- Configuración de un Sensor de Temperatura
- Lectura analógica en una pantalla LCD
3. CONTENIDOS A TRATAR:
- Entradas analógicas
- Sensor de Temperatura
4. RESULTADOS:
- Diseñan y optimizan sistemas y procesos para cumplir con las condiciones establecidas y gestionando adecuadamente los recursos materiales y humanos.
5. MATERIALES Y EQUIPO
- CCS Compiler instalado.
- Entrenador de PICS
- PIC16F877A
- Guía de Laboratorio. El trabajo se desarrolla de manera GRUPAL.
- PC con Software de simulación.
6. FUNDAMENTO TEÓRICO
El pic 16f877a, entre sus varios periféricos, posee un conversor análogo a digital con una resolución de 10 bits que puede leer los voltajes presentes en los pines marcados como AN0 hasta AN7

La lectura de estos se hace de forma multiplexada, una a la vez. Como buen sistema digital, las lecturas son tratadas como muestras tomadas a intervalos regulares de tiempo, las que son retenidas por un capacitor interno. La cantidad de muestras por segundo o velocidad de lectura son un submultiplo de la velocidad de oscilación del PIC por lo cual se debe cuidar que esta no resulte ser mayor que el tiempo que el capacitor interno demora en cargarse.
Una mala elección de velocidad de lectura, puede resultar en mediciones erróneas, por debajo de las magnitudes que se pretenden medir. Según Microchip, el tiempo de adquisición de los datos debe ser mayor a 19.72us.
Registros Involucrados en la conversión A/D
La conversión analogo-digital, se configura y controla con los registros ADCON0 y ADCON1, donde es posible configurar aspectos como el canal (pin del PIC) en que se hará la lectura, velocidad de muestreo, estado de la conversión, pines análogos o digitales, entre otros. Por otro lado la conversión resultante se alberga en los registros ADRESH y ADRESL La gráfica lo explica de mejor manera.

Velocidad de Conversión:
La velocidad de muestreo con que se tomarán lecturas en el pin indicado, viene dada por el binario formado por los bits ADCS2-ADCS1-ADCS0, donde cada combinación corresponderá a lo mostrado en la tabla. (extraída del datasheet).

Canal del lectura
El binario formado por CHS2-CHS1-CH0 corresponde al equivalente decimal del canal a leer. Por ejemplo 0b111 corresponde a leer el acanal AN7, mientras que el binario 0b011 corresponderá a AN3.
Bit de Estado de la Conversión
Este bit permanecerá en 1 mientras se esté ejecutando la conversión análogo-digital. Obviamente se debe esperar a que este esté en 0 antes de poder leer el resultado de la conversión.
Canales usados como entrada analógica.
En el binario formado por los bits PGF3-PGF2-PGF1-PGF0, se debe ingersar la combinación correspondiente a los canales digitales o analógicos que se quieran usar, vease la siguiente tabla para más detalle.
REPORT THIS AD
En este caso cabe notar la simplicidad de utlizar 0000 para tener todos los pines analógicos de 0 a 5 volts o 0110 para desactivar la conversión AD y usar esos pines como digitales.
El bit ADFM y como leer el resultado.
El resultado de la conversión, finalmente será un numero de 0 a 1023 correspondiente a los 0 a 5 volts, tal como se muestra en la primera Imagen bajo el título principal. Este número al ser de 10 bits no cabe en un solo registro y es por eso que se utilizan dos (ADRESH y ADRESL) en binario puede parecer dificil de entender pero en en el lenguaje C de XC8 basta con sumar ambos registros y almacenar el reslutado en un INT para tener el número entre 0 y 1023 correspondiente a la conversión.
Función para Leer un Canal en Especifico.
A continuación, con el fin de simplificar la lectura de un canal en particular, se presenta una función tomada del sitio electrosome.com, que puede ser libremente copiada e incluida en el código y llamada desde el main(). En este caso, la función esta preseteada con todo los pines AN habilitados para lectura analógica y ya se han considerado los tiempos mínimos requeridos en la lectura.void ADC_Init()
{
ADCON0 = 0b10000001; //
ADCON1 = 0b10000000;
}
//Función que lee el voltaje
unsigned int ADC_Read(unsigned char channel)
{
if(channel > 7)
return 0;
ADCON0 &= 0xC5;
ADCON0 |= channel<<3;
__delay_ms(2);
GO_nDONE = 1;
while(GO_nDONE);
return ((ADRESH<<8)+ADRESL);
}
REPORT THIS AD
La función retorna como un número entero el número entre 0 y 1023 resultante de la medición. Por ejemplo, la siguiente instrucción guardará en la variable medición el resultado de la conversión en el pin AN1. (medición es un INT)medicion=ADC_Read(0);
Mostrando la medición en una pantalla LCD
El código a continuación, muestra el resultado de la medición en un pantalla LCD, es decir un número de 0 a 1024, tal como se muestra en la imagen.
- Lectura de un puerto analógico
- Sensor de temperatura LM35
- Sensor de temperatura DS18B20
1. CAPACIDAD TERMINAL:
- 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.
2. COMPETENCIA ESPECÍFICA DE LA SESIÓN:
- Lecturas analógicas de un canal del PIC
- Configuración de un Sensor de Temperatura
- Lectura analógica en una pantalla LCD
3. CONTENIDOS A TRATAR:
- Entradas analógicas
- Sensor de Temperatura
4. RESULTADOS:
- Diseñan y optimizan sistemas y procesos para cumplir con las condiciones establecidas y gestionando adecuadamente los recursos materiales y humanos.
- CCS Compiler instalado.
- Entrenador de PICS
- PIC16F877A
- Guía de Laboratorio. El trabajo se desarrolla de manera GRUPAL.
- PC con Software de simulación.
6. FUNDAMENTO TEÓRICO
El pic 16f877a, entre sus varios periféricos, posee un conversor análogo a digital con una resolución de 10 bits que puede leer los voltajes presentes en los pines marcados como AN0 hasta AN7

La lectura de estos se hace de forma multiplexada, una a la vez. Como buen sistema digital, las lecturas son tratadas como muestras tomadas a intervalos regulares de tiempo, las que son retenidas por un capacitor interno. La cantidad de muestras por segundo o velocidad de lectura son un submultiplo de la velocidad de oscilación del PIC por lo cual se debe cuidar que esta no resulte ser mayor que el tiempo que el capacitor interno demora en cargarse.
Una mala elección de velocidad de lectura, puede resultar en mediciones erróneas, por debajo de las magnitudes que se pretenden medir. Según Microchip, el tiempo de adquisición de los datos debe ser mayor a 19.72us.
Registros Involucrados en la conversión A/D
La conversión analogo-digital, se configura y controla con los registros ADCON0 y ADCON1, donde es posible configurar aspectos como el canal (pin del PIC) en que se hará la lectura, velocidad de muestreo, estado de la conversión, pines análogos o digitales, entre otros. Por otro lado la conversión resultante se alberga en los registros ADRESH y ADRESL La gráfica lo explica de mejor manera.

Velocidad de Conversión:
La velocidad de muestreo con que se tomarán lecturas en el pin indicado, viene dada por el binario formado por los bits ADCS2-ADCS1-ADCS0, donde cada combinación corresponderá a lo mostrado en la tabla. (extraída del datasheet).

Canal del lectura
El binario formado por CHS2-CHS1-CH0 corresponde al equivalente decimal del canal a leer. Por ejemplo 0b111 corresponde a leer el acanal AN7, mientras que el binario 0b011 corresponderá a AN3.
Bit de Estado de la Conversión
Este bit permanecerá en 1 mientras se esté ejecutando la conversión análogo-digital. Obviamente se debe esperar a que este esté en 0 antes de poder leer el resultado de la conversión.
Canales usados como entrada analógica.
En el binario formado por los bits PGF3-PGF2-PGF1-PGF0, se debe ingersar la combinación correspondiente a los canales digitales o analógicos que se quieran usar, vease la siguiente tabla para más detalle.
REPORT THIS AD
En este caso cabe notar la simplicidad de utlizar 0000 para tener todos los pines analógicos de 0 a 5 volts o 0110 para desactivar la conversión AD y usar esos pines como digitales.
El bit ADFM y como leer el resultado.
El resultado de la conversión, finalmente será un numero de 0 a 1023 correspondiente a los 0 a 5 volts, tal como se muestra en la primera Imagen bajo el título principal. Este número al ser de 10 bits no cabe en un solo registro y es por eso que se utilizan dos (ADRESH y ADRESL) en binario puede parecer dificil de entender pero en en el lenguaje C de XC8 basta con sumar ambos registros y almacenar el reslutado en un INT para tener el número entre 0 y 1023 correspondiente a la conversión.
Función para Leer un Canal en Especifico.
A continuación, con el fin de simplificar la lectura de un canal en particular, se presenta una función tomada del sitio electrosome.com, que puede ser libremente copiada e incluida en el código y llamada desde el main(). En este caso, la función esta preseteada con todo los pines AN habilitados para lectura analógica y ya se han considerado los tiempos mínimos requeridos en la lectura.void ADC_Init() { ADCON0 = 0b10000001; // ADCON1 = 0b10000000; } //Función que lee el voltaje unsigned int ADC_Read(unsigned char channel) { if(channel > 7) return 0; ADCON0 &= 0xC5; ADCON0 |= channel<<3; __delay_ms(2); GO_nDONE = 1; while(GO_nDONE); return ((ADRESH<<8)+ADRESL); }
REPORT THIS AD
La función retorna como un número entero el número entre 0 y 1023 resultante de la medición. Por ejemplo, la siguiente instrucción guardará en la variable medición el resultado de la conversión en el pin AN1. (medición es un INT)medicion=ADC_Read(0);
Mostrando la medición en una pantalla LCD
El código a continuación, muestra el resultado de la medición en un pantalla LCD, es decir un número de 0 a 1024, tal como se muestra en la imagen.

La lectura de estos se hace de forma multiplexada, una a la vez. Como buen sistema digital, las lecturas son tratadas como muestras tomadas a intervalos regulares de tiempo, las que son retenidas por un capacitor interno. La cantidad de muestras por segundo o velocidad de lectura son un submultiplo de la velocidad de oscilación del PIC por lo cual se debe cuidar que esta no resulte ser mayor que el tiempo que el capacitor interno demora en cargarse.
Una mala elección de velocidad de lectura, puede resultar en mediciones erróneas, por debajo de las magnitudes que se pretenden medir. Según Microchip, el tiempo de adquisición de los datos debe ser mayor a 19.72us.
Registros Involucrados en la conversión A/D
La conversión analogo-digital, se configura y controla con los registros ADCON0 y ADCON1, donde es posible configurar aspectos como el canal (pin del PIC) en que se hará la lectura, velocidad de muestreo, estado de la conversión, pines análogos o digitales, entre otros. Por otro lado la conversión resultante se alberga en los registros ADRESH y ADRESL La gráfica lo explica de mejor manera.

Velocidad de Conversión:
La velocidad de muestreo con que se tomarán lecturas en el pin indicado, viene dada por el binario formado por los bits ADCS2-ADCS1-ADCS0, donde cada combinación corresponderá a lo mostrado en la tabla. (extraída del datasheet).

Canal del lectura
El binario formado por CHS2-CHS1-CH0 corresponde al equivalente decimal del canal a leer. Por ejemplo 0b111 corresponde a leer el acanal AN7, mientras que el binario 0b011 corresponderá a AN3.
Bit de Estado de la Conversión
Este bit permanecerá en 1 mientras se esté ejecutando la conversión análogo-digital. Obviamente se debe esperar a que este esté en 0 antes de poder leer el resultado de la conversión.
Canales usados como entrada analógica.
En el binario formado por los bits PGF3-PGF2-PGF1-PGF0, se debe ingersar la combinación correspondiente a los canales digitales o analógicos que se quieran usar, vease la siguiente tabla para más detalle.

REPORT THIS AD
En este caso cabe notar la simplicidad de utlizar 0000 para tener todos los pines analógicos de 0 a 5 volts o 0110 para desactivar la conversión AD y usar esos pines como digitales.
El bit ADFM y como leer el resultado.
El resultado de la conversión, finalmente será un numero de 0 a 1023 correspondiente a los 0 a 5 volts, tal como se muestra en la primera Imagen bajo el título principal. Este número al ser de 10 bits no cabe en un solo registro y es por eso que se utilizan dos (ADRESH y ADRESL) en binario puede parecer dificil de entender pero en en el lenguaje C de XC8 basta con sumar ambos registros y almacenar el reslutado en un INT para tener el número entre 0 y 1023 correspondiente a la conversión.
Función para Leer un Canal en Especifico.
A continuación, con el fin de simplificar la lectura de un canal en particular, se presenta una función tomada del sitio electrosome.com, que puede ser libremente copiada e incluida en el código y llamada desde el main(). En este caso, la función esta preseteada con todo los pines AN habilitados para lectura analógica y ya se han considerado los tiempos mínimos requeridos en la lectura.void ADC_Init() { ADCON0 = 0b10000001; // ADCON1 = 0b10000000; } //Función que lee el voltaje unsigned int ADC_Read(unsigned char channel) { if(channel > 7) return 0; ADCON0 &= 0xC5; ADCON0 |= channel<<3; __delay_ms(2); GO_nDONE = 1; while(GO_nDONE); return ((ADRESH<<8)+ADRESL); }
REPORT THIS AD
La función retorna como un número entero el número entre 0 y 1023 resultante de la medición. Por ejemplo, la siguiente instrucción guardará en la variable medición el resultado de la conversión en el pin AN1. (medición es un INT)medicion=ADC_Read(0);
Mostrando la medición en una pantalla LCD
El código a continuación, muestra el resultado de la medición en un pantalla LCD, es decir un número de 0 a 1024, tal como se muestra en la imagen.
- Lectura de un puerto analógico
- Sensor de temperatura LM35
- Sensor de temperatura DS18B20

7. TAREAS GUIADAS DENTRO DEL LABORATORIO:
-
Simule y pruebe en el entrenador el programa mostrado de acuerdo al circuito y código siguiente. Asegúrese que el LCD esté conectado al PUERTO D mediante interruptores rojos debajo del mismo:
8. TAREAS A SER EVALUADAS:
-
Realice los cambios sugeridos a continuación y muestre sus resultados
-
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é?.
-
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”.
-
Finalmente agregue una condición IF para que si el valor de voltaje supera 4.5 voltios, mostrar el mensaje “WARNING” en la primera línea del LCD.
TERMOSTATO DIGITAL CON CONTROL ON-OFF:
Se trata de un circuito que deberá controlar el encendido y apagado de un relé (el cual se supone que conecta/desconecta un elemento calefactor) dependiendo de la temperatura leída en el sensor y de la temperatura seteada por los pulsadores respectivos. La pantalla LCD y los leds muestran el estado del termostato.
Este proyecto deberá contar con las siguientes partes:
Textos a mostrar en la pantalla LCD:
Condiciones de funcionamiento:
- La pantalla inicial deberá mostrarse al principio durante 2 segundos, luego deberá mostrarse la pantalla normal.
- Para aumentar o disminuir la temperatura SET, deberá presionarse los pulsadores respectivos, pero aún no debe controlar la salida de relé, sino hasta presionar “aceptar”. El botón “cancelar” ejerce la función de RESET y detiene todo el proceso.
- El sensor de Temperatura será emulado mediante un potenciómetro (RA3) y su rango será de 0 a 100 grados centígrados.
- El rango de temperatura OK será de 10 grados. Ejemplo: si SET=80, el led verde debe encender si Temp varía entre 75 y 85 grados. (Opcional).
9. Video explicativo:
10. OBSERVACIONES Y CONCLUSIONES:
- OBSERVACIONES:
- Se observó que es importante declarar la librería correspondiente del LCD para poder realizar su programación.
- Se observó que es necesario declarar los pines del LCD para realizar la programación de cada uno de los datos almacenados en cada pin.
- Se utilizó un VOID BIP, para realizar el sonido de alarma al momento de que el dato llegaba a su valor máximo y su valor mínimo.
- Para realizar un bucle infinito no se utilizó el bucle for, pues este tiene un tope determinado, se utilizó un bucle while, pues a una determinada condición es mas fácil trabajar con él.
- CONCLUSIONES:
- Se reconoció la pantalla LCD, su estructura y su funcionamiento.
- Se reconocieron funciones de bucles (for y while) para realizar un determinado paso por un determinado tiempo o si se desea por un bucle infinito de repeticiones.
- Se identificaron pines de programación correspondientes al LCD para poder enviar el dato a una determinada fila y una determinada columna.
- Se programaron y configuraron interfaces básicas del microcontrolador.
7. TAREAS GUIADAS DENTRO DEL LABORATORIO:
- Simule y pruebe en el entrenador el programa mostrado de acuerdo al circuito y código siguiente. Asegúrese que el LCD esté conectado al PUERTO D mediante interruptores rojos debajo del mismo:
8. TAREAS A SER EVALUADAS:
- Realice los cambios sugeridos a continuación y muestre sus resultados
- 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é?.
- 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”.
- Finalmente agregue una condición IF para que si el valor de voltaje supera 4.5 voltios, mostrar el mensaje “WARNING” en la primera línea del LCD.
TERMOSTATO DIGITAL CON CONTROL ON-OFF:
Se trata de un circuito que deberá controlar el encendido y apagado de un relé (el cual se supone que conecta/desconecta un elemento calefactor) dependiendo de la temperatura leída en el sensor y de la temperatura seteada por los pulsadores respectivos. La pantalla LCD y los leds muestran el estado del termostato.
Este proyecto deberá contar con las siguientes partes:
Textos a mostrar en la pantalla LCD:
Condiciones de funcionamiento:
- La pantalla inicial deberá mostrarse al principio durante 2 segundos, luego deberá mostrarse la pantalla normal.
- Para aumentar o disminuir la temperatura SET, deberá presionarse los pulsadores respectivos, pero aún no debe controlar la salida de relé, sino hasta presionar “aceptar”. El botón “cancelar” ejerce la función de RESET y detiene todo el proceso.
- El sensor de Temperatura será emulado mediante un potenciómetro (RA3) y su rango será de 0 a 100 grados centígrados.
- El rango de temperatura OK será de 10 grados. Ejemplo: si SET=80, el led verde debe encender si Temp varía entre 75 y 85 grados. (Opcional).
9. Video explicativo:
10. OBSERVACIONES Y CONCLUSIONES:
- OBSERVACIONES:
- Se observó que es importante declarar la librería correspondiente del LCD para poder realizar su programación.
- Se observó que es necesario declarar los pines del LCD para realizar la programación de cada uno de los datos almacenados en cada pin.
- Se utilizó un VOID BIP, para realizar el sonido de alarma al momento de que el dato llegaba a su valor máximo y su valor mínimo.
- Para realizar un bucle infinito no se utilizó el bucle for, pues este tiene un tope determinado, se utilizó un bucle while, pues a una determinada condición es mas fácil trabajar con él.
- CONCLUSIONES:
- Se reconoció la pantalla LCD, su estructura y su funcionamiento.
- Se reconocieron funciones de bucles (for y while) para realizar un determinado paso por un determinado tiempo o si se desea por un bucle infinito de repeticiones.
- Se identificaron pines de programación correspondientes al LCD para poder enviar el dato a una determinada fila y una determinada columna.
- Se programaron y configuraron interfaces básicas del microcontrolador.
No hay comentarios:
Publicar un comentario