Autor Tema: Proyecto PicUSB  (Leído 510752 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado elmasvital

  • Administrador
  • PIC24H
  • *******
  • Mensajes: 1713
Re: Proyecto PicUSB
« Respuesta #135 en: 15 de Febrero de 2007, 22:23:14 »
HOLA A TODOS, TENGO UN PROBLEMA CON EL PICUSB, ESPERO QUE ALGUIEN TENGA RESPUESTA A MI PROBLEMA PORQUE ESTO ME ESTA VOLVIENDO LOCO.

TODO COMENZO CUANDO ARME EL PROYECTO TAL Y COMO APARECE EN EL DIAGRAMA PUBLICADO EN http://www.hobbypic.com/index.php?option=com_content&task=view&id=14&Itemid=32, EL PIC 18F2550 LO PROGRAME USANDO EL PROGRAMADOR ART2003 Y TAMBIEN LOGRE INSTALAR LOS DRIVERS EN LA PC. MI PROBLEMA ES QUE EN OCASIONES CONECTO EL CIRCUITO A LA PC Y ME SALE UN MENSAJE DICIENDO QUE EL DISPOSITIVO NO PUDO SER INICIALIZADO O QUE EL DISPOSITIVO USB NO ES RECONOCIDO Y EL LED SE QUEDA EN COLOR ROJO Y DESPUES DE VARIOS INTENTOS LA PC LOGRA RECONOCER EL PICUSB Y EL LED SE PONE EN COLOR VERDE Y BUENO YA TODO FUNCIONA DE MARAVILLA. ALGUIEN SABE COMO PUEDO RESOLVER ESE PROBLEMA????

YA HE INTENTADO DESINTALANDO Y VOLVIENDO A INSTALAR LOS DRIVES, TAMBIEN EN EL FORO LEI QUE SE PODIA USAR DIFERENTES CRISTALES SIEMPRE Y CUANDO SE MODIFIQUE EL VALOR DEL OSCILADOR PARA LOGRAR GENERAR LOS 4MHZ, PERO NADA DE ESTO ME HA DADO BUENOS RESULTADOS, EL PROBLEMA SIGUE  :shock: :x

ESPERO QUE ALGUIEN ME PUEDA AYUDAR Y DE ANTEMANO GRACIAS :-/


Ante todo pedirte que te leas las normas del foro que encontrarás en la pagina principal, y que no escribas en mayuscula porque molestan y en internet es sinónimo de gritar.

Con respecto a la duda tiene toda la pinta de ser un problema del circuito mas que del programa que lleva dentro, enseña el diseño que tienes para hacer funcionar el circuito, pero todo parece que olvidaste algun condensador de filtro o desacoplo o que tienes algun mal contacto.

1 saludo.

Desconectado SavageChicken

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 936
Re: Proyecto PicUSB
« Respuesta #136 en: 16 de Febrero de 2007, 00:45:15 »
Si vemos la línea en negrita, parece ser que podría recibir hasta 5 bits, que me da un total de 2^5=32 combinaciones posibles, con lo que ya podría manejar algunos LEDs, ¿no es asi?

El problema es que no sé que tendría que hacer en el programa del pc para poder enviar esos datos al teclado, ¿alguien puede arrojar algo de luz sobre mi ignorancia?

Hola raus:

No quiero desviarme del hilo, pero para responder a tu pregunta, el protocolo de comunicación entre el PC y el teclado es bidireccional, por ende, el PC puede enviarle varios comando al Teclado, por lo que podrías controlar mucho más de solo 32 combinaciones de leds.

Escribiendo en cierta direccion de memoria del computador, este se encargara de enviarle esa información al teclado.
Averigua un poco más al respecto. Te dejo esta direccion, aunque sale poco ahi, puede servirte de punto de partida:

http://www.zator.com/Hardware/H7_1_2.htm

Aquí hay algo mas: http://www.computer-engineering.org/ps2keyboard/ chequea la sección The i8042 Keyboard Controller:

Espero te sirva
Salud 8)
No hay preguntas tontas...
Solo hay tontos que no preguntan.

Desconectado Renatox_

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 541
    • máquinas cnc
Re: Proyecto PicUSB
« Respuesta #137 en: 17 de Febrero de 2007, 19:53:54 »
 Hola J1M quiero darte las gracias por el proyecto PIC-USB me ha servido mucho y ahora puedo manejar el puerto USB y hacer programas en LabView.

 Saludos.
control de movimiento

Desconectado sepul

  • PIC10
  • *
  • Mensajes: 25
Re: Proyecto PicUSB
« Respuesta #138 en: 29 de Marzo de 2007, 07:21:08 »
Hola!Antes de nada, gracias a todos y en especial a J1M por el proyecto del PicUSB.
Tengo un pequeño problema con el PicUSB y con el grabador GTP-USB Lite (es el unico que uso para programar los PICs)
Resulta que cuando conecto el PIC al ordenador me funciona, pero si luego conecto el grabador (aunque ya haya desconectado el PIC) no me funciona el grabador, y esto pasa también al revés, es decir, si en un principio conecto el Grabador y luego el PIC pues también me da error en el último.
Para poder complementarlos tengo que reiniciar el ordenador, si no nada.

en el administrador de dispositivos cuando me da error en uno u otro me pone el siguiente mensaje:
Citar
Windows no puede cargar el controlador de dispositivo para este hardware porque instancia anterior del controlador de dispositivo está aún en memoria. (Código 38)

Ah!decir también que los conecto en dos puertos distintos.
¿Sabeis como puedo solucionar esto?

Desconectado 5GTT

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 915
Re: Proyecto PicUSB
« Respuesta #139 en: 02 de Abril de 2007, 01:29:25 »
Has probado a cambiar el vid y el pid, supongo que entrara en conflicto el del programador con el del PicUSB.


Tutoriales y proyectos de electrónica

Desconectado sepul

  • PIC10
  • *
  • Mensajes: 25
Re: Proyecto PicUSB
« Respuesta #140 en: 02 de Abril de 2007, 06:26:49 »
El vid es el mismo, pero el pid es distinto, me parece, claro.
Gracias, probaré a ver si lo arreglo.

Desconectado Shardik

  • PIC10
  • *
  • Mensajes: 28
Re: Proyecto PicUSB
« Respuesta #141 en: 18 de Abril de 2007, 17:11:29 »
Tengo un PIC 18F4550 funcionando necesariamente a 40 MHZ (10 MHZ con HSPLL) hay alguna manera de trabajar con un usb?
« Última modificación: 18 de Abril de 2007, 17:13:44 por Shardik »

Desconectado carlos7890

  • PIC10
  • *
  • Mensajes: 28
Re: Proyecto PicUSB
« Respuesta #142 en: 08 de Mayo de 2007, 09:19:08 »
Se adjunta un programa realizado en LabWindows/CVI que interactúa con el excelente proyecto de PICUSB realizado por J1M. Aprovecho para preguntar, si hay interesados en abrir un subforo sobre el programa de Labwindows, el cual es muy potente pero, a mi entender, muy amarrete en cuanto a la información.
El Link es:
http://www.4shared.com/file/78514274/c1b76cef/PicUSB.html
« Última modificación: 01 de Enero de 2009, 22:03:27 por carlos7890 »

Desconectado Geo

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 922
    • Mexchip
Re: Proyecto PicUSB
« Respuesta #143 en: 20 de Mayo de 2007, 15:23:36 »
HOLA A TODOS, TENGO UN PROBLEMA CON EL PICUSB, ESPERO QUE ALGUIEN TENGA RESPUESTA A MI PROBLEMA PORQUE ESTO ME ESTA VOLVIENDO LOCO.
(Aunque quizá ya lo arreglaste...) estoy casi seguro que tu problema está con la configuración del oscilador, muy probablemente estás usando un cristal de diferente valor al del cto. pero no lo has indicado en el código del firmware.

Por otro lado, un agradecimiento más para el autor de este proyecto, muy bueno (lo acabo de probar ayer :P).

Saludos,
JJ (Geo).
La imaginación es el límite.
Visita mi blog, en inglés o en español :).
Mini curso de introducción a VHDL en MEXCHIP :-/

Desconectado Shardik

  • PIC10
  • *
  • Mensajes: 28
Re: Proyecto PicUSB
« Respuesta #144 en: 23 de Mayo de 2007, 16:33:21 »
Ya he conseguido que el Pc me detecte el PIC, ahora tengo que hacer el driver con el DDK, sabeis si hay algun tutorial donde expliquen como hacerlo? He encontrado muchos ya hechos, pero ninguno explica como lo hace.

