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

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado huichoman

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 186
    • Pequeñas piezas para grandes proyectos.
Re: Proyecto PicUSB
« Respuesta #330 en: 16 de Febrero de 2008, 02:56:18 »
La aplicación que tengo es bastante larga. A ver si la recorto y te pego lo que me has pedido.

Sería de múchisima ayuda. Solo necesito un pequeño ejemplo para agarrar el camino.  :mrgreen:

Saludos y gracias por la ayuda.

Ganbatte kudasai.

Desconectado pocher

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2569
Re: Proyecto PicUSB
« Respuesta #331 en: 16 de Febrero de 2008, 04:47:04 »
Hola huichoman, de nuevo por aquí.

He empezado a quitar de aquí y de allá y tanto he querido quitar para dejarlo sencillo que al final no me funcionaba. Llevo peleando unas cuantas horas y al final como casi todo el error era una chorrada, había borrado la puesta a 0 inicial de un array de caracteres.

He intentado adaptar la programación a lo que tú quieres.

Estos son los programas:

Para el PIC1:

Código: [Seleccionar]
#include <18F4550.h>
#fuses XTPLL,MCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL1,CPUDIV1,VREGEN,NOPBADEN

#use delay(clock=48000000)

#use RS232(BAUD=9600,BITS=8,PARITY=N,XMIT=PIN_C6,RCV=PIN_C7)

#use fast_io(B)

#include "usb_cdc.h"

char a[5];
int j,k;

