Autor Tema: Problema con interrupcion externa usando i2c  (Leído 1941 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado rachelies

  • PIC12
  • **
  • Mensajes: 65
Problema con interrupcion externa usando i2c
« 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:

Código: [Seleccionar]
#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.

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Re: Problema con interrupcion externa usando i2c
« Respuesta #1 en: 31 de Marzo de 2013, 15:48:58 »

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.

Código: [Seleccionar]
#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.

Código: [Seleccionar]
#use I2C(master, sda = pin_c4, scl=pin_c3, address = 0x41)     

Creo que de esta manera debe funcionar sin problema alguno.
Un saludo desde Pereira - Colombia

Desconectado rachelies

  • PIC12
  • **
  • Mensajes: 65
Re: Problema con interrupcion externa usando i2c
« Respuesta #2 en: 01 de Abril de 2013, 10:52:08 »
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

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Re: Problema con interrupcion externa usando i2c
« Respuesta #3 en: 01 de Abril de 2013, 11:38:44 »

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.

Código: [Seleccionar]
[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.   
Un saludo desde Pereira - Colombia

Desconectado rachelies

  • PIC12
  • **
  • Mensajes: 65
Re: Problema con interrupcion externa usando i2c
« Respuesta #4 en: 01 de Abril de 2013, 12:46:21 »
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

Desconectado thegame

  • PIC18
  • ****
  • Mensajes: 439
    • Mcu Tronics
Re: Problema con interrupcion externa usando i2c
« Respuesta #5 en: 01 de Abril de 2013, 15:38:45 »
Que tal,mmm no se si podria ser pero revisando el datasheet dice lo siguiente:

Código: [Seleccionar]
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
Nunca se deja de aprender

Desconectado rachelies

  • PIC12
  • **
  • Mensajes: 65
Re: Problema con interrupcion externa usando i2c
« Respuesta #6 en: 01 de Abril de 2013, 15:48:36 »
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


 

anything