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

Necesito bajar la frecuencia del cpu ya que con esa frecuencia el lcd no muestra nada y es debido a la longitud del cable ya que pude comprobar montándolo en protoboard que a esa velocidad el display funciona bien y al trabajar a una frecuencia menor con el mismo cable el lcd también funciona perfectamente. Lamentablemente tengo que trabajar con una longitud grande de cable, y preferiría no tener que acortarlo
 
ospidera dijo:
Bueno, agradezco a todos por sus aportes, por fin he logrado conectar el puerto virtual de proteus para simular mi programa y por fin entendí el funcionamiento del los dercriptos y su relación con el driver que proporciona microchip, descargen los driver sirven a la perfección para win7 sin tener que hacer mas que lo que moyano y otros han aprotado, agradezco enormemente su colaboración y tiempo(y)


Si tienen dudas con gusto yo tambien les podré colaborar!!!



Buena tarde para todos, bueno aquí ya es tarde, soy nuvo preguntando en el foro (ya habia visto muchos aportes interesantes), tengo una pregunta que la verdad no se si el el hilo para hacerla y adicionalmente por tiempo no he podido chekar mas el foro, entiendo bastantes coas de la comunicación usb para pic pero me falta lo mas importante, quiero hacer la comunicación virtual para visualizar en proteus pero me encuentro con un problema del driver, he tratado de buscar en la web y la verdad enuentro muchas cosas hechas pero quiero entenderla.

1°) como hago para el driver?? tengo que hacerlo??
2°) hay que modificar los descriptos y he probado varias versiones de CCS y la verdad hay variaciones y no se en donde modificarlo ¡¿que gano l modificarlo? y donde encuentro la lista de los códigos por fabricante??
3°)hablan de muchas cosas como por ejemplo un archivo .inf para que sirve???

La verdad quiero entender muy bien esto pero requiero de su ayuda.:confused:


Bueno, agradezco a todos por sus aportes, por fin he logrado conectar el puerto virtual de proteus para simular mi programa y por fin entendí el funcionamiento del los dercriptos y su relación con el driver que proporciona microchip, descargen los driver sirven a la perfección para win7 sin tener que hacer mas que lo que moyano y otros han aprotado, agradezco enormemente su colaboración y tiempo (y) Si les puedo colaborar con algo con mucho gusto
 
Última edición:
Necesito bajar la frecuencia del cpu ya que con esa frecuencia el lcd no muestra nada y es debido a la longitud del cable ya que pude comprobar montándolo en protoboard que a esa velocidad el display funciona bien y al trabajar a una frecuencia menor con el mismo cable el lcd también funciona perfectamente. Lamentablemente tengo que trabajar con una longitud grande de cable, y preferiría no tener que acortarlo

Te digo que la librería del LCD no tiene nada que ver con la velocidad del microcontrolador, las temporizaciones para visualizar los datos las determinas vos..y el compilador las calcula en función de la frecuencia.
 
Finalmente pude solucionar mi problema acortando un poco los cables, sin embargo debo reconocer que poniendo en los fuses:
#fuses XTPLL,USBDIV,PLL1,PUT,CPUDIV4,VREGEN,NOWDT,NOPROTECT,NOLVP,NODEBUG
#use delay(clock=24000000)
La pc seguía reconociendo al dispositivo usb aunque no hice pruebas para saber si el cpu del micro realmente trabajaba a una frecuencia mas baja
 
Alguien ha probado los archivos que subi el otro dia?? sigo con el mismo problema, solo responde los primeros segundos de conectarlo.



Si antes lo digo antes lo apaño. Era por el usb_cdc_getc() no lo estaba usando bien.
 
Última edición:
Buenas

tengo un problema en la comunicacion CDC al momento de enviar datos, en mi programa tengo un vetor int distance[6] que me contiene numeros enteros y eso lo quiero enviar a la PC y lo intente enviar de diferentes maneras por ejemplo: usb_cdc_putc(distance), printf(usb_cdc_putc,distance), hasta incluso creando un ciclo que envie el dato de cada posicion uno por uno, pero mi aplicacion de escritorio se cuelga. solo me recive cuando envio una palabra asi printf(usb_cdc_putc,"hola")
y bueno quisiera alguna sugerencia de que puedo hacer

