Hola tengo una tira de leds RGB que tiene el controlador de DMS D70A (es parecido al LPD6803) y estoy queriendo programarla con un PIC2550, pero no me sale!.
Esta es la tira:
Solo dos entradas el clock y el dato, en el datasheet dice esto:
① The first 32 bits of "0" is the start frame data, followed by data frame. at the rising edge of cin,the high bit of start frame is sent first, then the low bit.
②The D705 next to the controller receives the first data frame, the frame contains one start bit of ‘1’ and three sets gray scale data of 5 bits for RGB.
③After the data read into the D705s,the controller sents the corresponding pulse to D705s.then the new data go into effect.
① Los primeros 32 bits de "0" son los datos de la trama de inicio, seguido por la trama de datos. en el flanco ascendente de cin, el bit alto de la trama de inicio se envía en primer lugar, luego el bit bajo.
② El D705 junto al controlador recibe la primera trama de datos, la trama contiene un bit de inicio de '1 'y tres conjuntos de datos de escala de grises de 5 bits para RGB.
③ Después de la lectura de datos en los D705s, el controlador senta el impulso que corresponde a D705s.then los nuevos datos en vigor.
Mi transmición la hago por SPI y no se si la estoy configurando bien, se las paso:
CFG_SPI
movlw b'00100000' ; SPI Config
movwf SSPCON1 ; WCOL = 0 Disable
; SSPOV = 0 Disable
; SSPEN = 1 Enable ******
; CKP = 0 Idle is a low Level
; SSPM3:SSPM0 = 0000 SPI clock /4
movlw B'10000000' ; Set up SPI port, SPI master,
movwf SSPSTAT ; SMP = 1
; CKE = 0
; D/A = 0 NC I2C
; P = 0 NC I2C
; S = 0 NC I2C
; R/W = 0 NC I2C
; UA = 0 NC I2C
; BF = 0 FLAG
clrf SSPCON2,ACCESS ; Deshabilito el modulo MSSP I2C, BANKED=1 ACCESS=0
bcf UCON,USBEN,ACCESS ; Desactiva el modulo USB
Mi tabla de envio de datos:
SEC1 DT B'00000001',B'00000000',0XAA ; apagado
SEC2 DT B'00100001',B'00000000',0XAA ; rojo
SEC3 DT B'00000001',B'00000100',0XAA ; verde
SEC4 DT B'00000001',B'10000000',0XAA ; azul
Así lo envió:
TX_SECUENCIA
movff MsnAddressUpper,TBLPTRU
movff MsnAddressHigh,TBLPTRH
movff MsnAddressLow,TBLPTRL
CARGO_SECUENCIA
TBLRD*+ ; Leo la tabla
movff TABLAT,TEMP_SEND ; Cargo el dato
MOVLW 0XAA
XORWF TEMP_SEND,W
BTFSC STATUS,Z ;SI LOS DATOS NO SON IGUALES,
GOTO COMANDO_FIN
CALL TX_SPI ; y lo envió
TBLRD*+ ; Leo la tabla nuevamente para saltearme un dato
movff TABLAT,TEMP_SEND ; Cargo el dato
CLRF TEMP_SEND ; y lo borro
bra CARGO_SECUENCIA ; Vuelvo a empezar
COMANDO_FIN
RETLW 0X00 ; Vuelve al programa principal.
TX_SPI
bcf PIR1,SSPIF ; borra flag interrupción
movFf TEMP_SEND, SSPBUF ; Transmision por puerto SPI
SPI_DELAY
NOP
NOP
btfss PIR1,SSPIF ; Espera a que se envie el dato
goto SPI_DELAY
bcf PIR1,SSPIF ; borra flag interrupción
RETLW 0X00
El "1" que se repite en todos es el "start bit"
Cuando envio las secuencias y todas son iguales no hay problema ya que me muestra correctamente los colores pero al enviarla una de cada ahi los colores se mezclan y no corresponden a lo que envió creo que estoy perdiendo algún bit o se están corriendo de la trama que opinan?
Saludos