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

aunque de antemano te digo que no me gusta mucho su rendimiento; ya que la velocidad de adquisicion es lenta y ademas la comunicacion CDC se pierde.. seria bueno pensar en construir una parecida utilizando HID... yo me apunto para lo que pueda colabolarles.. saludos!!

Dinoelectro, sera que estas haciendo algo malo en la configuracion del CDC o en la adquisición de los datos, porq la verdad yo utilizo frecuentemente en mis proyecto el CDC y funciona perfecto, claro yo hago mi interfaz visual con Visual Basic 6, y donde si debo estar muy pendiente es en leer el o borrar el buffer del PIC antes que se sature, asi si pierde conexion o no funciona adecuadamente.

Revisa tu programacion, cualquier cosa por aca siempre estamos a la orden, el HID es la conexion mas lenta en USB, solo q no necesitas dirver para instalar, en caso tal si lo q quieres es aumentar tu comunicacion, puedes usar el BUlk, la verdad es muy bueno, pero tiene sus ventajas y desventajas tambien.

Saludos desde Venezuela. y podemos crear un buen grupo de trabajo entre varios miembros del foro, para desarrollar nuevos proyectos.
 
Dinoelectro, sera que estas haciendo algo malo en la configuracion del CDC o en la adquisición de los datos, porq la verdad yo utilizo frecuentemente en mis proyecto el CDC y funciona perfecto, claro yo hago mi interfaz visual con Visual Basic 6, y donde si debo estar muy pendiente es en leer el o borrar el buffer del PIC antes que se sature, asi si pierde conexion o no funciona adecuadamente.

Revisa tu programacion, cualquier cosa por aca siempre estamos a la orden, el HID es la conexion mas lenta en USB, solo q no necesitas dirver para instalar, en caso tal si lo q quieres es aumentar tu comunicacion, puedes usar el BUlk, la verdad es muy bueno, pero tiene sus ventajas y desventajas tambien.

Saludos desde Venezuela. y podemos crear un buen grupo de trabajo entre varios miembros del foro, para desarrollar nuevos proyectos.

estas en lo cierto, la comunicacion CDC, es buena y segura.. en muchos proyectos me ha funcionado a la perfeccion,.. yo me referia a este proyecto del DAQ con 18F4550, que me descargue de www.sixca.com. ahi no dan el codigo solo el *.hex, el daq funciona pero hay veces que la comunicacion se corta...

yo sabia que HID es mas rapido que CDC... almenos eso es lo que investigado

saludos amigo.
 
Que solo queria hacer un prograra con CDC (que no lo pude utilizar) en PIC C que contara los pulsos de entrada por minuto de tres pines (o tres cosas) y lo mandara a usb cada minuto. Gracias y saludos, en la pestaña número 96 creo que esta el programa que "habia intentado hacer" pero no pude y lo hice con HID, pero queria aprender con CDC.
 
Que solo queria hacer un prograra con CDC (que no lo pude utilizar) en PIC C que contara los pulsos de entrada por minuto de tres pines (o tres cosas) y lo mandara a usb cada minuto. Gracias y saludos, en la pestaña número 96 creo que esta el programa que "habia intentado hacer" pero no pude y lo hice con HID, pero queria aprender con CDC.

El CDC es mas facil q el HID, solo debes saber hacer la configuracion correcta como en todo lo q se haga en un PIC, aqui puedes encontrar una muy buena explicacion sobre como hacerlo.

http://picmania.garcia-cuervo.net/usb_3_cdctransfers.php

Recuerda que uno aprende a caminar es gateando y luego perfecciona la tecnica, que quiero decir con esto? que si consigues a alguien q te haga el programa, tu no vas a aprender a hacerlo ni a resolver los problemas q se te presenten posteriormente, por eso es mejor, aprender por si mismo, pero si se te presentan dudas, aqui en este tema, al comienzo, estan las explicaciones de la comunicación CDC, te lo digo porq es el foro y la pag q busco cuando se me olvida como hacerlo, porq me la paso programando a diario!!

Yo considero q la comunicación CDC es mas fácil de configurar que la HID, por eso se te debe hacer mas fácil ahora la programación!!! Saludos... Cualquier cosa, has la pregunta mas directa!! no decir q no funciona!! porque sino seria mas difícil darte respuesta!!

Espero que con mis palabras no ofenda a nadie, pero el gran valor de la programación va es en el conocimiento que cada programa nos deja!!!
 
Gracias Albermillan69! es que me urgía un poco por eso habia puesto el código de lo que habia echo, voy a probar ya que si deces que la CDC es mas facil que HID me imagino que es demasiado fácil, ya que la HID no sentí que fuera tan dificil (solo horas y horas de lectura y practica) pero a la hora de entender muy facil, gracias y lo que quería era correción de mi código que puse en la pestaña 96, y si en caso tienes algun material de apoyo te agradeceria enormemente, saludos!!
 
