Autor Tema: Interfaz USB-DMX basada en DMX4ALL.  (Leído 94292 veces)

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

Desconectado Khronos_Nieto

  • Colaborador
  • PIC10
  • *****
  • Mensajes: 40
Interfaz USB-DMX basada en DMX4ALL.
« en: 16 de Junio de 2009, 08:32:25 »
Modificación 24 Junio:  Fichero adjunto actualizado, con nuevo firmware que permite compatibilidad con el programa FreeStyler 512.

Buenas a todos compañeros.

Hace un tiempo que compré un par de focos RGB PAR32 que además de tener un modo autónomo, se pueden controlar por DMX.
Estos focos tienen 4 canales, uno para velocidad de parpadeo (Strobo) y los otros tres para los 3 colores r, g y b.

Siempre he querido poder controlarlos con el PC de alguna forma, ya que disponían de DMX, por lo que me construí una interfaz de puerto paralelo que hay en internet, con un pic16f84. Esta interfaz de nombre "manolator" desempeña su papel a la perfección, además es muy simple de construir y sale andando a la primera. La página en la que se puede encontrar es manolator  ,he de agradecer a su autor el que ponga a disposición de todos sus diseños. Asi mismo, en la página del compañero nocturno Micropic se puede encontrar mucha información acerca de esto.

El inconveniente se me planteó porque cada vez que quería controlar los focos de mi "mini sala de fiestas", tenía que bajarme al sótano mi PC fijo, monitor.. y todo lo demás. Dispongo de un ordenador portatil, pero esta interfaz se diseñó para puerto paralelo, y encontrar un puerto paralelo en un portatil es poco menos que imposible hoy dia.

Investigando en internet ví que existen varios diseños comerciales de interfaz USB-DMX, bastante caras por cierto, por lo que me planteé hacerla yo mismo.

Diseño de la interfaz:

El microcontrolador que elegí es un pic18f2550, los motivos son porque posee USB, USART, no es excesivamente grande y esta disponible en formato DIP.

El principio de funcionamiento es sencillo, recibe los datos por USB, los interpreta, y los envía por la USART en formato DMX. La salida serie del PIC debe ir conectada a un transductor que convierta los niveles de tensión del PIC a los del estandar RS485, para ello he utilizado un MAX488, valdría también el MAX485, aunque tambien hay otros muchos válidos de otros fabricantes.

Una de las principales consideraciones que tuve en cuenta es que la interfaz debía ser compatible con alguna otra ya existente. El motivo es que si se desarrolla un protocolo de comunicación particular, ningún programa software de control DMX va a reconocer a nuestra interfaz. Habría que investigar y desarrollar una librería específica para nuestra interfaz, y que a su vez se pudiera precargar en el programa software que vayamos a utilizar. Pero esto queda fuera de mis espectativas, por lo que me cogí mi programa de control DMX favorito: DMXControl (que además es gratuito) e investigé cuales eran las interfaces USB soportadas.

El objetivo era "espiar" lo que el programa DMXControl enviaba al puerto USB, así como las posibles respuestas esperadas.
De entre todas las interfaces, elegí la DMX4ALL. Las demás estan preparadas para una comunicación USB en modo HID o Bulk Transfer con sus respectivas interfaces físicas, y resulta más dificil interpretar los datos que se envían, y aún más sin disponer de una interfaz física real.

Sin embargo la interfaz DMX4ALL se comunica con DMXControl basandose en una emulación de puerto serie. De hecho en el menú de configuración de esta interfaz en DMXControl podemos ver que te permite seleccionar el puerto serie que vas a utilizar, así como el baudrate.

El programa DMXControl, con la interfaz DMX4ALL seleccionada, envía una trama de 6 bytes cada vez que se varía el valor de un canal. En esta trama se indica el universo (grupo de 512 canales), el canal, y el nuevo valor. Estas tramas se envían continuamente, cada vez que varía el valor de cualquier canal. Además, por lo que parece, el programa no demanda ninguna respuesta de reconocimiento ni nada por parte de la interfaz física.

Toda la comunicación se realiza desde el PC hacia la interfaz, esta última nunca tiene que enviar nada hacia el PC, salvo en un caso.

Este caso es cuando se selecciona dicha interfaz (DMX4ALL) en el programa, y cada vez que lo arrancamos.
DMXControl envía el comando de 2 bytes: "0x63 0x3F", que es una especie de solicitud de reconocimiento, y se queda esperando durante 2 segundos aprox. una respuesta por parte de la interfaz. La respuesta de reconocimiento es un byte, "0x47". Si esta respuesta no se produce, el software da un error, corta las comunicaciones y no permite seleccionar dicha interfaz.

