Autor Tema: reconocimiento de dispositivos en I2C???  (Leído 4009 veces)

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

Desconectado anfelgo

  • PIC10
  • *
  • Mensajes: 16
reconocimiento de dispositivos en I2C???
« en: 13 de Agosto de 2009, 17:02:03 »
Estoy haciendo un proyecto en donde un modulo maestro se comunica a traves de I2C con otros modulos esclavos que son extraibles, es decir que no siempre van a estar conectados al modulo maestro. alguno de ustedes sabe si existe alguna forma para saber que modulos estan conectados???

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: reconocimiento de dispositivos en I2C???
« Respuesta #1 en: 13 de Agosto de 2009, 17:13:19 »
Pues lo que se me ocurre es preguntar la direccion de cada Slave, si pasado un tiempo no responde, pues se asumiria que no esta conectado o que tiene un fallo.

Saludos
El papel lo aguanta todo

Desconectado fabianjsm

  • PIC18
  • ****
  • Mensajes: 255
    • fabianjsm is on twitter
Re: reconocimiento de dispositivos en I2C???
« Respuesta #2 en: 13 de Agosto de 2009, 20:06:23 »
Hola anfelgo, como dice MLO__ podes preguntar por la direccion de cada esclavo.

Lo que tenes que hacer es enviar la condicion de START, la direccion de 7 bits y luego un octavo bit igual a cero que indica lectura, si el esclavo direccionado esta presente te envia la señal ACK poniendo un cero en el bus de datos.

Como con 7 bits solo se puede direccionar 128 dispositivos, podés barrer todo el rango de direcciones en menos de dos segundos, esto depende de la velocidad con la que estas trabajando obviamente. Tu dispositivo podria hacer esto cuando es reseteado o a cada sierto tiempo.
@fabianjsm is on twitter

Desconectado anfelgo

  • PIC10
  • *
  • Mensajes: 16
Re: reconocimiento de dispositivos en I2C???
« Respuesta #3 en: 14 de Agosto de 2009, 13:38:51 »
muchas gracias por las respuestas. Estuve leyendo y existe una direccion para llamar a todos los dispositivos, los 8 bits en 0 (7 de direccion y 1 de r/w) y cada dispositivo responde con un ack a esta direccion, lo cual me parece que podria tener alguna utilidad para esto. Alguno entiendo como funciona esto??? es que no entiendo como se hace para que no halla colisiones en el bus y para saber quien fue el que envio el ack.

Gracias

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: reconocimiento de dispositivos en I2C???
« Respuesta #4 en: 14 de Agosto de 2009, 13:46:42 »
Si tu envías la dirección del dispositivo el único que va a enviar ack va a ser él, así que no habría colisión. Colisión surge cuando hay multimaster, en donde en algún momento mas de un master quiere establecer comunicación con algún dispositivo.

Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado anfelgo

  • PIC10
  • *
  • Mensajes: 16
Re: reconocimiento de dispositivos en I2C???
« Respuesta #5 en: 14 de Agosto de 2009, 14:13:32 »
Si, eso lo entiendo.Lo que no entiendo es cuando hago un llamado a todos los dispositivos con un "general call address", como se quien fue el que me mando un ack?

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: reconocimiento de dispositivos en I2C???
« Respuesta #6 en: 14 de Agosto de 2009, 14:18:41 »
Tendrías que direccionar un dispositivo, esperar su ack un determinado tiempo, y seguir, sino no tendrás manera de saber cual fue.

Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: reconocimiento de dispositivos en I2C???
« Respuesta #7 en: 14 de Agosto de 2009, 14:19:34 »
Pues lo que se me ocurre es preguntar la direccion de cada Slave, si pasado un tiempo no responde, pues se asumiria que no esta conectado o que tiene un fallo.

 :mrgreen: :mrgreen: :mrgreen:
El papel lo aguanta todo

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: reconocimiento de dispositivos en I2C???
« Respuesta #8 en: 14 de Agosto de 2009, 14:28:25 »
Pues lo que se me ocurre es preguntar la direccion de cada Slave, si pasado un tiempo no responde, pues se asumiria que no esta conectado o que tiene un fallo.

 :mrgreen: :mrgreen: :mrgreen:
