Está en la página 1de 42

ma: DMX - otra ms!

receptor DMX y control de dos motores PAP a 1/2 paso (Ledo 11514 veces)

todopic

DMX - otra ms! receptor DMX y control de dos motores PAP a 1/2 paso

Hola Amigos!, les presento este proyecto, que ya est en funcionamiento Continuando con el
codigo receptor DMX, luego de verificar el funcionamiento para un motor (empleando 4 leds)
agregu para comandar en forma individual, un par de motores, empleo para exitarlos, 2
ULM2003

;*****************************************************************

;receptor dmx - decodifica 3 canales - dos motores pap y velocidad

; Norberto Pellegrini - Todopic Electronica

;*****************************************************************

;24/12/06 12:09a.m. HAY QUE EMPLEAR EL MICRO A 20 MHZ

; verificacion de tiempos y compensacion con NOP de las tramas

;*****************************************************************

list p=16f628

#include p16f628.inc
ERRORLEVEL -302, -307 ;(NO FIGURAN LOS ERRORES DE CAMBIO DE PAGINA)

CBLOCKH'20' ;32 decimal H'0C'

;ASIGNACION DE REGISTRO DE USO GENERAL

CONTA_T ;TIEMPO DEL BREAK, DE 88 uS

CONTABIT ;8 BIT DE DATOS

CHANEL ;CONTADOR DE CANALES LEIDOS POR EL RECEPTOR

DIPSWICH ;seteos de direccion

DIPSWICH_MAS1 ;DIRECCION MAS UNO O SIGUIENTE

DIPSWICH_MAS2 ;DIRECCION MAS DOS

DATOS ;BYTE DE RECEPCION RS485 DE DMX


POSICION

PASOS_PAN

PASOS_TILT

CONTA_PASOS_PAN

CONTA_PASOS_TILT

CONTA_PAN ;CONTADOR DE TABLA DE PASOS DEL MOTOR

CONTA_TILT ;CONTADOR DE LA TABLA DEL SEGUNDO MOTOR

DESTELLO

DESTELLO1 ;SON LOS CONTADORES PARA PRODUCIR EL

DESTELLO2 ;DESTELLO DEL LED INDICADOR DE FALTA DE SEAL DMX

VELOCIDAD

COMPENSAR ;TIEMPO A COMPENSAR EN LOS DELAY PARA REDUCIR LA


VELOCIDAD AL ESTAR MAS CERCA DE LA POSICION

RESTO
RETARDO

PUERTO ; BYTE AUXILIAR PARA FORMAR EL AND DE LAS SALIDAS AL PUERTO


B

LOOP1

LOOP2

LOOP3

ENDC

#DEFINE DMX PORTA,3 ; en el prototipo era 4

#DEFINE FC_PAN PORTA,1

#DEFINE FC_TILT PORTA,2

#DEFINE LED PORTA,0


__CONFIG _HS_OSC & _WDT_ON & _PWRTE_ON & _CP_OFF & _BODEN_ON &
_LVP_OFF & _MCLRE_OFF

; osc 20 mhz

;**********************************************************************

RESET org 00h ;el vector de reset es la direccin 00

goto INICIO ;se salta al inicio del programa

;**********************************************************************

org 05h
;*************** SUBRUTINA DE RETARDO DE 2 Us **************

;-------------------------------------------------------------

DEMORA2US ; ES EN REALIDAD DE 1.8 uS PARA COMPENZAR

NOP ;1 uS

NOP

CLRWDT

NOP

NOP ;1 uS

RETURN

;********************************************************************************
**

;################################################################################
##
;********************************************************************************
**

;TABLA DE POSICIONAMIENTO DE LOS MEDIO PASOS DEL MOTOR PAP DE PANORAMICO

TABLA_PAN ADDWF PCL,F

GOTO CORREGIR1

RETLW B'11110001' ;LOS 4 BIT DE MAYOR PESO ESTAN EN UNO PARA HACER
BUNA AND ENTRE TABLAS

RETLW B'11110011'

RETLW B'11110010'

RETLW B'11110110'

