Datos del problema.
PIC:
18F4550PORTB: Pines de
RB0 a
RB5 de Entradas digitales.
Interrupciones:
INT_EXT(en RB0) ,
INT_EXT1(en RB1),
INT_EXT2(RB2),
INT_CCP2(en RB3 usando el fuse CCP2B3),
INT_RB (RB4 y RB5).
Comunicación Extra:
I2C (por RB0-SDA y RB1-SCL) Multiplexado con las entradas mediante HEF4053B (Switch analógico)
-Al reset activo las Pull-Ups internas mediante port_b_pullups(true); y se conmuta el HEF4053B para conectar RB0 y RB1 a las señales externas.
-Comienza el ciclo de trabajo.
-Cuando se reciben ciertos datos por la USART se conmuta RB0 y RB1 al Bus I2C y se realizan las transacciones oportunas.
-Se conmuta de nuevo el HEF4053B para conectar RB0 y RB1 a las señales externas.
-En el bucle infinito principal del main() repito SIEMPRE en cada vuelta el port_b_pullups(true);
Y sin embargo midiendo entre GND y cada uno de estos Pines del PORTB resulta que las Pull-Ups tienen el siguiente estado:
RB0
No RB1
No RB2
Si RB3
No RB4
Si RB5
Si.
Y las necesito todas activadas.
Según el Datasheet del 18F4550:
Each of the PORTB pins has a weak internal pull-up. A single control bit can turn on all the pull-ups. This is performed by clearing bit RBPU (INTCON2<7>). The weak pull-up is automatically turned off when the port pin is configured as an output. The pull-ups are disabled on a Power-on Reset.Por lo que entiendo si no reseteo el PIC ni pongo esos pines como salida deberían quedarse activadas todas las Pull-Ups.
Vale que al usar el I
2C se me desactiven las RB0 y RB1 pero ... ¿y RB3?
Estoy confuso o confundido o ...
¿A alguien se le ocurre algo?
P.D. No os pongo el fuente porque tiene 11.277 líneas de código y no es plan.
(Por favor, absténganse respuestas insustanciales, el Foro lo agradecerá)