
Justin_ME (Customer) asked a question.
I'm having an issue finding more than one I2C address when using the P1AM-100. I have a DFR0554 16x2 LCD with RGB backlight. Per the spec sheet for the DFR0554, there is an I2C address for the RGB backlight and a separate one for the LCD itself. When running a I2C scan, it only finds the LCD address (0x3E). The LCD powers on and I can write to it, but the backlight will not turn on.
Running the same I2C scanner on an Arduino Uno with the same DFR0554, I am able to see both I2C addresses. Once I have both addresses, I can control the backlight ONLY while using the Arduino Uno. If I use the found I2C address and try to control the backlight from the P1AM-100, there is no response from the backlight. Is there any limitation to the number of I2C devices that can be connected to a P1AM-100?
DFR0554 Documentation: wiki.dfrobot.com/Gravity__I2C_16x2_Arduino_LCD_with_RGB_Font_Display_SKU__DFR0554
Hey @Justin_ME (Customer) ,
My first thought here between the P1AM-100 and the uno is that the Uno uses 5V logic vs 3.3V on P1AM.
How are you connecting these two devices? Is it direct through the header pins or via a P1AM-GPIO?
I don't think there's any practical limit on I2C devices with the P1AM aside from typical concerns like long wire runs or address conflicts.
I am connecting via a P1AM-GPIO. The DFR0554 has a stated voltage of 3.3-5.0V so I assumed the 3.3V on the P1AM wouldn't be an issue. Do you see a reason why I should be concerned with the lower operating voltage?
I wouldn't expect an issue at 3.3V.
Can you try removing the P1AM-GPIO and connecting directly to the header pins and see if you notice a difference?
I'm also not certain if the DFR0554 device has pull-up resistors on the I2C lines. While unplugged, measuring resistance between the I2C lines and VCC would give us a clue.
Removed the P1AM-GPIO and connected the DFR0554 to pins 11, 12, VCC, and GND on the P1AM-100. When doing so, I have full control of the DFR0554.
The I2C address I'm attempting to reach is 0x2D, the P1AM-GPIO wouldn't have that reserved for any reason would it? I'm a little confused why one address works and the other doesn't.
When connected to the P1AM-GPIO, I modified the I2C scanner code to exclude the address of the LCD to make sure it wasn't stopping after finding the first address. This results in no addresses found.
VCC to SCL = 25kOhm
VCC to SDA = 85 kOhm
Just wanted to follow up and see if you had any more suggestions. I'm at a loss for why this is happening. I've tried multiple P1AM-100, P1AM-GPIO and DFR0554 and the behavior is consistent. How can I reconnect the P1AM-GPIO and still have I2C communication?
There is some circuit protection in the P1AM-GPIO that is probably dropping the signal below 3.3V. A possible solution is a bidirectional level shifter to shift the signal up to 5V
Another solution, with a caveat of voiding warranty, would be modifying the P1AM-GPIO board to remove the protection or bypass on the I2C pins. The board was designed to be easy to tinker with, so if you have basic soldering experience you can likely make the changes.
https://facts-engineering.github.io/modules/P1AM-GPIO/P1AM-GPIO.html