Desconectado J1M

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1960
Re: Proyecto PicUSB
« Respuesta #145 en: 23 de Mayo de 2007, 16:53:44 »
La DDK no la utilicé para crear el driver, sino la DLL que exporta el icono que se pone en el panel de control, simplemente, el driver es el mismo que suministra microchip, con algunas modificaciones, precisamente esas que hacen que aparezca el icono, pero son simplemente a nivel de .inf. Relee el texto de la página, verás como dice eso, es extraño que ya sois varios diciendo lo del tema del driver, creo que debe estar mal expresado, pero no tengo claro en que punto... si me dices que es lo que te ha llevado a pensar q tienes que crear el driver lo modifico para no llevar a confusiones a la gente.

un saludo!

Desconectado Geo

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 922
    • Mexchip
Re: Proyecto PicUSB
« Respuesta #146 en: 23 de Mayo de 2007, 19:09:48 »
Creo que está claro para qué se usa el DDK, al menos me lo parece :P.

Este es el código que yo utilicé, es una aplicación de consola en C/C++, no me gusta usar mucho los tipos de datos de la API de Windows pero bueno, se entiende :P.
Lo compilé utilizando Dev-C++ (MinGW), y para enlazar tuve que hacerlo con la DLL que utilizó 5GTT pues me daba errores con la original de Microchip, aquí también me gustaría saber de dónde obtuvo 5GTT la versión que usa :).