Por tanto nuestro pic debe estar pendiente y reconocer cuando se envía dicha secuencia de ACK y contestar inmediatamente. No obstante repito, esto solo se produce al inicio del programa, una vez hecho, queda configurado y permite el envío de las tramas en el formato anteriormente descrito.

Una trama de 6 bytes en formato DMX4ALL correcta tiene la siguiente forma:

Byte: 0    1   2    3   4    5
      " FF  01  00  01  AA  00 "

Donde:
- byte 0 es el byte de inicio de trama, siempre es 0xFF.
- byte 1 es el LSB (byte menos significativo) del canal escogido, de 0x00 a 0xFF para porciones de 256 canales.
- byte 2 es el MSB (byte mas significativi) del canal escogido, 0x00 o 0x01, para cubrir los 512 canales.
- byte 3 es el universo (puede haber varios universos de 512 canales cada uno), por defecto 0x01.
- byte 4 es el valor a asignar al canal, de 0x00 a 0xFF.
- byte 5 es el byte de finalización de trama, siempre es 0x00.

En el ejemplo anterior se envia el valor "AA" (170) al canal 1.

Desarrollo de la interfaz:

El desarrollo de la interfaz ha sido posible gracias a los distintos aportes de compañeros de este foro.

La parte de comunicación USB y emulación de un puerto serie virtual está basada en las librerías de ejemplo de CCS y en las explicaciones y desarrollos que ofrece en su página web el compañero RedPic. En la página de RedPic, http://picmania.garcia-cuervo.net, se explica con todo detalle como llevar a cabo una comunicación USB CDC con el pic 18F4550, que esta parte es completamente equivalente al 18F2550 utilizado aqui.

La parte de la implementación del protocolo DMX en la USART de un pic, la he podido entender y añadir al proyecto gracias al diseño del compañero nocturno y su Receptor DMX.

Adjunto al final del mensaje el esquema de la interfaz, el código fuente, código hex compilado y la simulación en proteus.

Espero les sea de utilidad, y si realizan cualquier mejora o ampliación por favor compartirla.

Un saludo   :-/ :-/ :-/ :-/.
« Última modificación: 24 de Junio de 2009, 15:07:47 por Khronos_Nieto »
"Camaradas, ni nuestro propio conocimiento conoce nuestro potencial"
- La caza del Octubre Rojo -

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: Interfaz USB-DMX basada en DMX4ALL.
« Respuesta #1 en: 16 de Junio de 2009, 08:41:55 »
Magnífico, querido Armando, plas plas plas.
Muchas gracias por compartirlo.

Desconectado stk500

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 4923
Re: Interfaz USB-DMX basada en DMX4ALL.
« Respuesta #2 en: 16 de Junio de 2009, 11:53:08 »
En Horabuenas!!
Muy buen trabajo!

Desconectado josmaroal

  • PIC10
  • *
  • Mensajes: 22
Re: Interfaz USB-DMX basada en DMX4ALL.
« Respuesta #3 en: 22 de Junio de 2009, 06:03:25 »
Muy buena amigo Khronos_Nieto  y gracias por compartirlo  :-/ :-/

Desconectado Khronos_Nieto

  • Colaborador
  • PIC10
  • *****
  • Mensajes: 40
Re: Interfaz USB-DMX basada en DMX4ALL.
« Respuesta #4 en: 24 de Junio de 2009, 14:58:44 »
Muchas gracias por los comentarios compañeros, se agradecen sinceraménte.

He estado testeando el interfaz durante varios días y he encontrado dos problemas que hacen que no funcione correctamente.

Problema 1:

El primer problema es que no funciona con el programa de DMX, FreeStyler 512. Aunque dicho programa te permite seleccionarla interfaz DMX4ALL, la mi circuito no envía tramas DMX. He estado "espiando" las tramas que envíaeste programa y resulta que son completamente distintas que las que envía DMXControl. ¿Como es posible?

Estuve navegando y entré en la página oficial de DMX4ALL: http://www.dmx4all.de/, que resulta ser puramente una tienda en internet. Pues bien, para mi sorpresa ví que está disponible la documentación que explica el protocolo de comunicación y los comandos aceptados por DMX4ALL. ¡Bien! ¡¡Y yo aqui montando puentes entre puertos COM para espiar lo que envían los programas, cuando resulta que está todo en la página oficial!!