#int_rda
void recepcion_serie()
{
if(kbhit())
{
a[j] = getc();
j++;
}
                                                                       

void main(void)                                                         
{
       char c;
       int x;                                         
 
  set_tris_b(0x00);
 
enable_interrupts(INT_RDA);
  enable_interrupts(GLOBAL);   

output_high(pin_b7);
output_low(pin_b6);

    usb_cdc_init();                                             
    usb_init();
   
    while(!usb_cdc_connected()) {}
     
  output_low (pin_b7);
output_high (pin_b6);

for (x=0;x<6;x++) //Fundamental inicializarlas, de lo contrario no va bien
a[x] =0;            
    while (1)                                                       
    {
      usb_task();
         
        if(usb_enumerated())                                 
        {
            if (usb_cdc_kbhit())                         
            {                             
                            c=usb_cdc_getc();
                            putc(c);                     
                        }                                           
                                                                                                   
  if(j==4)
    {
    disable_interrupts(INT_RDA);
   
    output_bit(PIN_B0,bit_test(a[0],0));
    output_bit(PIN_B1,bit_test(a[1],0));
    output_bit(PIN_B2,bit_test(a[2],0));
    output_bit(PIN_B3,bit_test(a[3],0));
                   
for (k=0;k<4;k++)
usb_cdc_putc(a[k]);

j=0;

  enable_interrupts(INT_RDA);  
    }   
}
}
}


Para el PIC2:

Código: [Seleccionar]
#include <16f876.h>

#fuses XT, NOPROTECT, NOWRT, PUT, NOWDT, NOLVP, NOCPD, BROWNOUT

#use delay(clock=4000000)

#use rs232(baud=9600, BITS=8, PARITY=N, xmit=pin_c6, rcv=pin_c7)

#use fast_io(B)

#byte port_b=6

int j=0,n;
char c;

#int_rda
void recepcion_serie()
{
if(kbhit())
{
c = getc();
j=1;
}


void main(void)
{
set_tris_b(0x00);

enable_interrupts(INT_RDA);
  enable_interrupts(GLOBAL);

output_b(0x00);

  while(1)
  {     
  if(j==1)
    {
      disable_interrupts(INT_RDA);
             
      if(c=='0')     
    output_bit(PIN_B0,1);   

      if(c=='1')   
    output_bit(PIN_B1,1);   

      if(c=='2')   
    output_bit(PIN_B2,1);   

      if(c=='3')   
    output_bit(PIN_B3,1);   

      if(c=='*')   
    output_b(0x00);   

      for (n=0;n<4;n++)
putc(bit_test(port_b,n) + '0');

j=0;

  enable_interrupts(INT_RDA);  
}
     
  }


Un saludo

Desconectado huichoman

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 186
    • Pequeñas piezas para grandes proyectos.
Re: Proyecto PicUSB
« Respuesta #332 en: 16 de Febrero de 2008, 11:58:51 »
Hola Pocher.

Te  agradezco  muchísimo, y disculpa que te haya quitado un poquito de tu tiempo.  :mrgreen:  Sobre lo de que "Al final como casi todo error era una chorrada"  :D jajaja, creo que a todos nos ha pasado, pelearnos varias horas, revisando circuito, revisando código, golpearse la cabeza con el teclado  :z), hasta qué miras al cielo respiras hondo, cuentas hasta diez, le das un vistazo al programa y  :shock:  :shock:  :shock: encuentras el "fallito"  :mrgreen:.

Por lo demás amigo, de nuevo te agradezco, ayer mismo en la madrugada estuve haciendo el diseño de la pcb para comenzar con las prácticas físicas, probaré el código que amablemente me compartes, ahora mismo estoy analizando los códigos de ejemplo que trae el pcw, y buscando como sabueso toda la info en google. Lo que no se es si exista un manual de compilador sobre la comunicación usb. En cuanto realice las pruebas iré posteando los resultados.

Matane.

Ganbatte kudasai.


Desconectado Geo

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 922
    • Mexchip
Re: Proyecto PicUSB
« Respuesta #333 en: 18 de Febrero de 2008, 01:01:09 »
Novedades!!!

Microchip ha sacado la versión 1.3 de su stack, en otras palabras, hay nueva versión del driver mpusbapi.dll, aquí las novedades:

What's New/Updated in Release v1.3
·         Microchip General Purpose USB Windows® Driver, mchpusb.sys v1.0.0.6, is updated to support Windows Vista™ and 64-bit Windows® Operating Systems. This version is WHQL certified.
·         CDC RS-232 emulation INF file, mchpcdc.inf, updated for supporting Windows Vista™ 32-bit and 64-bit.
·         Some bug fixes in USB library firmware (usb9.c).

http://ww1.microchip.com/downloads/en/DeviceDoc/Release%20Notes%20for%20MCHPFSUSB%20v1.3.htm
http://ww1.microchip.com/downloads/en/DeviceDoc/MCHPFSUSB_Setup_v1.3.exe

Ya se puede volver a jugar con el driver de microchip... ahora en Vista y versiones de 64bits de windows, voy a ojearlo a ver que tal va! ;)
Jaja, ahora que ya estaba usando WinUSB con C++, mmmm, bueno, al menos aprendí algo más :D. Por ahora estoy usando WinUSB con C++ (uso VC++ 2008 Express), también libusb-win32 (con wxWidgets se tiene una aplicación USB completamente portable :D).

zspikes: yo veo más sencillo que implementes las partes de manejo USB del PIC en C, y las rutinas de entrada/salida de los pines con algún periférico en ensamblador, así podrías cumplir con lo que te piden.
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 J1M

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1960
Re: Proyecto PicUSB
« Respuesta #334 en: 18 de Febrero de 2008, 20:26:13 »
Pocher, se solucionó mi problema con interrupciones en la recepción del 232, es extraño pq teóricamente debería funcionar sin estas, quizá me fallaba algo con respecto a los tiempos y se 'colgaba' el PIC.

saludos!

Desconectado huichoman

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 186
    • Pequeñas piezas para grandes proyectos.
Re: Proyecto PicUSB
« Respuesta #335 en: 19 de Febrero de 2008, 01:17:46 »
Hola  J1m. Puedes  enviar y recibir  sin problemas  en modo cdc????? Cual era el error???  Aun  no he  probrado el código que amablemente puso Pocher,  :?  Hasta este fin  podré hacerlo, (inches tareas de la escuela).  :mrgreen:

Por otro lado,  cual  es la diferencia en utilizar HSPLL  y  XTPLL???




Saludos.


Ganbatte kudasai.

Desconectado J1M

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1960
Re: Proyecto PicUSB
« Respuesta #336 en: 19 de Febrero de 2008, 01:28:23 »
En mi caso, el error era que en vez de obtener los caracteres de un dispositivo que me envía vía RS232 al PIC, mediante interrupción y envío al USB, lo estaba haciendo a 'pelo'... me metía en un bucle while(kbhit()) y obtenía caracteres. El problema es que ese bucle colgaba el PIC, supongo algo raro pasaba con el buffer de recepción del RS232. Ahora lo que tengo es una interrupción para el RS232 en la que un flag se pondrá a 1 cuando haya recibido todo el string q espero recibir, mientras tanto tengo al PIC en un while(!flag){} con un timeout para que en el caso de que algo falle con la recepción, no se me quede el micro en un bucle infinito.

La diferencia, si no recuerdo mal, es que el HS es para >=8MHZ y el XT para >8MHz, creo que lo ponía el DS del 18Fxxxx no?

saludos! :)