Que tal, bueno me dado cuenta que estado usando mal el putc guiandome en un ejemplo de moyano lo he hehco de esta manera printf(usb_cdc_putc,"%Lx",distance[0]) prara recivir el primer numero per de todos modos se me cuelga el VB ahora pienso que talves el problema sea del VB aqui les pongo el codigo de VB de la parte donde recive el dato

Private Sub Leer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Leer.Click
Dim uno As Char
Dim lectura As String
uno = "a"
SerialPort1.Write((uno))
lectura = SerialPort1.ReadLine()
Distancia.Text = lectura
End Sub
 
Última edición:
saludos apreciados foristas:

felicitaciones a Moyano Jonathan por su gran trabajo, quisiera tu me ayudaras con un proyecto que estoy realizando sobre una prototipadora 3d, la idea es controlar 4 motores paso a paso bipolares a traves de puerto usb y reconozca una interfaz grafica que son estadar en estas maquinas como la rep rap
( interfaz grafica de makerbot o la interfaz grafica pronterface). No se por donde empezar, como hago para que el pic 18f4550 o el 18f2550 reconozaca la interfaz grafica pronterface y ejecute toda las intrucciones que le envie a los motores paso a paso, gracias por su ayuda
 
Alguien ha probado los archivos que subi el otro dia?? sigo con el mismo problema, solo responde los primeros segundos de conectarlo.



Si antes lo digo antes lo apaño. Era por el usb_cdc_getc() no lo estaba usando bien.
Soy nuevo por estos lares,mi consulta es para Netma si puedes subir el código funcionando para poder entender el error ,desde ya muchas gracias :)
 
Última edición por un moderador:
Tengo un problema y es que en proteus me sirve pero a la hora de montar el circuito no me sirve, el pc no me reconoce el pic cuando lo conecto a un puerto usb, alguien me podría ayudar
 
Hola alberto, el problema que estaba teniendo yo era que no me hacia a la idea de que si mandaba varios bytes desde el pc de esta manera:

(vb)
SerialPort1.Write(1)
SerialPort1.Write(2)

A la hora de leerlos debia hacerlo tambien asi desde el pic:

(CCS)
dato1=usb_cdc_getc();
dato2=usb_cdc_getc();


Ahora comentar que soy incapaz de mandar datos del pic al pc, he probado mil maneras y soy incapaz.
Supuestamente tengo este codigo en ccs:

int8 envio[];
envio[0]=8;
usb_put_packet(1,envio,1,USB_DTS_TOGGLE);


Y el VB 2008 tengo lo siguiente:

Dim prueba() As Byte
prueba(0) = SerialPort1.ReadByte

y se queda a la espera de recibir datos pero no recive nada de nada.
he probado con readbyte, con read, readexising, readchar..... y nada de nada. Ya estoy desesperado porque tiene que ser una chorrada pero no lo veo!



braser, lo que necesitas es el driver para proteus y tener instalado el virtual usb que viene con proteus, en unas paginas atras estan los drivers que usé yo y funcionaron.
 
Última edición:
Imposible, he probado todo, con usb_cdc_putc.... y lo maximo que consigo es que haga amago de enviar algo pero no manda nada el pic.
en el visor usb del proteus se ve el paquete que envia,pero se queda en estado pendiente y no contiene nada.
 
Última edición:
Muy buenas Noches,

De antemano quiero agradecerles a todos los que han participado en este foro tan increíble y de aprovechar para poder seguir investigando y desarrollando nuevas cosas; Moyano muchas gracias por todas sus tutorías y paciencia e igual a todas las personas que han ayudado a que esto siga adelante. Tengo una duda y es que por mi parte deseo usar el pic18f2550 con un bootloader de internet (Neo-teo), creo que es bien reconocido, para poder programar este pic directamente por USB y que también sea posible usar el USB con HID desde visual 2010, la verdad lo intente por aparte el bootloader como la programación en visual y sirven muy bien(y), pero a la hora de poner el bootloader en el pic y quemar el programa para el usb, este simplemente no hace nada, pero nada:eek:.... el código en el pic fue el siguiente:

Código:
#include <18f2550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN,NOPBADEN
#use delay(clock=48000000)
#include <pic18_usb.h>

#include <Descriptor_easyHID.h>
#include <USB.c>
#include <usb_bootloader.h>//Para que sirva el bootloader en "teoria"
#use fast_io(b)
#use fast_io(c)


void USB_debug(){

    output_high(PIN_C7); // Enciende el led error y apaga el led USB_OK.
    output_low(PIN_C6);
    usb_wait_for_enumeration(); // Espera a ser enumerado por el host.
    output_low(PIN_C7); // Enciende el led USB_OK y apaga el led USB_ERROR.
    output_high(PIN_C6);  
}

void main()
{
   
   int8 recibe[32];
   set_tris_b(0xF0);
   output_b(0x00);
   set_tris_c(0b00111100);
   output_low(PIN_C0);
   output_low(PIN_C1);
   usb_init();
   usb_task();
   USB_debug();
   
   while(1)
   {
   
   
      if(usb_enumerated())
      {
         
      
         if (usb_kbhit(1))
         {   
            
            usb_get_packet(1,recibe,32);
            
            if(recibe[0]==0x0A){
            
               switch(recibe[1])
               {
                  case 0x01:
                  output_toggle(PIN_B0);
                  break;
                  case 0x02:
                  output_toggle(PIN_B1);
                  break;
                  case 0x03:
                  output_toggle(PIN_B2);
                  break;
                  case 0x04:
                  output_toggle(PIN_B3);
                  break;
               
               }
            
            }
            
         
         }
      
      }
   
   }

}
El programa recibe datos del visual y lo que hace es según el botón seleccionado enciende un led en el puerto RB.


Muchas gracias por la atención y de antemano algún comentario para posible solución sería de gran ayuda...
 
Última edición por un moderador:
Hola que tal moyano, te queria hacer la siguiente pregunta, bueno antes que nada te comento un poco mi problema y lo que estoy aciendo, estoy controlando 8 salidas PWM desde la computadora por el modulo USB bulk, mediante estas salidas controlo 8 servos y funciona a la perfeccion, pero como el PWM se esta manejando con la interrupcion del timer0, mis entradas analogas no reaccionan bien es decir no funcionan de buena manera, nose si sepas de alguna interrupcion para las entradas analogas o la conexion a usb en verdad nose lo que este fayando, pero ese es mi problema espeor puedas ayudarme.....
 
Hola compañeros, a ver si alguien sabe porque pasa esto:
como codigo en el pic tengo lo siguiente:
Código:
printf(usb_cdc_putc, "Usb correctamente conectado\r\n");

Y en VB recibo de la siguiente manera.
Código:
recep = SerialPort1.ReadExisting()

De esta manera la variable string recep queda vacia, pero si hago esto otro con un vector.
Código:
            SerialPort1.Read(prueba, 0, 3)
 recep = SerialPort1.ReadExisting()

Prueba me coge el valor "U" y recep coge "sb correctamente conectado"

PORQUE!?? no me lo explico
 
Buen dia, estaba viendo este proyecto por que me interesa hacer un bridge USB to RS232, pero, tengo un problema, desde la PC envio un dato al PIC y en la salida UART del PIC(independientemente de lo que envio por USB) obtengo un '+'(0x2B), el codigo en la sección main está asi:

do
{
usb_task();
if (usb_enumerated())
{ // Si el puerto ya fue enumerado por el host :
if(usb_cdc_kbhit())
{
data=toupper(usb_cdc_getc());
putc(data);
}
}

La misma aplicación la probe con el COM virtual de X-CTU y no tuve problemas.

Saludos
 
Última edición:
Atrás
Arriba