RobotyPic son proyectos básicos de electrónica con microcontroladores PIC, de aplicación en el mundo de la robótica didáctica, con archivos fuente creados mediante el compilador CCS PIC C COMPILER en lenguajeC.

Comunicación PC-PIC por USB con Visual Basic

Este proyecto es una versión más elaborada del artículo Comunicación PC-PIC por USB, al que remito para más detalle en la configuración de fuses, descripción de funciones USB, etc. En este caso se emplea una aplicación desarrollada bajo visual basic para poder interactuar con el PIC desde el PC. Esta aplicación permite la lectura del canal analógico del Puerto A de un PIC 18F4550, además de la lectura o escritura de los puertos B y D. Todo controlado desde el PC a través de una conexión USB.


La aplicación VB indica la orden al PIC mediante un código de 4 caracteres. El primero de esos caracteres le indica al PIC la actuación que debe realizar, ya sea la lectura de la entrada analógica, lectura del puerto D o puerto B, escrituras en los puertos,etc. 



if (usb_cdc_kbhit()){          //Si hay recepción de datos los lee
            recepcion_datos();
            switch(opcion[0]){ //Gestión según información recibida
            case '0': escritura_puertoD();
            break;        
            case '1': canal_analogico();
            break;
            case '2': lectura_puertoD();
            break;
            case '3': lectura_puertoB();
            break;
            case '4': escritura_puertoB();
            break;
            default: 
            break;
            }
         }    

recepcion_datos() {
  
   char c;                //Caracteres individuales de la cadena
   
   i=0;                   //Reinicio del puntero para 1º caracter
   for (i=0;i<4;i++){     //Recepción máxima de 4 caracteres

        //Hasta que buffer se quede vacío
        if (usb_cdc_kbhit())  c=usb_cdc_getc();
   opcion[i]=c;           //Guarda el caracter recibido
   }
}

El resto de caracteres del código será la información a mostrar en el puerto del PIC en el caso de la escritura en los puertos.


   i=3;                  //ultimo caracter recibido...
   decodificacion(i);    //lo transforma en los 4 bits bajos Puerto B
   PuertoB_bajo = numero;       //guarda valor
   i=2;                         //penultimo caracter recibido...
   decodificacion(i);    //lo transforma en los 4 bits altos Puerto B
   PuertoB_alto = numero;       //guarda el valor

   //Salida de los dos caracteres leidos como un byte
   PORTB=(PuertoB_alto<<4)|(PuertoB_bajo);   

