Autor Tema: Lineamientos para una aplicacion PC-uC con USB  (Leído 1886 veces)

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

Desconectado elgarbe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2178
Lineamientos para una aplicacion PC-uC con USB
« en: 02 de Septiembre de 2015, 10:35:42 »
Buen día, estoy necesitando realizar una aplicacion para extraer datos de un uC y pasarlos a la PC para procesarlos. La conexión es por USB.
La PC es el host y el uC es el device. Estoy utilizando CDC, creando un VCP y estoy por escribir la aplicacion en .net.
La duda que me surje es como se diagrama este tipo de conectividad. Tengo entendido que la PC, al ser host, es el que le tiene que indicar al uC que puede enviar los datos, nunca el device puede iniciar la transmision (ya que no puede saber si está conectado a algún host). Entonces, el uC inicializa el USB y que hace? se queda esperando por un caracter (por ejemplo) de la PC? y al recibir ese caracter, puede empezar a enviar los datos?
En el uC tengo datos float32_t y la función que se encaraga de enviar datos al host envía bytes. esto es siempre así? digo, yo estoy trabajando con un ARM de ST y las librerías que nos da hace eso, envía bytes, esto es un tema del USB o es un tema de la librería?
Supongamos que ya tengo los bytes en la PC, imagino que debe haber alguna funcion que permita convertir los 4bytes recividos en float. Alguien conoce algo de esto para vb.net?

Saludos y gracias
-
Leonardo Garberoglio

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2976
Re: Lineamientos para una aplicacion PC-uC con USB
« Respuesta #1 en: 02 de Septiembre de 2015, 16:55:27 »
Peleandote con la documentación de ST emm?¿ :D :D

Cuando usas una comunicación cdc, el micro hace un bucle, y una espera hasta que el ordenador asigna la comunicación, y un puerto com.

Una vez se establece la comunicación, no hace falta que envíes datos desde el PC para que responda el uc, si el uc tiene algo que mandar lo manda y el pc lo atenderá cuando pueda, los puedes capturar desde un hilo que trabaje en paralelo, o con eventos, el uc manda un dato y produce un evento al que responde el ordenador y captura el dato, responde o lo que quieras.
Tu envias byte en la comunicación cdc esto es así, pero ya depende de el protocolo que tu programes, ya que normalmente se mandan cadenas de byte y tu las reconstruyes en tu aplicación del ordenador. Pero los bytes se mandan de 1 en 1.

Yo diseñe un protocolo que era bastante seguro, era una trama de varios bytes de inicio, de orden, numero de datos en la trama, datos de la trama y el checksum.
Si el mensaje fallaba el ordenador ( o el uc) pedía repetición de mensaje, si llegaba 3 veces mal o tardaba mas de la cuenta se cerrabs el puerto y se apagaba la comunicación, guardando los parámetros para que no pasara nada, a cada mensaje se responde una verificación de mensaje recibido correctamente, y bastante mas cosas, te aconsejo que hagas sistemas de seguridad, para una comunicacion muy robusta, porque st y window con puerto com, no es que vaya muy fino.

También te recomiendo que pases de visual basic, es una caquita, mejor visual c#, una vez tengas los datos en el pc puedes, trabajar con los bytes para formar el float, tienes funciones o puedes hacerlo tu mismo.

Si tienes dudas en visual c# puedo ayudarte ya que lo tengo muy machacado después de haber hecho muchos proyectos bastante complejos.

Un saludo.

Visita mi canal para aprender sobre electrónica y programación:

https://www.youtube.com/channel/UCxOYHcAMLCVEtZEvGgPQ6Vw

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5470
    • Electrónica Didacta
Re: Lineamientos para una aplicacion PC-uC con USB
« Respuesta #2 en: 02 de Septiembre de 2015, 18:34:21 »
si estas usando la clase CDC, entonces mira la conexión como un simple puerto serial.

hay varias maneras, yo suelo utilizar la de enviar caracteres de confirmación entre envio de datos, y para la detección de conexión colocas un temporizador y mediante un evento que detecte un fallo de lectura de puerto, saltas el estado de detección.