La documentación se puede encontrar aqui http://www.dmx4all.de/media/manuals_en/DMX412_Mini-USB-DMX_en.pdf

Tras revisarla y hacer unas pequeñas pruebas, concluí que el formato de datos que usa FreeStyler 512 es el mismo quese explica en la página oficial DMX4ALL, por tanto es el auténtico, y el formato que usa DMXControl es otro distinto, aunque en el programa se llame DMX4ALL.

Aunque se explica en la documentación, a modo de resumen la trama "original" DMX4ALL (la que usa FreeStyler 512), tiene la siguiente forma:

//Byte: 0   1   2   3   4   5   6   7
//    " 43  31  34  30  4C  30  31  31 "
//
// Donde:
// - El byte 0 es el byte de inicio de trama, siempre es 0x43.
// - Los bytes 1, 2 y 3 son el canal seleccionado, en formato ASCII, de mayor a menor peso.
// - El byte 4 es un separador y siempre es 0x4C.
// - Los bytes 5, 6 y 7 son el valor a asignar, en formato ASCII, de mayor a menor peso.
//
// En el ejemplo anterior se envia el valor "11" (30-31-31), al canal 140 (31-34-30).

Espiando los envíos de FreeStyler se podemos comprobar que las tramas son así.

He modificado el programa del PIC y ahora soporta también este protocolo. Las tramas de DMXControl y FreeStyler son completamente distintas por lo que uso dos rutinas de decodificación distintas. ¿como distinguir en que programa estamos para usar una u otra? Pues sencillo, al arranque de cada programa se envía una trama de 2 bytes a modo de reconocimiento. Estas tramas son distintas, para el caso de DMXControl es: 0x63 - 0x3F y para FreeStyler: 0x53 - 0x32.

Según la que reciba, conmuto a un modo u otro.

Es cierto que en la documentación del protocolo se explican distintos comandos ante los cuales la interfaz tiene la obligación de responder con un ACK (0x47), pero en mis pruebas con FreeStyler ví que él, no exige nunca una respuesta, de hecho ni siquiera al establecer comunicacion por primera vez (como ocurre con DMXControl). FreeStyler es menos exigente, en cuanto arranca (y siempre que exista el puerto COM asignado) comienza a enviar tramas ante los cambios de los potenciómetros virtuales, no exige ninguna respuesta, por lo que le da igual lo que haya conectado al otro lado de la línea, el manda tramas sin parar.

Por este motivo yo solo he implementado la parte de decodificación de la trama, y funciona, aunque queda "pendiente de hacer" proximamente.

Modifico el primer post, adjuntando el nuevo código modificado. Comprueben en la simulación que ya funciona con FreeStyler.


Problema 2:

El segundo problema es mas preocupante, durante las pruebas a la interfaz hechas con DMXControl (me sigue gustando más que FreeStyler), he comprobado que funciona durante 2 o 3 minutos correctamente y luego se cuelga. Los focos se quedan en el último estado que envié, y el software se queda medio colgado, no responde a los comandos y tengo que cerrarlo. Entonces, sin desconectar la interfaz, vuelvo a arrancar DMXControl, pero ahora me salta con un mensaje de "Puerto COM no disponible". Sin embargo me voy al administrador de dispositivos y puedo ver que el puerto COM virtual sigue presente, y windows no indica que exista ningún problema de hardware. Vuelvo a cerrar DMXControl y abro el programa de comunicación serie Siow (el que trae CCS), y tampoco me deja abrir dicho puerto serie.

Todo esto me ocurre a los 2 o 3 minutos de funcionamiento correcto de DMXControl. Otra cosa que he intentado cuando dá este fallo es desconectar y conectar la interfaz sin cerrar DMXControl, pero tampoco se soluciona. La única forma es apagando el programa, desconectar y conectar la interfaz, y volviendo a arrancar el programa, entonces todo va perfecto durante otros 2 o 3 minutos.

Creo que el problema reside en que en algún momento se pierde la comunicación serie, lo suficiente como para que se cuelgue DMXControl. En el código del PIC he cambiado la forma de control del USB de la siguiente forma,

Este es el código original:

Código: [Seleccionar]
usb_init();                            // Inicializo USB
usb_cdc_init();                        // Inicializo como dispositivo serie virtual CDC

while(!usb_cdc_connected()) {}         // Espero hasta la conexión USB

for(;;){

   if (usb_enumerated()) {             // Espero que el dispositivo sea reconocido como emulador serie CDC
      if (usb_cdc_kbhit()){            // Compruebo si hay recepción USB
       -------
       -------
       -------
      }
    }
}

