Страница 1 из 1

AD5601(dac) spi 3-wire

Добавлено: Вт июл 26, 2011 10:16:42
jeck-wolf
Кто знает правильную последовательность сигналов. а то я запутался.

Даташит.ad5601
http://www.datasheetcatalog.org/datashe ... t5jtfy.pdf

Страница 7.- сигнал synk инверсний.

Страница 14.- на рис 27 битов в правом 17
стр 13 снизу битов 16

как правельно отослать?

Re: AD5601(dac) spi 3-wire

Добавлено: Вт июл 26, 2011 10:22:50
Satyr
У тебя же есть даташит. В чем вопрос.
spi там, на самомо деле, 2 проводный -))) только на прием.

и к какому контроллеру будешь прикручивать ? там 16 битные пакеты, железный SPI в столь любимых тут аврах, насколько помню, работает только с 8 битными.

Re: AD5601(dac) spi 3-wire

Добавлено: Вт июл 26, 2011 10:25:51
jeck-wolf
ATTINY25

Вот программа на отправку

.include "tn25def.inc"
.def temp =R16
.def temp1 =R17
.def BTS =R20
.def Bit_counter =R21
.equ SYNC =PB4
.equ SCL =PB2
.equ SDA =PB0

.org 0
rjmp RESET
reset:
ldi temp,RAMEND
out SPL,temp ;Init Stack Pointer
ldi temp,0b010111
out DDRB,temp
ldi temp,0b010000
out PORTB,temp

ldi temp,0x80
out CLKPR,temp
ldi temp,0b00001000 ;8/256=31.250 khz
out CLKPR,temp

LDI BTS,0X0F
RCALL Send_Byte


PROG:
RJMP PROG


DELAY:
ldi temp1,0x0F
d2:ldi temp,0xff
d1:dec temp
brne d1
dec temp1
brne d2
RET
;++++++++++++++++++++++++++++++++++++++++++++++++++++i2c send BTS= ?????????? ????
SYNC_null:
CBI PORTB,SYNC
RCALL DELAY
RET
SYNC_ONE:
SBI PORTB,SYNC
RCALL DELAY
RET
Clock_null:
CBI PORTB,PB1
CBI portB,scl
RCALL DELAY
RET
Clock_one:
SBI PORTB,PB1
SBI portB,scl
RCALL DELAY
RET
Data_null:
CBI portB, sda
RCALL DELAY
RET
Data_one:
SBI portB,sda
RCALL DELAY
RET
;))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
Send_Byte:
LDI Bit_counter, 8
CLR TEMP
RCALL SYNC_ONE
RCALL Clock_ONE
RCALL SYNC_null
next_bit_sI:
RCALL Clock_ONE
SBRC TEMP,7
rjmp sI
RCALL Data_null
rjmp sII
sI: RCALL Data_one
sII: RCALL Clock_NULL
ROL TEMP
DEC Bit_counter
BRNE next_bit_sI

LDI Bit_counter, 8
next_bit_s:
RCALL Clock_ONE
SBRC BTS,7
rjmp s1
RCALL Data_null
rjmp s11
s1: RCALL Data_one
s11: RCALL Clock_NULL
ROL BTS
DEC Bit_counter
BRNE next_bit_s
RCALL SYNC_ONE
RCALL Clock_ONE
RET

и никак на выходе 0

Re: AD5601(dac) spi 3-wire

Добавлено: Вт июл 26, 2011 10:33:17
jeck-wolf
SPI программный

Re: AD5601(dac) spi 3-wire

Добавлено: Вт июл 26, 2011 11:03:46
Леонид Иванович
Не проверял, но примерно так:

Код: Выделить всё

;Загрузка 8-битного ЦАП, код ЦАП в регистре temp1

Wr_Dac:   mov  temp,temp1
                lsr    temp
                lsr    temp               ;temp = 0,0,D7,D6,D5,D4,D3,D2
                cbi    PORTB,SYNC
                rcall  Spi_Wr
                mov  temp,temp1
                swap temp
                lsl     temp
                lsl     temp              ;temp = D1,D0,0,0,0,0,0,0
                rcall Spi_Wr
                sbi   PORTB,SYNC
                ret
               
;Загрузка байта по SPI, код в регистре temp

Spi_Wr:	ldi	Cnt,8		;counter load
wd_bit:	sbi    PORTB,SCL
	        rol	temp
	        brcs	wd_1
wd_0:	cbi    PORTB,SDA
	        rjmp	wd_clk
wd_1:	sbi    PORTB,SDA
wd_clk:     cbi    PORTB,SCL
	        dec	Cnt
	        brne	wd_bit
	        ret
Совет! Никогда не качайте даташиты с левых сайтов, а только с сайта производителя! У Вас даташит PRELIMINARY, хоть уже есть rev. E.

Re: AD5601(dac) spi 3-wire

Добавлено: Вт июл 26, 2011 11:51:23
jeck-wolf
БОЛЬШОЕ СПАСИБО, ОЧЕНЬ ПОМОГ)