Última edición por un moderador:
oeg2: Yo habia leido tu mensaje, pidiendo la ayuda, pero la verdad estaba muy ocupado, aun lo estoy un poco, pero como te dije, la informacion estan en la pag q te pase y en el principio de este foro, a diferencia del HID con el CDC debes tener un driver, que te va hacer la comunicacion entre el PC y el PIC, por eso quizas vez mas facil el HID, porq es la interfaz humana, como un Mouse, que tu no instalas los driver sino el solo lo hace!!! es mas practico el HID en ese sentido, pero con CDC puedes hacer mas!!

En fin, ya que ahora tienes mas tiempo para aprender, te invito a que trates de hacer la comunicacion CDC y nos avisas como te fue, aqui te voy a dejar partes del ultimo programa q realice con CDC, funciona perfecto!!

Programa:
//Este es para un cristal de 20MHz
#include <18f4550.h>
#FUSES HSPLL, NOPROTECT, BROWNOUT, BORV28, NOPUT, NOCPD, NOLVP, LPT1OSC, NOPBADEN, USBDIV, PLL5, CPUDIV1, VREGEN
#use delay(clock=48000000)

//Librerias
#include "usb_cdc.h" // Descripción de funciones del USB.
#include "usb_desc_cdc.h" // Descriptores del dispositivo USB.

//luego dentro del Void main() colocas
//Configura el USB
usb_cdc_init();
usb_init();

