I designed a board with the MPR121 Capacitive touch controller. when i connect the board to microcontroller and runs I2C address scan, it shows that no I2C device is connected. I did my connection according to the datasheet as shown in the picture below. I used 75k resistor for all the resistors. Then because my ADDR is connected to VSS, according to the datasheet, the address should be 0x5A, when i tried to use this address, it shows me incorrect address. I have connected SDA and SCL to the SDA and SCL of my mircocontroller, I have tried connectting IRQ to GND, 5V, leaving it unconnected and to 3V3 at different times just to test which will work but none worked.
Please how will i be able to read from the MPR121 sensor? Im using Arduino Nano board as microcontroller board. A sample code or any connection guide could go along way to help.
the pull-up resistors for SCL and SDA pins seems to be to large. According to I2C bus specification the minimum size of pull-ups for SCL and SDA and for Vdd=2V should be 250Ohm and maximum size 885Ohm. Please refer to UM10204 I2C specification attached. Page 55 section 7.
Rpmax=tr/(0.873*Cb)=885Ohm; trmax=300ns; Cbmax=400pF;
For Vdd=2V, Rpmin=(Vdd-Volmax)/Iol=250Ohm; Volmax=0.5V; Iol=6mA
For the IRQ pin. The pin is able to sink 1.2mA. So minimum size of the pull-up should be
To be on safe size try to use larger for the start. Please find a document about pull-up, pull-down resistors calculation attached.
With best regards,
Thank you for your response;
So if i understand you correctly, im unable to read from the registers because the value for the pull up resistors are too large right?
Secondly the suggested value for the pull ups for SCL and SDA and for Vdd=2V should be 250Ohm and maximum size 885Ohm and for IRQ maximum is 667Ohm right?
what will be different if my VDD = 3.3V? for both SDA,SCL and IRQ?
And how about the 75k resistor value i used for REXT, that does not have any issue?
And lastly, aside from the problem of the pull ups being too large, is there any possible reason why im unable to read from the registers or getting the error?
I assume the large pull-ups were the problem. If you change the value of Vdd you just calculate the minimum value of the pull-up according to the formula:
For Vdd=3.3V, Rpmin=(Vdd-Volmax)/Iol=467Ohm; Volmax=0.5V; Iol=6mA
For the IRQ pull-up I made the mistake there. I have fixed it. The minimum value of the pull-up should be 1667Ohm for Vdd=2V.
For Vdd=3.3V the minimum value of the IRQ pull-up should be Rpmax=Vdd/Isink=3.3/0.0012=2750Ohm.
The 75k resistor for REXT is correct. It is stated in the datasheet and sets the internal reference.
I would suggest to test the pull-ups and to see whether it will work. If not we will try to find the reason.