Tracker One I2c Sensor with Interrupt wired to GPIO D3(M8 connector), Seemingly Not Working

Hello,
I've been trying to get my sensor to trigger off of the M8 gpio pin D3. I've read through the references about the sleep configuration, but all of my attempts do not wake the Tracker One from sleep. While awake my i2c sensor interrupt goes high and low as expected.

The sensor we are using is running on an i2c interface and has an interrupt pin.

I would appreciate if I could get the help of the community with getting my Tracker One to Wake up from when my I2C sensor Interrupt changes.
Questions:

  1. When in Sleep mode (Stop or ULP), Does the ?

  2. How do I get the Tracker One to keep running the i2c sensor when in sleep mode and trigger the Tracker One to wake up off of the D3 pin from the M8 connector?

Below is my setup function:

void setup(){   
    TrackerConfiguration config;//Object for setting up tracker configuration to keep IO and Can working during sleep.
    checkSensors.I2cScan(); // from CCargoI2cScan
    config.enableIoCanPower(true);
    config.enableIoCanPowerSleep(false); //Keep CAN running while sleeping
    Tracker::instance().init(config);
    pinMode(D3,INPUT_PULLDOWN);    
Tracker::instance().location.regLocGenCallback(myLocationGenerationCallback);
    //Sleep Callbacks
    TrackerSleep::instance().registerSleepPrepare(prepareSleepCallback);
       TrackerSleep::instance().registerWake(wakeCallback);
       TrackerSleep::instance().wakeFor(D3,RISING);
Particle.connect();
}

Just to be sure, one of these things must be true:

  • You have a 3.3V regulator exterior to the Tracker One and your sensor is powered at 3.3V and the I2C bus runs at 3.3V. You have pull-up resistors to 3V3 on SDA and SCL.
  • Your I2C sensor runs at 5V and you have bidirectional level shifters on SDA and SCL, and a level shifter on D3. This is required or you will damage the Tracker which is not 5V tolerant. For some level shifters like the PCA9306 you will need one set of pull-ups on the 3V3 side and one set on the 5V side for SDA and SCL.

Is the problem that the tracker does not wake on D3 high, or the sensor is not generating the interrupt when in sleep? That is the first thing to determine by applying 3.3V maximum to D3 while in sleep mode.

Thank you for the quick response!

The sensor has an integrated 3.3v regulator and runs on 3.3v logic.

When I apply the 3.3v from my sensor interrupt to pin D3, the voltage reading from my multi meter drops 1.88v. This doesn't trigger the Tracker to wake from sleep mode.

Connecting the 3.3v output pin to D3 does trigger the Tracker One to wake from Sleep. I am now thinking that maybe my interrupt pin needs some other modifications or is damaged. I'll try a new sensor.

@escargo, what is the I2C sensor you are using?

Ltr 303

@escargo is the LRT303 on a breakout board? Can you be more specific?

Yes. We are using the Adafruit LTR 303 Thank you for your help with this!

@rickkas7, looking at the Adafruit schematics, I see one glaring problem. Though there is a 3.3v regulator on the board, the nRF52840 side of the I2C bus is pulled up to the supplied voltage, i.e. 5V, and not the 3.3v regulated voltage. In this case that's 5V which the nRF52840 cannot handle!

image

You would need an external 3.3v regulator, as @rickkas7 indicated, to provide the 3.3v for the LTR303 and I2C pullups.

As for the interrupt, it is pulled up 3.3v via a 10K resistor since the output of the LTR303 is open-drain. Besides the 5V I2C bus pull-up issues, I am not sure why you are seeing 1.88v on D3.

2 Likes

Yes, I agree that an external regulator is required. While the Adafruit breakout has a regulator, it's only for interfacing with a 5V MCU. If you supply the board with 5V it will make the I2C bus 5V which will damage the Tracker.

Because the IRQ pin is open drain, it should be configured as INPUT because there is already a 10K pull-on on the breakout. It could also be INPUT_PULLUP but definitely not INPUT_PULLDOWN as you have the pull operating in opposite directions.

2 Likes

Thank you @rickkas7 and @peekay123 for your help with this. Waiting on the 3.3v regulator. The combination of the D3 pin as an input only, and using a Falling edge seems like like what will work best for us.

Thank you!

1 Like