TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: rachelies en 31 de Marzo de 2013, 15:30:49
-
Hola a todos:
Estoy utilizando un expansor de entradas por i2c, un pcf8574. Utilizo la interrupción para leer las entradas cuando estas cambian, pero si conecto el pin de interrupción al RB0, para utilizar la interrupción, esta no salta nunca.
Para el i2c utilizo los pines RB3 y RC7, con esta declaración al inicio:
#use i2c(MASTER,SCL=PIN_B3,SDA=PIN_C7,SLOW,FORCE_HW,RESTART_WDT)
Lo que me mosquea es que si utilizo la interrupción EXT2, conectando al pin RB2, funciona perfectamente. Y lo más extraño, bien configurado el RB0 como entrada, conectando el ICDebugger, el TRISB está bien configurado para ese pin, y si lo conecto a masa, en PORTB sigo viendo que el pin RB0 sigue leyendo "1", no cambia nunca a estado bajo.
¿Alguien puede darme una pista de que falla?
Un saludo y gracias.
-
Yo lo que haría seria utilizar los terminales que soportan el protocolo I2C que vienen por defecto (si es que lo posee) en el respectivo microcontrolador.
Por otra parte en la siguiente linea de código no veo donde especificas la dirección del esclavo, que según el datasheet del expansor pcf8574 es 0x41.
#use i2c(MASTER,SCL=PIN_B3,SDA=PIN_C7,SLOW,FORCE_HW,RESTART_WDT)
Con un 16f88xx configuraría el micro de la siguiente manera.
#use I2C(master, sda = pin_c4, scl=pin_c3, address = 0x41)
Creo que de esta manera debe funcionar sin problema alguno.
-
La dirección que se pone en el #use es la suya propia, no la del esclavo. Los pines por defecto son B0 y B1, que además son la interrupción EXT y EXT1, que me hacen falta para más cosas, por eso el problema este que tengo, jejej.
Saludos
-
No se que micro utiliza, si fuera el caso, porque no utilizas los modos captura del microcontrolador o una interrupción por cambio de estado en algunos terminales de la puerta b, o simplemente por soft detectas un evento, o la fácil cambiar de máquina.
[La dirección que se pone en el #use es la suya propia, no la del esclavo. Los pines por defecto son B0 y B1, que además son la interrupción EXT y EXT1, que me hacen falta para más cosas, por eso el problema este que tengo, jejej./code]
Si tienes todo la razón la dirección del esclavo se especifica con la función i2c_write(xx), donde xx es la dirección del respectivo dispositivo esclavo.
-
El micro es un 18F2455. En otros terminales claro que funciona, lo que me gustaría saber es porque no funciona en el RB0. Otras soluciones claro que las hay, pero es la duda de saber si hago algo mal o que está fallando aqui
-
Que tal,mmm no se si podria ser pero revisando el datasheet dice lo siguiente:
On a Power-on Reset, RB4:RB0 are
configured as analog inputs by default and
read as ‘0’; RB7:RB5 are configured as
digital inputs.
Lo has checado??
saludos
-
No, eso no lo he mirado, pero si que pongo el TRISB todo a "1", y además con el RB2 si que funciona :huh:. Mañana lo miraré que hoy ya no puedo. Saludos