Interfacing with an LTC1451
Ok, I am trying to interface with the LTC1451 12 bit DAC. I am using a modified version of the AD8803 code from the OBEX.
The only code that was changed was the demo code, AD8803_Demo, to cycle from values of 0 to 4096, and the AD8803.spin code, where I have replaced the bit size with 12 instead of 8. I have also removed the DACaddress variable, since the LTC1451 is a single DAC, not an octal.
Here is a copy of the Demo code, and below that is the modified AD8803.spin code:
I connected a scope to the CLK, CS, and SDI inputs, and noted that the Prop counts up to the 8th bit, then restarts the cycle. It does not go to the 12th bit.
I am wondering, since it looks as though the AD8803.spin code is independent to the bit width, why it would do this?
The only code that was changed was the demo code, AD8803_Demo, to cycle from values of 0 to 4096, and the AD8803.spin code, where I have replaced the bit size with 12 instead of 8. I have also removed the DACaddress variable, since the LTC1451 is a single DAC, not an octal.
Here is a copy of the Demo code, and below that is the modified AD8803.spin code:
CON
_CLKMODE = XTAL1 + PLL16X
_XINFREQ = 5_000_000
CS = 3
SDI = 2
CLK = 1
OBJ
DAC: "LT1451"
VAR
byte DACaddress,DACvalue
PUB Demo | x
repeat
repeat x from 1 to 4096
DACvalue := x
DAC.Set(CS,SDI,CLK,DACvalue)
waitcnt(clkfreq/100+cnt)
PUB Set(CS,SDI,CLK,DACvalue)
dira[noparse][[/noparse]CS] := 1 'Make CS pin an output
dira[noparse][[/noparse]SDI] := 1 'Make SDI pin an output
dira[noparse][[/noparse]CLK] := 1 'Make CLK pin an output
outa[noparse][[/noparse]CS] := 0 'Bring CS low
outa[noparse][[/noparse]CLK] := 0 'Bring CLK low ; load AD8803 data
SendData(SDI,CLK,12,DACvalue) 'Select Value
outa[noparse][[/noparse]CS] := 1 'Bring CS high ; latch AD8803 data
PRI SendData(SDI,CLK,Bits,Data)|temp 'Send DATA MSB first
temp := 1 << ( Bits - 1 )
repeat Bits
outa[noparse][[/noparse]SDI] := (Data & temp)/temp 'Set bit value
outa[noparse][[/noparse]CLK] := 1 'Clock bit
outa[noparse][[/noparse]CLK] := 0 'Clock bit
temp := temp / 2
I connected a scope to the CLK, CS, and SDI inputs, and noted that the Prop counts up to the 8th bit, then restarts the cycle. It does not go to the 12th bit.
I am wondering, since it looks as though the AD8803.spin code is independent to the bit width, why it would do this?

Comments
You need to re-define DACvalue as a word
This section of code ...
...should read
Note: You can·remove DACaddress since you don't use it in your case.
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
Beau Schwabe
IC Layout Engineer
Parallax, Inc.
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
Beau Schwabe
IC Layout Engineer
Parallax, Inc.
I think I was more caught up in figuring out how to communicate with the DAC (I am not too good with serial communications), that I overlooked that bit!