Caros,

Estou tentando utilizar 3 dispositivos na interface I2C, em um Wemos D1-R2 mini:

MPU6050 - acelerômetro e giroscópio

MAX30100 - frequencímetro de pulso e medidor de O2

GY906-MLX90614 - medidor de temperatura ambiente e de objeto

Mas quando conecto os 3 o GY906 fica maluco, coletando um valor fixo nas 2 temperaturas 1307 graus aproximadamente, isso pode ser devido ao resistor de pull-up? caso seja qual seria o valor ideal para esses resistores, estou utilizando alimentação de 3,3V para todos os dispositivos.

Exibições: 484

Responder esta

Respostas a este tópico

Carlos ajuda ai ! 

Tem conflito de endereço nessas mensagens ! 

Com o módulo GY521-MPU6050:

Scanning...
I2C device found at address 0x68 !
done

Com o módulo MAX30100:

Scanning...
I2C device found at address 0x68 !
done

Falha minha na hora do Ctrl-C/Ctrl-V, mas o endereço do MAX30100 é 0x57, como você pode ver quando os 3 estão montados.

Acabei de fazer o teste somente com o MAX30100

Scanning...
I2C device found at address 0x57 !
done

Olá Carlos

Isso confirma que não há conflito de endereço e que o barramento está funcionando muito bem.

A próxima etapa é identificar no seu firmware onde está o problema, pode ser conflito entre bibliotecas ou até mesmo erro de lógica.

Bom dia, 

Descobri uma limitação do MLX90614 ! 

https://www.melexis.com/en/product/MLX90614/Digital-Plug-Play-Infra...

https://www.melexis.com/en/documents/documentation/application-note...

O padrão da interface dele não é exatamente I2C . E sim SMBUS.

Serial, 8-bit oriented, bi-directional data transfers can be made at up to 100 kbit/s !

A velocidade padrão da interface I2C com Arduino é de 400 Kbits/s. 

Poste por favor  o programa que esta usando para ler os três sensores. 

Bom dia, 

Veja nesse manual, como proceder quando os dispositivos tem duas velocidades diferentes.

https://www.nxp.com/docs/en/application-note/AN10216.pdf

Limitação do protocolo I2C: em uma aplicação onde os dispositivos de 100 kHz e 400 kHz (mestres e / ou escravos) estão presentes no mesmo barramento, a menor freqüência deve ser usada para garantir um comportamento seguro. "

"Due to the different I2C specification available (100 kHz, 400 kHz and now 3.4 MHz), devices designed for the 100 kHz specification are not suitable to work properly at 400 kHz, while the opposite is true. In applications where upgrades have been performed by using newer 400 kHz devices while keeping the 100 kHz legacy devices, it may become necessary to separate the 400 kHz devices from the 100 kHz devices when a 400 kHz I2C transfer is performed.

•I2C protocol limitation: in an application where 100 kHz and 400 kHz devices (masters and/or slaves) are present in the same bus, the lowest frequency must be used to guarantee a safe behavior."

Agradeço a todos pela ajuda, consegui funcionar todos os sensores, tive que mudar a velocidade dos sensores que utilizam I2C para 100MHz e o mais complicado foi o MAX30100, pois está na lib o default para 400MHz, foi preciso mudar na lib para compatibilizar com o protocolo SMBus.

Agradeço pricipalmente a você José Gustavo pelas dicas que foi buscar na net as dicas para a solução do problema.

Desculpe a demora em responder, mas final de ano é muita correria.

Boa noite Carlos, 

Que bom que conseguiu !

Corrigindo suas informações :

I2C clock pode ser 100 KHz ou 400 KHz. 

boa tarde como voce conseguiu fazer isso no sensor max30100 estou com o mesmo problema 

RSS

Destaques

Registre-se no
Lab de Garagem
Clicando aqui

Convide um
amigo para fazer
parte

curso gratis de arduino

© 2019   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço