Hello there,
I have been asked to write some software for an adc12138 that is residing on an ISA board for an industrial computer.
Everything seems to work ok I can read and set the status register of the part.
However when I try to read a channel successive readings of the same channel produce large variations in the output, up to 10% of the input value. As the input voltage is increased the range of readings gets wider.
I do not believe that my code is the problem since I am reading the status register correctly.
I have slowed the whole process right down to account for the mismatch of timing between the ISA bus and the 5MHz oscillator the chip is connected to just in case, but this still shows the same results.
My transmit receive procedure goes like this
TX = nextcommand RX = resultbuffer i = 0
set SCLK LO set CS LO
loop i < lengthofnextresult if MSB of TX = 1 set DIN HI else set DOUT LO rotate TX one bit left SCLK HI get DOUT and but into RX rotate RX one bit left SCLK LO increment i loop
set CS HI set SCLK HI
The board has seperate Digital and analogue grounds seperated by an LC circuit: 10uH D5V____________________((((()_____ A5V | | | | | | === 100n === 10n === 10n | | | ___|__________|____/\/\/\/\____|___ O ohm (wire link )
I have tried to eliminate any ground bounce from the digital inputs using series 1K5 resistors and 33pF caps to the DGND. This suggestion I found in a thread at
We are using a potential divider across the inputs of the channels R1 = 10K R2 = 10k To step down the input voltage, I noted the ADC12138 datasheet mentions not using high impedance inputs, but the voltage we are measuring is steady at the moment could this be the problem?
If any body has any knowledge of any gotchas please let me know and I'll try to mod the board if necessary.
Cheers
Matt