Translate

Mostrando entradas con la etiqueta lm35dz. Mostrar todas las entradas
Mostrando entradas con la etiqueta lm35dz. Mostrar todas las entradas

sábado, 2 de mayo de 2009

El LM35 via USB, temperatura via USB

Ahora que ya tenemos un programa base para trabajar el USB en modo CDC con C18 podemos hacer prcticamente lo que deseemos, en este caso vamos a añadir -tal como lo hicimos en la comunicación serial- un sensor de temperatura: El LM35DZ. Básicamente se trata de adaptar el programa que usamos para la comuncación serial a nuestro ejemplo del USB.

Lo primero que vamos a hacer es editar el archivo io_cfg.h, esto con el fin de añadir un PIN que funcione como ADC, en mi caso RA0 así que recorreremos los botones una posición:



Posteriormente en el archivo main.c, vamos a definir la inicialización del PIC, es decir, un canal AD y todos los demás pines digitales. Para ello debemos añadir la sentencia:

#include adc.h

en la sección de includes y en la función initializesystem añadiremos el siguiente código:



Ahora lo que nos resta es añadir la función para sensar temperatura y la rutina que la llame en el archivo user.c así que lo primero sera añadir en la sección de includes las siguientes cabeceras:

#include delay.h
#include adc.h
#include stdlib.h
#include string.h


Esto lo hacemos porque vamos a usar funciones de tiempo, de conversión AD y manejo de cadenas, sin estas librerías al compilar tendríamos muchos errores, posteriormente añadiremos 2 prototipos de función y las funciones para por fin leer la temperatura del LM35DZ:





La función de Temperatura es muy similar a la que usamos en la comunicación serie, salvo que hemos añadido funciones de concatenamiento para formar una cadena y poder enviar a través del USB la señal medida junto con la frase TEMP.

Al usar la función putsUSBUSART(); lo que hacemos es enviar cadenas a través del USB es por esto que no podemos enviar el dato en modo de byte y es necesario convertirlo a cadena.

Ahora lo que nos resta es la llamada de la función en este caso la llamada se da si el byte 0 del buffer de USB es la letra minúscula "t":




Y el vídeo del resultado obtenido:



En este caso enviamos la temperatura después de la entrada de un usuario pero podríamos enviarla automtáicamente solo llamando la función dentro del loop principal del programa.

lunes, 5 de enero de 2009

Sensando Temperatura con LM35DZ

Ahora que podemos mostrar datos analógicos en un LCD y enviarlos vía serie, podemos usar un sensor y cual otro podría ser si no el famosísimo LM35DZ. Este sensor se encuentra por todas partes, debido a su bajo costo y su funcionalidad.

Este es el circuito básico de conexión de LM35:


Como podemos apreciar en el circuito la salida analógica del sensor es de 10mV por cada grado centígrado que registra; por otra parte la resolución de nuestro ADC es de 10 bits y como nuestras fuentes de referencia son las misma que alimentan al PIC,  tenemos que:


  5V / 1024 = .0048 V 


De este modo nosotros tenemos una resolución de @5mV en cada paso de nuestro canal analógico. Esta resolución es más que perfecta para usar ese sensor, de tal modo que usando la lógica cada grado centígrado equivaldrá a 2 pasos de nuestro ADC.


Con los datos anteriores podemos realizar el siguiente programa:




Como podemos apreciar el programa es muy sencillo, aunque C18 soporta el uso de flotantes, la conversión a cadena de texto no se puede, y en la parte serial no soporta %f  por esta razón se trabaja directamente con enteros y se logra una conversión similar. No es exacta falla por unas decimas pero para este programa no viene ningún problema en ello.


El circuito es el mismo del programa anterior solo habrá que sustituir el potenciómetro por el sensor.


Y por último la simulación: