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.
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.