//Y tu ciclo infinito va a ser algo asi
While(true){
usb_task();

//Si esta conectado al HUT
while(usb_cdc_connected()){
//OFF(Rojo);
//ON(Verde);
delay_ms(500);
//Si el dispositivo NO esta enumerado
while(!usb_enumerated()){}
//Si se envia algun dato
car=0;
while(usb_cdc_kbhit()){ //Mientras exista algo en el Buffer de entrada


OJO: son partes de la logica del programa que yo realice, asi me funciona perfectamente, las librerias son las que trae el CCS, pero ya las mias están personalizadas!! el driver, creo q tambien lo trae el CCS.

Cualquier cosa, pega un grito!!! Saludos desde venezuela, de donde eres tu??
 
Gracias albermillan69! voy a ver un poco de esto y te cuento, gracias por tu interés y saludos desde el país de la eterna primavera, Guatemala! voy a ver un poco y si puedes mandarme un saludito a mi correo para tenerte en mis contactos, saludos!
 
Hola, buenas noches.

Muy buen code!
Estoy tratando de hacer unas modificaciones y me encuentro con un problema. A ver si pueden ayudarme:
Resulta que el HEX que nuestro compañero nos compartió, funciona de maravillas. El problema me aparece cuando compilo con mi CCS y crea el nuevo HEX. El código compilado está tal cual lo compartió nuestro amigo. Por algún motivo Windows no me reconoce el PIC y lo registra como "Dispositivo Desconocido". Me fijé en las propiedades y veo que el VID&PID llegan con 0000. En adjunto les dejo las capturas de cómo Windows registra uno y otro.
Lo que me parece raro es que el código está compilado tal cual nos lo compartió nuestro compañero. No sé si se puede tratar de una configuración mala del CCS o, incluso, de la versión. Probé con la 4.068 y la 4.104, y en ambas obtuve el mismo resultado.

A alguien le pasó algo similar?

Agradezco de antemano su ayuda.

Saludos!
 

Adjuntos

  • HEX_COMPILADO_CON_CCS.JPG
    HEX_COMPILADO_CON_CCS.JPG
    23 KB · Visitas: 26
  • HEX_ORIGINAL.JPG
    HEX_ORIGINAL.JPG
    22.8 KB · Visitas: 17
Hola, buenas noches.

Muy buen code!
Estoy tratando de hacer unas modificaciones y me encuentro con un problema. A ver si pueden ayudarme:
Resulta que el HEX que nuestro compañero nos compartió, funciona de maravillas. El problema me aparece cuando compilo con mi CCS y crea el nuevo HEX. El código compilado está tal cual lo compartió nuestro amigo. Por algún motivo Windows no me reconoce el PIC y lo registra como "Dispositivo Desconocido". Me fijé en las propiedades y veo que el VID&PID llegan con 0000. En adjunto les dejo las capturas de cómo Windows registra uno y otro.
Lo que me parece raro es que el código está compilado tal cual nos lo compartió nuestro compañero. No sé si se puede tratar de una configuración mala del CCS o, incluso, de la versión. Probé con la 4.068 y la 4.104, y en ambas obtuve el mismo resultado.

A alguien le pasó algo similar?

Agradezco de antemano su ayuda.

Saludos!

Talvez te esta agarrando un driver que ya tenias, eso me paso a mi, habia echo pruebas con un ejemplo de J1M algo asi ya no recuerdo, despues compilé con otro VID y otro PID y me seguia jalando ese driver, prueba en otro puerto usb o desinstala todos los contralores que habias instalado para ese tipo de pruebas de CDC con tu PIC (por lo que veo que estas trabajando) y siempre revisa en el archivo usb_desc_cdc.h de tu libreria de CCS si no esta diferente, esto esta en las primeras lineas de código como:

#define USB_CONFIG_PID 0x000A ( estos son en mi caso )
#define USB_CONFIG_VID 0x04D8 ( estos son en mi caso )

mira y estaremos al pendiente.
Saludos desde Guatemala!
 
Hola, Oeg2. Gracias por tu ayuda!

Mira, yo estoy haciendo las pruebas desde Proteus, simulando USB. Hice lo que me dijiste, pero aún sigue pasando lo mismo.
La versión 4.104 de CCS es la que estoy usando, y las librerías que integra tiene los dos #defines que mencionas.

Voy a hacer unas pruebas y luego te comento como me fue.

Muchas gracias y saludos desde Argentina.
Cristian.



Hola de nuevo.

He borrado los drivers desde el administrador de dispositivos, luego cargué en Proteus el HEX compilado en mi PC y sigue apareciendo como desconocido :(. Evidentemente algo raro hay en la PC o en la versión de CCS.
Qué versión de CCS usas en tu caso?

Gracias de antemano.
Saludos,
Cristian.
 
Última edición:
Hola.

Bueno, no hay caso. Intenté con una versión más reciente de CCS con sus propias librerías modificando el VID&PID, pero no pasa nada :cry:. En el asistente de instalación de Drivers me sigue apareciendo como "Desonocido" (ver adjunto).
Hice una comparación con el HEX que sí funciona, y lo llamativo es que, apenas conecto el PIC al USB, me aparece el Nombre del dispositivo rápidamente. En cambio, con el HEX compilado con mi CSS, directamente aparece "Desconocido".

Bueno, si a alguien se le ocurre alguna sugerencia, les agradeceré muchísimo.

Saludos cordiales,
Cristian.
 

Adjuntos

  • UnknowDevice.jpg
    UnknowDevice.jpg
    62.4 KB · Visitas: 13
Hola.
No aún, personalmente no probé en C18.
Voy a instalarlo para validar si realmente funciona.
Creo que también se puede usar el compilador CCS en el MPLAB, pero supongo que el resultado será el mismo.
Voy a probar y te comento en un rato.

Gracias y saludos!
Cristian.
 
Hola como andas aguevara, las respuestas a tus dudas son las siguientes:

- El archivo mpusbapi.dll es el archivo encargado , junto con el driver correspondiente que viene incluido con el de gestionar la comunicación PC - PIC . Ahora bien este archivo no se carga al pic sino que un programa escrito por ejemplo en Visual Basic 6.0 llama a las funciones de esa librería y establece comunicacion con el PIC.

- El firmware es el programa que se le carga al pic , donde hay librerías específicas para gestionar la comunicación usb.

Espero tus dudas hayan sido disipadas , en caso contrario peregunta.

Mañana voy a seguir con el tutorial del protocolo bulk transfer donde voy a hacer incapie nuevamente en esto que has preguntado.

hola Moyano Jonathan, ha pasado mucho tiempo de que hicieron este tema, realmente esta muy bueno, es realmente un tutorado de los pic 18f2550. Le agradesco todo su aporte y el averlo echo publico.;)
 
hola Moyano Jonathan, ha pasado mucho tiempo de que hicieron este tema, realmente esta muy bueno, es realmente un tutorado de los pic 18f2550. Le agradesco todo su aporte y el averlo echo publico

Muchas gracias, igual faltan muchos temas por cubrir. Con lo de USB por ahora no lo he seguido desarrollando por que considero que hay otros temas que por ahora me llaman más la atención.
En estos momentos estoy desarrollando temas como ETHERNET, microcontroladores AVR, robótica, GSM, RF, etc. Igual el tema de USB todavía no lo he dado por terminado y en cuanto tenga más tiempo libre lo voy a seguir desarrollando.

Un saludo !
 
buenas muchachos trate de hacer los ejemplos de usb_ cdc pero la verdad no me funcionan ninguno, estoy compilando en picc compiler version 4.109 no se q es a la hora de descargar las paquetes completos en proteus subo el archivo .hex y me funciona a la maravilla, pero cuando le doy compilar al archivo c q viene en carpeta de nuevo pongo el .hex y no funciona en windows lo reconoce como si fuera un dispositivo hid desconocido, he probado con todos los ejemplos y la misma cosa no funka sin compilar si funka pero compilo y nada q ver, tu Jonathan en las caspetas entregas las librerias hasta la de pic18usb modificada pero veo q la extension es .h pero a la hora de abrir el archivo en la cabecera dice pic18_usb.c entonces es .h o .c no se cual es el error, si pongo tus librerias de una me bota error a la hora de compilacion y si dejo las de por defecto q vienen en c, como te digo el pc las reconoce como un dispositivo hid desconocido; espero me puedas ayudar o si puedes mandarme todo el paquete completo de librerias usb.c usb.h bueno y todas las demas q demende la aplicacion en cdc usb te lo agradeceria bastante si alguien tiene ese problema y ya lo soluciono pues q podria ser....
un saludo!!
y sos un capo :)
 
Atrás
Arriba