Autor Tema: Receptor DMX (DMX512)  (Leído 129785 veces)

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

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Receptor DMX (DMX512)
« en: 14 de Diciembre de 2007, 04:14:21 »
El ReceptorDMX que os presento tiene un objetivo puramente experimental, y sólo sirve para eso, para probar a interpretar el protocolo DMX512 y mostrar en su display el valor del canal seleccionado en cada momento.



DISEÑO
El circuito está compuesto por un PIC como corazón, un ULN2003 para los displays y un MAX485 para el bus DMX. He elegido un 18F2550 porque es el que tenía a mano, pero el software podría modificarse para entrar en un micro mucho más peque porque ocupa muy poquito.

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 Duty cicle 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. Yo he añadido Vdd porque me permite también alimentar algún circuito auxiliar que pueda conectar al bus, aunque no es imprescindible.



USO
Utilizar el dispositivo es muy fácil. Al encender el dispositivo ya se pone internamente a capturar toda la trama que le llegue por el conector DMX. En el display aparece la palabra "OFF" mientras el usuario no seleccione ningún 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.

En cuanto lo tenga medianamente visible pondré por aquí el esquema y el código del PIC. De momento, os dejo un vídeo del funcionamiento para ir abriendo boca.


Desconectado stk500

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 4919
Re: Receptor DMX (DMX512)
« Respuesta #1 en: 14 de Diciembre de 2007, 04:47:57 »
 :-/ :-/ :-/ super genial maestros  :-/ :-/ :-/
venga ya sube los planos que me pongo a eso  :D :D
Guao manolo  :-/ :-/ :-/ :-/
yo ya decia que eres un Genio  :-/ :-/ :-/

Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: Receptor DMX (DMX512)
« Respuesta #2 en: 14 de Diciembre de 2007, 09:12:06 »
Pues se ve muy muy bonito!  :-/

Desconectado Algec

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 974
Re: Receptor DMX (DMX512)
« Respuesta #3 en: 14 de Diciembre de 2007, 09:28:12 »
Muy interesante el proyecto, cuando lo subes?

Desconectado ESTECA55

  • PIC24H
  • ******
  • Mensajes: 1404
Re: Receptor DMX (DMX512)
« Respuesta #4 en: 14 de Diciembre de 2007, 09:33:10 »
Muy bueno el Proyecto!

Saludos
Hay que esforzarse por ser el mejor, no creerse el mejor

Desconectado AKENAFAB

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3227
Re: Receptor DMX (DMX512)
« Respuesta #5 en: 14 de Diciembre de 2007, 09:33:40 »
Que bien ha quedado  !!

¿En que software has creado la aplicacion de la pc?



Espero tener tiempo para dedicarle a este protocolo, muy padre te ha quedado.
 
Me han gustado tambien las superpilas. :D se han pasado con el nombre  :D
No las he visto por aca.

Hasta luego




Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Receptor DMX (DMX512)
« Respuesta #6 en: 14 de Diciembre de 2007, 13:27:22 »


¿Donde has comprado ese maravilloso conector con soporte para serigrafía?  :D :D :D :D

Un saludo
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Receptor DMX (DMX512)
« Respuesta #7 en: 15 de Diciembre de 2007, 03:00:23 »
Gracias por vuestras palabras. (Akenafab, esas pilas son las que venden en la cadena de supermercados Mercadona, seguro que muchos de mis compatriotas las conocen. Jesús, el conector no lo venden en Mercadona :D)

Ya he subido el código fuente y el esquemático, que podéis descargar aquí: Descargas de ReceptorDMX



Del código fuente pegaré aquí sólo 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 en el link que puse antes. El código está comentado, así que me ahorro explicarlo.

Si necesitáis algo más, no tenéis más que decirlo.

