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.
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;
}