TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: frankcr en 11 de Agosto de 2010, 00:51:59
-
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
-
Para leer sería:
void read_luz() {
i2c_start();
i2c_write(0x88);
i2c_write(0x02);
i2c_start();
i2c_write(0x89);
luz_I=i2c_read(0);
i2c_stop();
}
Saludos!
-
Hola gracias por tu comentario en estemomento me pongo a realizar la prueba sin embargo tengo una duda como hago para leer el registro 0x03, el cual tiene el otro byte del dato leido. Hago otro metodo parecido al que me mencionaste arriba que lea el registro 0x03.... Muchas gracias
Saludos cordiales...
-
Hola gracias por tu comentario en estemomento me pongo a realizar la prueba sin embargo tengo una duda como hago para leer el registro 0x03, el cual tiene el otro byte del dato leido. Hago otro metodo parecido al que me mencionaste arriba que lea el registro 0x03.... Muchas gracias
Saludos cordiales...
Prueba:
void read_luz() {
i2c_start();
i2c_write(0x88);
i2c_write(0x02);
i2c_start();
i2c_write(0x89);
luz_I=i2c_read();
luz_H=i2c_read(0);
i2c_stop();
}
Saludos!
-
Hola Suky lastimosamente prueba no superada, desde que lo uso me da un valor de 249 lux, siempre me da ese valor, no entiendo he hecho cambios y nada, no se si la parte de configuracion de registros esta buena....... Muchas gracias por la ayuda.....
Saludos....
-
Por lo menos esa sería la secuencia, no va el stop después de enviar las direcciones. Es un package bastante complicado, está bien soldado? Tiene las resistencias pull-up?
Saludos!
-
Si efectivamente, las resistencias de pull up lo unico es que no conecto la señal INT al Pic pues es a lo que entiendo es una salida para decir cuando se ha llegado alguno de los limites. En este momento estoy viendo que en el diagrama de circuito tipico que las lineas de SDA y SCL tienen que tener una tensión de 1.7 V a 3.63 V. El PIC que estoy utilizando es el 18F4550 y creo, no estoy seguro, que estas lineas en este PIC es de 5V, por lo que esto me puede estar afectando.
Saludos.......
-
Entonces las resistencias pull-up las tienes a 3.5v? El microcontrolador debería leer ese valor como un 1 lógico :?
-
No las tengo a a 5V, porque tengo un ds1307 (RTC) y una memoria EEPROM a traves de I2C.
-
No las tengo a a 5V, porque tengo un ds1307 (RTC) y una memoria EEPROM a traves de I2C.
Y el sensor de luz tolera los 5V en sus pines?
Al colocar el pull-up a 5V no vas a tener ningún problema por parte del PIC, porque los dispositivos I2C lo único que fuerzan es el 0 lógico, o sea que el PIC tiene 5V (1 lógico) en estado IDLE.
-
Si eso estaba revisando con respecto al sensor de luz, dice que las lineas SDA y SCL, soportan hasta 4V, creo que por ahi estaria el problema porque no toera los 5 V
-
Revisa el siguiente articulo de Mario: ;-)
http://www.neoteo.com/adaptador-de-niveles-para-bus-i2c-3-3v-5v.neo
Saludos!
-
Muchas gracias montare el circuito para probar....
Saludos