TODOPIC
Mecatrónica => DMX512 - Diseños y Proyectos => Mensaje iniciado por: stk500 en 13 de Noviembre de 2008, 13:31:07
-
esto lo saque de este post viejo http://www.todopic.com.ar/foros/index.php?PHPSESSID=03f22a173ee0244fd55a242d5b2aedc8&topic=3675.0
al montarlo me da una serie de problema que no lo encuentro y no se por donde empezar, bien el problema que me da es, que al hacer fader con el primer canal poniendo ante el dipswitch numero 1 a cero al hacer fader en 50% la salida del canal pin numero 9 del primer TDA8444 me hace oscilaciones donde deberia dar 5Voltio, al subir el Fader a 100% me llega a 10 Voltio pero se queda oscilando, otro caso curioso tambien es, que el segundo canal me hace los mismo pero y me interfiere en el primer canal.
yo pienso que el error esta aqui ndmx = ndmx ^ %0000001111111111
os pongo el programa aqui completo
DEFINE OSC 20
@ DEVICE HS_OSC
'Configurazione usart 250000
DEFINE HSER_BITS 9
DEFINE HSER_RCSTA 208
DEFINE HSER_TXSTA 101
DEFINE HSER_BAUD 250000
DEFINE HSER_CLROERR 1 'Hser clear overflow automatically
SYMBOL IN =PORTC.0
SYMBOL LED =PORTC.3 'LED
SYMBOL SDA =PORTA.2 'SDA TDA8444 OUT ANALOGICHE ESTERNE
SYMBOL SCL =PORTA.3 'SCL TDA8444 OUT ANALOGICHE ESTERNE
INPUT IN
TMP VAR WORD
TMP1 VAR WORD
VALORE VAR byte[65]
BREAK VAR WORD
NDMX VAR WORD
DATI VAR WORD
Clear
ADCON0=0
ADCON1=7
OPTION_REG.7=0 'Abilita resistenze di pull-up
FOR TMP=0 TO 10
TOGGLE LED
PAUSE 200
NEXT TMP
LOW LED
MAIN:
NDMX=0
NDMX.0=PORTA.1
NDMX.1=PORTA.0
NDMX.2=PORTB.7
NDMX.3=PORTB.6
NDMX.4=PORTB.5
NDMX.5=PORTB.4
NDMX.6=PORTB.3
NDMX.7=PORTB.2
NDMX.8=PORTB.1
NDMX.9=PORTB.0
ndmx = ndmx ^ %0000001111111111
DATI=0
PULSIN in,0,break
IF BREAK>=44 THEN
HSERIN 1000,MAIN,[tmp,tmp1]
if tmp<>0 and tmp1<>0 then
goto main
endif
FOR TMP=1 TO ndmx
HSERIN 10,main,[tmp1]
NEXT TMP
FOR tmp=1 TO 64
hserin 10,EXIT,[VALORE[tmp]]
DATI=DATI+1
NEXT TMP
EXIT:
FOR TMP=1 TO DATI
VALORE[TMP]=VALORE[TMP]/4
NEXT TMP
I2CWRITE SDA,SCL,%01000000,%00000000,[VALORE[1],VALORE[2],VALORE[3],VALORE[4],VALORE[5],VALORE[6],VALORE[7],VALORE[8]]
I2CWRITE SDA,SCL,%01000010,%00000000,[VALORE[9],VALORE[10],VALORE[11],VALORE[12],VALORE[13],VALORE[14],VALORE[15],VALORE[16]]
I2CWRITE SDA,SCL,%01000100,%00000000,[VALORE[17],VALORE[18],VALORE[19],VALORE[20],VALORE[21],VALORE[22],VALORE[23],VALORE[24]]
I2CWRITE SDA,SCL,%01000110,%00000000,[VALORE[25],VALORE[26],VALORE[27],VALORE[28],VALORE[29],VALORE[30],VALORE[31],VALORE[32]]
I2CWRITE SDA,SCL,%01001000,%00000000,[VALORE[33],VALORE[34],VALORE[35],VALORE[36],VALORE[37],VALORE[38],VALORE[39],VALORE[40]]
I2CWRITE SDA,SCL,%01001010,%00000000,[VALORE[41],VALORE[42],VALORE[43],VALORE[44],VALORE[45],VALORE[46],VALORE[47],VALORE[48]]
I2CWRITE SDA,SCL,%01001100,%00000000,[VALORE[49],VALORE[50],VALORE[51],VALORE[52],VALORE[53],VALORE[54],VALORE[55],VALORE[56]]
I2CWRITE SDA,SCL,%01001110,%00000000,[VALORE[57],VALORE[58],VALORE[59],VALORE[60],VALORE[61],VALORE[62],VALORE[63],VALORE[64]]
ENDIF
GOTO MAIN
quizas alguien me puede dar algunas pista.
saludo
-
La verdad que NPI de lo que es, hace o sirve el DMX, pero dime porque crees que el error este en esa porcion del codigo?
Lo que hace ndmx = ndmx ^ %0000001111111111 es invertir el valor original para meterlo al FOR, no se si es lo mismo que pretendas en tu codigo.
-
La verdad que NPI de lo que es, hace o sirve el DMX, pero dime porque crees que el error este en esa porcion del codigo?
Lo que hace ndmx = ndmx ^ %0000001111111111 es invertir el valor original para meterlo al FOR, no se si es lo mismo que pretendas en tu codigo.
correcto amigo Navaismo, pero creo que es ahi ,porque se mezclan los canales uno con otros, es decir el PORTA,1 es donde comienza el primer canales cuando los pongo va, pero el canal 2 influye tambien, yo cambie esto pensando que el Hserin recibia la señal muy lenta, estaba en 2000 y lo puse asi
HSERIN 1000,MAIN,[tmp,tmp1]
if tmp<>0 and tmp1<>0 then
goto main
endif
yo nunca he usado la UART con picbasic pero entrando alli en el Foro nadie daba una explicacion logica al asunto, por que se supone que debo recibir el primer canal de la Trama? y pienso que seria tambien aqui if tmp<>0 and tmp1<>0 then
quizas me pueda dar tu algunas pista. gracias por colaborar
Saludo
-
En estos momentos no estoy en mi maquina para poder darle un vistazo a la ayuda del HSERIN, lo que si es que me quedan muchas lagunas por lo mismo de que no conozco este protocolo y para brindarte ayuda deberia conocer un poco mas. Bueno si por ahi tienes un link que me adentre a esto te podria ayudar mas; por otra parte tambien necesitaria saber como funciona el TDA y lo que se hace.
Sobre el If que comentas pues habria que ver que recibe la UART ya que ese if te manda a MAIN si ambos son diferentes de cero e imagino que siempre lo son.
Saludos
-
brrrrrrrr! se borro lo que ya llevaba bueno de nuevo.
Ya revise la intruccion HSERIN y me quedaron algunas dudas con tu codigo. Lo primero ¿Que PIC estas usando? Porque no estoy seguro si estas declaraciones esten en funcion del PIC:
DEFINE HSER_BITS 9 ' Al habilitar la recepcion de 9bits los siguientes registros se supone cambian en automatico. Pero no se si correspondan al PIC que uses:
DEFINE HSER_RCSTA 208
DEFINE HSER_TXSTA 101
Luego en DEFINE HSER_BAUD 250000 cual se supone deberia ser la velocidad? Ya que no veo el MODEDEFS.BAS y no se parece a 2400,9600,19200 etc. O bien usa el registro DEFINE HSER_SPBRG para hacerlo mediante el Data del PIC y habilitar el modo rapido y esas cosas.
Bueno y despues viene esto:
HSERIN 1000,MAIN,[tmp,tmp1] ' Aqui habilitas la recepcion, pasado 1 segundo sin obtener nada mandas a MAIN de nuevo, si recibes correctamente lo guardas en tmp y tmp1.
Despues vuelves a evaluar los valores recibidos y sin son diferentes de cero mandas a MAIN de nuevo:
if tmp<>0 and tmp1<>0 then
goto main
endif
Disculpa que sea tan chocante pero primero me gustaria entender que se prentende o como funciona para yudarte mejor.
Saludos
-
gracia Navaismo!
Yo uso el pic16F876
la velocidad del protocolo en 250000 Baud leete aqui y asi sabra como va http://www.dmx512-online.com/packt.html
la Uart recibe la Trama o paquete, y yo solo cacturo con los ndmx los canales que deseo, en este caso 64 canales ( 8x TDA8444)
pues creo que ahi esta el error, como tu lo explica arriba.
voy a experimentar haciendo algunos cambio aqui tmp<>0 and tmp1<>0 then
goto main
endif
espero que haya recibido mi mensaje privado.
Saludo
-
Hola si lo recibi, y bueno ya mas o menos me quedan algunas cosas claras, obviamente me haria falta muchisimo para poder aplicar lago pero la idea ya tomo forma.
Bueno buscando por ahi, di con este enlace que es del foro de PBP en Ingles, supongo que este es para uno de 8 canales. Y bueno viendo la forma en que esperan el codigo de "break" y reciben los canales y datos te pueden ayudar a adaptarlo a tu codigo.
Aqui el enlace (http://www.picbasic.co.uk/forum/showpost.php?p=9990&postcount=15)
Saludos
-
Que tal amigos!
Stk500!
Mañana te paso el codigo corregido que colocaste para que lo pruebes y te doy mis impresiones de lo que pudiese estar pasando :mrgreen:
Para mi el error esta en estas lineas
HSERIN 1000,MAIN,[tmp,tmp1]
if tmp<>0 and tmp1<>0 then
Saludos
-
Ah y se me olvidaba :mrgreen:
El tda8444 es un DAC de 6bits, por lo que no puedes enviarle un valor de 0 a 255 a travez del dmx512, sino que los valores que debes enviar deben estar de 0 a 63 :shock:
Si les estas enviando valores mayores, a 63, eso puede ser la causa del problema o una de las razones por la cual no te funciona bien el circuito :shock: :D
Revisa eso y me comentas :P
-
Ah y se me olvidaba :mrgreen:
El tda8444 es un DAC de 6bits, por lo que no puedes enviarle un valor de 0 a 255 a travez del dmx512, sino que los valores que debes enviar deben estar de 0 a 63 :shock:
Si les estas enviando valores mayores, a 63, eso puede ser la causa del problema o una de las razones por la cual no te funciona bien el circuito :shock: :D
Revisa eso y me comentas :P
:shock: que!!!!
eso me pasa por confiar en los circuito ya hecho :D
de momentos estoy haciendo cambio aqui
HSERIN 2000,MAIN,[tmp,tmp1]
if tmp<>0 and tmp1<>1 then
lo puse asi y obtengo mejor resultado, pero al llegar a 100% los Fader de cada canal, me hace oscilaciones el Voltage, osea no se mantienen estable(linear) pero sigo con la prueba que me dijiste, y muchas Gracias Raul :-/ :-/ :-/
saludo
-
Hola Rafael!, creo que el problema viene como te dice RALF2, por parte de que el TDA8444 (http://www.datasheetcatalog.org/datasheet/philips/TDA8444_3.pdf) es de 6 bits...
no tienes el link para ver el circuito?
Un abrazo
Norberto
-
Que tal amigos!
mira stk500 cambia estas lineas:
IF BREAK>=44 THEN
HSERIN 1000,MAIN,[tmp,tmp1]
if tmp<>0 and tmp1<>0 then
goto main
endif
Y coloca solo esto:
If Break < 44 then main
El resto del programa dejalo igual y me dices como te fue :mrgreen:
Amigo Norberto, se me paso una cosita en mi post anterior :mrgreen:
Aunque el DAC es de 6 bits y el dmx512 es de 8 bits con esta rutinita ellos lo llevan de 8 a 6 bits:
EXIT:
FOR TMP=1 TO DATI
VALORE[TMP]=VALORE[TMP]/4
NEXT TMP
Saludos
-
hola Ralf!
He hecho los cambios que me comenta sin ningun resultados, asi como lo pone no activa ningun canal, los raros del casos es que al delizar el FADER suavemente cuando llega a 50% el canal que se me hace oscilaciones el voltage de salida y cuando los suboa 100% se queda un corto
rato estable y me sigue oscilando el voltage.
por lo que yo creo el problema puede ser del Cristal, lo cambiera y comentare por aqui.
Hola Norberto de momento no puedo publicar el circuito y debo decirte que el circuito esta bien, yo ya lo habia probado en el Protoboard y pensaba que era el protoboard que me daba problema y ahora veo que montandolo en la placa sigo igual :(
un abrazo Norberto y ven a menudo por aqui que se te extraña :mrgreen:
Un abrazo
-
Que tal stk500!
Mira aqui te adjunto el programa hecho en proton para el dmx512, con la ultima version del compilador :shock: :mrgreen:
Pruebalo y nos comentas los resultados.
'****************************************************************
'* Name : UNTITLED.BAS *
'* Author : [select VIEW...EDITOR OPTIONS] *
'* Notice : Copyright (c) 2008 [select VIEW...EDITOR OPTIONS] *
'* : All Rights Reserved *
'* Date : 15/11/2008 *
'* Version : 1.0 *
'* Notes : *
'* : *
'****************************************************************
Device = 16F876
XTAL = 20
Config CP_OFF, DEBUG_OFF, WRT_ENABLE_OFF, CPD_OFF, LVP_OFF, BODEN_OFF, PWRTE_ON, WDT_OFF, HS_OSC
ADCON1 = 7 ' ENTRADAS Y SALIDAS DIGITALES
ADCON0 = 0
HSERIAL_BAUD = 250000 ' Set baud rate to 250K
HSERIAL_RCSTA = %11010000 ' Enable serial port and continuous receive
HSERIAL_TXSTA = %01100101 ' Enable transmit and asynchronous mode
HSERIAL_CLEAR = On ' Optionally clear the buffer before receiving
Symbol IN =PORTC.0
Symbol LED =PORTC.3 'LED
Symbol SDA =PORTA.2 'SDA TDA8444 OUT ANALOGICHE ESTERNE
Symbol SCL =PORTA.3 'SCL TDA8444 OUT ANALOGICHE ESTERNE
Input IN
Dim TMP As Word
Dim TMP1 As Byte
Dim VALORE[65] As Byte
Dim BREAKI As Word
Dim NDMX As Word
Dim DATI As Word
Clear
OPTION_REG.7 = 0 'ACTIVA LAS RESISTENCIAS PULL UP DEL PORTB
For TMP = 0 To 10
Toggle LED
DelayMS 200
Next
Low LED
MAIN:
NDMX=0
NDMX.0=PORTA.1
NDMX.1=PORTA.0
NDMX.2=PORTB.7
NDMX.3=PORTB.6
NDMX.4=PORTB.5
NDMX.5=PORTB.4
NDMX.6=PORTB.3
NDMX.7=PORTB.2
NDMX.8=PORTB.1
NDMX.9=PORTB.0
NDMX = NDMX ^ %0000001111111111
DATI=0
BREAKI = PulsIn IN, 0 'Espera a que se genere el pulso del break del dmx
If BREAKI < 44 Then MAIN
For TMP = 1 To NDMX 'BUSCA DONDE COMIENZA EL CANAL SETEADO EN LOS DIP SWITCH
TMP1 = HRSin, {10, MAIN}
Next
For TMP = 1 To 64 'COMIENZA A ALMACENAR LOS DATOS A PARTIR DEL CANAL
VALORE[TMP] = HRSin, {1000, MAIN} 'SELECCIONADO EN LOS DIP SW
DATI = DATI + 1
Next
For TMP = 1 To DATI 'CAMBIA LA ESCALA DE VALORES DE 0 A 255 POR
VALORE[TMP] = VALORE[TMP]/4 'O A 64 PARA PODER SER ENVIADOS A LOS TDA8444
Next
'AQUI ENVIAMOS LOS VALORES OBTENIDOS DEL DMX512 A LOS TDA8444
I2COUT SDA,SCL,%01000000,%00000000,[VALORE[1],VALORE[2],VALORE[3],VALORE[4],VALORE[5],VALORE[6],VALORE[7],VALORE[8]]
I2COUT SDA,SCL,%01000010,%00000000,[VALORE[9],VALORE[10],VALORE[11],VALORE[12],VALORE[13],VALORE[14],VALORE[15],VALORE[16]]
I2COUT SDA,SCL,%01000100,%00000000,[VALORE[17],VALORE[18],VALORE[19],VALORE[20],VALORE[21],VALORE[22],VALORE[23],VALORE[24]]
I2COUT SDA,SCL,%01000110,%00000000,[VALORE[25],VALORE[26],VALORE[27],VALORE[28],VALORE[29],VALORE[30],VALORE[31],VALORE[32]]
I2COUT SDA,SCL,%01001000,%00000000,[VALORE[33],VALORE[34],VALORE[35],VALORE[36],VALORE[37],VALORE[38],VALORE[39],VALORE[40]]
I2COUT SDA,SCL,%01001010,%00000000,[VALORE[41],VALORE[42],VALORE[43],VALORE[44],VALORE[45],VALORE[46],VALORE[47],VALORE[48]]
I2COUT SDA,SCL,%01001100,%00000000,[VALORE[49],VALORE[50],VALORE[51],VALORE[52],VALORE[53],VALORE[54],VALORE[55],VALORE[56]]
I2COUT SDA,SCL,%01001110,%00000000,[VALORE[57],VALORE[58],VALORE[59],VALORE[60],VALORE[61],VALORE[62],VALORE[63],VALORE[64]]
GoTo MAIN
End
Saludos