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

Hola Moyano, muchísimas gracias por el aporte.

¿Finalmente hiciste otro tutorial pata VB.net y PICBASIC?
 
Hola, he visto que han desarrollado barias aplicaciones con USB y micro y parecieron muy interesantes. ya hace un tiempo trabaje con PIC C++ y Delphy Borland e hice un pequeño proyecto.

Ahora necesito hacer este tipo de coneccion (USB) pero utilizando el software Qt creator y np se como hacerlo, es decir las instrucciones para el envío de datos al PIC serian las mismas a Delphy o a las que ustedes sutilizan en visual C++ ? o de que forma se puede hacer con Qt? la verdad es que necesito utilizar este programa ya que pienso hacer un proyecto basado en procesamiento digital de imágenes y bueno Qt es software libre y trabaja bastante bien con las librerías de OpenCv para este tipo de aplicaciones.

Así que si alguien me puede ayudar o darme una luz para empezar a trabajar con este proyecto le agradecería mucho

Yo por mi lado ni idea de como usar esos lenguajes para hacer lo que querés...vas a tener que investigar por tu cuenta.

Hola Moyano, muchísimas gracias por el aporte.

¿Finalmente hiciste otro tutorial pata VB.net y PICBASIC?

Estoy en eso, espero poder terminarlo pronto pero no tengo mucho tiempo para dedicarle.
 
hola moyano me pareces re capo en este soy un noob en esto de pic usb, me descargue tu tutorial de control de dispositivos hago la simulacion en proteus y me anda de una, pero cuando lo monto en mi proto el windows me dice dispositivo no reconocido, no se q es; el condensador de 100n debe ser ceramico o electrolito y el MCLR se puede conectar a una resistencia de 10k a vcc o tiene q ser con el diodo ?? ahh y el condensador q sale de vusb debe ser ceramico o electrolito? muchas gracias por tu interes en estos temas tan grosos
 
mmm oks, ya solucione el problema era mala conexion, mira me puse a hacer el programa de visual c# desde ceros y cuando le doy run y clickeo el boton de conectar dispositivo me aparece el siquiente error en EasyHID.Connect(Handle);---->Unable to load DLL 'mcHID.dll': No se puede encontrar el módulo especificado. (Exception from HRESULT: 0x8007007E), ya intente de todo y nose q es haber si me colaboras o me dices que puede ser...ahhh y otra cosa q pena molestarte tanto quiero hacer una aplicacion wifi con pic la idea es hacer el programa con el modulo rs232 o pic y comprar un modulo conversor de usb o serial a wifi haber si tu tienes informacion sobre eso o algun consejo o una idea, estaria agradecido contigo....exitos en tus actividades

igualmente un saludo!!
 
mmm oks, ya solucione el problema era mala conexion, mira me puse a hacer el programa de visual c# desde ceros y cuando le doy run y clickeo el boton de conectar dispositivo me aparece el siquiente error en EasyHID.Connect(Handle);---->Unable to load DLL 'mcHID.dll': No se puede encontrar el módulo especificado.

Es un error común. Pasa por que el sistema no encuentra la dll, tenes que copiar mcHID.dll en la carpeta de windows system32.
 
Buenas a todos! he visto MUCHA información pero yo tengo un par de dudas todavia sobre USB (gracias a esto he aprendido BASTANTE porque lo he aprendido por mi cuenta).

Yo tengo que hacer un proyecto que me cuente los pulsos de 3 cosas (en 3 terminales y 3 variables) y que los mande a la PC cada minuto.

mis problemas son:
- primera vez que programo en CCS y también en C.
- no se como configurar un temporizador para que me de una señal o puldo o desborde cada minuto para mandar el dato de mis 3 variables cada minuto por eso lo iba a poner con otra cosa que me generar el pulso cada minuto y lo metia a la interrupcion B0 y los pulsos los quiero leer en 3 terminales del puerto B.
- no se como ir sumando a cada variable y lo que mas me detiene:
- NO SE CUAL ES LA INSTRUCCION O COMANDO PARA MANDAR INFO AL PC CON UNA VARIABLE DE palabra (16 bits).

si alguien me guiara o me mandara un simple codigo (que se que no esta dificil porque he programado en otros lenguajes y se como hacerlo en los otros pero no en C y tampoco conozco las instrucciones)

Tengo el siguiente programa que he ido construyendo poco a poco:
---------------------------------------------------------------------------------
#include <18F4550.h> // Usamos el PIC 18F4550, pero puedes declarar cualquiera de los 18Fxx5x

#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN // Cristal a 20MHz.
// * Haz clic aquí para ver otras configuraciones del cristal.
#use delay(clock=48000000) // El PLL interno siempre ha de ser de 48MHz. (No es el cuarzo)

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

#Byte PortA = 0xF80 // Dirección del puerto A para la familia 18Fxx5x.
#Byte PortB = 0xF81 // Dirección del puerto B para la familia 18Fxx5x.
#Byte PortC = 0xF82 // Dirección del puerto C para la familia 18Fxx5x.
#Byte PortD = 0xF83 // Dirección del puerto D para la familia 18Fxx5x (Sólo 40/44 pines).
#Byte PortE = 0xF84 // Dirección del puerto E para la familia 18Fxx5x.

// ------ Variable Global ------
Int16 contador_1 = 0; // Declaramos el valor de X como Word (16 bits). Esta variable
Int16 contador_2 = 0; // ha de ser global porque su valor lo usaremos en la interrupción y
Int16 contador_3 = 0; // en el programa principal. Por tanto declaramos esta variable antes
// de la interrupción y de "void main".

// ------- Interrupción --------
#INT_EXT // Interrupción Externa por RB0: Decodificación de Encoder.
Void IntRB0()
{
// CCS se encarga de desactiva automáticamente cualquier interrupción.
// No hace falta guardar contextos de registros.

If (Bit_Test(PortB, 0)) // Si RB0 se ha puesto a 1 (flanco de subida),
{
Ext_Int_Edge(H_TO_L); // entonces activar la siguiente interrupción para flanco de bajada.

//mandar mis datos de las 3 variables a la PC.
//y resetear mis variables.

}

// Al finalizar la interrupción CCS se encarga de volver a poner automáticamente
// la badera INTF = 0 ---> borra la interrupción para poder permitir la siguiente;
// no hemos de hacer nada por nuestra parte.
}

