Thursday, 21 June 2018

pic - I2C pullup resistors not working in simulation


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?



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.


No comments:

Post a Comment

arduino - Can I use TI's cc2541 BLE as micro controller to perform operations/ processing instead of ATmega328P AU to save cost?

I am using arduino pro mini (which contains Atmega328p AU ) along with cc2541(HM-10) to process and transfer data over BLE to smartphone. I...