Autor Tema: Usb Bulk Velocidad  (Leído 1600 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado RodMed

  • PIC10
  • *
  • Mensajes: 1
Usb Bulk Velocidad
« en: 26 de Julio de 2020, 23:13:58 »
 :) Hola a todos, soy nuevo en el foro, y no se a quien mas recurrir :(  Tengo un proyecto que consta de un PIC18F4553 con un xtal de 40 Mhz, donde necesito recibir 250 Kbytes de un microfono en un segundo, el circuito es muy sencillo por ahora solo esta el microfono conectado al PIC y de ahi se conecta a la computadora por metodo Bulk, en la computadora leo los paquetes de 64 bytes con Labview.
El problema que tengo es que solo llegue a 5,000 Bytes por segundo aproximadamente, pero leo en internet que activando mas endpoints puedo mandar mas paquetes, pero no lo se hacer, alguien podria por donde podria empezar?

Ademas, tambien leia que el Isocrono es mas rapido, es muy dificil de implementar?

Este es el codigo que estoy utilizando.
Código: [Seleccionar]
#include <18F4553.h>
#DEVICE ADC=8
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL10,CPUDIV1,VREGEN,MCLR
#use delay(clock=48000000)


#define USB_HID_DEVICE     FALSE
#define USB_EP1_TX_ENABLE  USB_ENABLE_BULK
#define USB_EP1_RX_ENABLE  USB_ENABLE_BULK
#define USB_EP1_TX_SIZE    64 //put_packet
#define USB_EP1_RX_SIZE    64

#include <pic18_usb.h>     //Microchip PIC18Fxx5x Hardware layer for CCS's PIC USB driver
#include "Interfaz_USB.h"  //Configuración del USB y los descriptores para este dispositivo
#include <usb.c>           //handles usb setup tokens and get descriptor reports

#use fast_io(a)
#use fast_io(b)
#use fast_io(c)

#byte ADCON2 = 0XFC0
#byte ADCON1 = 0XFC1
#byte ADCON0 = 0XFC2
#byte UCON = 0XF6D
#byte UCFG = 0XF6F
#byte porta = 0xf80 // Identificador para el puerto A.
#byte portb = 0xf81 // Identificador para el puerto B.
int8  recibir[6];                 
int  enviar[64];
int16 Dato_RA0;

#define Activar_Int   recibir[0]
#define Salida_Dig1   recibir[1]
#define Salida_Dig2   recibir[2]


#define LED_ON   output_high // Función para encender el LED.
#define LED_OFF  output_low  // Función para apagar el LED.

#define IN1      PIN_B1
#define IN2      PIN_B2

#define OUT_PWM  PIN_C2
#define OUT1     PIN_B5
#define OUT2     PIN_B3

void main(void)
{
   
   int i = 0;     
   ADCON1 = 0b00001110;
   ADCON0 = 0b00000011;
   ADCON2 = 0b00001110;
   UCON =   0b00101100;
   UCFG =   0b00010100;
   

   usb_init();
   usb_task();
   usb_wait_for_enumeration();
   delay_ms(50);

   // Secuencia de confirmación de enumeración.
   LED_ON(OUT1);
   delay_ms(250);
   LED_OFF(OUT1);
   
   while (TRUE)
   {
      if(usb_enumerated())          // True si el USB ha sido enumerado.
      {
         if (usb_kbhit(1))          // True si hay datos en el buffer de recepción.
         { 
            usb_get_packet(1,recibir,8);
                     
            if (Activar_Int==1)     // Salidas activadas
            {     
               if(Salida_Dig1 == 1) LED_ON(OUT1);
               else LED_OFF(OUT1);

               if(Salida_Dig2 == 1) LED_ON(OUT2);
               else LED_OFF(OUT2);
           }       
         }
                 

  for(i = 0; i<=63; i= i+1){   
   enviar[i]=read_adc();   // Muestrear para mayor estabilidad en la lectura.
 //  enviar[i]= Dato_RA0 >> 8;
 //  enviar[i+1] = Dato_RA0 & 0xFF;
  }
         usb_put_packet(1,enviar,64,USB_DTS_TOGGLE); //Envío los datos al USB
       
      }
   }
}
Estaria muy agradecido con sus comentarios.
Saludos!


 

anything