⦁Conocer el proceso de desarrollo de un proyecto con PIC
⦁Aplicar todas las técnicas de programación conocidas hasta este momento.
⦁Aplicar estos conocimientos en la realización de un proyecto.
II.PROCEDIMIENTO
1.Realice la implementación del proyecto de termostato digital con las siguientes características.
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 puede ser analógico (LM35) o digital (DS18B20). Si es analógico, considerar que 1voltio corresponde a 100 grados.
El rango de temperatura OK será de 10 grados.
Se escribió el código en el CSS Compiler, para cumplir con las condiciones solicitadas para el proyecto, el cual posee un código y una librería adicional llamada “1wire.c”, que sirve para leer el sensor de temperatura DS18B20. Nuestro código quedo como se muestra a continuación:
El funcionamiento del código se puede apreciar en el siguiente video:
III.OBSERVACIONES Y CONCLUSIONES
Observaciones
Se necesitó de una librería adicional para la lectura del sensor de temperatura DS18B20.
Cambiamos el pin C7 por el A0 en nuestro código ya que en la simulación virtual funciona con el pin C7 mientras que en la placa se usa el pin A0 para la escritura en el LCD.
Se realizó un scroll del texto ya que este no cabía en la pantalla porque nuestro texto excedía los 16 caracteres.
Conclusiones
Para la lectura del sensor digital DS18B20 es necesario el uso de una librería, al cual debemos editar de acuerdo al puerto con el que estemos trabajando en la tarjeta, en nuestro caso se modificó al puerto A4 ya que es el puerto que se usó.
Es necesario conocer cómo funciona el sensor y aplicarlo en el código para la lectura de nuestro sensor digital, en nuestro caso fue proporcionado por el docente. Si se utiliza un sensor LM35 se debe habilitar un escalamiento de las unidades pero es más sencilla la estructuración del código para su lectura que la utilización del sensor digital DS18B20.
Se debe tener un claro manejo del display de 16x2, como la utilización de sus funciones de escritura, limpieza de los caracteres mostrados, la designación de caracteres especiales como el de grados (°), usados ampliamente para la creación de nuestro código.
Se debe tener conocimiento previo de estructuras de código, como las instrucciones de condición, el uso de variables para realizar bucles o empezar bucles, el uso de subprogramas, la designación de los puertos correctos de nuestra placa y los tipos de variables a usar.
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 .
II. DESCRIPCION DEL PROYECTO
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.
III. MATERIALES Y EQUIPOS
CCS Compiler instalado.
Entrenador de PICS
Pantalla LCD
PIC16F877A
Guía de Laboratorio. El trabajo se desarrolla de manera GRUPAL.
José Berenguel Vera P. Gianlui Suca Motta Sebastian Pilares Sosa
FASE 3: Manejo del Timer y las Interrupciones
I. COMPETENCIA ESPECIFICA DE LA SECION
Conocer el funcionamiento y la configuración de las Interrupciones.
Conocer el funcionamiento y la configuración del Timer cero.
Aplicar estos conocimientos en la realización de un cronómetro.
II. PROCEDIMIENTO
1. Descripción y funcionamiento de las interrupciones y los temporizadores de un PIC.
Descripción
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 está midiendo. El CAD conversor analógico digital PIC (no todos los PIC lo tienen, para nuestro laboratorio se utilizará el PIC16F877A), permite medir señales analógicas en forma digital, para ello el PIC cuenta con pines por donde le llegará la señal analógica, estos pines deben configurarse como entradas analógicas, el conversor analógico digital PIC cuenta con un circuito que carga un condensador interno al PIC con la tensión analógica que le está llegando a la entrada analógica, luego la tensión almacenada en el condensador lo convierte en un número binario de 10 bits que representará la tensión almacenada en el condensador, este número binario se guarda en sus registros ADRESH y ADRESL de 8 bits cada uno pero estos actúan como un solo registro de 16 bits, en el registro ADRESH se guardan los bits más significativos y en el registro ADRESL se guardan los bits menos significativos, el número que representa la tensión almacenada en el condensador y guardado en forma binaria dentro de estos registros será de 10 bits para el PIC16F877A, la cantidad de bits de este número depende del conversor analógico digital PIC del microcontrolador PIC utilizado.
Funcionamiento
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 número 255, lo mismo con otras resoluciones y valores intermedios.
Para configurar las entradas analógicas debemos utilizar el CSS compiler y seleccionar que entradas ocuparemos para nuestros propósitos, por ejemplo pueden configurarse A0, A1 y A3 con el siguiente comando.
setup_adc_ports(AN0_AN1_AN3);
2. Realice la simulación de los siguientes proyectos guiados
Transcriba el siguiente código para simular y probar el funcionamiento de nuestro CAD de nuestro PIC 16F877A.
Se transcribió el código proporcionado y se compilo con el CCS Compiler, obteniendo lo siguiente:
El funcionamiento del código se puede apreciar en el siguiente video:
Realizar los siguientes cambios en el código anterior para que cuente de forma descendente (temporizador regresivo):
a) Al presionar pulsador en A5, incrementar MINUTOS. el temporizador aún no debe estar contando el tiempo. (sirve para configurar tiempo de cuenta).
b) Al presionar pulsador en D0, iniciar CUENTA REGRESIVA desde los minutos previamente configurados.
c) Si la cuenta llega a 00:00, congelar la cuenta y sonar BIP 3 veces Nota: Para verificar que una variable de tiempo (digamos “minutos”) llegó a cero, hacerlo con la instrucción “if (minutos==-1)” El código ejecutado con los las condiciones señaladas líneas arriba, sería el mostrado a continuación:
Se modificó para que cada centésima disminuya un segundo nuestro contador, cuando el contador llega a 0 segundos, figura 59 segundos nuevamente y disminuye 1 minuto en el contador. Se agregó la función BIP para agregar los 3 bips cuando este llegue a 0 segundo y 0 minutos llamándolo en nuestro programa principal. Nuestro pin A5 se usa para subir la cuenta de los minutos y el pin D0 para empezar nuestro conteo regresivo. Se pude apreciar mejor el funcionamiento y su explicación en el siguiente video.
III.OBSERVACIONES
Y CONCLUSIONES
Observaciones
-En la placa
tenemos tres timers uno de 8 bits y dos de 16 bits.
-Cambiamos el pin
c7 por el a0 debido a que en la simulación si funciona el c7 y en la placa el
pin c7 está conectado a otra cosa ya que no está compatible con el lcd.
-Se agregó una
variable llamada “fbip”, para poder obtener los 3 bips al final del contador
descendente.
-Al inicio nuestra
variable minutos debe ser de 1 minuto mínimo para que empiece a contar de forma
descendente.
Conclusiones
-Para colocar la
velocidad del contador se debe tener en cuenta los bits y el clock del PIC, en
el laboratorio pusimos el valor de 61 en el set timer ya que al multiplicar 255
por 0.2 que es el tiempo de respuesta de la placa nos da 51 micro segundos y al
multiplicarlo por 256 nos da 13 mili segundos y lo que queremos es 10 mili
segundos y el valor más aproximado es 61 ya que nos da 9.9 mili segundos.
-Para la
inicialización de nuestro contador usando un pulsador, se debe colocar la
sentencia “enable_interrupts (INT_TIMER0)” debajo de la condición del pulsador
ya que si esta se pone antes, el contador empezara a contar automáticamente.
-Los minutos y
segundos van a -1 en la función de interrupción, ya que si estos son igual a 0,
los segundos contaran solo 58 segundos y minutos solo podría iniciar cuenta
regresiva si está por encima de 1 minuto.
-Para activar la interrupción de cualquier timer, esta
debe estar acompañada siempre por una activación global, la cual habilita todas
las interrupciones
José Berenguel Vera P. Gianlui Suca Motta Sebastian Pilares Sosa
FASE 2: Lectura de Entradas Analógicas y Sensor de Temperatura
I. COMPETENCIA ESPECIFICA DE LA SECION
Lecturas analógicas de un canal del PIC
Configuración de un Sensor de Temperatura
Lectura analógica en una pantalla LCD
II. PROCEDIMIENTO
1. Descripción y funcionamiento de las entradas analógicas
Descripción
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 está midiendo. El CAD conversor analógico digital PIC (no todos los PIC lo tienen, para nuestro laboratorio se utilizará el PIC16F877A), permite medir señales analógicas en forma digital, para ello el PIC cuenta con pines por donde le llegará la señal analógica, estos pines deben configurarse como entradas analógicas, el conversor analógico digital PIC cuenta con un circuito que carga un condensador interno al PIC con la tensión analógica que le está llegando a la entrada analógica, luego la tensión almacenada en el condensador lo convierte en un número binario de 10 bits que representará la tensión almacenada en el condensador, este número binario se guarda en sus registros ADRESH y ADRESL de 8 bits cada uno pero estos actúan como un solo registro de 16 bits, en el registro ADRESH se guardan los bits más significativos y en el registro ADRESL se guardan los bits menos significativos, el número que representa la tensión almacenada en el condensador y guardado en forma binaria dentro de estos registros será de 10 bits para el PIC16F877A, la cantidad de bits de este número depende del conversor analógico digital PIC del microcontrolador PIC utilizado.
Funcionamiento
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 número 255, lo mismo con otras resoluciones y valores intermedios.
Para configurar las entradas analógicas debemos utilizar el CSS compiler y seleccionar que entradas ocuparemos para nuestros propósitos, por ejemplo pueden configurarse A0, A1 y A3 con el siguiente comando.
setup_adc_ports(AN0_AN1_AN3);
2. Realice la simulación de los siguientes proyectos guiados
Transcriba el siguiente código para simular y probar el funcionamiento de nuestro CAD de nuestro PIC 16F877A.
Se transcribió el código proporcionado pero se modificó el pin analógico que utilizara la pantalla LCD y el canal de adc a ser usado, obteniendo el siguiente código final para el ejercicio.
Al compilar el código con el CCS Compiler con las pequeñas modificaciones hechas, obtenemos lo siguiente:
El funcionamiento del código se puede apreciar en el siguiente video:
Realizar los siguientes cambios en el código anterior para que:
a) 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é?
El código ejecutado con los cambios solicitados en este ejercicio seria el siguiente:
El cambio mostrado será que al mover el potenciómetro al máximo este nos dará un valor de 1023 ya que cuenta hasta 10 bits, lo que es 2^10=1024. Se pude apreciar mejor el funcionamiento y su explicación en el siguiente video.
b) 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”.
El código ejecutado con los cambios solicitados en este ejercicio seria el siguiente:
La línea agregada de la variable “lectura”, nos permite la conversión en voltaje de 0 a 5 voltios. Aparte que para mostrar los decimales se hace uso del tipo de variable “float”. Nota: Si se desea tener la cantidad de enteros y decimales mostrados se utilizara “%2.5” en la línea 34 lo cual nos indicaría 2 cifras enteras y 5 cifras decimales. Si no se especifica, el programa lo hará automáticamente, como en nuestro programa. Se pude apreciar el funcionamiento y su explicación en el siguiente video.
c) Finalmente agrague 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.
El código ejecutado con lo solicitado en este ejercicio seria el siguiente:
Se
agregó la condición encerrada en un cuadrado, la cual nos permite
mostrar el mensaje “WARNING” cuando se supera los 4.5 voltios. Se pude
apreciar el funcionamiento y su explicación en el siguiente video.
3. Investigar el funcionamiento del sensor LM35 y el sensor DS18B20 LM35
Es un sensor de temperatura con una precisión calibrada de 1ºC y un rango que abarca desde -55º a +150ºC. El sensor se presenta en diferentes encapsulados pero el más común es el to-92 de igual forma que un típico transistor con 3 patas, dos de ellas para alimentarlo y la tercera nos entrega un valor de tensión proporcional a la temperatura medida por el dispositivo. Con el LM35 sobre la mesa las patillas hacia nosotros y las letras del encapsulado hacia arriba tenemos que de izquierda a derecha los pines son: VCC – Vout – GND. La salida es lineal y equivale a 10mV/ºC por lo tanto:
+1500mV = 150ºC +250mV = 25ºC -550mV = -55ºC
Funcionamiento: Para hacernos un termómetro lo único que necesitamos es un voltímetro bien calibrado y en la escala correcta para que nos muestre el voltaje equivalente a temperatura. El LM35 funciona en el rango de alimentación comprendido entre 4 y 30 voltios. Podemos conectarlo a un conversor Analógico/Digital y tratar la medida digitalmente, almacenarla o procesarla con un micro Controlador o similar.
El siguiente es un esquema de conexionado del LM35 con un arduino UNO.
DS18B20
El sensor de temperatura DS18B20 es un dispositivo que se comunica de forma digital. Cuenta con tres terminales: Vcc, GND y el pin Data. Este sensor utiliza comunicación por protocolo serial digital OneWire. Esté protocolo de comunicación permite enviar y recibir datos utilizando un solo cable. A diferencia de otros, que utilizan dos o más líneas de comunicación digital. Para leer el sensor con un Arduino es necesario utilizar dos librerías que deben ser instaladas antes de cargar el código a nuestra placa de desarrollo. Entonces las librerías son las siguientes:
· Dallas Temperature. · OneWire
CARACTERÍSTICAS
· Sensor Digital. · Resolución de 9 y 12 bits. · Rango de operación de -50 a 125 grados Centígrados. · Precisión +- 0.5 grados. · Protocolo OneWire.
El diagrama de conexiones para el DS18B20 y su correcto funcionamiento del sensor, es de vital importancia colocar una resistencia de 4.7K entre el pin de Datos o Señal y el pin Vcc, ya que sin esta resistencia el sensor no funcionará. Además consta de un cable largo para aplicaciones donde es necesario sumergirlo en líquidos u otras sustancias. Entonces, esta presentación del sensor sólo trae 3 terminales o cables de conexión. Finalmente el pin de Vcc es el cable Rojo, GND es el cable Negro y el Cable de datos puede ser de color Amarillo o Blanco.
También tenemos que tener en cuenta que el rango de medición de este sensor está entre los -55ºC y los 150ºC. La conexión del sensor al Arduino junto a la pantalla LCD.
III. OBSERVACIONES Y CONCLUSIONES
Observaciones -Al trabajar con un módulo LCD, debemos configurar su bus de datos como de 4 u 8 bits. -El módulo LCD posee puertos para la entrada de datos y a través de ellos se pueden ingresar caracteres a la pantalla (R/W=0) o se puede leer de él (R/W=1). -Se pueden enviar a la pantalla del módulo LCD la mayoría de los caracteres de una tabla ASCII. Conclusiones -El uso de microcontroladores es muy extenso ya que pueden ser usado para diferentes aplicaciones, en diversos proyectos ya que su programcion no es compleja y los programadores estan al alcance de todos. -Nuestra laboratorio sirvio de gran utilidad por su versatil control y reprogramacion que se puede ajustar a diferentes necesidades ya sea por ejemplo en un horno o incubadora, etc. -Estas de mas resaltar la gran importancia y avance tecnologico que tiene hoy en dia el lenguaje C al igual que los pic que salen al mercado y las grandes e interesantes cosas que podemos hacer con ellos.