desktop

Cambiar direccion sensor infrarrojo MLX90614

Hola como va?
Necesito usar 2 sensores mlx90614 mediante i2c, el problema es que no se como cambiarle de direccion a uno de ellos.
Alguien sabe como hacerlo? Estoy usando un arduino nano. Gracias.
 
.




Hola como va?
Necesito usar 2 sensores mlx90614 mediante i2c, el problema es que no se como cambiarle de direccion a uno de ellos.
Alguien sabe como hacerlo? Estoy usando un arduino nano. Gracias.

Que te parece si buscas la datasheet (haz click) y la lees antes de preguntar?.

Siempre hay buena información de las configuraciones recomendadas por el fabricante (Melexix).




Salu2.-
 
Hola. No soy ingeniero electronico, ni tecnico electronico, soy solo un hobbista, me doy bastanate maña con la electronica, pero la verdad que no tanto como para comprender el datasheet de ese sensor, es por eso que estot haciendo esta consulta. Se que la direccion para el protocolo i2c se encuentra en la memoria eeprom interna del sensor, y para cambiar la direccion tengo que poder escribir en ese lugar de memoria cambiando el valor almacenado por defecto.
Todo lo que estube leyendo conduce a que tengo que usar la libreria wire.h de arduino, he usado wire.write() para tratara de modificarla pero no he podido. Esto lo comprobe utilizando i2c_scanner, la direccion del sensor nunca me cambio.
Alguien podria facilitarme el codigo para hacerlo?
 
Hola. No soy ingeniero electronico, ni tecnico electronico, soy solo un hobbista, me doy bastanate maña con la electronica, pero la verdad que no tanto como para comprender el datasheet de ese sensor, es por eso que estot haciendo esta consulta. Se que la direccion para el protocolo i2c se encuentra en la memoria eeprom interna del sensor, y para cambiar la direccion tengo que poder escribir en ese lugar de memoria cambiando el valor almacenado por defecto.
Todo lo que estube leyendo conduce a que tengo que usar la libreria wire.h de arduino, he usado wire.write() para tratara de modificarla pero no he podido. Esto lo comprobe utilizando i2c_scanner, la direccion del sensor nunca me cambio.
Alguien podria facilitarme el codigo para hacerlo?
Fíjate si no hay una librería especifica para ese sensor. La secuencia de inicializacion (que podes ver como la armo el fabricante ya que esta en el datasheet) es algo retorcida por lo que sospecho que hacerla vía programa sin una librería adecuada es medio para volverse loco...
 
Hola tiovik. Gracias por la ayuda. Voy a volver a ver las librerias, hasta ahora todo lo que probe no funciono, siempre me queda la misma direccion. Lo ultimo que probe que la verdad es que no se por que no funciona es el siguiente codigo . :
#include<wire.h>
void setup(){

Wire.begin();

}
void loop(){
Wire.beginTransmission(0x0E);
Wire.write(0x0000);
delay(10);
Wire.write(0x5B);
delay(10);
Wire.endTransmission();

}

Y la secuencia que encontre en la hoja de datos para escribir en la eeprom de ese sensor es
 

Adjuntos

  • Screenshot_20220511-214903_Samsung Notes.jpg
    Screenshot_20220511-214903_Samsung Notes.jpg
    73.2 KB · Visitas: 12
Te falto el paso 6 y 7

Además no debe volver a comenzar el ciclo, sino que debe terminar.

Luego del apagado puedes intentar leer la nueva dirección.


Salu2.-
 
El paso 6 es ver si la direccion cambio o no. Para eso uso una libreria que me devuelve la direccion del sensor.
Y el paso 7 es solo sacarle la alimentacion y esperar unos segundos y volver a conectar.
O al menos asi lo entendi.
He puesto ese codigo en el setup y deje el loop vacio pero aun asi sigue sin cambiarse la direccion
 
Leí muy por arriba las hojas de datos y falta, al menos, un paso. Primero hay que iniciar la comunicación apuntando a la dirección del dispositivo (este paso esta bien aunque, en teoría, esta mal la dirección porque la dirección por defecto es 0x5A si no leí mal), luego hay que enviarle el comando para indicarle que se quiere acceder a la EEPROM (este paso falta y se calcula así: 001X XXXX -donde X representa la dirección EEPROM que se quiere leer/escribir, en tu caso la que apunta a la dirección del dispositivo -0x0E- que vendría a juntarse como 0x2E) y ahí si, escribir 0x00 para borrar la EEPROM y decirle que grabe el nuevo dato.

Código:
Wire.beginTransmission(0x5A);
Wire.write(0x2E);
delay(10);

Wire.write(0x0000);      ; <--- No se como lo tomara el compilador proque es un dato de 16 bits.
delay(10);
Wire.write(0x5B);
delay(10);
...
...
Etc
 
Leí muy por arriba las hojas de datos y falta, al menos, un paso. Primero hay que iniciar la comunicación apuntando a la dirección del dispositivo (este paso esta bien aunque, en teoría, esta mal la dirección porque la dirección por defecto es 0x5A si no leí mal), luego hay que enviarle el comando para indicarle que se quiere acceder a la EEPROM (este paso falta y se calcula así: 001X XXXX -donde X representa la dirección EEPROM que se quiere leer/escribir, en tu caso la que apunta a la dirección del dispositivo -0x0E- que vendría a juntarse como 0x2E) y ahí si, escribir 0x00 para borrar la EEPROM y decirle que grabe el nuevo dato.

Código:
Wire.beginTransmission(0x5A);
Wire.write(0x2E);
delay(10);

Wire.write(0x0000);      ; <--- No se como lo tomara el compilador proque es un dato de 16 bits.
delay(10);
Wire.write(0x5B);
delay(10);
...
...
Etc
Falta un ultimo paso que es verificar la lectura, me llamo la atención que el fabricante lo indica explicitamente. Ya se que normalmente no es necesario verificar la lectura de una EEPROM, solo me llamo la atención que el fabricante indique ese ultimo paso (no se olviden de Murphi)...
 
Falta un ultimo paso que es verificar la lectura, me llamo la atención que el fabricante lo indica explicitamente. Ya se que normalmente no es necesario verificar la lectura de una EEPROM, solo me llamo la atención que el fabricante indique ese ultimo paso (no se olviden de Murphi)...

A mi me hizo mucho ruido el paso 7

Quitar totalmente la alimentación para asegurarse que la próxima vez que se alimente haya cambiado dicha dirección.




Salu2.-
 
A mi me hizo mucho ruido el paso 7

Quitar totalmente la alimentación para asegurarse que la próxima vez que se alimente haya cambiado dicha dirección.




Salu2.-

Quizá internamente no tiene un sistema de reseteo para tomar la nueva dirección. Igual las hojas de datos aclaran explícitamente que esos sensores no tienen detección de colisión por lo que hay que cambiarle la dirección fuera del circuito ya que no pueden haber dos o mas con una misma dirección lo que forzaría a removerles la alimentación, en caso de que haya mas de uno, una vez cambiada la dirección.
 
Quizá internamente no tiene un sistema de reseteo para tomar la nueva dirección. Igual las hojas de datos aclaran explícitamente que esos sensores no tienen detección de colisión por lo que hay que cambiarle la dirección fuera del circuito ya que no pueden haber dos o mas con una misma dirección lo que forzaría a removerles la alimentación, en caso de que haya mas de uno, una vez cambiada la dirección.

Eso me suena mucho mejor, como la prueba de haber tomado la nueva dirección, fuera del circuito y con un programa específico para ello.



Salu2.-
 
Atrás
Arriba