TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: electroipod en 18 de Octubre de 2015, 21:44:26

Título: Ayuda con USB y PIC18F
Publicado por: electroipod en 18 de Octubre de 2015, 21:44:26
Llevo un mes buscando un proyecto funcional sobre como comunicar un pic18f a la pc mediante usb, alguno de ustedes habrá hecho un proyecto sencillo sobre mplabx y xc8 para la comunicación usb?, ya me baje las librerías MLA de microchip, necesito un empujon para saber como usarlas, alguien por ahí que tenga algún ejemplito, muchas gracias.
Título: Re:Ayuda con USB y PIC18F
Publicado por: KILLERJC en 19 de Octubre de 2015, 00:03:34
Y no tenes ningun ejemplo ?, deberias comenzar por ahi, buscando uno. Microchip seguro que te trae alguno o hizo alguno para alguna placa.
Título: Re:Ayuda con USB y PIC18F
Publicado por: electroipod en 19 de Octubre de 2015, 10:27:39
Y no tenes ningun ejemplo ?, deberias comenzar por ahi, buscando uno. Microchip seguro que te trae alguno o hizo alguno para alguna placa.
De que me sirve poner ejemplos si ninguno funciona.
Título: Re:Ayuda con USB y PIC18F
Publicado por: KILLERJC en 19 de Octubre de 2015, 18:36:53
Si funcionan los ejemplos, para algo son los ejemplos.
Solo tenes que adaptarlos a tu PIC, estudiarlos. Ver que funciones usan para hacerlos funcionar, etc.

Título: Re:Ayuda con USB y PIC18F
Publicado por: electroipod en 19 de Octubre de 2015, 20:29:51
Saludos, sigo peleando con la comunicación usb, dentro de la librería de michochip encontré una carpeta que decía cdc basic, compila bien, además usa el pic16f1459 pero no tengo la menor idea de que es lo que hace, dejo el proyecto completo para que alguien lo vea.

https://mega.nz/#!1l9GWIyb!HiGV00Mo-SX6liscNCrepNdIQhXIypP537q92IejOro

la ruta del proyecto es:

\USB Device - CDC - Basic\v2015_08_10\apps\usb\device\cdc_basic\firmware

Título: Re:Ayuda con USB y PIC18F
Publicado por: KILLERJC en 20 de Octubre de 2015, 00:54:53
Para vos el CDC es como una UART. Podes ver como selecciona los valores en el codigo:

Código: C
  1. void APP_DeviceCDCBasicDemoInitialize()
  2. {
  3.     CDCInitEP();
  4.  
  5.    
  6.     line_coding.bCharFormat = 0;        // ???
  7.     line_coding.bDataBits = 8;        // bits de datos
  8.     line_coding.bParityType = 0;      //paridad
  9.     line_coding.dwDTERate = 9600;  //baudios
  10.  
  11.     buttonPressed = false;       // Un "antirebote" para el boton de hardware
  12. }

En tu PC deberias tener un archivo que le diga a windows que si se conecta cree el COM virtual justamente ese dispositivo ( que tenga su ID etc ), y luego te comunicas tal cual es un RS232 a tu dispositivo. Esto es el CDC

Lo que hace el main es inicalizar el stack, una ves full configurado el USB y conectado comienza a ejecutar la funcion del ejemplo, en el ejemplo se usa la interrupcion (definido en un .h de cada pic), pero tambien esta el caso por polling, Luego la interrupcion (manejada por el stack) llama a la funcion callback (USER_USB_CALLBACK_EVENT_HANDLER), que lo que hace es crear una maquina de estado, que a medida que se va conectando/ennumerando o segun el estado en que este el dispositivo va pasando a ocurrir lo que sea necesario. Una ves que esta enumerado procede a ejecutar el programa del USB que es la funcion: APP_DeviceCDCBasicDemoTasks() llamada desde el main y que no llega a ejecutarse a no ser que este correctamente conectado el USB.

El programa en si cuando se presiona un boton, que no se exactamente cual es por que no lo encontre en los .h (io_mapping.h estan definidos y dice algo de S2 ), que esta en el hardware se envia a la PC el mensaje "Button Pressed" , sino creo que cualquier otra comunicacion que se envie desde la PC hacia el PIC, el PIC procede a enviar el caracter ASCII + 1 de lo recibido. Asi, si envias "abcde" recibis "bcdef". Es todo lo que hace el ejemplo.

Ademas esta todo explicado en los comentarios.