Y este el modificado:

Código: [Seleccionar]
usb_init();                            // Inicializo USB
usb_cdc_init();                        // Inicializo como dispositivo serie virtual CDC

while(!usb_cdc_connected()) {}         // Espero hasta la conexión USB

for(;;){

      if (usb_cdc_kbhit()){            // Compruebo si hay recepción USB

      }
}

La diferencia es que ahora no pregunto contínuamente si el dispositivo está enumerado, asumo que sí. Con esta modificación he conseguido que el interfaz no se cuelgue cada 2 o 3 minutos. Conecto todo, arranco el programa y lo pongo a funcionar, ahora funciona correctamente todo el tiempo.

Pero me ocurre una cosa aún peor, estando funcionando todo correctamente, me levanto de la silla y me dirigo a la habitación de al lado y le doy al interruptor de la luz para encender los tubos fluorescentes ¡¡ y el muy cabr.... se cuelga!!

¡Tengo un problema serio de ruido electromagnético! Pero no me explico como puede provocar estos efectos. Creo que no se trata de Windows XP, ni de DMXControl, ni problema de drivers ni nada, creo que el problema lo causa el PIC, que se resetea. De hecho le he provocado reseteos voluntarios y ocurre exactamente lo mismo. Tengo montado el circuito exactamente como se muestra en el esquema que adjunté, pero he de aclarar que utilizo un cable DMX de 10 metros hasta el primer foco, y otro de 15 metros desde éste hasta el segundo. Imagino que esto constituye una antena gigante para captar ruido eléctrico, y entendería que los focos no respondieran bién a los comandos, pero ¿colgarse el PIC?.

Según tengo entendido la unica forma de resetear el PIC es cuando cae la tensión de alimentación, ¿entonces cae la alimentación del puerto USB? ¿Puede ser por un exceso de consumo por parte de mi circuito, justo en el momento de encender los tubos fluorescentes? En ese caso el puerto USB cortaría la alimentación para autoprotegerse, y podría explicar el problema. Pero la verdad es que no quisiera alimentar externamente mi circuito, y más sabiendo que existen interfaces USB-DMX comerciales que se alimentan del USB y funcionan perfectamente.

He tomado varias medidas:

- conectar el chasis del conector USB al chasis del conector DMX
- soldar un cable entre masa y el cuerpo del cristal de 12 MHz
- colocar ferritas en el cable USB y justo a la salida del cable DMX

Pero sigue ocurriendo lo mismo, cuando enciendo las luces fluorescentes de la habitación de al lado, falla el circuito. Me queda por aislar el PIC, de la parte DMX, es decir, del MAX488. Según he visto en algunos esquemas utilizan optoacopladores en la línea de datos entre el PIC y el MAX488. Incluso para un mejor aislamiento llegan a utilizar convertidores DC/DC, para la alimentación del MAX488. No lo he probado todavía por no tener optoacopladores tan rápidos (250 Kbaudios).

Òjala esto solventase mi problema, aunque me parece una solución demasiado drástica, y mas bién orientada a la protección de los puertos USB de nuestro querido PC, que a evitar cuelgues del microcontrolador.

Con todo esto quizás no vaya por el camino correcto para encontrar la solución, a lo mejor solo se trata de un problema en el firmware del PIC.

Ya finalizo con 2 preguntas, disculpen la extensión del post, espero que no se les haga aburrido.

La primera pregunta es respecto al ruido, ¿como puedo protejer correctamente el circuito? Las medidas que he adoptado han sido un poco por intuición propia, y sin criterio alguno. Me gustaría conocer el consejo de algún compañero experto.

Y la segunda pregunta va dirigida a los compañeros del foro curtidos en USB: asumiendo que el PIC se va a resetear "de vez en cuando", ¿habría alguna forma de que el PIC retomara las comunicaciones como si no pasara nada  :mrgreen:?, es decir, que no hubiera que reestablecer la comunicación USB, inicializar, enviar descriptores... etc, y ¿como le sentaría esto al PC, suponiendo que es un corte de pocos milisegundos?

Muchas gracias compañeros por la paciencia para leer esto, gracias de antemano y un saludo  :-/ :-/ :-/ :-/ :-/!!!  
"Camaradas, ni nuestro propio conocimiento conoce nuestro potencial"
- La caza del Octubre Rojo -

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: Interfaz USB-DMX basada en DMX4ALL.
« Respuesta #5 en: 24 de Junio de 2009, 15:25:47 »
Yo te recomiendo lo de los optoacopladores. Creo que todas las instalaciones DMX que se precien lo tienen instalados.