void main()
{
Port_B_Pullups(FALSE); // Configuración para el PIC 18F4550.
Setup_ADC_Ports(NO_ANALOGS); // Sin comparadores ni ADCs, todo digital, etc...
Setup_adc(ADC_CLOCK_DIV_2);
Setup_spi(SPI_SS_DISABLED);
Setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
Setup_timer_1(T1_DISABLED);
Setup_timer_2(T2_DISABLED,0,1);
Setup_comparator(NC_NC_NC_NC);
Setup_vref(FALSE);

Ext_Int_Edge(L_TO_H); // Inicialmente detectar interrupción por flanco de subida.
Enable_Interrupts(Int_Ext); // Activar Interrupción Externa a través de RB0.
Enable_Interrupts(GLOBAL); // Interrupciones Generales Activadas.

Set_Tris_A(0b11111111); // Puerto A todo entradas (en este caso no usamos el Puerto A).
Set_Tris_B(0b11111111); // Puerto B todo entradas (sólo usamos las entradas RB0 y RB1).
Set_Tris_C(0b11111111); // Puerto C todo entradas (en este caso no usamos el Puerto C).
Set_Tris_D(0b11111111); // Puerto D todo entradas (en este caso no usamos el Puerto D).
Set_Tris_E(0b11111111); // Puerto E todo entradas (en este caso no usamos el Puerto E).

usb_cdc_init(); // Carga el modo CDC (Puerto virtual de comunicaciones).
usb_init(); // Carga el manejo del USB.

char Buffer[20]; // Declaramos (sobradamente) un buffer de 20 bytes.

while(!usb_cdc_connected()) // El PIC espera hasta enlazar con el PC a través del USB.
{
//QUISIERA ENCENDER UN LED CUANDO YA CONECTO EN ALGUN PIN DEL PUERTO B
}

while (TRUE)
{
usb_task();

if (usb_enumerated())
{
If (Bit_Test(PortB, 1)) // Pulso del contador_1,
{
contador_1++ //aumenta en 1 por cada pulso que recibe.
}
If (Bit_Test(PortB, 2)) // Pulso del contador_2,
{
contador_2++ //aumenta en 1 por cada pulso que recibe.
}
If (Bit_Test(PortB, 3)) // Pulso del contador_3,
{
contador_3++ //aumenta en 1 por cada pulso que recibe.
}
// al PC a través del USB.
}
}

No tienen idea cuanto les agradeceria su ayuda (Y ESTOY SEGURO QUE SE PUEDE SIMPLIFICAR EL CODIGO :D)
GRACIAS
 
oye ven moyano tu no tienes informacion acerca de conectar un pic a una red wifi, serias muy cordial y te lo agradeceria muchisimo sobre ese tipo de informacion, y bueno men gracias por todo y sos muy grosso
 
buenas, que pena soy nuevo en este foro, mi pregunta es la siguiente, he descargado un programa de coneccion PIC + USB para principiantes (lo pueden buscar de esta manera en google), instalo el driver programo el pic con el programa que se encuentra en la careta de desacrga y hasta hay todo bien, pero al correr el programa de C# me dice que "No se puede cargar el archivo DLL 'mpusbapi.dll': No se puede encontrar el módulo especificado. (Excepción de HRESULT: 0x8007007E)", me he leido la mayor parte de tutoriales en internet sobre el tema de USB PIC y C# y no encuentro uno que me colabore con este tema, entre las soluciones que han dado se encuentra copiar la libreria en la system32 al hacerlo el programa corre pero no recibe datos es como si no se conectara el dispocitivio, le agradeceria al que me diera la solucion.
 
Hola:

Si no recuerdo mal, tienes que indicar el archivo mpusbapi.dll en referencias de C#, a parte de dejar esa dll en alguna ubicación en concreto.

Saludo.
 
hola Meta, realice lo que me dijiste y no me dejo me decia que la ubicacion no era valida o que el archivo no era valido, preguntando en otro foro me dijeron que tenia que agregarla el dll en la carpeta debug que se encuantra dentro bin de la carpeta del proyecto, realice esto y listo me copilo el archivo a la perfecion, muchas gracias por tu ayuda.
 
hola Meta, realice lo que me dijiste y no me dejo me decia que la ubicacion no era valida o que el archivo no era valido, preguntando en otro foro me dijeron que tenia que agregarla el dll en la carpeta debug que se encuantra dentro bin de la carpeta del proyecto, realice esto y listo me copilo el archivo a la perfecion, muchas gracias por tu ayuda.

lo que te dijeron es lo que me refería, ejeje.
 
Alguien sabe de por que no me detecta el pic18f2550 con el hid, tome el primer ejemplo del hid y lo monte en proteus y hay si anda de maravilla pero el problema ya es al momento de conectar el pic a la pc me dice que no se reconoce el dispositivo USB alguien me podria ayudar T_T
 
Hola Moyano:

Hace tiempo se propuso hacer un mini manual como el esquema de arriba con C#, USB y PIC16Fx550. A lo mejor lo tienes hecho y no lo se.

PIC+18F4550+18F2550+USB+IO+board.jpg


http://www.circuitvalley.com/2011/09/pic-18f-usb-io-board-with-analog.html

- 8Entradas digitales
- 8 Salidas Digitales
- Entradas analógicas
- LCD 20x4
- USB

No te digo ahora, si cuando estés preparado. ¿Hacemos una Interfaz de C# con esas características?

Cada vez veo a mucha gente con el USB por todas partes, jejeje. Espero que a estas altura tengas ya soltura con el USB y los PIC para controlar dicha salidas y entradas. Cuando estés y estén dispuestos avisa, soy todo oídos y te ayudaré en la parte de la Interfas. Los demás pueden aportar.

Un cordial saludo.
 

Adjuntos

  • USBioboardSourcecodefile.rar
    488.9 KB · Visitas: 281
Última edición:
hola meta, segun veo la figura se trata de una tarjeta DAQ.. yo construi una y la postee en este foro puedes revizarla en en el siguiente link

https://www.forosdeelectronica.com/f24/daq-usb-pic-18f4550-63931/

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!!
 
Si lo tuviera a mano y fácil de conseguirlo si. ejjejeje.Los que consigo son del típico de siempre. 4 bits config y 3 máspara control del LCD. El del PIN es con el RS232 tengo entendido y funciona de maravila.
 
Atrás
Arriba