TODOPIC

Mecatrónica => DMX512 - Diseños y Proyectos => Mensaje iniciado por: alogic.on en 11 de Diciembre de 2007, 07:17:56

Título: recopilando info. protocolo DMX
Publicado por: alogic.on en 11 de Diciembre de 2007, 07:17:56
hola
aqui estoy enfrascado en otro cacharro,  :mrgreen: he visto unas cuantas webs en las que desarrollan proyectos para manejar leds RGB con el protocolo DMX512 yo no he echo nada todavía con este tipo de leds ni con DMX, ya el nombre de DMX512 me sugiere que utiliza tramas de 512 ordenes, dos bytes, transmitidas por la usart, sincrona o asincrona a X bauds esto tiene que estar especificado en algun lugar que a mi, google me ha escondido, tampoco localizo una lista con lo que hace cada orden, por ejemplo una primera trama de dos bytes 0x00,0x00 sería el canal cero, y la siguiente trama de dos bytes dice a que frecuencia parapadea un led RGB,tambien habra tramas de canal on/off +256 on, -256 off "corregidme", por favor que todo esto son conjeturas, que no quiero hacer un nuevo protocolo antes de conocer el que existe  :D volviendo al tema los leds RGB se manejan por PWM a que frecuencia trabajan estos leds o mejor dicho a que frecuencia les hace trabajar el DMX, esto será un tipo de estandar o cada fabricante lo hace a gusto¿?¿?.  :?

entonces recapitulando conjeturas voy a usar en el proyecto el pic que tengo a mano con usart , un 16f877a, para las salidas de los leds estaba pensando en ampliar con registros de desplazamiento de esta forma seria mas facil ampliar el numero de canales añadiendo poco codigo, pero a mas salidas reduce el tiempo de pulsos ademas lo logico seria hacerlo con los perifericos de PWM pero estos son solo dos y se quedan cortos .... alguna idea , enfoque o punto de vista diferente para afrontar este muro de dudas  :-)

una explicacion del programa en el que pienso, serian 8 registros para 8 leds o como son tramas de 512 valores dos bytes por led, el programa iria decf cada registro, al llegar a cero pone a uno o a cero el correspondiente bit  y cada vez que de la vuelta envia a los registros de desplazamiento, los bits del registro que estamos haciendo bailar. pensad en que todo esto son conjeturas dudas y pensamientos propios, no se si le va a dar tiempo al micro, ha recibir la trama de datos, dar la vuelta al programa decrementando los registros y enviar los datos en serie, antes de comerse el tiempo de los ciclos en los que deben de titilar los leds  :? :? ya podria ser DMX256  :D

alguna idea o enlace a la santa biblia de DMx512 en el que expliquen de forma tecnica en que se basa el protocolo

un saludo y gracias
Título: Re: recopilando info. protocolo DMX
Publicado por: Nocturno en 11 de Diciembre de 2007, 07:24:42
Yo estoy terminando de montar un proyectito receptor DMX con PIC que publicaré en cuanto esté acabado. Te recomiendo que eches un vistazo a esta nota de aplicación donde viene todo muy bien explicadito:
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1824&appnote=en527825
Título: Re: recopilando info. protocolo DMX
Publicado por: alogic.on en 11 de Diciembre de 2007, 07:42:10
Bien¡¡ me parece que es lo que necesitaba  :-/ voy a leerlo, me conto STK500 que estabais haciendo algo de eso  :mrgreen: pero como actuaba de intermediario y yo que no conozco el protocolo pense que hera mejor postearlo, empezando por aclarar mis dudas para conocer como funciona antes de abrir ningun proyecto en el foro, cuando empeceis a postear ya lo leere, mientras me quedo por aqui en el banquillo de suplentes  :D recopilando info y estudiando un ratito