Desconectado pocher

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2569
Re: Proyecto PicUSB
« Respuesta #337 en: 19 de Febrero de 2008, 04:21:43 »
J1M me alegra si te he podido ayudar en algo, sin tus aportes sobre USB esa pequeña ayuda no hubiera sido posible.

Un saludo

Desconectado jeremylf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1341
Re: Proyecto PicUSB
« Respuesta #338 en: 20 de Febrero de 2008, 05:01:27 »
Nose si habra diferencia en XT y XTPLL o HS y HSPLL en lo que se refiere a que entrada de cristal soportan cada uno, aunque lo de PLL solo indica que la velocidad a la que correra el pic es dada por el mismo procedimiento para obtener los 48 mhz para el usb, por eso nose si J1M se esta equivocando. Pero, que yo sepa, XT es: <= 4MHZ. Y HS: >4MHZ.

Salu2.


Desconectado J1M

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1960
Re: Proyecto PicUSB
« Respuesta #339 en: 20 de Febrero de 2008, 11:58:34 »
Gracias pocher, quizá esa sea una de las mayores genialidades de este foro, cada uno con su granito de arena hace q sea posible levantar montañas ;)

Pues creo que si estaba equivocado, efectivamente el XT es para cristales de 4Mhz o menores. Aun así, si la frecuencia a la que funcionará el micro se puede elevar hasta los 48Mhz (si no recuerdo mal) mediante un cristal de 4Mhz activando el XTPLL.

un saludo!

Desconectado huichoman

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 186
    • Pequeñas piezas para grandes proyectos.
Re: Proyecto PicUSB
« Respuesta #340 en: 25 de Febrero de 2008, 01:44:04 »
Hola amigos. Gracias por las respuestas.

Como antes comenté, estaba haciendo pruebas con las comunicación USB_CDC y un max485, pero todo simulado, y se moría el pic. Ahora, necesito hacer las pruebas físicas. Hice una pequeña placa para probar la comunicación. Ahora el problema es que normalmente utilizo ARES para el diseño del PCB, pero a falta de librerias, me pasé a eagle. Ahora, es un poquito mas complicado de agarrarle pero aca posteo como quedo el esquemático guiándome de los diseños de Redpic y J1M, si hay algún fallo o si sepuede hacer alguna mejora les agradecería muchísimo que me lo hicieran saber.







En cuanto pase la prueba de calidad, posteo los archivos.

Saludos.

Ganbatte kudasai.


Desconectado bigarthur85

  • PIC10
  • *
  • Mensajes: 1
Re: Proyecto PicUSB
« Respuesta #341 en: 25 de Febrero de 2008, 02:08:05 »
hola, estoy desesperado, al conectar el pic a la pc, nunca me pide que escoja el driver, asi que en el device manager lo desinstalo el driver que automaticamente instala (que no sirve por cierto), pero cuando le pongo update driver no me reconoce los drivers que mando jim como validos, nunca logra instalarlo, que puedo hacer, de donde saco el driver correcto, estoy usando el pic18f4450, ayuda por favor.

Desconectado jjcblanco

  • PIC10
  • *
  • Mensajes: 20
Re: Proyecto PicUSB
« Respuesta #342 en: 25 de Febrero de 2008, 13:41:18 »
hola tengo una pregunta, probe en xp el ejemplo de j1m  y anda barabaro pero cuando lo quiero probar en xp cambiando el driver (poniendo el de picwinusb) tendria que funcionar y no funciona , pero no estan el el zip los source de c# como estan en el otro y no se si ahi hay que hacer alguna modificacion de la libreria.

Gracias

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5490
    • Electrónica Didacta
Re: Proyecto PicUSB
« Respuesta #343 en: 25 de Febrero de 2008, 17:14:18 »
huichoman ¿y ese pic no va a tierra?, está volando  :D :D

La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7918
Re: Proyecto PicUSB
« Respuesta #344 en: 25 de Febrero de 2008, 17:27:09 »
Si, le falta la alimentacion negativa, conectala a ambos pines VSS... :mrgreen:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.