Código: C
  1. /************************************************************************
  2. *  Interrupción RDA: dato recibido por la USART                         *
  3. *  Esta interrupción se activa cada vez que se recibe un dato en la     *
  4. *  USART. Mediante el control de una máquina de estados se determina    *
  5. *  la validez y el significado del dato recibido, y se obra en          *
  6. *  consecuencia.                                                        *
  7. ************************************************************************/
  8.  
  9. #int_rda
  10. void Dato_Recibido_USART(void)
  11. {
  12.         while (RCIF) // ejecutamos mientras haya un dato pendiente de procesar
  13.         {
  14.          // Hacemos una copia del registro RCSTA porque sus bits cambian de valor
  15.          // al leer RCREG y modificar CREN
  16.          Copia_RCSTA.registro = RCSTA;
  17.  
  18.          // En RCREG está el dato que acaba de recibir la USART
  19.          DatoRX = RCREG;
  20.  
  21.          // Si se reciben más de 3 bytes sin haberlos procesado, se produce un error
  22.          // de Overrun. En este caso, se borra el error reiniciando CREN y dejamos
  23.          // la interrupción preparada para procesar la siguiente trama DMX
  24.          if (Copia_RCSTA.bits.OERR)
  25.          {
  26.            CREN=0;
  27.            CREN=1;
  28.            DMX_Estado = DMX_ESPERA_BYTE;
  29.            return;
  30.          }
  31.  
  32.          // Máquina de estados
  33.          switch (DMX_Estado)
  34.          {
  35.            case DMX_ESPERA_BYTE:        // si estamos en este estado y hay error FRAME
  36.                 // es que nos ha pillado en medio de un Byte. Hay que seguir esperando
  37.                 // hasta que desaparezca el error.
  38.              if (!Copia_RCSTA.bits.FERR)
  39.                                 // Ha llegado un byte. Ahora esperaremos la señal Break
  40.                DMX_Estado = DMX_ESPERA_BREAK;
  41.              break;
  42.  
  43.  
  44.            case DMX_ESPERA_BREAK:       // estamos esperando la señal Break
  45.              // Esta señal se identifica porque aparece el error de Frame
  46.              if (Copia_RCSTA.bits.FERR)
  47.                // Tras recibir el error de Break, hay que esperar un byte de valor 0
  48.                if (!DatoRX)
  49.                  DMX_Estado = DMX_ESPERA_START;
  50.              break;
  51.            case DMX_ESPERA_START: // ya hemos recibido el Break y ahora hay que
  52.                  // esperar un Byte con valor 0, que será la señal de Start
  53.              // Mientras tanto, si recibimos un error de Frame, hay que volver a
  54.              // empezar para recibir la señal de comienzo de trama.
  55.              if (Copia_RCSTA.bits.FERR)
  56.                  DMX_Estado = DMX_ESPERA_BYTE;
  57.              else {
  58.                if (!DatoRX)
  59.                {
  60.                  // Llegados a este punto, ya hemos recibido el Byte Start=0
  61.                  // y comenzamos la trama de valores DMX.
  62.                  DMX_Indice = 0;
  63.                  DMX_Estado = DMX_RECEPCION_DATOS;
  64.                } else
  65.             // Si el dato recibido no es 0, volvemos a empezar
  66.                  DMX_Estado = DMX_ESPERA_BREAK;
  67.              }
  68.              break;
  69.            case DMX_RECEPCION_DATOS:
  70.              // En este estado estamos recibiendo la trama de datos DMX
  71.         // Si se detecta un error de Frame es que ha habido un error y estamos
  72.         // al principio
  73.              if (Copia_RCSTA.bits.FERR)
  74.                if (!DatoRX)
  75.                  DMX_Estado = DMX_ESPERA_START;
  76.                else
  77.                  DMX_Estado = DMX_ESPERA_BYTE;
  78.              else
  79.              {
  80.                // Almacenamos el dato recibido en nuestro array
  81.                TramaDMX[DMX_Indice++] = DatoRX;
  82.  
  83.                // Si ha llegado al final de la capacidad, cambiamos al estado de espera
  84.           // de nueva trama
  85.                if (DMX_Indice >= TotalCanales)
  86.                  DMX_Estado = DMX_ESPERA_BREAK;
  87.              }
  88.              break;
  89.    }
  90. }
  91. return;
  92. }

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Receptor DMX (DMX512)
« Respuesta #8 en: 16 de Diciembre de 2007, 04:03:22 »
El protocolo DMX es muy utilizado en sistemas de iluminación y efectos especiales para eventos, discotecas, escenarios, ...

Consiste en un sistema de muy fácil instalación, ya que permite encadenar muchos dispositivos esclavos a un cable de sólo 3 hilos:
- DMX+
- DMX-
- GND

La información se divide en 512 canales. Cada canal contiene un byte. Los dispositivos que están conectados al bus, están identificados con uno o más canales, y sólo atenderán a las instrucciones que les lleguen en esos canales. Lo habitual es que un dispositivo utilice varios de ellos, 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.

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


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

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Receptor DMX (DMX512)
« Respuesta #9 en: 16 de Diciembre de 2007, 04:30:03 »
Obviamente, para la realización del proyecto, es conveniente contar con un emisor DMX para las pruebas. En mi caso no me comí mucho el coco y busqué algo que fuera simple y que ya estuviera hecho.

