2
\$\begingroup\$

I've posted this question to TI E2E forum here. I'm cross-posting it here in hopes of casting a broader net.

I'm writing an Arduino library for the LMP91000 (github), and I'm apparently having some trouble getting the writes to succeed. I know there's a lock bit that has to be cleared before writing certain registers, but I can't seem to get it to change the value. Here is a logic trace of a write followed by read to the LOCK register (0x01).

enter image description here

It looks to me like I'm compliant with the datasheet to me, but the write is not actually taking hold. I've checked an the clock is 100kHz as well. The LMP91000, I think, is acknowledging when it's expected to. My controller is, I think, doing the right things with start, stop, ack/nack for it's part.

Furthermore, when I just go in and read all the registers, I get the following results, decoded for convenience (logic trace attached to e2e forum post):

STATUS: 0x01
  ready
LOCK: 0x01
  Registers 0x10, 0x11 in read only mode (default)
TIACN: 0x03
  RLoad selection = 100 Ohm (default)
  TIA feedback resistance selection = External resistance (default)
REFCN: 0x20
  Reference voltage source selection = Internal (default)
  Internal zero selection = 50% of the source reference (default)
  Selection of the Bias polarity = Negative (VWE - VRE) < 0V (default)
  BIAS selection = 0% of the source reference (default)
MODECN: 0xFF
  Shorting FET feature = Enabled
  Mode of Operation selection = Temperature measurement (TIA ON)

I'm struggling to see what I'm doing wrong, and would appreciate some help figuring it out. Thanks!

Update #1

I should give more context. I have three LMP91000 chips (logically) on one I2C bus. The chips themselves have MENB hardwired to GND. I've put an I2C repeater with an enable (PCA9515ADP) on each to isolate them from each other. I know I could have used MENB for this, but I have another I2C ADC chip with each sensor so I wanted a single point to enable/disable the entire address domain.

I've got two hardware setups now and writes seem to be working on one of the setups, and the other (original) setup is acting as described above. So this appears to be some kind of unit specific issue related to one of my boards at the moment.

\$\endgroup\$
  • \$\begingroup\$ Will you have a diagram of the connections needed to program the LMP91000 using arduino? \$\endgroup\$ – Victor Ernesto López Eusebio Dec 3 '17 at 21:31
1
\$\begingroup\$

You have to control MENB line too. It must be down to write to the chip.

\$\endgroup\$
  • \$\begingroup\$ yea, it's tied to GND... I'll update the question \$\endgroup\$ – vicatcu Feb 6 '15 at 21:53
0
\$\begingroup\$

After much hair pulling I've figured it out. It's the worst when things are somewhere between working and not working as expected.

How annoyingly stupid of me. I had 330 ohm resistors pulling up the I2C bus instead of the intended 3.3k ohms. Swapped out those resistors and all was well with the world. Lesson remembered, don't always trust what you see on a logic analyzer, digital interfaces still ultimately have analog properties.

\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.