/* DAC Example */
#define CS 8 // chip select
#define CLOCK 9
#define DATA 10
#define HALF_CLOCK_PERIOD 2 //2 uS of clock period
float j=0;
int data;
int value;
void setup()
{
pinMode(DATA, OUTPUT);
pinMode(CLOCK,OUTPUT);
pinMode(CS,OUTPUT);
digitalWrite(CS,HIGH);
digitalWrite(DATA,LOW);
digitalWrite(CLOCK,LOW);
}
void writeValue(uint16_t value)
{
digitalWrite(CS,LOW);//start of 12 bit data sequence
digitalWrite(CLOCK,LOW);
data = data << 2; //Add 2 0 at the end of the data. A 10-bit data word should add 2 0 at the LSB bit (sub-LSB) since the DAC input latch is 12 bits wide.(SEE TLC5615C DATASHEET)
for(int i=11; i>=0; i--)//send the 12 bit sample data
{
digitalWrite(DATA, (value & (1 << i) ) >> i );//DATA ready
delayMicroseconds(HALF_CLOCK_PERIOD);
digitalWrite(CLOCK,HIGH);//DAC get DATA at positive edge
delayMicroseconds(HALF_CLOCK_PERIOD);
digitalWrite(CLOCK,LOW);
}
digitalWrite(CS,HIGH);//end 12 bit data sequence
}
void loop()
{
j=567; //in here, 567 is a example. DAC OUT=j*Vref/1024
writeValue(floor(j));
}