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() и сканируйте адрес.