Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Integrado
Fichero .c con el código de una aplicación que envía el valor de una conversión
por el puerto USB, configurado como dispositivo de clase CDC (Dispositivo Clase de
Comunicación).
En este caso se envían dos datos de 2bytes cada uno de ellos comprobando
que la recepción de los mismos se lleva a cabo de forma correcta. Para enviar los
datos es necesario tenerlo almacenados en bytes diferenciados, para lo que usamos la
función make, que se queda con el byte alto o bajo de una variable, según le
indiquemos en los parámetros. Enviamos después los valores de forma consecutiva,
primero el byte bajo, después el altos de forma que podamos hacer la recepción de
manera sencilla.
//******************************************************************
//
// PROYECTO FIN DE CARRERA
// PLACA DETECTOR DE MOVIMIENTO
// PROYECTO FIN DE CARRERA
// Detector de Movimiento
//
// Realizado: MARTA ARENAS MAS
// Fecha: 22-Mayo-2008
// Versión: v1
//
//******************************************************************
//
// Ficheros Utilizados: P18F2550.h
//
//******************************************************************
#device adc=10
#include <usb_cdc.h>
//Driver que permite utilizar una clase de dispositivo CDC USB, emulando
//un dispositivo RS232 y lo muestra como un puerto COM en Windows
#include <PicUSB_CDC.h>
//Fichero con los descriptores de dispositivo
void main(){
int16 Valor=0;
int16 n=0;
int i;
int ValorL;
int ValorH;
int nL;
int nH;
setup_adc_ports(AN0_TO_AN2|VSS_VDD);
//Canales AN0, AN1 y AN2 analógicos de entrada ADCON1
usb_cdc_init();
usb_init(); //Inicializamos los registros USB
usb_wait_for_enumeration();
do{
usb_task(); //Controla la detección de conexión. Resetea en caso de que falle
if(usb_enumerated()) //Si el dispositivo está configurado
{
for(i=0;i<3;i++)
{
set_adc_channel(i);
delay_us(10);
Valor=read_adc();
nL=make8(n,0);
nH=make8(n,1);
if(usb_cdc_putready()) usb_cdc_putc(nL);
//Enviamos byte bajo del EP1 al PC
if(usb_cdc_putready()) usb_cdc_putc(nH);
//Enviamos byte bajo del EP1 al PC
ValorL=make8(Valor,0);
ValorH=make8(Valor,1);
if(usb_cdc_putready()) usb_cdc_putc(ValorL);
//Enviamos byte bajo del EP1 al PC
if(usb_cdc_putready()) usb_cdc_putc(ValorH);
//Enviamos byte alto del EP1 al PC
PFC_Detector de Movimiento.c
Fichero .c con el código de una aplicación que envía el valor de una conversión
por el puerto USB, configurado como dispositivo de clase CDC (Dispositivo Clase de
Comunicación).
//******************************************************************
//
// PROYECTO FIN DE CARRERA
// PLACA DETECTOR DE MOVIMIENTO
// PROYECTO FIN DE CARRERA
// Detector de Movimiento
//
// Realizado: MARTA ARENAS MAS
// Fecha: 22-Mayo-2008
// Versión: v1
//
//******************************************************************
//
// Ficheros Utilizados: P18F2550.h
//
//******************************************************************
#device adc=10
#include <usb_cdc.h>
//Driver que permite utilizar una clase de dispositivo CDC USB, emulando
//un dispositivo RS232 y lo muestra como un puerto COM en Windows
#include <PicUSB_CDC.h>
//Fichero con los descriptores de dispositivo
void main(){
int16 Valor=0;
int i=0;
int ValorL=0;
int ValorH=0;
setup_adc_ports(AN0_TO_AN2|VSS_VDD);
//Canales AN0, AN1 y AN2 analógicos de entrada ADCON1
usb_cdc_init();
usb_init(); //Inicializamos los registros USB
usb_wait_for_enumeration();
do{
usb_task(); //Controla la detección de conexión. Resetea en caso de que falle
if(usb_enumerated()) //Si el dispositivo está configurado
{
for(i=0;i<3;i++)
{
set_adc_channel(i);
delay_us(20);
Valor=read_adc();
ValorL=make8(Valor,0);
ValorH=make8(Valor,1);
if(usb_cdc_putready()) usb_cdc_putc(ValorL);
//Enviamos byte bajo del EP1 al PC
if(usb_cdc_putready()) usb_cdc_putc(ValorH);
//Enviamos byte alto del EP1 al PC
PicUSB.h
///////////////////////////////////////////////////////////////////////////
////
//// PicUSB_CDC.h
////
//// Este ejemplo muestra como configurar el dispositivo USB y sus
//// descriptores. Los únicos cambios con respecto a su verión
//// original (usb_desc_cdc.h) han sido realizados en el apartado
//// start device descriptors, concretamente el vendor y product id
//// y en apartado de start string descriptors, para definir el
//// nombre del dispositivo y la compañia.
////
///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
///
///PicUSB.h Archivo Descriptor Configuración
///
//////////////////////////////////////////////////////////////////////////
#IFNDEF __USB_DESCRIPTORS__
#DEFINE __USB_DESCRIPTORS__
#include <usb.h>
///////////////////////////////////////////////////////////////////////////
///
/// Comienzo de la configuración
/// Array que contiene el descriptor de configuración, de interface
/// y de punto final.
///
///////////////////////////////////////////////////////////////////////////
//Descriptor de la configuración
USB_DESC_CONFIG_LEN, //Tamaño del descriptor
USB_DESC_CONFIG_TYPE, //Tipo del descriptor (CONFIGURACION 0x02)
USB_TOTAL_CONFIG_LEN,0,
2, //Número de interfaces que soporta el dispositivo
0x01, //Identificador de la configuración (Si hubiera más de una)
0x00, //Índice del descriptor de cadena para esta configuración
0xC0, //Bit 6=1 si el dispositivo es self powered,
//Bit 5=1 si soporta remote wakeup, bits 0-4 reservados and Bit7=1
0x32, //0x32 = 100mA, máximo permitido
#define USB_MAX_NUM_INTERFACES 2
USB_CLASS_DESCRIPTORS[USB_NUM_CONFIGURATIONS][USB_MAX_NUM_INTERFA
CES][4]=
{
//config 1
//interface 0
//class 1-4
18,23,27,32,
//interface 1
//no classes for this interface
0xFFFF,0xFFFF,0xFFFF,0xFFFF
};
//////////////////////////////////////////////////////////////////
///
/// Descriptor del dispositivo
///
//////////////////////////////////////////////////////////////////
//Descriptor de Dispositivo
char const USB_DEVICE_DESC[USB_DESC_DEVICE_LEN] ={
USB_DESC_DEVICE_LEN, //Tamaño del descriptor
0x01, //Tipo del descriptor (DEVICE (0x01))
0x10,0x01, //Versión USB in bcd(2.0)
0x02, //Código de clase 0x02=Communication Device Class
0x00, //Código de Subclase
0x00, //Código del Protocolo
USB_MAX_EP0_PACKET_LENGTH,
//Tamaño máximo del paquete del Endpoint 0
0xD8,0x04, //Identificador del vendedor (0x04D8 is Microchip)
0x0A,0x00, //Identificador del producto
0x00,0x01,
0x01, //Indice del descriptor de cadena de fabricante
0x02, //Indice del descriptor de la cadena de producto
0x00, /Indice de descriptor de la cadena de número de serie
USB_NUM_CONFIGURATIONS //Número de Configuraciones
};
//////////////////////////////////////////////////////////////////
///
/// Comienza la Descripción de la cadena
///
//////////////////////////////////////////////////////////////////
char USB_STRING_DESC_OFFSET[]={0,4,12};
' ',0,
'P',0,
'i',0,
'c',0,
'U',0
'S',0,
'B',0
};
#ENDIF