RETLW B'11110100'

RETLW B'11111100'

RETLW B'11111000'

ULTIMO RETLW B'11111001'


MOVLW .1 ;LIMITE MAXIMO DE LA TABLA

MOVWF CONTA_PAN

GOTO TABLA_PAN+2

;---------------------------------------------------------------------------------------------

CORREGIR1 ;SI ERA CERO, LO PASO AL VALOR 8 DE LA TABLA (LIMITE MINIMO


DE LA TABLA)

MOVLW .8

MOVWF CONTA_PAN

GOTO ULTIMO

;********************************************************************************
****************

;################################################################################
################

;********************************************************************************
****************
;TABLA DE POSICIONAMIENTO DE LOS MEDIO PASOS DEL MOTOR PAP DE TILT

TABLA_TILT ADDWF PCL,F

GOTO CORREGIR2

RETLW B'00011111' ;LOS 4 BIT DE MENOR PESO SON 1 PARA HACER UNA AND
ENTRE LAS TABLAS

RETLW B'00111111'

RETLW B'00101111'

RETLW B'01101111'

RETLW B'01001111'

RETLW B'11001111'

RETLW B'10001111'

ULTIMO2 RETLW B'10011111'

MOVLW .1 ;LIMITE MAXIMO DE LA TABLA

MOVWF CONTA_TILT
GOTO TABLA_TILT+2

;---------------------------------------------------------------------------------------------

CORREGIR2 ;SI ERA CERO, LO PASO AL VALOR 8 DE LA TABLA (LIMITE MINIMO


DE LA TABLA)

MOVLW .8

MOVWF CONTA_TILT

GOTO ULTIMO2

;********************************************************************************
****************

;############################ PROGRAMA PRINCIPAL


##############################################

;********************************************************************************
****************
INICIO

MOVLW 0x07

MOVWF CMCON ;PARA EL 16F628, ELIMINO LOS COMPARADORES, TODAS SALIDAS


DIGITALES

BSF STATUS,RP0 ;BANCO 1

MOVLW B'00000000' ; 8 TODAS SALIDAS PARA CONTROLAR 2 MOTORES PAP

MOVWF TRISB

MOVLW B'11111110' ;1 SALIDAS

MOVWF TRISA

BCF STATUS,RP0 ;BANCO 0

CLRF TMR0
; MOVLW B'11111111'

CLRF PORTB ;coloco en cero las salidas

CLRF PORTA

CLRF DATOS

CLRF CHANEL

BCF LED

MOVLW .1

MOVWF CONTA_PASOS_PAN

MOVWF CONTA_PASOS_TILT

MOVWF CONTA_PAN

MOVWF CONTA_TILT

MOVWF PASOS_PAN

MOVWF PASOS_TILT
CALL DEMORA

CLRF PUERTO

CLRF PORTB

CLRWDT

PAGESEL POSICION_CERO

LCALL POSICION_CERO ;BUSQUEDA DE LOS CEROS DE CADA EJE

;********************************************************************************
*****************

;##################### PULSO DE ARRANQUE O SINCRONISMO BREAK


####################################

;********************************************************************************
******************

;ESPERA LA LLEGADA DEL PULSO BREAK, QUE TIENE QUE SER DE AL MENOS 88 uS A 1 SEGUNDO,
SINO ES ERROR
;ESTE PULSO BAJO DE 88 uS INDICA EL COMIENZO DE LA TRAMA DMX, QUE ES CICLICA

BREAK

CLRWDT

;------------------------------------------------------------------------------------

MOVLW 0x07

MOVWF CMCON ;PARA EL 16F628, ELIMINO LOS COMPARADORES, TODAS SALIDAS


DIGITALES

BSF STATUS,RP0 ;BANCO 1

MOVLW B'00000000' ; 8 entradas PARA ASIGNAR UNA DE LAS 255 DIRECCIONES


POSIBLES

MOVWF TRISB

MOVLW B'11111110' ;1 SALIDAS

MOVWF TRISA
BCF STATUS,RP0 ;BANCO 0

PAGESEL DEMORA2US

