Autor Tema: PicUSB sin Reset  (Leído 11409 veces)

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

Desconectado Alexandra

  • PIC10
  • *
  • Mensajes: 22
PicUSB sin Reset
« en: 29 de Mayo de 2009, 19:01:24 »
Hola, estoy implementado un pequeño prototipo tomando como referencia la aplicacion del PicUSB del amigo J1M, mi problema es el siguiente.

Tengo una aplicacion que esta corriendo en la PC y que me permite conectarme con el PIC18F4550 para intercambiar datos, cuando conecto por primera ves todo funciona muy bien pero cuando cierro la aplicacion y lo vuelvo a abrir, necesariemente tengo que resetear el pic para que funcione correctamente la aplicacion, hay alguna manera de que el pic automaticamente se reconecte o resetee nuevamente sin tener la necesidad de resetearlo manualmente?

Dentro del codigo de J1M encontre este parrafo, acaso esto esta relacionado con mi problema?

Citar
If you are using a USB connection sense pin, define it here.  If you are
// not using connection sense, comment out this line.  Without connection
// sense you will not know if the device gets disconnected.
//       (connection sense should look like this:
//                             100k
//            VBUS-----+----/\/\/\/\/\----- (I/O PIN ON PIC)
//                     |
//                     +----/\/\/\/\/\-----GND
//                             100k
//        (where VBUS is pin1 of the USB connector)
//
/////////////////////////////////////////////////////////////////////////////
« Última modificación: 29 de Mayo de 2009, 19:04:53 por Alexandra »

Desconectado J1M

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1960
Re: PicUSB sin Reset
« Respuesta #1 en: 29 de Mayo de 2009, 21:34:44 »
Exacto Alexandra, tienes que habilitar ese pin para detectar cuando se ha conectado/desconectado el usb, para ello se utiliza la funcion usb_task(); Ella se encarga sola de gestionar eso, simplemente tendrías que llamarla dentro de tu while(true).

saludos.

Desconectado Alexandra

  • PIC10
  • *
  • Mensajes: 22
Re: PicUSB sin Reset
« Respuesta #2 en: 29 de Mayo de 2009, 22:09:16 »
Hola J1M,  :-/  :-/  :-/  gracias por responder, si te entendi tendria que colocar nuevamente usb_task() como se aprecia???

Citar
void main(void) {

   int8 recibe[3];                  //declaramos variables
   int8 envia[1];

   LED_OFF(LEDV);                   //encendemos led rojo
   LED_ON(LEDR);

   usb_init();                      //inicializamos el USB

   usb_task();                      //habilita periferico usb e interrupciones
   usb_wait_for_enumeration();      //esperamos hasta que el PicUSB sea configurado por el host

   LED_OFF(LEDR);
   LED_ON(LEDV);                    //encendemos led verde

   while (TRUE)
   {
      usb_task();

      if(usb_enumerated())          //si el PicUSB está configurado
      {
         if (usb_kbhit(1))          //si el endpoint de salida contiene datos del host
         {
            usb_get_packet(1, recibe, 3); //cojemos el paquete de tamaño 3bytes del EP1 y almacenamos en recibe

            if (modo == 0) // Modo_Suma
            {
               resultado = param1 + param2;  //hacemos la suma

               usb_put_packet(1, envia, 1, USB_DTS_TOGGLE); //enviamos el paquete de tamaño 1byte del EP1 al PC
            }

            if (modo == 1) // Modo_Led
            {
               if (param1 == 0) {LED_OFF(LEDV); LED_OFF(LEDR);} //apagamos los leds
               if (param1 == 1) {LED_ON(LEDV); LED_OFF(LEDR);} //encendemos led verde
               if (param1 == 2) {LED_OFF(LEDV); LED_ON(LEDR);} //encendemos led rojo
            }
         }
      }
   }
}

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: PicUSB sin Reset
« Respuesta #3 en: 30 de Mayo de 2009, 12:37:37 »
yo creo q mas bien seria un
Código: [Seleccionar]
while(!usb_task());eso va a hacer q hasta q no conecte el usb, se quede estancado en ese bucle, y cuando lo conecte sigue corriendo.
suerte!!

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado J1M

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1960
Re: PicUSB sin Reset
« Respuesta #4 en: 30 de Mayo de 2009, 21:30:31 »
Si Alexandra, si lo pones como dices vas a otorgar la libertar en el while(true) de que se hagan otras 'tareas'.

Gera, si lo pone como dices, quizá en su caso no tendría problemas, pero en uno más general, bloquearía al PIC en esa instrucción. Lo ideal es plantearlo como una 'tarea'.

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: PicUSB sin Reset
« Respuesta #5 en: 30 de Mayo de 2009, 22:59:14 »
Claro, todo depende de la aplicacion. Si tu programa requiere si o si q uses el usb, no tiene sentido q continue si no esta conectado. Ahora, si tu aplicacion ademas hace otras cosas, hay q hacer como dijo J1M, poner una tarea q chequee el estado del mismo cada cierto periodo.
Saludos!!

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5490
    • Electrónica Didacta