Respecto al USB, me temo que no hay mucha solución. Sólo prueba una cosa si es que puedes: en el terminal de Windows puedes "Desconectar" del puerto COM, ¿puedes hacer lo mismo con tu programa?. Una vez que el PIC está reseteado "Desconectar" y "Conectar" en el PC suele funcionar.

Desconectado stk500

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 4923
Re: Interfaz USB-DMX basada en DMX4ALL.
« Respuesta #6 en: 24 de Junio de 2009, 21:13:05 »
pues bien , a mo con el DMXControl tambien se me colgaba, pero era problema de la configuracion de mi interface y lo configure, puede ser como tu dice que se calgue demasiado la USB de tu PC, eso tambien me pasaba cuando tenia varia cosas colga en la USB, por la otro lado, lo del Cable no es tan critico, siempre y cuando tu cable sea mallado, pero ojo!!!! se recomiendo cable de 120 'Ohm , aunque yo con una cable de microfono de 10 metro me iba sin problema, otras cosas puede suceder y es que tus Lamparas RGB coga parasito,  eso tambien me paso con los LED RGB LITE y los vendimos yo me quede con uno de ellos y todavia no encuentro el problema que se enciende por corto tiempo sin enviarle Señales DMX aunque por un tiempo vuelve a estado normal. yo te aconsejo que te haga un DMX tester y asi observa las señales que salen del DMX  USB o yo probaria con otros equipo, ya que no me confio en algunas cosas Made in china  :D
Saludos

Desconectado Khronos_Nieto

  • Colaborador
  • PIC10
  • *****
  • Mensajes: 40
Re: Interfaz USB-DMX basada en DMX4ALL.
« Respuesta #7 en: 25 de Junio de 2009, 09:15:26 »
Efectivamente Manolo, probé lo que me comentas de "deshabilitar" y despues "habilitar" el puerto COM y de esa forma consigo restaurar el puerto serie correctamente sin necesidad de desconectar la interfaz del puerto USB. Lo único es que el programa DMXControl si que me veo forzado a reiniciarlo, o bien, irme al menú de selección de interfaz y cambiar el puerto COM por otro cualquiera para luego volver al correcto. Esto estoy casi seguro que ocurre porque a ojos del programa, éste asume que el puerto COM continúa abierto, y no vuelve a enviar el comando de abrir puerto hasta que se reinicia de alguna forma.

Lo de los optoacopladores llevas toda la razón, y creo que va a ser la solución a mis problemas, y te comento porqué.

Ayer al leer tu comentario hice la prueba definitiva, conecté mi interfaz al PC, conecté el cable DMX a la interfaz y arranqué el DMXControl. En el programa tengo hecha una secuencia sencilla que cambia de color los focos, de rojo a verde, a azul..... y así cíclicamente. Cuando se activa, puedo ver como se mueven unos potenciómetros virtuales en el programa de forma suave y progresiva, a la vez que cambia el color de los focos. Todo va perfecto durante 10, 15 minutos... indefinidamente, hasta que enciendo los tubos fluorescentes de la habitación de al lado. Los focos se paran, es decir, se quedan con el último color asignado, y cuando miro el programa, los potenciómetros van a golpes, tardan muchísimo en moverse. Es una indicación clara de que el programa se ha colgado y de que el PIC se ha reseteado.

Pues bién, aqui viene la prueba. Desconecto todo y apago el programa. Ahora conecto la interfaz al PC, y arranco el programa, dejando sin conectar el cable DMX a la interfaz. Y ahora activo la secuecia cíclica. Al no estar conectado el cable DMX, evidentemente los focos no cambian de color, la señal que envía la interfaz va al "aire", entoces ¿como sé que todo está funcionando correctamente? pues muy sencillo, porque veo moverse los potenciómetros de forma suave y progresiva. Ahora enciendo y apago los fluorescentes de la habitación, enciendo un ventilador, una batidora..... :mrgreen: :mrgreen: :mrgreen: :mrgreen: todo lo que produzca ruido, y sigo viendo moverse los potenciómetros de forma suave y progresiva !!!

La interfaz sigue funcionando perfectamente   :-/ :-/!

A continuación sin tocar nada, conecto el cable DMX a la interfaz, ahora los focos si cambian de color, con lo que se comprueba que es cierto. Ahora desconecto el cable DMX del extremo de los focos, es decir, la interfáz queda conectada a un cable de 20 metros, pero que en su otro extremo va al aire. Repito el encendido y apagado de fluorescentes, y tras varias veces, miro al monitor y los potenciómetros van a golpes y ralentizados, el pic se ha reseteado y el programa colgado.