;------------------------------------------------------------------------------

;LEER EL CANAL DMX SETEADO EN LOS DIP SWICH

MOVLW .1 ;PORTB,W

MOVWF DIPSWICH ;DIRECCION DMX QUE SE ASIGNA EMPLEANDO 8 DIP


SWICH (EN BINARIO)

INCF DIPSWICH,W

MOVWF DIPSWICH_MAS1 ;ES UN VALOR MAS DE LA DIRECCION ASIGNADA

INCF DIPSWICH_MAS1,W

MOVWF DIPSWICH_MAS2 ;ES DOS VALORES MAS DE LA DIRECCION


ASIGNADA

MOVLW .80
MOVWF CONTA_T

MOVLW .255 ;PARA QUE EMPIECE A CONTAR DESDE EL CANAL CERO

MOVWF CHANEL

;---------------------------------------------------------------------------

CONTINUAR

DECFSZ DESTELLO2,F ;RETARDOS EN LOS DESTELLOS A LA ESPERA DE SEAL DMX

GOTO ES_CERO

DECFSZ DESTELLO1,F

GOTO ES_CERO

INCF DESTELLO,F

BCF LED ;MIENTRAS ESTA EN CERO APAGO


EL LED INDICADOR DE SEAL DMX

BTFSC DESTELLO,2 ; Y QUEDARA DESTELLANDO LENTO


BSF LED

ES_CERO

BTFSC DMX ;ES LA ENTRADA DMX CERO?, SI SALTAR

GOTO BREAK

DECFSZ CONTA_T,F ;SI LLEGA A CERO, ES PORQUE EL BREAK DURO POR LO MENOS 88
uS (80)

GOTO ES_CERO

BTFSS DMX ;ESPERO A QUE TERMINE EL PULSO DE


BREAK, POR SI ES MAYOR A 88 US

GOTO $-1 ;Y DETERMINO EL COMIENZO DEL PULSO


"MARK" QUE ES ALTO (UNO) DE 8 uS

MARK ; DURACION DE 8 uS EN ALTO

CALL DEMORA2US ;2 uS, VERIFICO A LA MITAD DEL PULSO


BTFSS DMX ; MITAD DEL PRIMER PULSO, LEO SI ESTA
EN UNO

GOTO BREAK ;HAY ERROR

CALL DEMORA2US ;FINAL DEL PRIMER PULSO

CALL DEMORA2US ;PRIMER MITAD DEL 2DO PULSO

BTFSS DMX ; MITAD DEL SEGUNDO PULSO

GOTO BREAK ;HAY ERROR

PROX ;<---------SINCRONIZACION DEL PULSO DE START


#########################################################

INCF CHANEL,F
;SI EL NUMERO DE CANAL
ES XX SETEADO CON LOS DIPSWICH

; VER EL VALOR DE DATA, Y


ACTUAR

BTFSC DMX ;ME QUEDO ESPERANDO LOS 2uS FINALES DE MARK

GOTO $-1 ;HASTA QUE APAREZCA EL PULSO BAJO DE START

;AL DETECTAR EL BAJO DE STAR, ME

;CALL DEMORA2US ;DESPLAZO A LA MITAD DEL PRIMER BIT

NOP

CLRWDT

NOP

MOVLW .8

MOVWF CONTABIT ;CADA BIT DURA 4 uS


START ;CAIGO EN LA MITAD DEL PULSO START, QUE TIENE QUE SER BAJO

BSF LED

CLRF DATOS

BTFSC DMX ;SI ES BAJO, ESTA CORRECTO, SI ES UNO, ES ERROR, ASI QUE ESPERO LA
PROXIMA SECUENCIA

GOTO BREAK

NOP

CLRWDT

NOP

OTRO

CALL DEMORA2US

; CALL DEMORA2US ; MITAD DEL BIT 0


NOP

NOP

CLRWDT

NOP

RRF DATOS,F

BCF DATOS,7

BTFSC DMX

BSF DATOS,7

DECFSZ CONTABIT,F

GOTO OTRO

; CALL DEMORA2US
CLRWDT

