Autor Tema: Problema con sensor de luz a traves de I2C  (Leído 2384 veces)

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

Desconectado frankcr

  • PIC10
  • *
  • Mensajes: 36
Problema con sensor de luz a traves de I2C
« 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
« Última modificación: 11 de Agosto de 2010, 02:01:01 por frankcr »

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Problema con sensor de luz a traves de I2C
« Respuesta #1 en: 11 de Agosto de 2010, 10:20:06 »
Para leer sería:

Código: C
  1. void read_luz() {
  2.  
  3.    i2c_start();
  4.    i2c_write(0x88);
  5.    i2c_write(0x02);
  6.    i2c_start();
  7.    i2c_write(0x89);
  8.    luz_I=i2c_read(0);
  9.    i2c_stop();
  10.  
  11. }


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

Desconectado frankcr

  • PIC10
  • *
  • Mensajes: 36
Re: Problema con sensor de luz a traves de I2C
« Respuesta #2 en: 11 de Agosto de 2010, 14:40:43 »
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...

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Problema con sensor de luz a traves de I2C
« Respuesta #3 en: 11 de Agosto de 2010, 14:45:17 »
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:

Código: C
  1. void read_luz() {
  2.  
  3.    i2c_start();
  4.    i2c_write(0x88);
  5.    i2c_write(0x02);
  6.    i2c_start();
  7.    i2c_write(0x89);
  8.    luz_I=i2c_read();
  9.    luz_H=i2c_read(0);
  10.    i2c_stop();
  11. }


Saludos!

No contesto mensajes privados, las consultas en el foro

Desconectado frankcr

  • PIC10
  • *
  • Mensajes: 36
Re: Problema con sensor de luz a traves de I2C
« Respuesta #4 en: 11 de Agosto de 2010, 15:28:14 »
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....

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Problema con sensor de luz a traves de I2C
« Respuesta #5 en: 11 de Agosto de 2010, 17:02:04 »
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!
No contesto mensajes privados, las consultas en el foro

Desconectado frankcr

  • PIC10
  • *
  • Mensajes: 36
Re: Problema con sensor de luz a traves de I2C
« Respuesta #6 en: 11 de Agosto de 2010, 18:18:24 »
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.......

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Problema con sensor de luz a traves de I2C
« Respuesta #7 en: 11 de Agosto de 2010, 18:28:10 »
Entonces las resistencias pull-up las tienes a 3.5v? El microcontrolador debería leer ese valor como un 1 lógico  :?
No contesto mensajes privados, las consultas en el foro

Desconectado frankcr

  • PIC10
  • *
  • Mensajes: 36
Re: Problema con sensor de luz a traves de I2C
« Respuesta #8 en: 11 de Agosto de 2010, 18:41:40 »
No las tengo a a 5V, porque tengo un ds1307 (RTC) y una memoria EEPROM a traves de I2C.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Problema con sensor de luz a traves de I2C
« Respuesta #9 en: 11 de Agosto de 2010, 18:54:46 »
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.

No contesto mensajes privados, las consultas en el foro

Desconectado frankcr

  • PIC10
  • *
  • Mensajes: 36
Re: Problema con sensor de luz a traves de I2C
« Respuesta #10 en: 11 de Agosto de 2010, 19:19:37 »
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

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Problema con sensor de luz a traves de I2C
« Respuesta #11 en: 11 de Agosto de 2010, 19:44:39 »
Revisa el siguiente articulo de Mario:  ;-)
http://www.neoteo.com/adaptador-de-niveles-para-bus-i2c-3-3v-5v.neo

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

Desconectado frankcr

  • PIC10
  • *
  • Mensajes: 36
Re: Problema con sensor de luz a traves de I2C
« Respuesta #12 en: 11 de Agosto de 2010, 22:57:58 »
Muchas gracias montare el circuito para probar....

Saludos