Electronic – Can’t get DS1077 programmable oscillator to work

i2c

I'm trying to get the DS1077 to work, but I can't for the life of me figure out what I'm doing wrong. I'm using the defaults for the MUX and BUS registers, and programming in my own DIV frequency has no effect. I can read out the registers over I2C and they return the values I set, but the oscillator output (as measured on my scope) is nothing like what it should be. I tried copying the values in from SparkFun's example (I'm using their breakout board) but the "40kHz" output is way above the 60MHz bandwidth of my scope.

I found an example on Maxim's website and they recommend you tie CTRL0 and CTRL1 to GND if you're not using them – but if I tie CTRL1 to GND mine stops responding to I2C messages! I have to tie CTRL1 to VCC to get it to respond over I2C (no mention of that in the datasheet), but that disables the oscillator output. Otherwise my "circuit" is the same as their example – SDA/SCL go to an Arduino, and the OUT pins go to my scope. VCC and GND are connected correctly and within spec.

I've got no idea what's going on, it seems really simple but I still can't get it to work :'-( Has anyone encountered anything like this before? Any ideas to help narrow down the problem?

Best Answer

I would recommend reading the datasheet again for that device. It sounds like CTRL0 and CTRL1 can also be used as output enables depending on the devices control registers MUX and BUS. This would explain why when you assert CTRL0/CTRL1 the oscillator output is disabled. Another thing to note is that the datasheet says the register values are store on an internal EEPROM, but only after a write command is executed. It could be possible that you think the registers are set one way, but when you power cycle the board the previous values are being loaded from EEPROM. I've worked a lot with I2C clock chips and every time things weren't working it was because I miss interpreted one of the register values. Write each register out on initialization then read them all back to make sure you initialized them properly. Compare the results to the datasheet to see if they make sense.

EDIT: It appears that the CTRL pins can also be used to place the device in a power-down mode which would explain why it's not responding to I2C at times.