Conclusiones:

- El circuito de la interfaz, con el cable USB, y el propio PC, en su conjunto son aparentemente inmunes al ruido electromagnético. Tanto para el ruido que viene por la tensión de red 220V como el ruido de radioeléctrico.

- El origen de todo el ruido y problemas está en el cable DMX y en los focos. El cable capta el ruido radioeléctrico, y los focos (que no deben ser muy buenos) no filtran el ruido que les viene por la red de 220V, y lo sueltan al bus DMX, llegándole a mi querido PIC.

Tal y como indicas Manolo, la mejor solución es optoacoplar las lineas de datos, y a ser posible aislar también la alimentación del MAX488 con un convertidor DC/DC. En definitiva aislar al PIC del mundo exterior en todas las líneas.

Rafael, gracias por tu comentario, he seguido varios hilos tuyos en el foro respecto a DMX y se que dominas este tema. El cable que yo uso también es de micrófono, con conectores XLR de 3 patillas macho y hembra. Lo compro en mi tienda de electrónica habitual en Almería y lo pido como cable DMX, pero en la pegatina pone cable de micrófono, la verdad no sé cual es la diferencia. Acabo de abrirlo para confirmarte que es mallado, y NO lleva malla   :shock: :shock: !!

¡ Tengo la sala de fiestas en un sótano en la que todo es ruido eléctrico, y con cables DMX de 20metros y 15 metros sin malla ! Buen comienzo  :P :P....

Respecto de los focos, yo también sospecho de la calidad de los míos Rafael. Son dos par 36 RGB fabricados por Velleman para HQ Power, modelo exacto VDPLPS36BP, concretamente estos http://www.velleman.be/downloads/4/vdplps36bpgbnlfresd.pdf.

Por las pruebas que estoy haciendo, cada vez confirmo más la teoría de que casi la totalidad de ruido que producen los fluorescentes, va a parar a la red de 220V. Por supuesto también hay parte que se "radia" en forma de ruido radioeléctrico, pero para que esto afecte, el circuito o el cable deben estar muy cerca del tubo fluorescente. Yo no entiendo mucho del mundo de la luminotecnia, pero pensaba que no eran fabricantes malo. Sin embargo he comprobado que no filtran nada de ruido, y lo cuelan todo al bus DMX.

Para colmo, hay ocasiones en que dejando los focos en un color fijo mediante comando DMX, desconecto el cable DMX del foco, y encendiendo y apagando los tubos fluorescentes, los focos se apagan, o cambian de color !! Es decir, sin cable de de datos conectado, interpretan el ruido que viene por la alimentación (red 220V) como un comando. Esto ya es increible. Menos mal que esto solo ocurre cuando el conector del foco se deja al aire, estando conectado a la interfaz DMX, obedece a esta siempre (antes de que se cuelgue por otros motivos... :mrgreen: :mrgreen:.)

Voy a continuar afinando la interfaz, y por supuesto compartiendo los avances.

Y animo al compañero escéptico y al incrédulo que esté dudando si montar o no esta interfaz USB-DMX, a que la pruebe, que pese a todo lo dicho SI que funciona. Eso si, usar cable apantallado y focos de buena calidad!!. Al que esté en las mismas condiciones que yo, en un ambiente con ruido por todos lados, cable malo y focos regulares, que idée una mejora y la comparta, o bien espere, que en breve modificaré el diseño del circuito para protejerlo contra todo tipo de ruido habido y por haber...

Muchas gracias por vuestros consejos compañeros, y un saludo !!!
"Camaradas, ni nuestro propio conocimiento conoce nuestro potencial"
- La caza del Octubre Rojo -

Desconectado stk500

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 4923
Re: Interfaz USB-DMX basada en DMX4ALL.
« Respuesta #8 en: 25 de Junio de 2009, 11:00:20 »
Pues cable de microfono que no son apantallado , no te lo aconsejo, se puede usar una cable de microfo apantallado siempre y cuanto no pase de 10 metro, pues es para eso, para evitar interferencia, te recomiendo que use cable de Digital 120 Ohm
 lee aqui     

