mlx90615 заставляет зависнуть ардуину
- Войдите на сайт для отправки комментариев
Добрый день. У меня есть предположительно mlx90615. Прикол в том, что возможности достать отдельный датчик у меня не было, я для тестов взяла дешевый китайский ик-термометр dt8220 и выдрала от туда ик-датчик, предварительно я все это дело прозвонила, сняла осцилограмму и по распиновке определила, что скорее всего это mlx90615). Теперь я воткнула это в плату и присоединила к ардуине. На родной плате все работало и до сих пор работает, хотя в первый раз я немного промахнулась с распиновкой и подавала питание не на те ноги. Сейчас есть другая проблема - при простой попытке прочитать адрес i2c ардуина просто виснет, данными на датчик она спамит, но ответа никакого не получает. я использовала вот эту штуку для того, чтоб посмотреть адрес:
#include "Wire.h"
void setup(){
Wire.begin();
Serial.begin(9600);
while (!Serial);
Serial.println("nI2C Scanner");
}
void loop(){
byte error, address;
int nDevices;
Serial.println("Scanning...");
nDevices = 0;
for(address = 8; address < 127; address++ ){
Wire.beginTransmission(address);
Serial.println(".");
error = Wire.endTransmission();
Serial.println(".");
if (error == 0){
Serial.print("I2C device found at address 0x");
if (address<16)
Serial.print("0");
Serial.print(address,HEX);
Serial.println(" !");
nDevices++;
}
else if (error==4) {
Serial.print("Unknown error at address 0x");
if (address<16)
Serial.print("0");
Serial.println(address,HEX);
}
}
if (nDevices == 0)
Serial.println("No I2C devices foundn");
else
Serial.println("donen");
delay(5000);
Судя по нему она открывает сессию общения с i2c, но закрыть не может, поэтому сидит и ждет ответа. Может кто подскажет, как еще можно потестить i2c и что может быть с ним не так. По подтяжкам - я проставила все резисторы (4.7к к питанию) и кондеры. (0.1мк между питанием и землей).
MLX9061x работают не только в I2C, но и в PWM.
Проверить это можно подключением по схеме, которая приводится в разделе "10.3 PWM output" документа "MLX90615 Infra Red Thermometer"
Если по дефолту в них установлен режим PWM (Config register, bit 0), то в I2C они переключаются специальной процедурой.
А есть какие-то косвенные признаки, что оно переключилось на i2c? Я сделала по инструкции из даташита, разницы при выполнении не вижу. + я анализатором чтото такое поймала. Тут как-то можно различить будет запрос с мк и ответ?
Подмигивать он явно не начнет после переключения.
15-го у меня нет, 14-й просто надо было за ногу подержать, а потом сразу, не снимая питания, работать как с I2C устройством. Во всяком случае - до логанализатора у меня дело не доходило. Была ерунда с SoftwarWire, но решилась обновлением библиотеки.
Единственное что - у 14-го несколько модификаций с разным напряжением питания имеется. Может и у 15-го так же и дело в этом?
В вашей софтине есть декодер I2C вроде - он что-то кажет?
И +вопрос. У меня весть подтяжка к VDD, соответственно, если даже питания на scl нет, напряжение становиться не сильно меньше. При этой перезагрузке питание на scl должно вообще пропасть или просто вот так вот понизиться?
http://arduino.ru/forum/apparatnye-voprosy/pomogite-perevesti-mlx90614-i...
кажет, что идети запрос на адрес i2c (с перебором на все 128) + некий NAK (пытаюсь нагуглить что это), ответа при этом ни в одном из случаев нет, судя по всему.
И +вопрос. У меня весть подтяжка к VDD, соответственно, если даже питания на scl нет, напряжение становиться не сильно меньше. При этой перезагрузке питание на scl должно вообще пропасть или просто вот так вот понизиться?
Если у вас SCL подтянуто к VCC (для I2C), то надо сделать OUTPUT+LOW на >39мс , тогда МК должен перетянуть вход к земле и на нём напряжение должно упасть (см. 8.5.1 PWM to SMBus mode). Затем отпускаете SCL переводом в INPUT и подтяжка возвращает на него VCC. Далее Wire.begin() и сканируйте адрес.