hay quienes han utilizado un código para detectar directamente el puerto, pero tendrias que seleccionar manualmente el puerto cada vez que conectes el dispositivo.

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

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2976
Re: Lineamientos para una aplicacion PC-uC con USB
« Respuesta #3 en: 02 de Septiembre de 2015, 19:04:34 »
Citar
hay quienes han utilizado un código para detectar directamente el puerto, pero tendrias que seleccionar manualmente el puerto cada vez que conectes el dispositivo

No es necesario, yo tengo hecho un sistema que se conecta automáticamente al puerto sin seleccionarlo, de esta manera, cuando la maquina conecta, envía un mensaje especifico uno por uno a todos los puertos com, disponibles si no responde capturas la excepción, y pasas al siguiente cuando llega al puerto donde esta el uc este recibe el mensaje, y el ordenador inicia la comunicación con la maquina configurada en ese puerto, de esta manera lo hace solo de forma automática sin ningún problema, y sin tener que mirar en que puerto esta el uc etc etc

Un saludo
Visita mi canal para aprender sobre electrónica y programación:

https://www.youtube.com/channel/UCxOYHcAMLCVEtZEvGgPQ6Vw

Desconectado elgarbe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2178
Re: Lineamientos para una aplicacion PC-uC con USB
« Respuesta #4 en: 03 de Septiembre de 2015, 08:38:51 »
Gracias por las respuestas!

Si, estoy luchando con ST!!! pero de a poco le voy tomando cariño  :D
No tengo problemas en pasar a C#, pero necesitaría bastante ayuda ya que conozco lo muy básico.

En este momento lo que tengo que programar es un front-end para hacer testeos sobre el equipo que estoy diseñando. El sistema posee un uC conectado a un Audcio Codec para generar tonos y escuchar respuestas sonoras. El codec se configura por I2C y el sonido se transmite por I2S. Eso ya lo tengo funcionando. Ahora necesito una aplicacion en la PC para hacer pequeños cambios en la configuracion del codec, hacer ensayos y levantar a la PC los resultados grabados por el micrófono. No tengo requerimientos de velocidad. Yo puedo configurar el codec, luego hacer el ensayo y si traeme los datos y reconstruirlos (a float) le toma un par de segundos no es problema. Los datos son unos 20Kbyte, entre info grabada por el micrófono, resultados de la FFT calculada por el micro y alguna otra cosa.

Entonces lo que estoy probando ahora es si la recepcion de caracteres en el uC se realiza por interrupcion, como en teoría funciona. Una vez que haga eso ya puedo preparar la aplicacion en la PC para enviar comandos al uC....

Cualquier ayuda es bienvenida!

sds.!
-
Leonardo Garberoglio

Desconectado elgarbe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2178
Re: Lineamientos para una aplicacion PC-uC con USB
« Respuesta #5 en: 03 de Septiembre de 2015, 09:20:44 »
Bueno, ya estoy empezando a comprobar algunas cosas. Primero, efectivamente la recepcion de caracteres es por interrupcion:



una larga lista de funciones hasta que llegamos a la funcion para el usuario
Código: [Seleccionar]
static int8_t CDC_Receive_FS (uint8_t* Buf, uint32_t *Len)el contenido del buffer si envío un caracter:



Si envío varios caracteres:



Bien, ahora si ya puedo empezar con la aplicacion para conectarse y enviar caracteres/comandos...

como punto de partida tengo esto:
http://janaxelson.com/files/com_port_terminal_cs.zip

Creo que este post ya esta listo, ya que el objeto del mismo se ha resuelto con sus respuesta. Voy a continuar este trabajo en la parte de ARM, como un ejemplo de implementacion de comunicacion CDC para los STM32.

Saludos!
-
Leonardo Garberoglio

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2976
Re: Lineamientos para una aplicacion PC-uC con USB
« Respuesta #6 en: 03 de Septiembre de 2015, 13:29:00 »
Bien, la libreria no te ofrece cambiarlo por pullin como en microchip u otras marcas? Deberías de poder elegir entre recepción por interrupción o recepción por pullin pero bueno.

Cuando comience con la aplicación de pc si necesitas ayuda postealo.

Un saludo.
Visita mi canal para aprender sobre electrónica y programación:

https://www.youtube.com/channel/UCxOYHcAMLCVEtZEvGgPQ6Vw