Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: pajaro en 14 de Junio de 2012, 16:35:35
Título: ## :: SCANER de sclavos en I2C :: ##
Publicado por: pajaro 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++
// funcion de verificacion de dispositivos
int8 i2c_existe_device(int8 addr ){
i2c_start();
i2c_write(addr);
....
...
..
if(...si_existe){
return1;
}
else{
return0;
}
i2c_stop();
}
¿Alguna idea.. de como hacer ? ¿o como empezar?
Título: Re: ## :: SCANER de sclavos en I2C :: ##
Publicado por: pajaro 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++
int8 a;
i2c_start();
for(a=0;a<1024;a++){
i2c_write(a);
..
..
}
Me gustaria que si algun compañero trabajo antes con i2c diera algun consejo u orientacion para su correcta ejecución.