Autor Tema: ## :: SCANER de sclavos en I2C :: ##  (Leído 1370 veces)

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

Desconectado pajaro

  • PIC24H
  • ******
  • Mensajes: 1121
## :: SCANER de sclavos en I2C :: ##
« en: 14 de Junio de 2012, 16:35:35 »
Hola

Hace tiempo encontré para los expansores de de i2c PCF8574 una librería muy buena
que no se como se las apañaron pero tenia implementada una función que te verificaba
si en una posición o dirección esta un dispositivo, el caso era que había salido una tirada de estos dispositivos
que aunque en la serigrafía ponía PCF8574 en realidad eran PCF8574A y con esta función sacaban si en realidad se trataba de un PCF7584 o un PCF7584A.

Pues bien se me ocurre una idea,
 es posible genera una fundón que me diga que direcciones hay colgando del bus.
y si me dice ya el dispositivo ya es la leche.

¿Como se podría implementar eso?

imagino que funcionara como en los ordenadores
haciendo un ping a una dirección y si responde esta ahí....
Mas o menos si no esta protegido.

esto como seria intentar contactar con un dispositivo y si no responde reintentar
dos veces y a la cuarta se da por entendido que no esiste el dispositivo.

Esto se haria mediante un lectura en el dispositivo? o
una escritura? o
 simplemente con intentar conectar con el dispositivo?..


Un ayudita... Could you help me..!

Código: C++
  1. // funcion de verificacion de dispositivos
  2. int8 i2c_existe_device(int8 addr ){
  3. i2c_start();
  4. i2c_write(addr);
  5. ....
  6. ...
  7. ..
  8.  
  9.  if (...si_existe){
  10.    return 1;
  11.  }
  12.  else{
  13.   return 0;
  14.  }
  15.  
  16. i2c_stop();
  17.  
  18. }


¿Alguna idea.. de como hacer ?
¿o como empezar?






« Última modificación: 25 de Junio de 2012, 18:09:22 por pajaro »

Desconectado pajaro

  • PIC24H
  • ******
  • Mensajes: 1121
Re: ## :: SCANER de sclavos en I2C :: ##
« Respuesta #1 en: 19 de Junio de 2012, 09:34:35 »
Hola

Sigo con el tema..
 al parecer los dispositivos i2c tienen o pueden tener una direccion de entre 7 y 10 bit
para definir su direción de esclavo, y sus posibles valores son 0 o 1.
esto es 2 expo 7 = 128 dispositivos
en el caso de 2 expo 10= 1024 dispositivos

Aunque hay direciones especificas para determinados dispositivos, memorias, bus expansores, termometros, relojes y otros sensores al parecer debe de haber por algun lado alaguna lista cosa que aun yo no he pescado pero ya caera.

por otro lado se sabe que hay algunas direciones reservadas para operaciones especificas.

No se si seria correcto hacer un bucle que recorriera todo el rango en busca de las 1024 dispositivos

Código: C++
  1. int8 a;
  2.  
  3. i2c_start();
  4. for(a=0;a<1024;a++){
  5. i2c_write(a);
  6. ..
  7. ..
  8. }

Me gustaria que si algun compañero trabajo antes con i2c
diera algun consejo u orientacion para su correcta ejecución.

Un Saludo.




 

anything