I am attempting to design a new system around the AD7608 8-channel 18-bit ADC. However, I am running into some confusing behavior and I was hoping that someone here might have some guidance.
First, I think I have working communication, but the data I am getting from the system is very strange. It will sit at what seems to be potentially valid data (i.e. stable high bits, fluctuating LSBs), and then seem to get locked into a nonsensical state.
For instance, after parsing into 18-bit packets, I see this for each channel (in 2s complement, so the first value is negative for some reason).
So, maybe not valid, but definitely at least apparently reasonable.
However, two samples later, I'm getting this:
and these *exact* values repeat for hundreds of cycles. Then later on it gets locked here:
again with these *exact* values repeating for hundreds of cycles. Another popular locked state is this:
And at some point it's just printing out zeros.
As far as I can see the device never actually recovers, and instead just switches between different obviously wrong states for the remaining time that it is on. This happens within seconds of turning on the system.
When I work out the binary original packet sent from the AD7608, these three locked states look like basically a series of 10000000 sequenced over and over. I don't know how the communication could be working such that it would produce a 1 every eighth serial clock with an offset.
Other odd behavior includes the negative inputs to each differential input floating at 190mV (on all channels) despite a 100k pulldown to ground. There are no other electrical connections to the pin on my circuit, so it seems that there is a 2.6M impedance between the negative terminals and 5VDC in the circuit (or a 1.9uA bias current out of the pin). The pins themselves are surrounded by ground plane. This seems very odd, and is uniform across all of the inputs when not connected to anything else. The positive inputs are all floating at 1.956V when left unconnected (they are not pulled down to ground).
Could these two oddities be related?
As far as I can see on my oscilliscope the SPI lines are clean, so I don't think that is the problem.
I'm really at a loss here to explain this behavior. I seem to have valid communication going on, but the chip itself seems to be locking up for inexplicable reasons and then outputting not nothing, but instead something crazy. I've attached my arduino firmware; it should automatically output the received data as 2s complement after parsing to the serial monitor.