Translate

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.