Receptor para el protocolo DMX512

De Ucontrol
Saltar a: navegación, buscar

<keywords content="TTL 74Ls164N, electronica, circuito, pic, NE555, PIC BASIC, PIC SIMULATOR IDE, esquema, circuito impreso, proyecto, gratis, download, programa, CMOS, pin, e/s, i/o, ucontrol, PIC, 16F628a, 16f84a" /> <center>


Inicio Foro Revista uControl Circuiteca Microcontroladores Electrónica Básica Herramientas y Software Tutoriales Colaboradores Enlaces
¿Ya descargaste los ejemplares GRATUITOS de la Revista uControl? ¡No te los pierdas!.
<linkedimage>

wikipage=Dado electrónico con PIC tooltip=Dado electrónico con PIC img_src=Image:dado100.jpg img_width=150px img_alt=Dado electrónico con PIC </linkedimage>

Dado electrónico
<linkedimage>

wikipage=Como trucar un servo tooltip=Como trucar un servo img_src=Image:trucaservo150.jpg img_width=150px img_alt=Como trucar un servo </linkedimage>

¿Como trucar un servo?
<linkedimage>

wikipage=Comunicación inalámbrica entre PICs tooltip=Comunicación inalámbrica entre PICs img_src=Image:TXRX150.jpg img_width=150px img_alt=Comunicación inalámbrica entre PICs </linkedimage>

Comunicación inalámbrica
<linkedimage>

wikipage=CCS - Libreria de gráficos para GLCD K0108 tooltip=CCS - Libreria de gráficos para GLCD K0108 img_src=Image:GLCD-100.gif img_width=150px img_alt=CCS - Libreria de gráficos para GLCD K0108 </linkedimage>

Gráficos con CCS
<linkedimage>

wikipage=Funcionamiento de una matriz de LEDs tooltip=Funcionamiento de una matriz de LEDs img_src=Image:GNUxx.jpg img_width=150px img_alt=Funcionamiento de una matriz de LEDs </linkedimage>

Carteles de LEDs
Foroizq.jpg
Todos los articulos y proyectos de uControl tienen su lugar en el foro. Si tienes dudas o comentarios, busca o crea el hilo correspondiente, y tendrás una rapida respuesta.
Foroder.jpg
Receptor para el protocolo DMX512.

Introducción

Receptor para el protocolo DMX512

El protocolo DMX512 es el estándar por excelencia para el intercambio de información entre el equipamiento de tecnologías teatrales. De diseño sencillo, fácil uso y gran difusión en el mercado de tecnología para el entretenimiento, DMX512 llegó para

Contenido


Nivel Lógico

El protocolo DMX512 se basa en la utilización de "canales" para transmitir comandos a los dispositivos receptores. DMX512 tiene un límite de 512 canales por universo (DMX universe), y cada canal ocupa un byte. Por lo que el valor transmitido por canal se puede regular desde 0 hasta 255: son los "valores" DMX (DMX values). Cada trama DMX512 lleva los 512 bytes correspondientes al dato de cada canal, independientemente de que se utilicen o no todos los canales. Las mesas profesionales que usan DMX pueden soportar hasta 8 universos DMX y con la tecnología EtherDMX estos pueden ser ampliados aún más.

En DMX512 se transmiten los datos de modo asincrónico, a 250Kbit por segundo. Esto significa que las señales del transmisor y de los receptores no están en sincronía, pero los receptores se sincronizan al mando de la consola cada vez que ésta envía una determinada señal.

Básicamente, y aunque luego lo veremos en profundidad, la trama DMX completa se compone de una señal de sincronización y a continuación los 512 bytes de información que se corresponden con los 512 valores DMX. Los receptores reciben toda la trama, pero procesan sólo la información relativa a los canales para los que están configurados.

La información se transmite siguiendo este diagrama de tiempos:


DMX01.png
Diagrama de señales y tiempos del protocolo DMX512.


Como se observa, la trama completa tiene varias partes:

  • señal BREAK: es un nivel bajo con un mínimo de 88us
  • marca tras BREAK: nivel alto con un mínimo de 8us
  • byte Start: el byte Start siempre vale 0
  • tiempo entre bytes: es un nivel alto que puede llegar hasta 1 s
  • trama de 512 bytes: aquí aparecen los datos de los 512 canales

