magnify
Home Proyectos Arduino Libreria arduino cuatro universos DMX
formats

Libreria arduino cuatro universos DMX

Despues de buscar en la web librerias o codigo DMX para Arduino y probarlos, no encontramos ninguna libreria que permitiera el uso de multiples universos DMX y que no utilizase los timers del arduino, por ello finalmente decidimos crearla.

*** ACTUALIZADO 07/07/2012 ***

Descargar la ultima version: Arduino four universes dmx library version 0.3

El esquema de conexiones lo podeis encontrar en:

Esquema Arduino cuatro universos DMX 512 shield.

Version 0.3 NOVEDADES
– Ya no es necesario desactivar y activar interrupciones durante la configuracion.
– Ya no es necesario modificar el archivo HarwareSerial.cpp del IDE Arduino.
– Soporte experimental para modos DMX no estandar, mas rapidos y con mas canales por universo:

  • DMX512     (250 kbaud  – 2 a 512  canales) Estandard USITT DMX-512 1990
  • DMX1024    (500 kbaud  – 2 a 1024 canales) Completamente no estandard – TEST ok
  • DMX2048    (1000 kbaud – 2 a 2048 canales) LLamado por los fabricantes DMX1000K?

– Eliminados leds indicadores tx – rx, si son necesarios se deberan implementar en el programa.
– Interrupcion de trama transmitida y recibida por cada universo, callback de usuario.

Problemas conocidos:
Al compilar nos aparece el error: ‘ArduinoDmxN’ was not declared in this scope:
Comprobar si esta configurado correctamente el tipo de placa en el IDE Arduino,  menu tools > board
(con Arduino nano solo se puede utilizar una USART = ArduinoDmx0 = USART0)
Errores al programar el Arduino:
Quitar el shield DMX para programar el Arduino y enchufarlo otra vez despues.

Parpadeo al controlar leds:
Si estamos manejando focos de leds puede que aparezca parpadeo debido a una frecuencia de refresco demasiado baja para ellos, deberemos utilizar menos canales por universo (por ejemplo 200 en vez de 512, para que aumente la frecuencia) y/o utilizar menos universos. Este es un problema bien conocido que afecta a todas las mesas y controladores que envian los 512 canales, aun estando a la maxima frecuencia de refresco de DMX (en torno a 44 Hz.)

Nota sobre la frecuencia de refresco:
El Arduino Nano y el Arduino mega utilizan un microcontrolador Atmel AVR de 8 bits a 16 Mhz, que nos impone una limitacion de recursos.
Por ejemplo 4 buffers en modo DMX1000K a 2048 canales cada uno consumiran TODA la memoria en un Arduino Mega 2560, por tanto es necesario tener claro lo que estamos haciendo.
Debemos tener tambien en cuenta que en la practica seguramente no podremos utilizar todos los universos con todos los canales si queremos mantener alta la frecuencia de refresco de las entradas y salidas dmx.

 

Instrucciones para instalar la libreria – version 0.3:

Copiar la carpeta de la libreria deskontrol “Dmx” a la carpeta arduino-XX.XX/libraries/

Instrucciones para utilizar la libreria:

Existen cuatro objetos ya creados llamados “ArduinoDmx0”, “ArduinoDmx1”, “ArduinoDmx2”, “ArduinoDmx3”, cada uno de estos objetos utiliza una USART del Arduino mega, con Arduino nano solo podremos utilizar “ArduinoDmx0” por que solo existe una USART.

A la hora de compilar tus programas, para economizar recursos del Arduino conviene comentar en el archivo “lib_dmx.h” las lineas con  “#define USE_UARTN” de las USARTs que no vayamos a utilizar. (solo en Arduino Mega), asi evitas que se compile codigo innecesario.

El uso es muy facil, las funciones que hay que utilizar son:

ArduinoDmxN.set_control_pin(PIN_NUMBER);  // -1 si no se usa pin de control

LLamando a esta funcion asignamos el numero del pin que se utilizara para controlar en el driver MAX485, si funciona como universo de entrada o de salida. (pin del arduino que conecta con los pines 2 y 3 del MAX485), puede ser cualquier pin de salida digital del Arduino.

ArduinoDmxN.set_rx_address(DMX_RX_ADDRESS);

LLamando a esta funcion asignamos la direccion de ENTRADA DMX para este universo, puede ser cualquier valor entre 1 y 510 (2046)*.

ArduinoDmxN.set_tx_address(DMX_TX_ADDRESS);

LLamando a esta funcion asignamos la direccion de SALIDA DMX para este universo, puede ser cualquier valor entre 1 y 510 (2046)*.

ArduinoDmxN.set_rx_channels(NUMBER_OF_CHANNELS);

LLamando a esta funcion asignamos el numero de canales de ENTRADA DMX para este universo, puede ser cualquier valor entre 2 y 512 (2048)*.

