Autor Tema: Ayuda!, Proyecto: Placa Multi IO controlada por USB [micro JM60]  (Leído 2672 veces)

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

Desconectado cevaztiam

  • PIC10
  • *
  • Mensajes: 6
Hola Amigos, Me inicié hace unos meses en un proyecto personal que tiene como fin una placa con entradas/salidas multi-propósitos comandada por la PC a traves de algun puerto de la PC.
Mi experiencia con microcontroladores va por el lado de freescale.

El primer prototipo lo hice con un GP32 usando el modulo SCI (serie), tenia un firm sencillo e ASM que recibía un paquete de 4 bytes, el primero era una instrucción y los 3 restantes eran datos.
depende de la instrucción que recibía el micro actuaba según la lógica que yo necesitaba con los 3 restantes. también mediante una introducción el micro enviaba a la pc el estado de las salidas.
Desde la pc controlaba esta placa con un programa en C.
El problema que tuve con este primer modelo es el siguiente (todo lo que detallo a continuacion es del programa de la PC):
Las velocidades del puerto serie se respetaban siempre que enviara un paquete de datos de un solo tirón.
por ejemplo :

Código: [Seleccionar]
//34800 baud
serial.open("AB"); // en este caso los dos bytes se envían a la velocidad seteada (teniendo el cuenta los bits de paridad, stock etc)

hasta acá todo bien, el problema surgió cuando necesitaba enviar bytes dentro de forma secuencial.

Código: [Seleccionar]
serial.open("A");
serial.open("B");

en este caso comprobé que la velocidad de envio de datos era inferior  :(. El ejemplo parece tonto pero imagínense un ciclo while o for donde adentro leo bytes de un archivo y los necesito enviar a una velocidad determinada:

Código: [Seleccionar]
while(cond){
    serial.open("A");
    sleep (1);
}

cada 1 segundo no hay problema pero si en vez de usar sleep uso usleep y me acerco a la velocidad seteada del puerto, nunca puedo llegar, ni siquiera acercarme a 3/4 de esa velocidad.
leí un poco de documentación y llegue a la conclusión que la limitación esta dada por la propio protocolo ya que asegura la velocidad seteada mientras los datos se manden de un saque (por paquetes en una sola instrucción).
Una opción es setear la velocidad mas alta como por ej. 112500 pero ahi me surgía el problema que tenia menos tiempo de proceso del lado del firm si queria en el futuro crear nuevos comandos mas complejos que ocupen muchos ciclos de reloj.

Espero no aburrirlos.. sigo.
Todo esto me hizo buscar otra alternativa que no sea el puerto serial.
el puerto paralelo queda descartado porque mi idea es poder usar la placa en netbooks. así que me decidí a estudiar el protocolo USB.
Hace un mes que obtuve una muestra Micro MC9S08JM60 encapsulado QFN64, tuve que aprender las diferencias en el modo de programarlos ya que la serie HC08 era otra historia. Compré en electrocomponentes el BDM para programar, debuguear esta serie entre otras e hice una placa de adaptación  para poder montar el micro en la proto.
(aclaro que no dispongo el dinero para comprar la placa de evaluación DEMOS908)

Creo que el camino es el correcto ya que con este micro trabaja con frecuencias muy altas comparado con el gp32 y el modulo usb soporta 12mbits/s
ya hice algunos programas de prueba para probar el tim, adc  y familiarizarme con C para micros en codewarrior 10 para meterme de lleno en USB.
Tengo dos dudas principales que voy a detallar a continuación y me gustaría que me den una mano, también valoro opiniones sobre si debí o no descartar la interfaz serie.
  • Protocolo. - ¿Que tipo de trasferencia debería usar para mi proyecto?
  • Firm. - ¿Una vez que configuro el modulo USB (endpoints, descritores, etc) debo interferir en el proceso de enumeración o lo hace solo el modulo?

Yo usó Linux por una cuestión de gustos y aparte el soft para la interfaz serie anterior lo hice bajo este OS en C-GTK, asi que tengo pensado manejar la comunicacion USB tambien con linux.
para el que esté en el tema linux: ¿me conviene hacer una aplicación en espacio de usuario usando libusb (no estudié la biblioteca aun) o escribir una aplicacion en espacio de kernel cargando un modulo?


Bueno mientras me sigo volviendo loco  :z) espero que puedan darme una mano!

Saludos a todos.
Me he dado cuenta que incluso aquellos que dicen creer en que todo está predestinado y que no podemos hacer nada para cambiarlo, miran antes de cruzar la calle. Stephen Hawking.


 

anything