Seekat Code for Arduino UNO

//Ardunio code for controlling Seekat DC voltage box from  Designed for Arduino UNO.

#include “SPI.h” // necessary library
int sync=10; // using digital pin 10 for SPI slave select
int ldac=9; // Load dac (not implemented). You need to change some jumpers on the boards if you want to use synchronous updating and modify arduino code.
int clr=8; // DAC Clear (not implemented). You need to change some jumpers on the AD58764 boards if you want to use this.
void setup()
pinMode(7, OUTPUT); // we use this for SS pin
pinMode(sync, OUTPUT); // we use this for SS pin
pinMode(ldac, OUTPUT); // we use this for SS pin
digitalWrite(7, HIGH);
digitalWrite(sync, HIGH);
SPI.begin(); // wake up the SPI bus.
SPI.setBitOrder(MSBFIRST); //correct order for AD5764.
SPI.setDataMode(SPI_MODE1); //1 and 3 communicate with DAC. 1 is the only one that works with no clock divider.

void setValue(byte DB[10])

if (DB[0] == 255&&DB[1]==254&&DB[2]==253) // These bytes serve as a control that communication is working, and are reserved for future functionality such as synchronous updating, clear, and native arduino autoramp.
digitalWrite(sync, LOW); //assert sync-bar
int o1 = SPI.transfer(DB[3]); // send command byte to DAC2 in the daisy chain.
int o2 = SPI.transfer(DB[4]); // MS data bits, DAC2
int o3 = SPI.transfer(DB[5]);//LS 8 data bits, DAC2
int o4 = SPI.transfer(DB[6]);// send command byte to DAC1 in the daisy chain.
int o5 = SPI.transfer(DB[7]);// MS data bits, DAC1
int o6 = SPI.transfer(DB[8]);//LS 8 data bits, DAC1
digitalWrite(sync, HIGH);//raise sync-bar to change the dac voltage. Must have LDAC-bar tied low.

else //This allows you to check on the scope what has been received by the Arduino for trouble shooting. Use pin 7 to trigger, then look at output of pins 13 (sclk) and 11 on the arduino to readout the bytes the arduino is getting.
digitalWrite(7, LOW);
SPI.transfer(DB[0]); Serial.flush();
SPI.transfer(DB[1]); Serial.flush();
SPI.transfer(DB[2]); Serial.flush();
SPI.transfer(DB[3]); Serial.flush();
SPI.transfer(DB[4]); Serial.flush();
SPI.transfer(DB[5]); Serial.flush();
SPI.transfer(DB[6]); Serial.flush();
SPI.transfer(DB[7]); Serial.flush();
SPI.transfer(DB[8]); Serial.flush();
digitalWrite(7, HIGH);

void loop()
if ( Serial.available()) // wait until all data bytes are avaialable
byte bytes[9];
for (int i=0; i<9; i++) {
bytes[i] =;
delay(2); //2mS pause to make sure bytes don’t run into each other.