ArduinoDmxN.set_tx_channels(NUMBER_OF_CHANNELS);

LLamando a esta funcion asignamos el numero de canales de SALIDA DMX para este universo, puede ser cualquier valor entre 2 y 512 (2048)*.

Si quieres utilizar el modo sincrono:

ArduinoDmxN.attachTXInterrupt(my_TX_ISR_name);

LLamando a esta funcion asignamos el nombre de la funcion de callback que se activa cada vez que se termina de enviar una trama DMX en un universo. (evita perdida de tiempo en el bucle principal del programa)

ArduinoDmxN.attachRXInterrupt(my_RX_ISR_name);

LLamando a esta funcion asignamos el nombre de la funcion de callback que se activa cada vez que se termina de recibir una trama DMX en un universo. (evita perdida de tiempo en el bucle principal del programa)

Para empezar a transmitir o recibir DMX en un universo (por el momento no es posible de forma simultanea en el mismo universo), utilizaremos una de las siguientes funciones:

ArduinoDmxN.init_rx(DMX_MODE);   // *** nuevo parametro DMX_MODE ***

LLamando a esta funcion (una vez llamadas las funciones anteriores) iniciamos este universo para RECIBIR DMX.

ArduinoDmxN.init_tx(DMX_MODE);   // *** nuevo parametro DMX_MODE***

LLamando a esta funcion (una vez llamadas las funciones anteriores) iniciamos este universo para TRANSMITIR DMX.

Para escribir en la salida DMX:   ArduinoDmxN.TxBuffer[CHANNEL – 1] = Data;

Para leer la entrada DMX:         Data = ArduinoDmxN.RxBuffer[CHANNEL – 1];

* Esta libreria no utiliza ningun temporizador del arduino, quedando libres para otros usos.

De esta forma podemos utilizar hasta cuatro universos simultaneamente, funcionando cada uno como entrada o como salida DMX.

En los ejemplos de la libreria tenemos como:
– Recibir DMX en un solo universo.
– Mezclar 2 entradas DMX (2 universos) en uno, con parcheado de canales. 200+200 canales de entrada, 400 de salida.
– Mezclar 2 entradas DMX (2 universos) en uno, con prioridad del valor mas alto (HTP)
– Utilizar interrupciones para enviar o recibir de manera sincrona.
– Utilizar los modos DMX rapidos no estandard.

* 2048 canales con DMX1000K – 512 con DMX512

 

Descargar version anterior: Arduino cuatro universos DMX512 version 0.1 

 

Ejemplo aplicacion: Dimmerino – Dimmer modular economico para Arduino.

 

Cualquier sugerencia o mejora es bienvenida.

Toni Merino

 
 Share on Facebook Share on Twitter Share on Reddit Share on LinkedIn

4 Respuestas

  1. Hola, felicidades por el proyecto.

    ¿Hay algún software que use esta librería? ¿Driver o equivalencia de drivers para Windows?

    Imagino que en Pure Data o Max/Msp se podrá leer/escribir los datos con el interface normal pduino, no?

    Salud.

    • Toni Merino

      Hola.

      >> ¿Hay algún software que use esta librería? ¿Driver o equivalencia de drivers para Windows?
      >> Imagino que en Pure Data o Max/Msp se podrá leer/escribir los datos con el interface normal pduino, no?

      La libreria solo gestiona las entradas y salidas DMX, habria que añadir en el programa del Arduino la parte de codigo para Pure Data y utilizar el Arduino mega (los otros solo tienen una USART y se necesitarian 2, el Arduino utiliza una para la comunicacion por USB)
      Nunca he utilizado Pure data…

      Yo veo mejor opcion utilizar art-net que USB, con art-net se evita el tener que utilizar un driver especifico, se tiene compatilidad con cualquier software o consola que lo soporte (cada vez mas), y la velocidad y numero de universos que se pueden enviar por un cable (256 con Art-Net 2 y 32768 con Art-Net 3) me han hecho descartar la idea del USB.
      Tenia en mente utilizar un Arduino mega para hacer algo como el Enttec USB-Pro con tres universos.

      Bueno, siempre habra alguien que lleve una maleta de interfaces USB y una manguera de PA para conectarlos 😉

  2. Hola,

    sí coincido contigo en que es mejor ArtNet, pero parece que la gente se ha acostumbrado al USB y todavía no se fían de ArtNet, o no se quieren complicar con las IP’s y la red…

    Realmente quien usa estos interfaces tampoco necesitan más de un universo, compañías de teatro, eventos pequeños, casas de cultura y pubs,…

    Salud.

    • Santi yo estoy migrando los clubes donde trabajo a Artnet, es mucho mas fiable, y si la red esta bien seteada, en una supuesta desconeccion del utp, al reconectarlo, tarda solo 1,2 segundos en volver a su estado normal. Intenta este experimento desconectado un usb con freestyler o sunlite 😛

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *