Estoy trabajando con un PIC18F46J53 y funcionó bastante bien sin ningún problema. De repente, encontré un obstáculo en mi camino.
Utilicé pines RB4 y RB5 como pines de bus I 2 C para comunicarme con una EEPROM (24LC256). Y detuve las líneas de autobús usando 10k externos tanto en SDA como en SCL.
Cada vez que inicializo los pines RB4 y RB5 de TRISB como entradas, aparecerá un sólido 3.2v a través de ellos como I 2 C bus. Pero recientemente apareció un problema en mi tablero: un pin, SCL, muestra ~ 3.2V, mientras que SDA muestra 0.8V - I 2 C, entonces, ya no funcionó. Revisé de forma cruzada la configuración del pin de E / S y cuando habilité los pull-ups internos en el PORTB, el voltaje en SDA aumentó a 2.0v y 2 C funcionó bien con EEPROM.
De la hoja de datos:
RBPU: bit de habilitación de recuperación de PORTB
1 = Todas las extensiones de PORTB están deshabilitadas
0 = Los pull-ups de PORTB están habilitados por valores de bloqueo de puerto individuales
Para solucionar el problema, confío en que ambos pines, SDA y SCL, deben tener 2.8-3.2 V en el bus cuando estén configurados como entrada. Pero parece estar funcionando con 2.0V en el pin SDA y 2.9V en SCL.
Me gustaría conocer su opinión sobre este problema si ha contrarrestado alguna dificultad como esta anteriormente.
¿Dónde debo buscar para solucionar el problema? Está funcionando por ahora pero confío en que me hubiera perdido algo en cualquier caso. ¿Cuándo y cómo se deben usar pull-ups? He utilizado tanto externo como interno en este caso para hacer que I 2 C funcione. ¿Cuál es la mejor manera de hacerlo?