TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: tornar en 04 de Abril de 2005, 03:42:00

Título: Conexion y Seleccion de perifericos con bus I2c?
Publicado por: tornar en 04 de Abril de 2005, 03:42:00
Hola, alguien me puede explicar lo siguiente:

Yo tengo una placa que viene preparada con 2 bornes de salida para el I2c (SDA y SCL), si yo ahora kiero conectar diversos perifericos, como sensores analogicos, digitales o de cualkier tipo compatibles con I2c, como los conecto? Todos a SDA y SCL de la placa??

Y luego, en CCS, como consigo seleccionar uno u otro dispositivo para trabajar con el?

Por ultimo me gustaria saber, en el caso de usar un dispositivo con salida analogica, antes de llegar al PIC necesitaria pasarlos por un conversor A/D, no?
Título: RE: Conexion y Seleccion de perifericos con bus I2c?
Publicado por: tornar en 05 de Abril de 2005, 06:59:00
Nadie del foro ha usado nunca el bus I2C para comunicarse con perifericos??
Título: RE: Conexion y Seleccion de perifericos con bus I2c?
Publicado por: pocher en 05 de Abril de 2005, 13:30:00
Los tendrás que conectar a través de los integrados I2C que seguramente existiran dentro de la placa.

Si no estan los tendras que unir con el PIC a través del SCL y SDA y las 2 resistencias PULL-UP.

Para seleccionar un determinado dispositivo I2C lo tienes que direccionar desde el PIC. Te pongo un ejemplo:

Para un PCF8574P ( puerto de E/S de 8 bits ) sería:

i2c_write(0x40);

La asignación de bits para este dispositivo es:

b7=0
b6=1
b5=0
b4=0
b3=A2
b2=A1
b1=A0
b0=R/W

Un saludo

Título: RE: Conexion y Seleccion de perifericos con bus I2c?
Publicado por: damago en 05 de Abril de 2005, 14:11:00
Hi, como comenta pocher, si miras el datasheet de tus componentes con i2c veras que   en la trama que envias, un byte es para direccionar el dispositivo.
Veras que de los 8 bits, el de menor peso es para decir si es una escritura o lectura. El resto de bits para la direccion. Dependiendo del dispositivo en cuestion, veras que unos bits tienen un valor fijo y otros (como A0,A1 Y A2 en este caso) tienen el valor que haya en el pin asociado del dispositivo . Asi que llevando esos pines a 0 o 1 tendras diferentes direcciones para los distintos dispositivos.

En cuanto a como conectarlos: si, hay que conectar todos los dispositivos a la misma linea SDA y SCL.

Si tienes una señal analogica, en efecto tienes que usar el a/d de tu micro o un a/d externo ya sea i2c o no.

Un saludo.
Título: RE: Conexion y Seleccion de perifericos con bus I2c?
Publicado por: tornar en 06 de Abril de 2005, 03:56:00
Gracias por las respuestas, ya me ha kedado claro estas dudillas que tenia sobre el bus I2c.

Solo tengo una ultima duda sobre este bus I2C, cual es el numero maximo de perifericos que puedo conectar a 2 mismas patitas preparadas en una placa SCL y SDA de un mismo PIC? He oido desde 16 a 256......

Y si kiero conectar por ejemplo 30 dispositivos a las mismas patitas, supongo que todos los cables en las mismas patitas kedara algo mal, como lo haceis vosotros para realizar estas conexiones, yo es q en la placa que tengo, me vienen 2 pines donde poner los cables para estas lineas SDA y SCL....
Título: RE: Conexion y Seleccion de perifericos con bus I2c?
Publicado por: tornar en 06 de Abril de 2005, 03:59:00
Otra cosa, respecto a esto..

Codigo:
como comenta pocher, si miras el datasheet de tus componentes con i2c veras que en la trama que envias, un byte es para direccionar el dispositivo.


Entonces puede ocurrir que 2 dispositivos por I2c tengan el mismo byte para direccionarlo y entonces podriamos tener problemas no?? Y cuando te dicen que puedes conectar 16 dispositivos del mismo tipo, si son iguales, tendran la misma direccion, y por tanto cuando kieras comunicarte con uno, lo estaras haciendo con todos, no es asi??
Título: RE: Conexion y Seleccion de perifericos con bus I2c?
Publicado por: pocher en 06 de Abril de 2005, 10:56:00
Nunca he llegado a conectar tantos I2C juntos, solo será cuestión de mirar la información sobre I2C para saber el máximo que se puede conectar al bus.

Dos integrados I2C no pueden tener el mismo byte de dirección ya que si no no los podría distinguir el PIC a la hora de direccionarlos.

Por seguir el ejemplo del integrado que te he puesto arriba, el PCF8574P:

Supón que quieres conectar al bus 8 de estos, pues solo tienes que diferenciarlos con A2A1A0 (desde 000 a 111). Con 8 conseguirías 64 E/S.

Un saludo