Hola como estan tengos varias semanas tratando de poner a andar un sensor de luz marca Intersil y cuyo codigo es ISL29023. He cambiado y cambiado mi codigo, pero siempre me genera el mismo valor de salida, lo cual no es correcto porque lo he colocado en diferentes ambientes donde casi no hay luz y tambien lo he colocado al aire libre al medio dia donde se deberia obtener la mayor cantidad de luz, si he notado que al diagrama de señales de I2C LE FALTA UNA PORCION, pues no tiene el no acknowledge y el comando de stop. Otra duda que tengo es si los registros donde se almacena la lectura se obtiene uno por uno o en forma continua, a continuacion coloco el codigo para que me ayuden a descifrar el funcionamiento de este sensor:
//********************** Configuracion de registros********
void luz_write (){
i2c_start(); //Inicia I2C
i2c_write(0x88); //Direcciona ISL29023
i2c_write(0x00); //Indica que empiece en registro COMMAND 0
i2c_write(0xA3);
i2c_stop(); //Ya puso la hora y fecha
i2c_start(); //Inicia I2C
i2c_write(0x88); //Direcciona ISL29023
i2c_write(0x01); //Indica que empiece en registro COMMAND 1
i2c_write(0x03);
i2c_stop(); //Ya puso la hora y fecha
}
// Aqui se leen los registros donde se almacena la lectura
void luz_read (){
i2c_start(); //Inicia I2C
i2c_write(0x88); //Direcciona ISL29023
i2c_write(0x02); //Indica que empiece en registro COMMAND 1
i2c_stop(); //Ya puso la hora y fecha
i2c_start(); //Inicia I2C
i2c_write(0x89); //Direcciona ISL29023
luz_l = i2c_read(0); //Indica que empiece en registro COMMAND 1
i2c_stop(); //Ya puso la hora y fecha
i2c_start(); //Inicia I2C
i2c_write(0x88); //Direcciona ISL29023
i2c_write(0x03); //Indica que empiece en registro COMMAND 1
i2c_stop(); //Ya puso la hora y fecha
i2c_start(); //Inicia I2C
i2c_write(0x89); //Direcciona ISL29023
luz_h = i2c_read(0); //Indica que empiece en registro COMMAND 1
i2c_stop(); //Ya puso la hora y fecha
}
En el siguiente enlace se obtiene la hoja de datos
www.intersil.com/data/fn/fn6691.pdf