Encontré esta web www.freedmx.com y monté su proyecto Manolator 256 (sí, el autor también se llama Manolo y ha tenido los santos cojones de llamar Manolator a su proyecto  :D )
El Manolator 256 es un circuito sencillo, basado en un PIC 16F88 y un MAX485 que se conectan al puerto paralelo y nos generan las señales adecuadas:


Es una interface bastante estandarizada y se encuentra disponible en muchas aplicaciones comerciales y gratuitas. Por cierto, hay verdaderas virguerías en interfaces para DMX; recomiendo echar un vistazo a este link: MORE

Yo preferí utilizar esta, porque es simple pero perfectamente válida, y es la que se observa en el vídeo:


Hay alguna que enamora:


Y sin duda la más potente y recomendable para usos complejos: FreeStyler

Desconectado stk500

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 4919
Re: Receptor DMX (DMX512)
« Respuesta #10 en: 18 de Diciembre de 2007, 17:20:01 »
Hola Manolo!
Estoy compilando el Receptor com el Mplab y CCS y claro use el Asistente para eso pero me da este error donde yo pensba que era el
 setup_mplab_plugin la cual lo instale, yo uso la Version CCS 4,58  aqui te pongo lo que me sale
Clean: Deleting intermediary and output files.
Clean Warning: File "C:\Manolo_receptor\ReceptorDMX.o" doesn't exist.
Clean: Deleted file "ReceptorDMX.ERR".
Clean: Deleted file "C:\Manolo_receptor\ReceptorDMX.mcs".
Clean: Done.
Executing: "C:\Programme\Microchip\Third Party\PICC\CCSC.EXE" +FH "ReceptorDMX.c" +DF +LN +T +A +M +Z +Y=9 +EA
Error: The selected compiler: "PCH" is not installed on this PC
Halting build on first failure as requested.
BUILD FAILED: Tue Dec 18 20:55:13 2007

una ayudita se agradece  :mrgreen:

Desconectado Duende_Azul

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 902
Re: Receptor DMX (DMX512)
« Respuesta #11 en: 18 de Diciembre de 2007, 19:47:34 »
Revisa si tienes bien asignada la ruta al ejecutable del compilador en "Project/set language tool locations"

Desconectado stk500

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 4919
Re: Receptor DMX (DMX512)
« Respuesta #12 en: 19 de Diciembre de 2007, 02:16:29 »
Revisa si tienes bien asignada la ruta al ejecutable del compilador en "Project/set language tool locations"
Gracias Amigo Duende_azul!
he estado mirando y probando y nada!en Project/Set Language tengo la opcion CCS C Compilier for Pic etc,etc aqui me salen todos Tipo de Soportes, siendo asi cuando los compilo con CCS solo no me da ningun Error :5] Quizas sea algo que no he visto en la Configuracion Tools?
Clean: Deleting intermediary and output files.
Clean: Done.
Executing: "C:\Programme\Microchip\Third Party\PICC\CCSC.EXE" +FH "ReceptorDMX.c" +DF +LN +T +A +M +Z +Y=9 +EA
Error: The selected compiler: "PCH" is not installed on this PC
Halting build on first failure as requested.
BUILD FAILED: Wed Dec 19 06:18:39 2007
ya no se donde buscar  :8} :8} :8}

« Última modificación: 19 de Diciembre de 2007, 02:24:07 por stk500 »

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Receptor DMX (DMX512)
« Respuesta #13 en: 19 de Diciembre de 2007, 02:37:28 »
Todavía no ha salido ninguna versión de CCS mejor que la 3.249, así que compila con ella y verás como va fino, fino.

Desconectado stk500

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 4919
Re: Receptor DMX (DMX512)
« Respuesta #14 en: 19 de Diciembre de 2007, 03:38:43 »
Todavía no ha salido ninguna versión de CCS mejor que la 3.249, así que compila con ella y verás como va fino, fino.

Gracias manolo por tu respuesta! que rapido reacionan qui  :D :D
bien buscando en el Baul de mis recuerdo de mi otras pc :D encontre esta version, pero ya ni se como funciona :shock:
claro es que como es vieja me pide la version 6.00 de Mplab, siendo asi cuando activo el Mplab no me aprece en el Tools de lenguaje ninguna Version de CCS  :shock: :shock: osea que esta licencia de CCS son tremenda   :D :D con tantas que me han mandados el Soport de CCS y debo instalar una vieja para esto :D :D :D :D


 

anything