Código: C++
  1. #include <stdio.h> // printf, system
  2.  
  3. #include <iostream>
  4.  
  5. using std::cout;
  6.  
  7. using std::endl;
  8.  
  9. using std::cin;
  10.  
  11. #include <windows.h>
  12.  
  13. // Cabecera API USB de Microchip
  14.  
  15. // Hay que incluírla después de windows.h
  16.  
  17. // (o agregar windows.h a _mpusbapi.h)
  18.  
  19. #include "_mpusbapi.h"
  20.  
  21.  
  22.  
  23. // Declaración de funciones
  24.  
  25. void openPipes();
  26.  
  27. void closePipes();
  28.  
  29. void sendPacket( unsigned char* sendData, DWORD sendLength );
  30.  
  31. void receivePacket( unsigned char* receiveData, DWORD receiveLength );
  32.  
  33. void sumaPIC( BYTE sumando1, BYTE sumando2 );
  34.  
  35. UINT resultadoPIC();
  36.  
  37. void ledPIC( UINT led );
  38.  
  39.  
  40.  
  41. int menu();
  42.  
  43. // Constantes para el menú
  44.  
  45. #define OPCION_SALIR    6
  46.  
  47. #define OPCION_APAGAR   1
  48.  
  49. #define OPCION_LEDVERDE 2
  50.  
  51. #define OPCION_LEDROJO  3
  52.  
  53. #define OPCION_SUMA     4
  54.  
  55. #define OPCION_DOSLEDS  5
  56.  
  57.  
  58.  
  59. // Variables globales
  60.  
  61. char* vidPid = "vid_04d8&pid_0011";
  62.  
  63. char* outPipe = "\\MCHP_EP1";
  64.  
  65. char* inPipe = "\\MCHP_EP1";
  66.  
  67. void* receiveData;
  68.  
  69. DWORD* receiveLength;
  70.  
  71. HANDLE myOutPipe;
  72.  
  73. HANDLE myInPipe;
  74.  
  75. BYTE sumando1 = 0;
  76.  
  77. BYTE sumando2 = 0;
  78.  
  79.  
  80.  
  81. int main() {
  82.  
  83.        
  84.  
  85.         int opcion = 0;
  86.  
  87.         do {
  88.  
  89.                 opcion = menu();
  90.  
  91.  
  92.  
  93.                 switch( opcion ) {
  94.  
  95.                         case OPCION_APAGAR:
  96.  
  97.                                 cout << "Apagando leds..." << endl;
  98.  
  99.                                 ledPIC( 0x00 );
  100.  
  101.                                 break;
  102.  
  103.                         case OPCION_LEDVERDE:
  104.  
  105.                                 cout << "Encendiendo LED verde" << endl;
  106.  
  107.                                 ledPIC( 0x01 );
  108.  
  109.                                 break;
  110.  
  111.                         case OPCION_LEDROJO:
  112.  
  113.                                 cout << "Encendiendo LED rojo" << endl;
  114.  
  115.                                 ledPIC( 0x02 );
  116.  
  117.                                 break;
  118.  
  119.                         case OPCION_SUMA:
  120.  
  121.                                 cout << "Primer sumando (0-99): "; scanf( "%d", &sumando1 );
  122.  
  123.                                 cout << "Segundo sumando (0-99): "; scanf( "%i", &sumando2 );
  124.  
  125.                                 sumaPIC( sumando1, sumando2 );
  126.  
  127.                                 cout << "Resultado: " << resultadoPIC() << endl;
  128.  
  129.                                 system( "pause" );
  130.  
  131.                                 break;
  132.  
  133.                         case OPCION_SALIR:
  134.  
  135.                                 system( "cls" );
  136.  
  137.                                 cout << "Saliendo..." << endl;
  138.  
  139.                                 break;
  140.  
  141.                         case OPCION_DOSLEDS:
  142.  
  143.                                 ledPIC( 0x03 );
  144.  
  145.                                 break;
  146.  
  147.                         default:
  148.  
  149.                                 cout << "La opcion no existe, intente de nuevo" << endl;
  150.  
  151.                                 system( "pause" );
  152.  
  153.                                 break;
  154.  
  155.                 }
  156.  
  157.         } while ( opcion != OPCION_SALIR );
  158.  
  159.        
  160.  
  161.         system( "pause" );
  162.  
  163.        
  164.  
  165.     return 0;
  166.  
  167. }
  168.  
  169.  
  170.  
  171. void openPipes() {
  172.  
  173.      DWORD selection = 0;
  174.  
  175.      myOutPipe = MPUSBOpen( selection, vidPid, outPipe, 0, 0 );
  176.  
  177.      myInPipe = MPUSBOpen( selection, vidPid, inPipe, 1, 0 );
  178.  
  179. }
  180.  
  181.  
  182.  
  183. void closePipes() {
  184.  
  185.      MPUSBClose( myOutPipe );
  186.  
  187.      MPUSBClose( myInPipe );
  188.  
  189. }
  190.  
  191.  
  192.  
  193. void sendPacket( unsigned char* sendData, DWORD sendLength ) {
  194.  
  195.      unsigned short sendDelay = 1000;
  196.  
  197.      DWORD sentDataLength;
  198.  
  199.      
  200.  
  201.      openPipes();
  202.  
  203.      MPUSBWrite( myOutPipe, (void*)sendData, sendLength, &sentDataLength, sendDelay );
  204.  
  205.      closePipes();
  206.  
  207. }
  208.  
  209.  
  210.  
  211. void receivePacket( unsigned char* receiveData, DWORD* receiveLength ) {
  212.  
  213.      unsigned short receiveDelay = 1000;
  214.  
  215.      DWORD expectedReceiveLength = *receiveLength;
  216.  
  217.      
  218.  
  219.      openPipes();
  220.  
  221.      MPUSBRead( myInPipe, (void*)receiveData, expectedReceiveLength, receiveLength, receiveDelay );
  222.  
  223.      closePipes();
  224.  
  225. }
  226.  
  227.  
  228.  
  229. void sumaPIC( BYTE sumando1, BYTE sumando2 ) {
  230.  
  231.      BYTE sendBuf[ 3 ];
  232.  
  233.      
  234.  
  235.      sendBuf[ 0 ] = 0x00;
  236.  
  237.      sendBuf[ 1 ] = sumando1;
  238.  
  239.      sendBuf[ 2 ] = sumando2;
  240.  
  241.  
  242.  
  243.      sendPacket( sendBuf, 3 );
  244.  
  245. }
  246.  
  247.  
  248.  
  249. UINT resultadoPIC() {
  250.  
  251.         UINT result = 0;
  252.  
  253.         BYTE receiveBuf[ 1 ];
  254.  
  255.        
  256.  
  257.         DWORD receiveLength = 1;
  258.  
  259.         receivePacket( receiveBuf, &receiveLength );
  260.  
  261.         result = receiveBuf[ 0 ];
  262.  
  263.        
  264.  
  265.         return result;
  266.  
  267. }
  268.  
  269.  
  270.  
  271. void ledPIC( UINT led ) {
  272.  
  273.         BYTE sendBuf[ 2 ];
  274.  
  275.        
  276.  
  277.         sendBuf[ 0 ] = 0x01;
  278.  
  279.         sendBuf[ 1 ] = (BYTE)led;
  280.  
  281.         sendPacket( sendBuf, 2 );
  282.  
  283. }
  284.  
  285.  
  286.  
  287. int menu() {
  288.  
  289.         system( "cls" );
  290.  
  291.         cout << "[ 1 ] Apagar LEDs" << endl;
  292.  
  293.         cout << "[ 2 ] Encender LED verde" << endl;
  294.  
  295.         cout << "[ 3 ] Encender LED rojo" << endl;
  296.  
  297.         cout << "[ 4 ] Realizar Suma" << endl;
  298.  
  299.         cout << "[ 5 ] Encender los dos LEDs" << endl;
  300.  
  301.         cout << "[ 6 ] Salir" << endl;
  302.  
  303.         cout << "Opcion: ";
  304.  
  305.        
  306.  
  307.         int opcion;
  308.  
  309.         cin >> opcion;
  310.  
  311.        
  312.  
  313.         return opcion;
  314.  
  315. }