Re: PicUSB sin Reset
« Respuesta #6 en: 31 de Mayo de 2009, 00:15:12 »
Alexandra lee a partir de este post:

http://www.todopic.com.ar/foros/index.php?topic=15208.msg103242#msg103242

tal vez te pueda servir en algo.

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

Desconectado Alexandra

  • PIC10
  • *
  • Mensajes: 22
Re: PicUSB sin Reset
« Respuesta #7 en: 01 de Junio de 2009, 18:52:58 »
Hola PalitroqueZ, tomando tus ejemplos y la de J1M he modificado mi codigo pero la PC no lo reconoce el puerto USB,  :mrgreen: podrias darle una mirada a mi codigo, por que yo no encuentro el error.

Código: [Seleccionar]
#include <18F4550.h>
#DEVICE ADC=8
//Configurado para trabajar con 20MHz
#fuses XTPLL,NOMCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN,NOPBADEN
#use delay(clock=48MHZ)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)

#define USB_HID_DEVICE     FALSE             //deshabilitamos el uso de las directivas HID
#define USB_EP1_TX_ENABLE  USB_ENABLE_BULK   //turn on EP1(EndPoint1) for IN bulk/interrupt transfers
#define USB_EP1_RX_ENABLE  USB_ENABLE_BULK   //turn on EP1(EndPoint1) for OUT bulk/interrupt transfers
#define USB_EP1_TX_SIZE    1                 //size to allocate for the tx endpoint 1 buffer
#define USB_EP1_RX_SIZE    1                 //size to allocate for the rx endpoint 1 buffer

#define USB_CON_SENSE_PIN PIN_E3

#include <pic18_usb.h>     //Microchip PIC18Fxx5x Hardware layer for CCS's PIC USB driver
#include <PicUSB.h>       //Configuración del USB y los descriptores para este dispositivo
#include <usb.c>         //handles usb setup tokens and get descriptor reports

void main(void) {

   int buffer_tx[1];                  //declaramos variables

   setup_adc_ports(AN0|VSS_VDD);
   setup_adc(ADC_CLOCK_DIV_2);
   set_adc_channel(0);
   delay_us(10);

   usb_init_cs();                      
  
   while (TRUE)
   {
     usb_task();
      if(usb_enumerated())          //si el PicUSB está configurado
      {
       buffer_tx[0] = read_adc();
       delay_us(100);
       usb_put_packet(1, buffer_tx, 1, USB_DTS_TOGGLE);
          
        }
    }
 }
« Última modificación: 19 de Junio de 2009, 12:26:12 por Alexandra »

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5490
    • Electrónica Didacta
Re: PicUSB sin Reset
« Respuesta #8 en: 01 de Junio de 2009, 21:37:46 »
si el cristal es de 20MHz, entonces sustituye XTPLL por HSPLL

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

Desconectado Alexandra

  • PIC10
  • *
  • Mensajes: 22
Re: PicUSB sin Reset
« Respuesta #9 en: 02 de Junio de 2009, 10:52:56 »
Hola PalitroqueZ, ya hice el cambio pero  :? el problema es el mismo, el windows a cada momento lanza su mensaje de que no reconoce el dispositivo USB

Desconectado jonathanPIC888

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 326
Re: PicUSB sin Reset
« Respuesta #10 en: 02 de Junio de 2009, 13:22:25 »
Puede ser que en una de esas el problema sea de montaje del circuito, problemas del sistema operativo (me ha pasado) o también que hayas conectado los cables del USB al revés.

Desconectado Alexandra

  • PIC10
  • *
  • Mensajes: 22
Re: PicUSB sin Reset
« Respuesta #11 en: 02 de Junio de 2009, 13:48:21 »
No puede ser por que cuando comento USB_CON_SENSE_PIN PIN_E3 y usb_task() todo funciona OK

« Última modificación: 19 de Junio de 2009, 12:26:58 por Alexandra »

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5490
    • Electrónica Didacta
Re: PicUSB sin Reset
« Respuesta #12 en: 03 de Junio de 2009, 23:06:30 »
Alexandra, una pregunta: ¿estas segura que RE2 está como entrada digital?

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

Desconectado Alexandra

  • PIC10
  • *
  • Mensajes: 22
Re: PicUSB sin Reset
« Respuesta #13 en: 04 de Junio de 2009, 10:59:01 »
Hola Palitroquez,  :( no es suficiente con la configurcaion del fuse NOMCLR,? o tambien tengo que usar el set_tris_e(0x08)?

Desconectado Alexandra

  • PIC10
  • *
  • Mensajes: 22
Re: PicUSB sin Reset
« Respuesta #14 en: 04 de Junio de 2009, 11:38:42 »
Hola Palitroquez, he hecho la prueba configurandolo como tu dices es decir set el pin E3 como entrada y todo sigue igula, la Pc no reconoce el USB, por favor podrias  :mrgreen: ayudarme por que ya me estoy estresando con esto... :x