Exactamente, de a uno!  :D
No contesto mensajes privados, las consultas en el foro

Desconectado anfelgo

  • PIC10
  • *
  • Mensajes: 16
Re: reconocimiento de dispositivos en I2C???
« Respuesta #9 en: 14 de Agosto de 2009, 14:34:06 »
Muchas gracias, al parecer usar ese tipo de direccionamiento solo es util cuando quiero que varios modulos reciban el mismo dato :shock:

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: reconocimiento de dispositivos en I2C???
« Respuesta #10 en: 14 de Agosto de 2009, 14:57:20 »
Muchas gracias, al parecer usar ese tipo de direccionamiento solo es util cuando quiero que varios modulos reciban el mismo dato :shock:
A la vez, no! De a uno por vez si.

Porque para establecer comunicación con un dispositivo, lo direccionas indicando si pretendes leer o escribir, el slave devuelve un ack si todo es correcto. Los demás que tienen distinta dirección, no se dan por enterados.

Saludos!
« Última modificación: 14 de Agosto de 2009, 14:59:38 por Suky »
No contesto mensajes privados, las consultas en el foro

Desconectado fabianjsm

  • PIC18
  • ****
  • Mensajes: 255
    • fabianjsm is on twitter
Re: reconocimiento de dispositivos en I2C???
« Respuesta #11 en: 15 de Agosto de 2009, 17:09:47 »
Como te dije antes. Lo que tenes que hacer es enviar la condicion de START, la direccion de 7 bits y luego un octavo bit igual a CERO que indica lectura, si el esclavo direccionado esta presente te envia la señal ACK llevando a masa el bus de datos.

Una vez que subis la señal de reloj no tenes que esperar tanto, solo lo suficiente por cuestiones de inestabilidad, porque cuando la señal de reloj esta en alto solo el maestro puede variar la señal de datos (lo que indica un START o un STOP). Si queres más velocidad no envies la señal de STOP.

Todos reciben el dato (imagino que ha eso te referis cuando decis "solo es util cuando quiero que varios modulos reciban el mismo dato"). En este caso el dato es la direccion, y solo el que tanga esa direccion te va responder llevando a masa la linea de datos, SDA. Si estas programando en C te paso el codigo, tengo hecho y funcionando, es para determinar la direccion de cada esclavo conectado al bus.
@fabianjsm is on twitter

Desconectado poi

  • PIC10
  • *
  • Mensajes: 20
Re: reconocimiento de dispositivos en I2C???
« Respuesta #12 en: 15 de Agosto de 2009, 18:33:53 »
Y porque no pruebas a crear una especie de tabla como crean los routers para saber que dispositivos tienes conectados y que se actualice cada cierto tiempo. Es mas no hara falta ni una tabla, con un vector de booleanos para saber si esta o no conectado creo que bastaria.

Desconectado anfelgo

  • PIC10
  • *
  • Mensajes: 16
Re: reconocimiento de dispositivos en I2C???
« Respuesta #13 en: 18 de Agosto de 2009, 12:00:41 »
Ya todo esta mucho mas claro :). Voy a ejecutar una rutina cada vez que se encienda el modulo principal que identifique la direccion de cada esclavo conectado. Por cierto fabianjm, seria de gran ayuda si me puedes hacer el favor de enviarme el codigo. Cualquier cosa les aviso


Muchas Gracias

Desconectado fabianjsm

  • PIC18
  • ****
  • Mensajes: 255
    • fabianjsm is on twitter
Re: reconocimiento de dispositivos en I2C???
« Respuesta #14 en: 21 de Agosto de 2009, 15:17:08 »
Este es el codigo. Le modifique un poco dejando solo lo relacionado al i2c para evitar confuciones y le agregue varios comentarios.
Espero que me disculpes por la demora, resulta que me quede unos dias sin internet.
« Última modificación: 21 de Agosto de 2009, 15:28:32 por fabianjm »
@fabianjsm is on twitter