otro enlace para C Topic (http://www.ccsinfo.com/forum/viewtopic.php?t=17513&highlight=dmx)

un saludo y gracias
Título: Re: recopilando info. protocolo DMX
Publicado por: stk500 en 11 de Diciembre de 2007, 19:05:01
Hola JJC40!
Muchas gracias por tu Tutorial lo encuentro Genial,
te podria pasar por aca y asi quizas me ayude con el dichoso DmxPack
http://www.todopic.com.ar/foros/index.php?topic=19450.0
y aqui esta mis projectos
http://www.todopic.com.ar/foros/index.php?topic=18862.0
Se te agradece tu gran ayudas
Gracias de antemano amigo :mrgreen:
Título: Re: recopilando info. protocolo DMX
Publicado por: alogic.on en 12 de Diciembre de 2007, 14:40:36
vamos ya ¡¡¡ ahora si que si, tendré que incar codos para manejar asi la usart pero algo podremos hacer :mrgreen:

una pequeña aclaracion en el caso del controlador. supongamos un solo canal para empezar, un potenciometro conectado al pic. este envia tóo lo que decias antes (aun no asimilado) del BREAK, MAB, START CODE, y los DATA. ( :? me estoy imaginando la rutina de interrupcion de la usart del receptor) y vuelve a empezar con BREAK, MAB, START CODE, y los DATA. y una y otra  :-) o el controlador solo envia #mas los datos si cambia el valor del potenciometro

un saludo y gracias
Título: Re: recopilando info. protocolo DMX
Publicado por: jfh900 en 12 de Diciembre de 2007, 14:58:17
JCC40 excelente explicación: clara, corta y concisa. No se puede pedir más. Pero por lo que veo el meollo de la cuestión está en que no exista un protocolo de control de los receptores, me explico: si quiero manejar un receptor que controla el brillo de una bombilla, sé como enviarlo, pero ¿qué tengo que enviar?.

Un saludo
Título: Re: recopilando info. protocolo DMX
Publicado por: stk500 en 12 de Diciembre de 2007, 15:03:50
Hola gran amigo Fito !
aqui me he puesto a chamusquear un liazo y me da 5 error claro la primera lina es el primer error y estuve mirando ejemplo
y no se como hacer  :D
quizas tu o alguien me echa una mano


;4 chan DMX, PWM Salida
;On  RB5, RB6, RB7, RA3
;Rafael J

__CONFIG _CP_OFF& _PWRTE_ON& _WDT_OFF& _HS_OSC&_LVP_OFF
   list    P=16F628A
#INCLUDE <P16F628A.INC>

#DEFINE   OUT1   PORTB,5
#DEFINE   OUT2   PORTB,6
#DEFINE   OUT3   PORTB,7
#DEFINE   OUT4   PORTA,3
#DEFINE   RCLED   PORTB,3         ;Led Verde recibiendo dmx

#DEFINE RX      PORTB,1
#DEFINE ERRLED   PORTB,4         ;Led Rojo error dmx

#DEFINE   BREAK         DMX_reg,0
#DEFINE   STARTCODE      DMX_reg,1
#DEFINE   MOVED         DMX_reg,2
#DEFINE   ADDR9         DMX_reg,3
#DEFINE   RC9            DMX_reg,4

DMX_reg         EQU      020h
Reg1         EQU      021h
Reg2         EQU      022h
Reg3         EQU      023h
Reg4         EQU      024h
W_SAVE         EQU      026h
S_SAVE         EQU      027h
P_SAVE         EQU      028h
pwmcounter      EQU      029h
flag         EQU      02Ah
D_ADDR         EQU      02Bh
temp         EQU      02Ch
R_ADDR         EQU      02Dh
Offset         EQU      02Eh
temp2         EQU      02Fh



   ORG    00h
   GOTO   INIT         ;Inicial el PIC

   ORG      04h            ;Interrupt vector
   MOVWF    W_SAVE         ;save context,
   MOVF    STATUS,W      ;save  STATUS, PCLATH & W
   MOVWF   S_SAVE
   MOVF    PCLATH,W
   MOVWF    P_SAVE   
   GOTO   INTHANDLER


