Bueno la verdad que me lei todos los temas de este foro, campio todos los capacitoere, etc. no se cual es el problema que tengo que cuendo conectecto el USB me dice que no reconoce el Dispositivo. que el dispositivo se tubo que cerrar por un mal funcionamiento.
El programa que utiliso esta en CCS y es un ejemplo que saque de este foto.
La conexion que utiliso es HID.
El SO del la PC es Win7.
en el protoboar tengo el Capacitor de 47uF electrolitico en la pata Vbus y tengo el D+ D- conectados a la para 2 y 3 de des conector USB, tengo un capacito 104 entre el + y - del micro, y uso un cristal de 20Mhz(puede ser un error que en el codigo le puse XTPLL como fuce. a lo mejor va HS).
Codigo:
#include <18F2550.h> // Definición de registros internos del PIC18F2550.
#DEVICE ADC=8 // CAD con 8 bits de resolución , justificación a la derecha.
#fuses NOMCLR,XTPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL1,CPUDIV1,VREGEN,NOPBADEN
// NOMCLR: No vamos ha usar el PIN MCLR, el reset se hará por soft.
// XTPLL: Vamos a usar un cristal de 4.00Mhz.
// NOWDT: No vamos a usar el perro guardian.
// NOPROTECT: Memoria no protejida contra lecturas.
// NODEBUG: No utilizamos código para debugear.
// NOLVP: No utilizamos el modo de programación con bajo voltaje.
// USBDIV: signfica que el clock del usb se tomará del PLL/2 = 96Mhz/2 = 48Mhz.
// PLL1: significa que el PLL prescaler no dividirá la frecuencia del cristal. para XT = 4Mhz.
// CPUDIV1: El PLL postscaler decide la división en 2 de la frecuencia de salida del PLL de 96MHZ, si queremos 48MHZ, lo dejamos como está.
// NOVREGEN: habilita el regulador de 3.3 volts que usa el módulo USB.
// NOPBADEN: Deshabilitamos el módulo conversor ADC del puerto B.
#use delay(clock=48000000)
#DEFINE USB_HID_DEVICE TRUE // Vamos a utilizar el protocolo HID.
#define USB_EP1_TX_ENABLE USB_ENABLE_INTERRUPT // Definición del tamaño del buffer de salida.
#define USB_EP1_TX_SIZE 1
#define USB_EP1_RX_ENABLE USB_ENABLE_INTERRUPT // Definición del tamaño del buffer de entrada.
#define USB_EP1_RX_SIZE 1
/*********************************************************************************************************/
#define use_portb_lcd TRUE // Puerto B usado para el LCD.
// Librerías utilizadas.
#include <LCD.c>
#include <pic18_usb.h> // Drivers's USB del PIC18F2550.
#include <usb_desc_hid.h> // Descriptores USB.
#include <usb.c> // Funciones del USB.
/*********************************************************************************************************/
// Variables globales.
long valor; // Variable que guarda el valor del ADC.
void main() {
int8 dato[1]; // Variable que va a guardar el valor del ADC.
OUTPUT_A(0); // todos salidas
OUTPUT_B(0) ;
OUTPUT_C(0);
set_tris_a(0x3); // ra0=entradas, los demas=salida
set_tris_b(0x0);
set_tris_c(0x0);
setup_adc_ports( AN0 || VSS_VDD ); // canal AN0, Vref+ = Vdd, Vref- = Vss
setup_adc(ADC_CLOCK_DIV_64);
set_adc_channel(0);
usb_init_cs(); // inicia el USB y sale. Va de la mano con usb_task().
while(1){ // bucle infinito
valor = read_adc();
dato[0] = valor;
usb_task(); // Configuramos el puerto USB.
if (usb_enumerated()) // Si el puerto es enumerado y configurado por el host..
{
usb_put_packet(1,dato,1,USB_DTS_TOGGLE); // Mando el valor del adc por USB.
}
}
}
Libreria usb_desc_hid.h:
//////////////////////////////////////////////////////////////////
///
/// start device descriptors
///
//////////////////////////////////////////////////////////////////
const char USB_DEVICE_DESC[USB_DESC_DEVICE_LEN] ={
//starts of with device configuration. only one possible
USB_DESC_DEVICE_LEN, //the length of this report ==1
0x01, //the constant DEVICE (DEVICE 0x01) ==2
0x10,0x01, //usb version in bcd ==3,4
0x00, //class code ==5
0x00, //subclass code ==6
0x00, //protocol code ==7
USB_MAX_EP0_PACKET_LENGTH, //max packet size for endpoint 0. (SLOW SPEED SPECIFIES 8) ==8
0x04,0xD8, //vendor id (0x04D8 is Microchip, or is it 0x0461 ??)
0x00,0x01, //product id ==11,12 //don't use ffff says usb-by-example guy. oops
0x06,0x01, //device release number ==13,14
0x01, //index of string description of manufacturer. therefore we point to string_1 array (see below) ==15
0x02, //index of string descriptor of the product ==16
0x00, //index of string descriptor of serial number ==17
USB_NUM_CONFIGURATIONS //number of possible configurations ==18
};