Cada byte se transmite con:

  • un bit de start a nivel bajo
  • los 8 bits de datos
  • dos bits de stop a nivel alto

De esta manera, algunas consideraciones de tiempo respecto al protocolo son las siguientes:

  • duración mínima para una trama completa: 22,7ms
  • máxima velocidad de refresco de la información: 44 veces por segundo

Instalaciones DMX

Topología

Con DMX512 se pueden alcanzar distancias de comunicación, entre los extremos del BUS, de hasta 500m. Sin embargo esta distancia es para un caso más o menos ideal, pero en la práctica es raro encontrar líneas de transmisión con más de 100m de longitud. Si fuese necesario aumentar las distancias es preciso utilizar buffers o splitters.


DMX02.png
Topología de una instalación DMX512.


Habitualmente, los dispositivos DMX tienen una entrada y una salida, de manera que es fácil configurarlos en cadena, uno tras otro. Es obligatorio colocar en los extremos del BUS una resistencia de terminación de 120ohm 1/4W, entre los conductores de las señales de dato. Olvidar colocar esta resistencia suele ser causa frecuente de averías en instalaciones DMX o fallas en la comunicación.


Cables y conectores

Los cables habitualmente utilizados en DMX son los de par trenzado, dado que ofrecen una mayor inmunidad al ruido. Como hemos comentado antes, ambos hilos reciben la misma cantidad de ruido y ello permite a los amplificadores diferenciales eliminarlo para quedarse con la información válida.

Los conectores estándar son los XLR, de los que hay dos modelos: con 3 o con 5 pines. Antiguamente se utilizaban mucho los de 3, pero en la actualidad son más frecuentes los de 5 pines.


DMX03.png
Conectores XLR de 5 pines.
Éstos son los más utilizados en las instalaciones DMX512.


La configuración de los pines 1 al 3 en un cable de 3 pines es la misma a la de los pines 1 al 3 en un cable de 5 pines.

Un cable de 5 pines está configurado de la siguiente forma:

Pin 1 = señal de referencia = revestimiento del cable ( malla o pantalla ); Pin 2 = señal invertida = "-" polo negativo; Pin 3 = señal = "+" polo positivo; Pin 4 = opcional (la utilización de este pin varía de acuerdo con el aparato en operación y los fabricantes nunca llegaron a un acuerdo sobre cómo utilizarlo. La intención original era tener realimentación de los aparatos y establecer son estos un enlace bidireccional). Pin 5 = opcional (la utilización de este pin varía de acuerdo con el aparato en operación y los fabricantes nunca llegaron a un acuerdo sobre cómo utilizarlo. La intención original era tener realimentación de los aparatos y establecer son estos un enlace bidireccional).


Si bien es cierto que en la industria del entretenimiento el cable del tipo XLR es el cable estándar, en algunas aplicaciones por motivos prácticos y estéticos es muy común la utilizacíón de cables del tipo UTP Cat5e (cable de red).

El armazón de los dispositivos nunca se conecta al pin 1, la señal de referencia, ya que podría provocarse un anillo de masas y afectar el correcto funcionamiento del sistema. Sin entrar al tema de los fenómenos causados por una equivocada conexión a tierra, de la funda defensiva del cable de transmisión de datos, es importante decir que una eventual conexión a tierra de este conductor se puede realizar en un sólo punto de todo el sistema y que normalmente este procedimiento se realiza sólo en las instalaciones fijas.

De todas maneras, es una buena práctica que los equipos dispongan en su entrada DMX de optoacopladores que eliminen la posibilidad de contacto eléctrico entre el bus DMX y la circuitería del dispositivo. La mayoría de los equipos profesionales disponen de aislamiento optoacoplado.

Dirección DMX

Puesto que en el bus DMX viaja la información de 512 canales, cada dispositivo debe ser configurado para “escuchar” los que necesite. Cuando un dispositivo necesita la utilización de varios canales, suele configurarse sólo la dirección del primero de ellos, quedando reservados para dicho dispositivo todos los que necesite a partir del primero.