INIT

   MOVLW   0x07         ;encender comparador
   MOVWF   CMCON
   CLRF   PORTA
   CLRF   PORTB

   BSF      STATUS,RP0      ;Selecte Bank1   

   CLRF   TRISA         ;porta salida
   CLRF   TRISB         ;portb salida
   BSF      TRISB,1         ;B1 entrada UART Recibiendo

   MOVLW   04h
    MOVWF   SPBRG         ;poner baud rate
    BSF     TXSTA,BRGH      ;max velocidad
    BCF     TXSTA,SYNC      ;Async conexion
   CLRF   PIE1         ;borrar otro interrupor
   BSF    PIE1,RCIE      ;poner interruptor Recibido
   BCF      STATUS,RP0      ;volver al bank0

    BSF     RCSTA,RX9      ;activar 9bit de data

     MOVF   RCREG,W         ;borrar RCREG FIFO
    MOVF     RCREG,W
    MOVF   RCREG,W   

   BSF     RCSTA,CREN      ;activar recibiendo
    BSF     RCSTA,SPEN      ;activar UART
   BSF    INTCON,PEIE      ;activar interruptor
   BSF    INTCON,GIE

   BCF      RCLED         ;
   BCF      ERRLED

   CLRF   Reg1
   CLRF   Reg2
   CLRF   Reg3
   CLRF   Reg4
   CLRF   D_ADDR         ;poner dmx a 0
   BCF      ADDR9      

   GOTO   MAIN         ;ir al inicio del programa   


MAIN
   BCF      RCLED
   BCF      ERRLED
   MOVLW   0FFh
   MOVWF   pwmcounter
   BCF      OUT1
   BCF      OUT2
   BCF      OUT3
   BCF      OUT4
   CALL   PWM_CYCLE
   
   GOTO   MAIN


PWM_CYCLE
   MOVF   Reg1,W
   XORWF   pwmcounter,W
   BTFSC   STATUS,Z
   BSF      OUT1

   MOVF   Reg2,W
   XORWF   pwmcounter,W
   BTFSC   STATUS,Z
   BSF      OUT2

   MOVF   Reg3,W
   XORWF   pwmcounter,W
   BTFSC   STATUS,Z
   BSF      OUT3

   MOVF   Reg4,W
   XORWF   pwmcounter,W
   BTFSC   STATUS,Z
   BSF      OUT4

   DECFSZ   pwmcounter
   GOTO   PWM_CYCLE
   RETURN



INTRETURN
   MOVF   P_SAVE,W      ;renovar contexto
   MOVWF    PCLATH
   MOVF    S_SAVE,W
   MOVWF    STATUS
   SWAPF    W_SAVE,F
   SWAPF    W_SAVE,W         
   RETFIE

INTHANDLER
   BTFSS   PIR1,RCIF
   GOTO   INTRETURN

   BTFSC   NO_DMX
   MOVF   RCREG,W

   BTFSC   NO_DMX
   GOTO   INTRETURN

   GOTO   DMX

DMX
   BSF      ERRLED
   BTFSC   RCSTA,OERR
   GOTO   OVERRUN

   BTFSC   RCSTA,FERR      ;chequea error de framing
   GOTO    FRAME
   
   BTFSS   BREAK         ;chequea si ha sucedido un break
   GOTO   RET   
   
   BTFSS   STARTCODE      ;
   GOTO   SC            ;

   BTFSC   STARTCODE
   GOTO   CHANNEL
   
RET
   MOVF   RCREG,W
   GOTO   INTRETURN

OVERRUN
   BCF      RCSTA,SPEN
   BSF      RCSTA,SPEN
   MOVF   RCREG,W
   BSF      ERRLED
   GOTO   LAST

FRAME
   BCF      BREAK
   BCF      STARTCODE
   BCF      RC9
   CLRF   R_ADDR
   CLRF   Offset
   BTFSS   RCSTA,RX9D
   BSF      BREAK
      
   MOVF   RCREG,W
   GOTO   INTRETURN

SC
   MOVF   RCREG,W
   XORLW   00h
   BTFSC   STATUS,Z
   BSF      STARTCODE
   GOTO   INTRETURN

INCREASE
   INCF   R_ADDR
   BTFSC   STATUS,Z
   BSF      RC9   
   RETURN

CHANNEL

   MOVF   Offset,W
   XORLW   00h         ;check if offset != 0
   BTFSS   STATUS,Z
   GOTO   CHAN

   MOVF   R_ADDR,W   ;else: check if chans match
   XORWF   D_ADDR,W
   BTFSC   STATUS,Z
   GOTO   NINTH      ;if so: check for 9th bit

   CALL   INCREASE
   GOTO   RET      ;if not: just return from interrupt

NINTH
   BTFSC   ADDR9
   GOTO   TRUE
   MOVF   RCREG,W
   GOTO   FALSE

TRUE      ;our 9th bit is set
   BTFSC   RC9
   GOTO   CHAN
   CALL   INCREASE
   GOTO   RET

FALSE
   BTFSS   RC9
   GOTO   CHAN
   CALL   INCREASE
   GOTO   RET


CHAN
;   BCF      RCLED
   INCF   Offset
   MOVF   Offset,W
   XORLW   01h         ;check if count = 0
   BTFSC   STATUS,Z
   GOTO   CHAN1

   MOVF   Offset,W
   XORLW   02h
   BTFSC   STATUS,Z
   GOTO   CHAN2

   MOVF   Offset,W
   XORLW   03h
   BTFSC   STATUS,Z
   GOTO   CHAN3

   MOVF   Offset,W
   XORLW   04h
   BTFSC   STATUS,Z
   GOTO   CHAN4

   MOVF   Offset,W
   XORLW   05h
   BTFSC   STATUS,Z
   GOTO   LAST


CHAN1
   MOVF   RCREG,W
   MOVWF   Reg1
   CALL   INCREASE
   GOTO   INTRETURN
CHAN2
   MOVF   RCREG,W
   MOVWF   Reg2
   CALL   INCREASE
   GOTO   INTRETURN
CHAN3
   MOVF   RCREG,W
   MOVWF   Reg3
   CALL   INCREASE
   GOTO   INTRETURN
CHAN4
   MOVF   RCREG,W
   MOVWF   Reg4
   CALL   INCREASE
   GOTO   INTRETURN



LAST

   BCF      BREAK
   BCF      STARTCODE
   CLRF   Offset
   GOTO   INTRETURN   
   
   END
Título: Re: recopilando info. protocolo DMX
Publicado por: alogic.on en 12 de Diciembre de 2007, 15:17:49
tienes que indicarle al mplab que bit es el NO_DMX, no esta definido. asi a simple vista es dificil averiguar a que se refiere
alguna pista ?¿?¿
#DEFINE      NO_DMX     PORTx,x "por ejemplo"

un saludo
Título: Re: recopilando info. protocolo DMX
Publicado por: alogic.on en 12 de Diciembre de 2007, 15:23:37
buuuf y un par de NOP despues de encender o apagar cualquier pin de las puertas para darle tiempo a que estabilice que si no hacen cosas raras

un saludo
Título: Re: recopilando info. protocolo DMX
Publicado por: alogic.on en 12 de Diciembre de 2007, 15:29:55
mmmmpf perdona a lo mejor no me explique bien, con mi pregunta, era si envia el paquete completo cada vez que termina o cada vez que se modifica algo en el controlador
Citar
El controlador (transmisor) siempre envía toda la cadena del protocolo completo:
BREAK, MAB, START CODE, y los DATA
BREAK, MAB, START CODE, y los DATA
BREAK, MAB, START CODE, y los DATA..

un saludo y gracias
Título: Re: recopilando info. protocolo DMX
Publicado por: jfh900 en 12 de Diciembre de 2007, 19:39:59
Gracias por tu respuesta JCC40 pero me surge otra duda ¿todos los receptores que controlan bombillas, por ejemplo, utilizan los mismos códigos de control?, se sobreentiende que son de distinto fabricante.

Un saludo
Título: Re: recopilando info. protocolo DMX
Publicado por: jfh900 en 12 de Diciembre de 2007, 20:03:29
Muy bien. Eso implica que los receptores los podemos hacer como queramos. Pero no podemos programar el emisor sin tener los receptores, ademas el emisor habrá de ser reprogramable de forma fácil para poder cambiar de receptores, ¿me equivoco?

