Hola a todos los de este foro, he estado trabajando con el protocolo de comunicación usb con el pic18f4550 programandolo con el copilador ccs v3.236 y la interfaz con visual c++ 6.0, ahora estoy probando la adquisición de datos, pero la transferencia es muy lenta, el codigo del pic es el siguiente:
#include <18F4550.h>
#fuses HSPLL,NOWDT,PROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN,CPB
#use delay(clock=48000000)
#use fast_io(B)
#use fast_io(D)
#DEFINE USB_HID_DEVICE FALSE
#define USB_EP1_TX_ENABLE USB_ENABLE_BULK //turn on EP1 for IN bulk/interrupt transfers
#define USB_EP1_RX_ENABLE USB_ENABLE_BULK //turn on EP1 for OUT bulk/interrupt transfers
#define USB_EP1_TX_SIZE 64 //size to allocate for the tx endpoint 1 buffer
#define USB_EP1_RX_SIZE 64 //size to allocate for the rx endpoint 1 buffer
#include <pic18_usb.h>
#include <usb_desc_scope.h> //USB Configuration and Device descriptors for this UBS device
#include <usb.c> //handles usb setup tokens and get descriptor reports
void main(void)
{
int out_data[64]; //solo es posible usar registros de 8 bit para usb
int in_data[64]; // no se puede usar long int
int z;
set_tris_b(0);
set_tris_d(0xff);
usb_init();
setup_adc_ports(AN0_TO_AN7);
setup_adc(ADC_CLOCK_DIV_32);
output_b(0);
usb_wait_for_enumeration();
while (TRUE)
{
if(usb_enumerated())
{
set_adc_channel(0);
delay_us(20);
out_data[0]=read_adc();
set_adc_channel(1);
delay_us(20);
out_data[1]=read_adc();
set_adc_channel(2);
delay_us(20);
out_data[2]=read_adc();
set_adc_channel(3);
delay_us(20);
out_data[3]=read_adc();
set_adc_channel(4);
delay_us(20);
out_data[4]=read_adc();
set_adc_channel(5);
delay_us(20);
out_data[5]=read_adc();
set_adc_channel(6);
delay_us(20);
out_data[6]=read_adc();
set_adc_channel(7);
delay_us(20);
out_data[7]=read_adc();
out_data[8]=input_d();
for(z=9;z<64;z++)
out_data[z]=z;
usb_put_packet(1, out_data, 64, USB_DTS_TOGGLE);
if (usb_kbhit(1))
{
usb_get_packet(1, in_data, 64);
output_b(in_data[0]);
}
}
}
}
Mi duda es la siguiente: como se calcula la velocidad de muestreo (en Hz) para la adquisicion de datos por el usb, para las caracteristicas del programa anterior.