What cable can be used?
The original and 1990 versions of the standard specify 120 ohm or 100 ohm 1– or 2–twisted pair shielded cable suitable for use with EIA–485 (120 ohm) and EIA–422 (100 ohm) electronics. Since DMX512 electronics are based on EIA–485, 120 ohm cable normally provides optimal performance. However, many installations are installed with 100 ohm (EIA–422) cable and perform flawlessly. The quality of the installation is probably more important than the distinction between 100 ohm and 120 ohm cable.

A common question is "can we use a good microphone cable?" The answer here is no. While there is some tolerance allowing for 100 ohm to 120 ohm cable, simply put, microphone cable is not at all suitable because of its high capacitance and incorrect characteristic impedance. It might work in some instances, but it is not appropriate for the electronics involved and it will fail at the most inopportune times.

EIA–485 (and thus DMX512) requires cabling between devices to be done in a point-to-point Daisy-Chain fashion. A star layout is not permitted (no ‘Y’s, stubs, or branches). If the physical requirements of a system do not allow for a daisy-chain installation, then the use of DMX512 splitter (sometimes referred to as repeaters or amplifiers) is required.

http://www.usitt.org/standards/DMX512_FAQ.html


Bien si usa opto acopladores es muchos mejor, tambien te aconsejo de usar Terminator si va a usar varios Aparatos conectados en serie, 
usando un conector Cannon XRL 3 pines , se pone una resistencia de 120 Ohm entre los pines 2 y 3, este Terminator lo pone en el ultimo de los aparatos que conecte. eso se hace para equilibrar las linea y evitar parasitos, como e´n tu casos, por otro lado te recomiendo no use cable USB largo y meno esos baratos que n o son apantallados sin filtro, te aconsejo asi o ambos lados con filtros http://www.masoportunidades.com.ar/aviso/3863638-cable-usb-con-filtro
Tambien esto lo digo para aquellos que usan RS485
Saludos

Desconectado Khronos_Nieto

  • Colaborador
  • PIC10
  • *****
  • Mensajes: 40
Re: Interfaz USB-DMX basada en DMX4ALL.
« Respuesta #9 en: 25 de Junio de 2009, 12:19:54 »
Gracias por la rápida respuesta Rafael, efectivamente la información que aportas de la normativa para cables DMX512 es clara y tajante en este aspecto, "no se puede usar cable de micrófono". Quizás en el caso que tu indicas, de un cable de 10 metros y que sea apantallado, puede ser viable. Pero en mi caso incumplo todas las normas, mis cables son de 20 metros y de 15 metros, y NINGUNO esta apantallado, por tanto no es válido.

Definitivamente voy a comprar cable nuevo, pero entre tanto voy a provar una cosa. He visto que mi cable tiene solo 3 hilos, dos para datos y el tercero masa, pero resulta que ese tercer cable une la masa con el propio chasis del conector, es decir, con la tierra. He leido en algún sitio que eso no es bueno, porque se crean bucles de tierra, y quizá sea por ahí por donde le entra todo el ruido. La prueba simplemente va a ser dejar el chasis sin conectar, es decir, que el cable no tendrá línea de tierra. No obstante es solo una prueba, el cable hay que cambiarlo.

Un saludo  :-/ :-/ :-/ !!
"Camaradas, ni nuestro propio conocimiento conoce nuestro potencial"
- La caza del Octubre Rojo -

Desconectado stk500

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 4923
Re: Interfaz USB-DMX basada en DMX4ALL.
« Respuesta #10 en: 25 de Junio de 2009, 14:31:10 »
pues ese cable de micro no es nada profesional, ya que en audio tambien hay que Aislar la tierra(Audio profesional no Hi-Fi) si le quita la tierra no pasa nada, claro es que cada aparatos tenga su toma tierra cada uno. exacto que son 3 hilo aunque ya se esta usando 5 pines
1=Gnd
2=Data -
3= Data+
4= Data- reserva para usar Full duple comunicacion
5=Data+ Reserva para usar full dupple comunicacion
 Acuerdaste de usar un terminator como te explique arriba

Suerte amigo

« Última modificación: 25 de Junio de 2009, 14:46:41 por stk500 »

Desconectado dcmdcm

  • PIC10
  • *
  • Mensajes: 1
Re: Interfaz USB-DMX basada en DMX4ALL.
« Respuesta #11 en: 31 de Julio de 2009, 17:44:10 »
hola, muy interesante el proyecto, pero por que solo ocupas 16 canales?

Desconectado Khronos_Nieto

  • Colaborador
  • PIC10
  • *****
  • Mensajes: 40
Re: Interfaz USB-DMX basada en DMX4ALL.
« Respuesta #12 en: 03 de Agosto de 2009, 17:53:59 »
Buenas compañero,