Lo habitual es que un dispositivo utilice varios canales, y se identifique físicamente con el código del canal de inicio. De esta manera, si un cabezal proyector utiliza, por ejemplo, 16 canales, y está identificado con el código 128, automáticamente reservará los canales 128 a 143 para sí mismo. Lo único que hay que tener en cuenta es que las direcciones DMX de los aparatos nunca deben estar superpuestas.

Construyamos un receptor DMX

El ReceptorDMX que presentamos es de carácter puramente experimental, y sólo sirve para probar a interpretar el protocolo DMX512 y mostrar en su display el valor del canal seleccionado en cada momento.



Diseño

DMX04.jpg
Nuestro receptor DMX512.


El circuito está compuesto por un PIC, como corazón, un arreglo de transistores Darlington ULN2803 para las lámparas de siete segmentos y un driver MAX485 para el bus DMX. Se ha utilizado un PIC18F2550, pero el software podría compilarse para uno mucho más pequeño porque requiere muy poca memoria de programa.

El PIC almacena en su RAM los 512 valores de todos los canales DMX, lo que le permite “absorber” la información de la trama completa. El canal DMX se selecciona mediante el teclado matricial.

Hay otro dispositivo de salida: el LED. Ese LED está gestionado por PWM y su ciclo útil viene dado por el dato DMX del canal seleccionado. En este caso, no hay esperas: la información se muestra en tiempo real a la vez que se está escribiendo el canal seleccionado.

El conector DMX sólo necesita tres señales: DMX+, DMX- y GND. Se ha añadido Vdd porque permite alimentar algún circuito auxiliar que se pueda conectar al bus, aunque no es imprescindible.


DMX05.jpg
El receptor DMX512 con el teclado y las baterías de alimentación.

Uso

Utilizar el dispositivo es muy fácil. Al encender el dispositivo este comienza a capturar todas las tramas que le lleguen por el conector DMX. En el display aparece la palabra "OFF", hasta que el usuario seleccione un canal con el teclado matricial.

A medida que se va pulsando el teclado, el display va mostrando el canal seleccionado. Mientras se toca el teclado, parpadean los puntos decimales de los displays para advertir que estamos viendo el selector de canal, en lugar del dato DMX. Al cabo de unos segundos la información aparece en los displays. El valor del canal seleccionado también se representa en el led, cuya intensidad es regulada mediante PWM.

Puesto que el dispositivo memoriza toda la trama (512 bytes) puede ser desconectado del bus y examinado a posteriori como si estuviera físicamente conectado.

Construcción

La construcción del receptor se basa en este esquema:


DMX06.gif
Circuito electrónico del receptor DMX512.


Del código fuente, sólo veremos aquí la rutina de atención a la interrupción de la USART, que es donde está el meollo de la cuestión. El programa completo está disponible para descargar; las explicaciones del código están en los comentarios.