Un saludo
Título: Re: recopilando info. protocolo DMX
Publicado por: jfh900 en 12 de Diciembre de 2007, 20:57:39
Y en la práctica cuando tienes todos los dispositivos receptores que vas a controlar ¿como se programa el transmisor?. Entiendo que el firmware no cambiará, entonces ¿que hay que hacer?, ¿una seudoprogramación a mano?.

Un saludo.
Título: Re: recopilando info. protocolo DMX
Publicado por: Nocturno en 13 de Diciembre de 2007, 02:22:58
Imagino que en la mayoría de las situaciones complicadas el emisor será un PC, donde puedes programar lo que quieras muy fácilmente de manera visual.
Título: Re: recopilando info. protocolo DMX
Publicado por: stk500 en 13 de Diciembre de 2007, 03:49:09
Asi mismo manolo!
Claro es que estos 2 elementos Receive y Transeiver son configurable como RS485, JCC40 puso muchos ejemplos, cada persona configura las tramas a sus gustos tantos en analogo como digital, hay una inmensidad de aparatos Profesional que trabajan con el protocolo, tantos video,audio y luces, ahora bien, pensar que se realiza un aparato que va a reciber la trama y de esa trama solo queremos recibir solo 8 canales, pensar aqui siempre en esto Multiplexer y Demux, esa trama que recibimos la podemos convertir en analogo para Pj. controlar un motor, con un solo canal, los parametro se realizan en el soft que uno va emplear, digamos asi en un Ram, que por medio de teclado llamamos al mover el Fader en un % difinido, activa el motor y se memoriza en real modo, seguimos en otro % definido la variacion de Speed del motor, y se memoriaza esto, otro % podiamos poner aqui la direcion del motor Dcha Izq. y seguimos con otras variante a nuestros gustos, ahora bien usted se pregunta como? para eso esta el Demux, en mi trabajo yo opero para Chequear nuestros aparatos de efectos especial,
Movie Light un Studio Spot que ocupa 26 canales donde ese block de 26 canales lo puede meter dentros de los 512 canales, cada de los 26 canales independiente se configura de acuerdo a la tabla que nos el inventor o fabricante del aparato, alli tenemos una Tabla con los parametros que podamos ustilizar y operar con el, eso es una gran sensacion operar un gran sin numero de aparatos atravez de una Consola DMX por ejemplo esta miren aqui  http://www.pa-light.com/articulos/getArtPdf.php?SEC=CON&art=351  vean que jueguitos  :D de estos tenemos donde trabajo 4 aparte de otras mas. por eso es tan bellos trabajar con DMX y asi poder lograr todos tipos de resultados.
Título: Re: recopilando info. protocolo DMX
Publicado por: jfh900 en 13 de Diciembre de 2007, 06:17:03
Donde se pueden pedir samples de esas consolas  :D :D :D :D

Un saludo
Título: Re: recopilando info. protocolo DMX
Publicado por: stk500 en 13 de Diciembre de 2007, 07:09:16
Donde se pueden pedir samples de esas consolas  :D :D :D :D

Un saludo

  :D :D Hola Jesus   :D
por desgracia no es se consigue nada de eso  :D
 pero el que quiera hacer un Curso de Light Designer ya aqui en Alemania hay escuela de eso, donde duran casi 6 meses de practica y Teoria, yo e hice un curso, siendo asi esa consola no la conozco a fondo por tener tantas cosas juntas, no se si leiste las caracteristica tecnica, habia que darle un Vistazo a eso y asi darse cuenta que es mas que una PC, pasaste por aqui y mira que otras preciosidad de programa http://www.madrix.de/  tambien trabajamos con esta http://www.highend.com/products/controllers/Wholehog3Console.asp otros Jueguitos lindo http://www.highend.com/products/controllers/Wholehog3Console.asp
el sueños de cada Diseñador de Eventos  :-) :-) :-) :-) :-) :-)