Estou desenvolvendo um projetinho com o ADC CS5550 da Cyrrus http://www.cirrus.com/en/products/pro/detail/P1038.html mas estou com problemas para faze-lo funcionar corretamente.
Estou usando a referência interna dele, e nas Entradas AIN1+ e AIN1- estou ligando uma célula de carga (350 ohms) alimentada com 5Vdc e saida de 5mV/V.
As Rotinas de comunicação entre o AT89C51ED2 e CS5550 estão funcinando perfeitamente.
- Código: Selecionar todos
;----------------------------------------------------------------
;
RSTADC EQU P1.0 ; RESET DO ADC
CSADC EQU P1.1 ; CHIP SELECT DA SPI DO ADC
SDI EQU P1.5 ; ENTRADA DE DADOS DA SPI DO ADC
SCLK EQU P1.6 ; CLOCK DO SPI
SDO EQU P1.7 ; DA DE DADOS DA SPI DO ADC
;
;----------------------------------------------------------------
;
; ENVIA 8 BITS (ACC) PARA CS5532
;
TX8ADC: MOV R2,#008H ; ENVIA 8 BITS
A101: CLR SCLK ; SCLK = 0
RLC A ;
MOV SDO,C ; SDO = C (ENVIA 1 BIT)
ETB SCLK ; SCLK = 1
DJNZ R2,A101 ;
CLR SCLK ; SCLK = 0
RET ;
;
;----------------------------------------------------------------
;
; RECEBE 8 BITS (ACC) DO CS5532 (ENVIA SYNC0 '1111 1110')
;
RX8ADC: MOV R2,#007H ; RECEBE 8 BITS
SETB SDO ; -> SINC0
A102: SETB SCLK ; SCLK = 1
MOV C,SDI ; C = SDI (RECEBE BIT)
RLC A ;
CLR SCLK ; SCLK = 0
DJNZ R2,A102 ;
CLR SDO ; -> SINC0
SETB SCLK ; SCLK = 1
MOV C,SDI ; C = SDI (RECEBE BIT)
RLC A ;
CLR SCLK ; SCLK = 0
RET ;
;
;----------------------------------------------------------------
;
; ENVIA ENDEREÇO (R0) E 3 BYTES (R3,R4,R5) PARA O CS5550
; ESCREVE NO REGISTRADOR DO CS5550
;
TXRADC: CLR CSADC ; CS = 0
CLR SCLK ; SCLK = 0
MOV A,R0 ;
LCALL TX8ADC ; ENVIA R0
MOV A,R3 ;
LCALL TX8ADC ; ENVIA R3
MOV A,R4 ;
LCALL TX8ADC ; ENVIA R4
MOV A,R5 ;
LCALL TX8ADC ; ENVIA R5
SETB CSADC ; CS = 1
CLR SCLK ; SCLK = 0
RET ;
;
;----------------------------------------------------------------
;
; ENVIA ENDEREÇO (R0) E RECEBE 3 BYTES (R3,R4,R5) DO CS5550
; LE REGISTRADOR DO CS5550
;
RXRADC: CLR CSADC ; CS = 0
CLR SCLK ; SCLK = 0
MOV A,R0 ;
LCALL TX8ADC ; ENVIA R0
LCALL RX8ADC ; RECEIVE R3
MOV R3,A ;
LCALL RX8ADC ; RECEIVE R4
MOV R4,A ;
LCALL RX8ADC ; RECEIVE R5
MOV R5,A ;
SETB CSADC ; CS = 1
CLR SCLK ; SCLK = 0
CLR C ;
RET ;
;
;----------------------------------------------------------------
;
; RE-INICIALIZAÇÃO DA PORTA SERIAL DO CS5550
;
RSTSAD: CLR CSADC ; CS = 0
CLR SCLK ; SCLK = 0
MOV R3,#00FH ; ENVIA 15 VEZES
A104: MOV A,#0FFH ;
LCALL TX8ADC ; ENVIA 'FF' TO CS5550
DJNZ R3,A104 ;
MOV A,#0FEH ;
LCALL TX8ADC ; ENVIA 'FE' TO CS5550
SETB CSADC ; CS = 1
CLR SCLK ; SCLK = 0
RET ;
;
;----------------------------------------------------------------
Meu problema é com a calibração do mesmo. O datashet é muito superficial e não achei nenhum exemplo de código para me basear.
Será que alguem que já trabalhou com esse CS5550 poderia me dar uma luz?
Obrigado,
Zac
ACERTEI A FORMATAÇÃO DO CÓGIGO