Hola a todos, estoy con el proyecto de final de carrera en el que quiero utilizar una comunicación USB de tipo Bulk, y como no me ayude alguien creo que me voy a quedar por el camino 
Me he basado plenamente en el ejemplo de "Hobby pic", con el que comunican el Pic y el PC por USB (Bulk) y a través del visual C#. El cual ha funcionado a la perfección simulado.
Ahora he añadido la conexión USB a un circuito que tengo montado sobre una placa de topos el cual tiene una serie de pulsadores y un LCD.
Para hacerlo sencillo, he hecho un programita muy tonto para combinar el LCD con la configuración del USB (de momento no quiero transmitir ni recibir) y la sorpresa es que el PIC se queda colgado, el LCD no llega a escribir nada.
si comento las líneas de inicialización de USB y vuelvo a probar el programa, funciona perfectamente, si pulso el botón cambia el texto del LCD.
A continuación os pongo el código...
Hay puestos condensadores de 100nF cerca de las alimentaciones, y también he puesto el dichoso condensador de 470nF en el pin Vusb
Os adjunto el proyecto junto con la simulación en Proteus.
Un saludo y gracias de antemano!!!
Me he basado plenamente en el ejemplo de "Hobby pic", con el que comunican el Pic y el PC por USB (Bulk) y a través del visual C#. El cual ha funcionado a la perfección simulado.
Ahora he añadido la conexión USB a un circuito que tengo montado sobre una placa de topos el cual tiene una serie de pulsadores y un LCD.
Para hacerlo sencillo, he hecho un programita muy tonto para combinar el LCD con la configuración del USB (de momento no quiero transmitir ni recibir) y la sorpresa es que el PIC se queda colgado, el LCD no llega a escribir nada.
si comento las líneas de inicialización de USB y vuelvo a probar el programa, funciona perfectamente, si pulso el botón cambia el texto del LCD.
A continuación os pongo el código...
Código:
#include <18f4550.h>
#device adc=10
#fuses HSPLL //High Speed Crystal/Resonator con PLL habilitado
#fuses NOWDT //No hay Wach Dog Timer
#fuses NOPROTECT //No hay protección contra lectura
#fuses NOLVP //No se habilita el Low Voltage ICSP Programing
#fuses NODEBUG
#fuses USBDIV
#fuses PLL5
#fuses CPUDIV1
#fuses VREGEN
#use delay (clock = 48000000)
#define USB_HID_DEVICE FALSE //disabled HID
#define USB_EP1_TX_ENABLE USB_ENABLE_BULK //turn on EP1(EndPoint1) for IN bulk/interrupt transfers
#define USB_EP1_RX_ENABLE USB_ENABLE_BULK //turn on EP1(EndPoint1) for OUT bulk/interrupt transfers
#define USB_EP1_TX_SIZE 2 //size to allocate for the tx endpoint 1 buffer
#define USB_EP1_RX_SIZE 2 //size to allocate for the rx endpoint 1 buffer
#include <pic18_usb.h> //Microchip PIC18Fxx5x Hardware layer for CCS's PIC USB driver
#include <PicWinUSB.h> //Descriptors and USB configuration
#include <usb.c> //handles usb setup tokens and get descriptor reports
#use standard_io(B)
#use standard_io(D)
#include "flex_lcd.c" //#include <LCD.C>
#int_TIMER1
/*función de la interrupción del TIMER1;
cada vez que se desborde el TIMER1, hará esta función y volverá al punto
donde estaba.*/
void temp1s(void)
{
//Aquí irá una interrupción para controlar servos
}
void servoArriba()
{
printf(lcd_putc, "\f SERVO");
printf(lcd_putc, "\n ARRIBA");
delay_ms(1000);
}
void main()
{
int8 iBuff[2]; //Array de entrada
int8 oBuff[2]; //Array de salida
port_b_pullups(TRUE); //Pullups del PORTB activadas, nos interesa ya que utilizamos muchos pulsadores.
setup_timer_1 (T1_INTERNAL | T1_DIV_BY_8);
enable_interrupts(INT_TIMER1); //habilita interrupción TIMER1
enable_interrupts(global); //habilita interrupción general
setup_adc_ports(AN0); //Se configura A0 como en canal 0 del ADC.
setup_adc(ADC_CLOCK_DIV_64); //Utilizo esta configuración, es la indicada en el datasheet.
lcd_init(); //Se inicializa el LCD.
usb_init(); //Se inicializa el USB (SI COMENTO ESTAS LÍNEAS EL PROGRAMA FUNCIONA!)
usb_task();
usb_wait_for_enumeration();
for(;;)
{
if (input(PIN_B4)==0) //Si se pulsa el botón del pin B4
servoArriba(); //Aparece el texto Servo Arriba en el LCD
printf(lcd_putc, "\f SERVO"); //Si no aparece el texto Servo parado en el LCD
printf(lcd_putc, "\n PARADO");
delay_ms(100);
}
}
Hay puestos condensadores de 100nF cerca de las alimentaciones, y también he puesto el dichoso condensador de 470nF en el pin Vusb
Os adjunto el proyecto junto con la simulación en Proteus.
Un saludo y gracias de antemano!!!