Electronic – I2C pullup resistors not working in simulation

i2cpicproteusrtc

I am trying to create a small project on PIC16F877a MCU, in which I am showing the lifetime of this project using RTC module and the temperature read from LM35 onto an LCD.

Working with PULLUP Resistor
Working with PULLUP Resistor

Not working with 2k pullup resistors
Not working with 2k pullup resistors

The simulation of this project works fine in Proteus software, when I replace the pullup resistors for the I2C with the component "PULLUP" in the proteus library. But my ultimate goal is to implement this in hardware, so from I2C pullup resistor calculation formulas, the values calculated for this MCU is as following:

Rp(min) = (5V-0.6V)/8.5mA = 517.6 ohm

Rp(max) = 1/(0.8473)400(10^-12)*(10^3) = 2.9 Kohm

using these values from the MCU datasheet:

tr = 1000ns,
Cb = 400pF,
Iol = 8.5mA,
Vol = 0.6V,
Vcc = 5V

The I2C module is working at 100KHz.

But the issue is that I have tried various values in this range, but the time shown on the LCD remains 00:00:00. Can someone please guide me what I am doing wrong?

Best Answer

You have answered your own question! The fact that the PULLUP is a modelling primitive tells you that it has a logical function and is not a physical component i.e. it tells the simulator something - but it's not a real resistor.