En realidad envío 100 canales pero sólo los 16 primeros contienen datos válidos, es decir, los datos recibidos desde el software a través de USB. El resto de 84 canales se fuerzan a cero.

El motivo de no enviar todos los canales es para poder hacer un refresco más rápido en el envío de datos. Investigando acerca del protocolo DMX512 ví que es flexible en cuanto al número de canales a enviar por lo que no es obligatorio enviar los 512. Lo que si es obligatorio es que la señal de BREAK, START y los bits individuales tengan su temporización exacta. Además entre inicio e inicio de tramas deben transcurrir como mínimo 1,152 ms. Con esto vemos que se permite un cierto márgen de variación en la tasa de refresco , y siempre cumpliendo con lo que dice el protocolo.

Teniendo en cuenta lo anterior la máxima tasa de refresco se conseguiría enviando tan solo 24 canales :
- 1 canal = 44 us
- Break = 88 us
- Marca = 8 us
Tiempo para enviar 24 canales = (24channel x 44us) + Break + Marca = 1,056 ms + 88 us + 8 us = 1,152 ms

Si se envía una trama detrás de otra sin dejar tiempo entre ellas se conseguiría refrescar un canal cada 1,152 ms, aproximadamente 868 veces por segundo.
Enviando los 512 canales tendríamos una tasa de refresco de tan solo 44 veces por segundo. Pero ójo!, nunca podemos enviar menos de 24 canales porque en ese caso no estaríamos respetando el tiempo mínimo entre inicio e inicio de tramas y los focos podrían no responder correctamente.

En mi caso particular sólo tengo 4 focos de 3 canales cada uno, que suman un total de 12 canales DMX. Por precaución envío 100 canales en vez de 24, que aun así mejoran el refresco notablemente (222 veces por segundo) respecto de enviar los 512 canales.

Además solo se procesan los 16 primeros canales, ya que no necesito más, y el resto hasta 100 lo relleno con valor fijo a cero.

Estas limitaciones hechas en el programa del PIC para "ganar velocidad" se pueden eliminar fácilmente modificando un par de parámetros en el código fuente en C que adjunto en el primer post.

Creo que no tiene mayor dificultad, pero si algún compañero lo necesita puedo modificarlo por él y colgarlo del foro.

Espero haber resuelto tu duda dcmdcm.

Un saludo !!!
"Camaradas, ni nuestro propio conocimiento conoce nuestro potencial"
- La caza del Octubre Rojo -

Desconectado hume_86

  • PIC10
  • *
  • Mensajes: 2
Re: Interfaz USB-DMX basada en DMX4ALL.
« Respuesta #13 en: 15 de Agosto de 2009, 02:44:28 »
Hola Khronos_Nieto, soy nuevo en el foro y la verdad me interesa mucho tu proyecto, tambien soy novato en los PICs y estoy intentando armar tu interface para mis luces, pero a la hora de compilar el programa, el compilador me dice que faltan algunos archivos como <pic18_usb.h> <PicUSB.h>  <usb.c> etc, queria saber donde puedo conseguirlos o si tu puedes subirlos.  Ahhh yo consegui un 18f4550  :? pero creo que puede andarme, solo dejo los demas puertos sin uso. Con respecto a los canales, comentaste que solo pueden usarse 16 canales? gracias y saludos

Desconectado jmorfeo

  • PIC10
  • *
  • Mensajes: 10
Re: Interfaz USB-DMX basada en DMX4ALL.
« Respuesta #14 en: 28 de Septiembre de 2009, 00:03:35 »
Muy buen trabajo Kronos, me gustaría seguir avanzando con tu desarrollo. Lo estuve probando con Proteus 7.4 SP3 y DmxControl 2.10 build 4 y funciona "correctamente" pero por ahí se tilda uno de los dos. Anda bien con el Hex que pasas pero intenté hacer un .COF con lo que pasaste, me lo compila con 4 warnings  y después en proteus no me funciona. Y lo más extraño es que el canal de muestra que debería salir por el puertoB es el canal2 dmx y no el 1... Yo creo que hay que resolver bien el tema de la conexión USB el resto parece correcto y con respecto a lo ruidos habría que probar en un placa bien fabricada y con varias protecciones para ver como funciona. Yo voy a comprar un PIC18F2550 así lo pruebo y voy a tratar de mejorar el programa con la parte de USB en CDC.
Hume, esos archivos que preguntas están en los drivers del CCS y otros en el include que pasó Khronos.
SAludos


 

anything