Nos vemos y nuevamente gracias a J1M.
« Última modificación: 23 de Mayo de 2007, 19:30:53 por Geo »
La imaginación es el límite.
Visita mi blog, en inglés o en español :).
Mini curso de introducción a VHDL en MEXCHIP :-/

Desconectado Shardik

  • PIC10
  • *
  • Mensajes: 28
Re: Proyecto PicUSB
« Respuesta #147 en: 24 de Mayo de 2007, 09:18:55 »
La DDK no la utilicé para crear el driver, sino la DLL que exporta el icono que se pone en el panel de control, simplemente, el driver es el mismo que suministra microchip, con algunas modificaciones, precisamente esas que hacen que aparezca el icono, pero son simplemente a nivel de .inf. Relee el texto de la página, verás como dice eso, es extraño que ya sois varios diciendo lo del tema del driver, creo que debe estar mal expresado, pero no tengo claro en que punto... si me dices que es lo que te ha llevado a pensar q tienes que crear el driver lo modifico para no llevar a confusiones a la gente.

un saludo!

Te agradezco mucho tu respuesta, veras he visto que hay 2 maneras de hacerlo, una es hacer tu mismo el driver y otra modificar el de microchip. Mi pregunta ahora es, donde viene explicado como y qué modificar del driver de microchip? Como usar las clases del DLL para comunicarte con el USb, etc... Mi problema es que he visto varios proyectos ya hechos, pero como es para un Proyecto final de carrera no puedo simplemente plantar el codigo, tengo que explicar como y por que lo hago, y esa informacion es la que no encuentro, por ej. como usar las clases del microchip, etc... Si hay algun sitio donde lo expliques (no he leido todo el tema) pues lo leo y ya esta, y si no pues lo hare a la vieja usanza, viendo codigo y razonando. Hasta ahora si no he entendido mal simplemento hay que usar las clases que da microchip en un programa que hayas creado tu en C++ por ej.

Desconectado Shardik

  • PIC10
  • *
  • Mensajes: 28
Re: Proyecto PicUSB
« Respuesta #148 en: 25 de Mayo de 2007, 08:37:15 »
Weno ya he conseguido entender como funcionan las clases y crear mi propia comunicacion USB, con  el driver tuyo, solo necesito un poco de informacion teorica sobre como se crea el .inf y se modifica el driver y esas cosas.

Desconectado Geo

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 922
    • Mexchip
Re: Proyecto PicUSB
« Respuesta #149 en: 31 de Mayo de 2007, 20:07:56 »
Escribo para agradecer nuevamente por compartir este proyecto, y a Miguel por el código para Linux con GTK, me basé en él para hacer lo mismo pero usando wxWidgets (me gusta esta librería :P), y también ya logré portarlo a Windows usando libusb-win32, sólo tuve que cambiar algunas cosillas :).

Nuevamente, GRACIAS.
La imaginación es el límite.
Visita mi blog, en inglés o en español :).
Mini curso de introducción a VHDL en MEXCHIP :-/


 

anything