Qwiic Twist Encoder misbehaves

Hi,

I’m using a single Qwiic encoder and a few other i2c devices on a single bus (Particle Argon controller). The Twist encoder and RGB LED mostly works fine, but sometimes it becomes unresponsive and the RGB LED starts flickering. I have wondered if the i2c pull-up resistance is off, but the other i2c devices are fine and disabling the on-board pull-ups does not make a difference. I have tried three different Twist modules; all behave similarly.

Any help would be much appreciated!

Thanks & Best,

Max

The hookup guide https://learn.sparkfun.com/tutorials/qw … 1615791300 mentions:

"The INT pin is active low and is open drain output. The interrupt pin will go low when any of the follow events happen:

The user presses the button is pressed or released.

The user has turned the knob and no movement has been detected for a certain amount of time. This amount of time is called the turnInterruptTimeout and is 250ms by default. This means that once the user has stopped turning the knob for 250ms the interrupt will fire. This is helpful when the user is doing lots of knob changes. The Qwiic Twist won’t fire the interrupt until the user has stopped fidgeting. The turnInterruptTimeout is software configurable from 1ms to 65000ms (65 seconds).

The INT pin is open drain and is pulled up through a 10k resistor but if you want to connect multiple Twists and share the interrupt pins among many Twists then you can optionally cut the jumper to remove the 10k pull up on each Twist board.

The INT jumper is a normally closed jumper; there is a small trace connecting the two pads. This jumper connects the INT pin on the ATtiny84 through a 10k resistor to 3.3V. Cutting the small trace disconnects the 10k resistor from the INT pin on the ATtiny84.

Qwiic INT jumper closed with trace

The INT pin on Qwiic Twist is open drain, meaning the pin will actively go low when an interrupt occurs but will then float when there is no interrupt. This open drain type of setup is handy if you have multiple devices sharing a single interrupt line. For advanced applications (such as many many Twists all sharing the same INT pin) you may want to cut this jumper on each Twist to remove the 10k pull ups. For general use you can leave this jumper unmodified.

The Qwiic Twist has built-in 2.2k pull-up resistors on the SDA and SCL lines. These are needed for normal I2C communication. The I2C jumper has two small traces connecting the pull-ups to 3.3V. For general use you can leave this jumper unmodified. If you have many (over 7) devices on the I2C bus, each with their own pull up resistors, then you may want to cut the I2C jumpers to disconnect the 2.2k resistors on each Qwiic board."

It sounds like a combination of some of those above factors resulting in false Interrupts…share a photo and wiring diagram, and finally the code being used - we’ll see if anything stands out :smiley: