Control de dispositivos a través del módulo USB del PIC18F45/2550

Disculpen, alguno sabe como modificar la libreria usb_desc_cdc.h en CCS v4.y104 ?

pruebo este programa que encontre en youtube, pero me da una seguidilla de errores.

Código:
#include <18F4550.h>             //PIC a emplear
#device adc=10;                  //Conversor A/D de 10 bits
#fuses HSPLL,NOWDT,NOLVP,USBDIV,PLL5,CPUDIV1,VREGEN
#use delay(clock=20000000)
include <usb_cdc.h>


void main(){
    unsigned long int fefe;
    usb_cdc_init();
    usb_init();
    while(!usb:cdc_connected()){}
    do{
       usb_task();
       if (usb_enumerated()){
            printf(usb_cdc_putc,"BARDXP: %Lu\r\n",fefe);
            fefe=fefe+1;
       }}while(TRUE);
       
}
Adjunto una imagen con los errores
No se si hace falta usb_task en el bucle while. Con hacerlo una vez antes de entrar bastaria. Ademas de lo que mencionaron anteriormente de reemplazar : por _ en usb_cdc etc.. el undefined es porque no encuentra las funciones. En particular nunca hice la comunicacion con CDC pero en la demas (HID o bulktransfer) hace falta incluir usb.c (#include <usb.c>).

Espero que te sirva !!
 
Saludos.

Estoy intentando hacer la conexión USB entre el PIC18F4550 y la PC, el tipo de conexión es HID.
Ya hice la simulación en proteus 8.1 y funciona correctamente, pero al implementar en circuito físico, la PC no me reconoce nada, ni como un programa desconocido.
El programa del PIC está funcionando, porque tengo dos leds que indican la conexión, pero sólo se prende el rojo esperando a que se haga la conexión.

Adjunto una imagen del circuito y el código del programa que está grabado en el PIC.
 

Adjuntos

Última edición por un moderador:
hola espero me puedan ayudar al enviar un dato del adc se manda la parte alta del dac en un buffer alto y uno bajo esto hecho en ccs pero mi duda es como concateno en visual net para mostrarlo en un text.text en c++ he leido que es asi


// Une la parte alta y baja de la conversión y guarda el dato en la variable
// ADCxValue.
ADCValue1 = (uint)(BufferINP[5] << 8) + BufferINP[6];
ADCValue2 = (uint)(BufferINP[7] << 8) + BufferINP[8];
// Muestra los valores en las barras de progreso.
ADC1_VALUE.Value = (int)ADCValue1;
ADC2_VALUE.Value = (int)ADCValue2;

pero en Visual Basic.Net no se como se haga
 
Última edición:
no me acuerdo muy bien peroo es simple, pones:

ADCValue1=(bufferinp(5)*256)+bufferinp(6)
text1.text=STR(adcvalue1)

no recuerdo si es 255 o 256 XD
 
Última edición:
hola espero me puedan ayudar al enviar un dato del adc se manda la parte alta del dac en un buffer alto y uno bajo esto hecho en ccs pero mi duda es como concateno en visual net para mostrarlo en un text.text en c++ he leido que es asi


// Une la parte alta y baja de la conversión y guarda el dato en la variable
// ADCxValue.
ADCValue1 = (uint)(BufferINP[5] << 8) + BufferINP[6];
ADCValue2 = (uint)(BufferINP[7] << 8) + BufferINP[8];
// Muestra los valores en las barras de progreso.
ADC1_VALUE.Value = (int)ADCValue1;
ADC2_VALUE.Value = (int)ADCValue2;

pero en Visual Basic.Net no se como se haga
hola amigo yo hice algo parecido a lo que estas haciendo pero a la inversa mande numeros de 16 bits en un arreglo y en el pic lo estoy uniendo mira asi lo hice en el pic

x1=((int16)numx2*256)+numx1;

numx1=recibe[1]; //1er byte del numero X
numx2=recibe[2]; //2do byte del numero X



Saludos.

Estoy intentando hacer la conexión USB entre el PIC18F4550 y la PC, el tipo de conexión es HID.
Ya hice la simulación en proteus 8.1 y funciona correctamente, pero al implementar en circuito físico, la PC no me reconoce nada, ni como un programa desconocido.
El programa del PIC está funcionando, porque tengo dos leds que indican la conexión, pero sólo se prende el rojo esperando a que se haga la conexión.

Adjunto una imagen del circuito y el código del programa que está grabado en el PIC.
me parece que el error es que la pc no esta enumerando a tu pic, puede que no hayas copiado la *.dll a la carpeta windows/system32
 
Última edición:
Gracias lcrs11 te dire que lo hice como me comento papirrin
ADCValue1 = (BufferIn(9) * 1024) + BufferIn(10) / 2
Temp1.Text = Str(ADCValue1)
NIVEL.Level = Val(Temp1.Text) + 1
me funciono ok aunque tambien si solo mostraba el valor de Bufferin(9) me daba lo mismo; sera por que el pic tengo justificado hacia la izquierda? (>>)
valor_adc_alta = (read_adc()>>8); // Enviamos la parte alta de la conversión de 10 bits.
valor_adc_baja = (int)(read_adc()); // Enviamos la parte baja de la conversión de 10 bits.
envia[10]=valor_adc_alta;
envia[11]=valor_adc_baja;

Aunque ahora me surge otra duda, programando en pic c me encuentro con varios void aparte del void main, quiero pensar que los demas void son como llamadas donde se ejecuta el codigo y despues regresa a donde se inicio la llamada; perdon por mi novatez soy autodidacta y me gustan los pics estoy realizando una interfaz con visual studio 2008 18f45450 Symbol Factory.Net windows 7 prof 64 bits ya probe la comunicacion y todo ok
gracias a los aportes de Moyano,Meta,Jose Villasmil, Mauricio Ferrer y Miguel Piñeiro y otros grandes que para mencionarlos son muchos Gracias(y)

void Inicio(void); //llamamos a Inicio para determinarlo

void Inicio(void)
 
Robop18 yo tambien ya realice la comunicacion por el puerto USB, con winXP, 32 bits, para hacerlo con un sistema operativo de 64 bits que dll estas usando no se si puedes facilitarme esa informacion.
 
que tal lcrs11 te la adjunto en Verdad es un trabajo de moyano muy bueno solo que si hay que estudiarle
y el principal problema a veces son configuracion de los fuses; a la hora de programar debemos tener presente que crystal usamos; en win 7 64 bits tuve que compilar mi proyecto en visual net en Propiedades del proyecto/compilacion/opciones avanzadas/ como Any cpu y X86 y lo simulo en proteus 8 asi me evito estar instalando a cada rato el usb virtual



Perdon no subi el archivo pero aqui esta tambien me ayudo mucho el proyecto de josexremix65
Saludos
 

Adjuntos

Última edición:
Código:
Robop18 yo tambien ya realice la comunicacion por el puerto USB, con winXP, 32 bits, para hacerlo con un sistema operativo de 64 bits que dll estas usando no se si puedes facilitarme esa informacion.
La misma librería tiene que funcionar para sistemas operativos de 32 y 64 bits. La librería tiene que estar en la carpeta SysWOW64, donde se encuentran las DLL del sistema. En caso de que utilices un sistema operativo de 32 bits, tiene que estar en la carpeta System32.

Saludos !
 
Gracias por la aclaración, pense que esa dll solo servia para sistemas de 32 bits, lo preguntaba porque me comprare una nueva laptop y pues antes de meterle algun sistema operativo queria saber si me funcionaria o no algunos trabajos que hice.
 
Como estás Alfredo, El primer ejemplo está diseñado con las librerías de CCS. Tendrías que ver si MikroC a sacado librerías para implementar una conexión tipo CDC. Con MikroC vas a poder encontrar librerías para implementar un enlace tipo HID. También vas a poder encontrar una aplicación para realizar las pruebas HID.
 
Hola Ya he probado instalando el dll en syswow64 y tampoco anda, si alguien los solucionó sería fantástico saber la solución



Hola, olvide comentar que en windows xp funciona correctamente
 
Última edición:

Arriba