;STOP ;DOS BIT DE STOP EN ALTO, SOLO DETECTO EL PRIMERO Y PROCESO LA INFO

; BTFSS DMX ;MIRO EN LA MITAD DEL PRIMER BIT DE STOP EN ALTO (A LOS 38
uS)

; GOTO BREAK ;HAY ERROR

;-----------------PRIMER CANAL - DATOS DEL CANAL MOTOR PAP PAN

CANAL1

MOVF CHANEL,W

XORWF DIPSWICH,W

BTFSS STATUS,Z

GOTO SIGUIENTE
;TOMO EL DATO DMX PARA EL CONTROL
DE PAN

;NOP

;NOP

;NOP

MOVF DATOS,W ;cambio de variable, de dato lo paso a PASOS

MOVWF PASOS_PAN ;PORTB

GOTO PROX

;-----------------SEGUNDO CANAL ------- DATOS DEL CONTROL DE TILT

SIGUIENTE

MOVF CHANEL,W ;VERIFICO EN PRIMER LUGAR,

XORWF DIPSWICH_MAS1,W ;SI LA CUENTA LLEGO A 26 (MAQUINA DE HUMO


BTFSS STATUS,Z ;SI ES IGUAL, SALTA, SINO VA AL PROXIMO

GOTO SIGUIENTE3

;NOP

;NOP

;NOP

MOVF DATOS,W

MOVWF PASOS_TILT

GOTO PROX

;-----------------TERCER CANAL

SIGUIENTE3

MOVF CHANEL,W ;VERIFICO EN PRIMER LUGAR,

XORWF DIPSWICH_MAS2,W ;SI LA CUENTA LLEGO A 26 (MAQUINA DE HUMO


BTFSS STATUS,Z ;SI ES IGUAL, SALTA, SINO VA AL PROXIMO

GOTO PROX ;NO ES NINGUNO DE LOS 3 VALORES, SIGO ESPERANDO AL CANAL


CORRESPONDIENTE

MOVF DATOS,W

MOVWF VELOCIDAD ;RETARDOS EN LOS AVANCES DE LOS MOTORES DE PAN Y


TILT

GOTO COMPARAR

;********************************************************************************
********************

;******** posicionamiento de LOS


MOTORES**********************************************************

;********************************************************************************
********************
;>>>>>>>>>>> MOTOR DE PAN <<<<<<<<<<<<<<<<<<<<

COMPARAR ;VERIFICA SI LLEGO AL LUGAR PARA DETENERSE, O TIENE QUE GIRAR A DERECHA
O IZQUIERDA

; Comparar

CLRF STATUS

MOVF PASOS_PAN,W ;VALOR LEIDO EN DATOS POR DMX

XORWF CONTA_PASOS_PAN,W ;y lo compara con la CONTA_PASOS_PAN QUE ES EL VALOR


DE POSICION ACTUAL

BTFSS STATUS,Z ; Son iguales ?

GOTO NOT_EQ1 ;PASOS ES DISTINTO A CUENTA_PASOS, TIENE QUE CALCULAR


PARA DONDE GIRAR

GOTO EQ1 ;PASOS ES IGUAL A CUENTA_PASOS, TIENE QUE DETENER MOTOR

EQ1 ;NO SE REALIZA NINGUNA VARIACION EN LOS DELAY PATRONES


; CLRF COMPENSAR ;NO HAY VARIACION DE TIEMPOS, Y DETENER EL MOTOR

GOTO COMPARAR2 ;BREAK ;IR A DETECTAR EL COMIENZO DE LA PROXIMA TRAMA


DMX

NOT_EQ1

MOVF PASOS_PAN, W

SUBWF CONTA_PASOS_PAN,W ;F-W GUARDO RESULTADO EN W

BTFSS STATUS, C

GOTO GIRO_DERECHA1

GOTO GIRO_IZQUIERDA1

GIRO_DERECHA1

INCF CONTA_PASOS_PAN,F

INCF CONTA_PAN,F ;CONTADOR DE TABLA DE SECUENCIA PARA EL PAP


MOVLW .255 ;ESTE ERA EL VALOR DEL TEMPORIZADOR

MOVWF COMPENSAR

MOVF CONTA_PASOS_PAN,W

SUBWF PASOS_PAN,W

MOVWF COMPENSAR ; PROPORCIONAL AL RETARDO, MAS LEJOS, MENOS


TIEMPO

GOTO COMPARAR2 ;NDP

GIRO_IZQUIERDA1

DECF CONTA_PASOS_PAN,F

DECF CONTA_PAN,F ;CONTADOR DE TABLA DE SECUENCIA PARA EL PAP

MOVLW .255 ;ESTE ERA EL VALOR DEL TEMPORIZADOR


MOVWF RESTO

MOVF PASOS_PAN,W

SUBWF CONTA_PASOS_PAN,W

SUBWF RESTO,W

MOVWF COMPENSAR ;VALOR PROPORCIONAL AL RETARDO, MAS CERCA, MAS


TIEMPO

GOTO COMPARAR2 ;NDP

;********************************************************************************
***************

;################ POSICIONAMIENTO DEL MOTOR DE TILT


##########################################

;********************************************************************************
***************
COMPARAR2 ;VERIFICA SI LLEGO AL LUGAR PARA DETENERSE, O TIENE QUE GIRAR A DERECHA
O IZQUIERDA

; Comparar

CLRF STATUS

MOVF PASOS_TILT,W ;

XORWF CONTA_PASOS_TILT,W ;y lo compara con la CONTA_PASOS QUE ES EL VALOR DE


POSICION ACTUAL

BTFSS STATUS,Z ; Son iguales ?

GOTO NOT_EQ2 ;PASOS ES DISTINTO A CUENTA_PASOS, TIENE QUE CALCULAR


PARA DONDE GIRAR

GOTO EQ2 ;PASOS ES IGUAL A CUENTA_PASOS, TIENE QUE DETENER MOTOR

EQ2 ;NO SE REALIZA NINGUNA VARIACION EN LOS DELAY PATRONES

; CLRF COMPENSAR ;NO HAY VARIACION DE TIEMPOS, Y DETENER EL MOTOR

; GOTO BREAK ;IR A DETECTAR EL COMIENZO DE LA PROXIMA TRAMA DMX


GOTO NDP

NOT_EQ2

MOVF PASOS_TILT, W

SUBWF CONTA_PASOS_TILT,W ;F-W GUARDO RESULTADO EN W

BTFSS STATUS, C

GOTO GIRO_DERECHA2

GOTO GIRO_IZQUIERDA2

GIRO_DERECHA2

INCF CONTA_PASOS_TILT,F

INCF CONTA_TILT,F ;CONTADOR DE TABLA DE SECUENCIA PARA EL PAP

MOVLW .255 ;ESTE ERA EL VALOR DEL TEMPORIZADOR


MOVWF COMPENSAR

MOVF CONTA_PASOS_TILT,W

SUBWF PASOS_TILT,W

MOVWF COMPENSAR ; PROPORCIONAL AL RETARDO, MAS LEJOS, MENOS


TIEMPO

GOTO NDP

GIRO_IZQUIERDA2

DECF CONTA_PASOS_TILT,F ;

DECF CONTA_TILT,F ;CONTADOR DE TABLA DE SECUENCIA PARA EL PAP

MOVLW .255 ;ESTE ERA EL VALOR DEL TEMPORIZADOR

MOVWF RESTO

MOVF PASOS_TILT,W
SUBWF CONTA_PASOS_TILT,W

SUBWF RESTO,W

MOVWF COMPENSAR ;VALOR PROPORCIONAL AL RETARDO, MAS CERCA, MAS


TIEMPO

GOTO NDP

;********************************************************************************
****************

NDP MOVF CONTA_PAN,W

PAGESEL TABLA_PAN
LCALL TABLA_PAN

;DEMORA PROPORCIONAL A LA DIFERENCIA ENTRE PASOS, MAS PASOS


MENOS DEMORA, ESTA MAS LEJOS...

MOVWF PUERTO

MOVF CONTA_TILT,W

PAGESEL TABLA_TILT

LCALL TABLA_TILT

ANDWFPUERTO,W ;UNO AMBAS SALIDA DE TABLA PARA SALIR POR EL


PUERTO B

MOVWF PORTB

; MOVF VELOCIDAD,W ;PASO EL DATO DE VELOCIDAD LEIDO EN EN TERCER


CANAL
; MOVWF COMPENSAR ;AL CONTADOR DE DEMORAS COMPENSAR

; CALL DEMORA

GOTO BREAK ;GOTO COMPARAR

;;*******************************************************************************
**************

DELAY CALL DEMORA ;RETARDO ENTRA PASOS, VARIABLE SEGUN LA DIFERENCIA


DE PASOS

DECFSZ COMPENSAR,F ;A MAS PASOS, MENOS DEMORA, AL ESTAR MAS CERCA,


INCREMENTA LA DEMORA

GOTO DELAY ;PARA QUE EL MOTOR SE ACERQUE DE FORM MAS SUAVE

RETURN

DEMORA

MOVLW .2
MOVWF LOOP1

OTRO2 NOP

CLRWDT

DECFSZ LOOP1,F

GOTO OTRO2

RETURN

;################################################################################
#################

ORG 100H

POSICION_CERO ;EN EL ENCENDIDO, AMBOS EJES GIRAN HASTA ENCONTRAR EL FIN DE


CARRERA RESPECTIVO
; Y COLOCAR EN CERO LOS CONTADORES
CRRESPONDIENTES

MOVLW .255

MOVWF CONTA_PASOS_TILT

MOVWF CONTA_PASOS_PAN

MOVWF POSICION

BUSCAR_CERO

; GIRO_IZQUIERDA DEL MOTOR DE TILT, EN BUSQUEDA DE LLEGAR


AL FIN DE CARRERA, PARA SU POSICION DE CERO

BTFSS FC_TILT ;ESTA TOCANDO EL FIN DE CARRERA DE TILT

GOTO $+3

DECF CONTA_PASOS_TILT,F ;

DECF CONTA_TILT,F ;CONTADOR DE TABLA DE SECUENCIA PARA EL PAP


BTFSS FC_PAN ;ESTA TOCANDO EL FIN DE CARRERA DE PAN

GOTO $+3

DECF CONTA_PASOS_PAN,F ;

DECF CONTA_PAN,F ;CONTADOR DE TABLA DE SECUENCIA PARA EL PAP

MOVF CONTA_PAN,W

PAGESEL TABLA_PAN

LCALL TABLA_PAN

MOVWF PUERTO

MOVF CONTA_TILT,W

PAGESEL TABLA_TILT

LCALL TABLA_TILT
ANDWFPUERTO,W ;UNO AMBAS SALIDA DE TABLA PARA SALIR POR EL PUERTO B

MOVWF PORTB

PAGESEL DELAY2

LCALL DELAY2

LCALL DELAY2

DECFSZ POSICION,F

GOTO BUSCAR_CERO ;REPITE ESTE LOOP UN MAXIMO DE 255 VECES, PARA


ASEGURARNOS SI ESTAN EN EL LADO OPUESTO

CLRF CONTA_PASOS_PAN

CLRF CONTA_PASOS_TILT
; INCF CONTA_PASOS_TILT,F ;ME ASEGURO QU TOMEN EL VALOR UNO

; INCF CONTA_PASOS_PAN,F

RETURN

;********************************************************************************
****************

DELAY2

MOVLW .150

MOVWF LOOP3

MOVLW .100
MOVWF LOOP1

OTRO22 NOP

NOP

NOP

NOP

NOP

NOP

CLRWDT

DECFSZ LOOP1,F

GOTO OTRO22

DECFSZ LOOP3,F

GOTO OTRO22-2

INCF DESTELLO,F
BCF LED

BTFSC DESTELLO,2 ; DESTELLO DEL LED INDICADOR DMX, EN ESTE CASO, INDICA QUE SE
ESTA POSICIONANDO A CERO

BSF LED

RETURN

END

También podría gustarte