/************************************************************************
*  Interrupción RDA: dato recibido por la USART                         *
*  Esta interrupción se activa cada vez que se recibe un dato en la     *
*  USART. Mediante el control de una máquina de estados se determina    *
*  la validez y el significado del dato recibido, y se obra en          *
*  consecuencia.                                                        *
*                        Nocturno – 2008                www.micropic.es *
************************************************************************/
#int_rda
void Dato_Recibido_USART(void)
{
 while (RCIF) // ejecutamos mientras haya un dato pendiente de procesar
 {
  // Hacemos una copia del registro RCSTA porque sus bits cambian de valor
  // al leer RCREG y modificar CREN
  Copia_RCSTA.registro = RCSTA;
  // En RCREG está el dato que acaba de recibir la USART
  DatoRX = RCREG;
  // Si se reciben más de 3 bytes sin haberlos procesado, se produce un error
  // de Overrun. En este caso, se borra el error reiniciando CREN y dejamos
  // la interrupción preparada para procesar la siguiente trama DMX
  if (Copia_RCSTA.bits.OERR)
  {
    CREN=0;
    CREN=1;
    DMX_Estado = DMX_ESPERA_BYTE;
    return;
  }
  // Máquina de estados
  switch (DMX_Estado)
  {
    case DMX_ESPERA_BYTE: // si estamos en este estado y hay error FRAME
  // es que nos ha pillado en medio de un Byte. Hay que seguir esperando
  // hasta que desaparezca el error.
      if (!Copia_RCSTA.bits.FERR)
      // Ha llegado un byte. Ahora esperaremos la señal Break
        DMX_Estado = DMX_ESPERA_BREAK;
      break;

    case DMX_ESPERA_BREAK: // estamos esperando la señal Break
      // Esta señal se identifica porque aparece el error de Frame
      if (Copia_RCSTA.bits.FERR)
        // Tras recibir el error de Break, hay que esperar un byte de valor 0
        if (!DatoRX)
          DMX_Estado = DMX_ESPERA_START;
      break;
    case DMX_ESPERA_START: // ya hemos recibido el Break y ahora hay que
      // esperar un Byte con valor 0, que será la señal de Start
      // Mientras tanto, si recibimos un error de Frame, hay que volver a
      // empezar para recibir la señal de comienzo de trama.
      if (Copia_RCSTA.bits.FERR)
          DMX_Estado = DMX_ESPERA_BYTE;
      else {
        if (!DatoRX)
        {
          // Llegados a este punto, ya hemos recibido el Byte Start=0
          // y comenzamos la trama de valores DMX.
          DMX_Indice = 0;
          DMX_Estado = DMX_RECEPCION_DATOS;
        } else
            // Si el dato recibido no es 0, volvemos a empezar
          DMX_Estado = DMX_ESPERA_BREAK;
      }
      break;
    case DMX_RECEPCION_DATOS:
      // En este estado estamos recibiendo la trama de datos DMX
        // Si se detecta un error de Frame es que ha habido un error y estamos
        // al principio
      if (Copia_RCSTA.bits.FERR)
        if (!DatoRX)
          DMX_Estado = DMX_ESPERA_START;
        else
          DMX_Estado = DMX_ESPERA_BYTE;
      else
      {
        // Almacenamos el dato recibido en nuestro array
        TramaDMX[DMX_Indice++] = DatoRX;
        // Si ha llegado al final de la capacidad, cambiamos al estado de espera
          // de nueva trama
        if (DMX_Indice >= TotalCanales)
          DMX_Estado = DMX_ESPERA_BREAK;
      }
      break;
   }
}
return;
}


Emisor DMX

Para comprobar que nuestro receptor funciona adecuadamente, es aconsejable contar con emisor DMX512. Si no se dispone de un dispositivo de prueba, es posible construir el receptor Manolator 256, cuyos esquemas y método de construcción se encuentra alojado en www.freedmx.com. También deben descargarse alguno de los programas de emulación de consolas DMX, que están alojados en FreeDMX.


Este articulo forma parte de la Revista uControl #2
<linkedimage>

wikipage=Revista_Numero_0002 tooltip=uControl Revista #2 img_src=Image:UCR002Portada.jpg img_width=100px img_alt=uControl Revista #2

</linkedimage>

En este número comenzamos a escribir el software que hará de nuestro Relojito un proyecto terminado. Aprovechamos para aprender un poco más sobre programación, y presentamos las rutinas encargadas de controlar su funcionamiento en BASIC y CCS.

También aprenderemos a construir un oscilador de frecuencia variable, en el rango de los MHz. que será mucha utilidad en nuestro banco de trabajo. Los hemos bautizado "u-Scilador", el oscilador de uControl.

Puedes consultar el índice completo desde aquí.

Puedes descargar la Revista uControl desde aquí, de forma totalmente gratuita.

Autor

Manuel.jpg Datos del Autor
Nombre: Manuel Jiménez Franco
email: nocturno@micropic.es
Ver los artículos de este autor. Página Web del autor.
</center>
Cclicence.png

Este contenido se rige por la licencia de Creative Commons "Licencia Creative Commons Atribución-No Comercial-Sin Obras Derivadas 3.0". Para más información, véase la licencia en su forma reducida y completa.

Herramientas personales