Por su lado, el PIC envía la información solicitada al PC mediante cadenas de caracteres acotadas por un primer carácter que indica de que información se trata y un carácter final (#) para separarla de las posteriores cadenas. La aplicación Visual Basic se encarga de identificarlos. Los caracteres contenidos entre ambos será la información "útil".

lectura_puertoD() {

   TRISD=0xff;           //Puerto D como entrada
   PuertoD= PORTD;

   //Envío por USB a la aplicación visual basic
   printf(usb_cdc_putc, "\fD%x#", PuertoD);   
}


[+/-] Ver / Ocultar programa completo

Bajo proteus se ha desarrollado un esquema para poder comprobar los puertos como entradas y salidas mediante interruptores y leds. 




























Aquí podemos ver el resultado:



En el archivo de descarga se incluye el archivo "usb_desc_cdc.h" ya modificado junto al resto de librerías C USB utilizadas.

Descargar Comunicación PC-PIC por USB con VB


El proyecto contenido en el artículo ha sido diseñado y probado con éxito utilizando las siguientes versiones de software:
- Windows xp y windows 7
- Proteus V7.7 SP2
- CCS PIC C COMPILER v4.084




PINES CONECTOR USB





17 comentarios:

Unknown dijo...

Saludos estimados amigos, antes que nada felicitarte por el genial programa que realizaste esta muy completo y con una infinidad de aplicaciones que se pueden realizar, he tratado de implementarlo pero se me es algo complejo adecuarlo a lo que ya realizaste, llevo dándome de topes en la cabeza por eso te pido tu ayuda, me podrías mandar la programación en visual basic que realizaste. mi correo es o_sam1@msn.com te lo estaría inmensamente agradecido.

sanyonatan33 dijo...
Este comentario ha sido eliminado por el autor.
sanyonatan33 dijo...

yo también quisiera que me pasara la programación en visual basic e buscado mucho y no e encontrado nada. mi correo es sanyonatan33@gamail.com

Unknown dijo...

hola mucho gusto me parecio muy bueno el aporte quisiera saber si igual podrias enviarnme la programacion en visual basic mi correo vector9269@hotmail.com

Unknown dijo...

Gracias por mostrarnos tu trabajo. Pero, serias tan amable de enviar el codigo vb 6.0 o colgarlo. Muchas gracias de antemano. Mi correo es: luchadorinsaciable@gmail.com

Zoiber dijo...

Que tal amigo, felicitándote por el desarrollo de proyecto al igual que el resto me gustaría que me facilitaras el código en VB si no es mucha molestia. Mi correo es pabloluce2021@gmail.com
Gracias amigo

Pumitaandy dijo...

Buen trabajo, espero que sigas publicando otras aplicaciones con relacionadas con este tema.Por favor si podrías enviarme la programación en VB 6.0 mi correo es pumitaandy1969@hotmail.com

Tug dijo...

Excelente aporte, pedirte xfavor si me puedes mandar la programación en VB6 gracias por la colaboración mi correo es tugui.flores@gmail.com

Anónimo dijo...

Gracias por presentarnos tu trabajo, excelente.
Cargue el programa al pic pero la PC
nunca ve al PIC, ¿que crees que este haciendo mal?
Muchas gracias.
rvaldez@cablevision.net.mx

Robotypic dijo...

Hola Ruben.
Si estas usando el mismo programa del ejemplo entonces el problema lo tendras al reconocer el PC al PIC. Debes asegurarte que tienes cargado el driver USB y si lo tienes correctamente instalado prueba a cambiar de puerto USB.

Unknown dijo...

Hola, buenas tardes. Primeto de todo quería felicitarte por el fantástico programa que has desarrollado. En segundo lugar, quería pedirte que si por favor me puede mandar el código en VB6 ya que me sería de gran utilidad. Mi correo electrónico es juanllopisbernat@hotmail.com

Muchas gracias de antemano, Juan.

Unknown dijo...

Facil en vb6, el los mismo tienes que programa como puerto serial

1. añade el MsComm control
2. Pega este codigo en vb6 y listo

Private Sub Form_Load()
MSComm1.CommPort = 6 ' Poner el puerto que da el administrador de dispositivos de windows
MSComm1.PortOpen = True


MSComm1.Output = "0x80"
MSComm1.Output = "0x40"
MSComm1.Output = "0x20"
MSComm1.Output = "0x10"

End Sub

los codigo de los leds te da el programa ejecutable, que esta en este foro (USB PC-PIC.exe).

para simularo utilice el archivo de proteus (Comunicación PIC-PC por USB y vb.DSN).

muy facil verdad ggggggg.

Unknown dijo...

Hola, excelente trabajo, también me gustaría los código de Vb6, lo intenté, pero no consigo recibir desde e micro, te lo agradecería que me mandase a jesussorroche@hotmail.com, Un cordial saludo

Chiras dijo...

Buenas..Excelente tu programa..me ha sido de gran ayuda..realizo una aplicacion para captar unas señales análogas en vb6 . no se si me podrías hacer el favor de instruirme en cuanto al codigo de visual ya q el del pic uno lo entiende pero no se como captar esas variables allí y asignarlas...de antemano muchas gracias.. (chis_juan@hotmail.com)

Robotypic dijo...

Chiras.
Debes diseñar la comunicación como si se tratase de un puerto serie COM dado que esta comunicación USB emula un puerto serie. Los valores numéricos leidos debes transformarlos a caracteres y enviarlos como una cadena de texto a la aplicación vb.

Merlín dijo...

Hola Robotypic
Es genial este conocimiento que compartes con los que sabemos menos y te agradezco por eso, te cuento que yo también tengo la misma duda con respecto a la recepción en VB6 de las señales analógicas sobretodo cuando son varias por ejemplo adc-0,1,2,3 como separarlas no me queda claro,según entiendo en tu comentario anterior se devén asignar letras a los valores numéricos y luego en VB6 transformarlos de nuevo en números?

Seria de muchísima ayuda para mi si me pudieras mandar el código de este ejemplo a mi correo merlinguzman.mg@gmail.com estoy un poco atorado con la recepción ADC supongo que se debe usar una instrucción "Case" para saber adonde corresponde cada paquete.

Robotypic dijo...

Merlin.
El valor numérico lo debes pasar a una cadena de caracteres y luego enviarlos caractera a caracter.
Revisa esta entrada donde se muestra algo similar:
http://robotypic.blogspot.com.es/2012/08/transmision-variable-tipo-float-por.html

Related Posts Plugin for WordPress, Blogger...

CONTACTA - (Haz referencia del artículo sobre el que trata la consulta o comentario)