This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Interface with PIC16F876 and DAC4814AP using SPI

Dear sir/Madam,

iam working on DAC4814 dip IC interface with pic16f876,writing a code in embedded c.In datasheets mentioned when we send 0x0fff we will get output +full scale and 0x0800 = zero.I think in beetween data value should change but not happing also showing +full scale..is something wrong or what must be the value of in between data..Kindly send me the answer
below is the code,kindly tell me where is mistake:


void main(void)
{
unsigned int i,c;
TRISA=0x00; // mux selection A,B,C output=0,STARt CONV,HYDRO_TEST;AC_MAG_GAIN=;
TRISB=0xF0; // CHANNEL SELECTION A0-A3=0;ADC16_BUSY,X,Y,ZADC_DRDY=1
TRISC=0xD1; // spi SDO,clk output=0,SDI input=1;TX=1;RX=1
ADCON1=0x86;

while(1)
{
DAC(0x0fff);     /// send data 0xfff,0x800,0x07ff
}

void DAC(unsigned int DAC_COUNT)
{
unsigned char i;
unsigned int DAC_DATA1,DAC_DATA2,DAC_DATA3;
DAC_DATA1 = ((DAC_COUNT)&(0xFFFF));
MUX_SEL(5);
DAC_EN=1;
DAC_LATCH=1;
for(i=0;i<16;i++) // 12 bit DAC clk ,latch,sdi =3.3KHZ when loop is 16,when loop 12 =3.5KHZ
{

SPI_SCL=0;
SPI_SDO = 0;

DAC_DATA1=(DAC_DATA1<<i); // NEXT BIT
DAC_DATA1=(DAC_DATA1 & 0x01); // AND OPEARATION TO GET SAME DATA

if(DAC_DATA1 == 0)
{
SPI_SCL=0;
SPI_SDO = 0;
}

else
{

SPI_SDO = 1;
SPI_SCL = 1;

delay();

}
}
for(i=16;i<32;i++) // 12 bit DAC clk ,latch,sdi =780HZ
{

SPI_SCL=0;
SPI_SDO = 0;

DAC_DATA2=(DAC_DATA2<<i); // NEXT BIT
DAC_DATA2=(DAC_DATA2 & 0x01); // AND OPEARATION TO GET SAME DATA

if(DAC_DATA2 == 0)
{
SPI_SCL=0;
SPI_SDO = 0;
}

else
{

SPI_SDO = 1;
SPI_SCL = 1;

delay();

}
}
for(i=32;i<48;i++) // 12 bit DAC clk ,latch,sdi =380 HZ
{

SPI_SCL=0;
SPI_SDO =0;

DAC_DATA3=(DAC_DATA3<<i); // NEXT BIT
DAC_DATA3=(DAC_DATA3 & 0x01); // AND OPEARATION TO GET SAME DATA

if(DAC_DATA3 == 0)
{
SPI_SCL=0;
SPI_SDO =0;
}

else
{

SPI_SDO = 1;
SPI_SCL = 1;

delay();

}
}

DAC_LATCH=0;
DAC_COUNT=0x0000;
MUX_SEL(7);
return;
}