И снова проблема с датчиком освещения

Zhyravlev_AS
Offline
Зарегистрирован: 03.04.2013

Я уже не знаю что с ним делать. То он зависает то теперь Arduino не видит его на i2c шине. Речь идет про цифровой датчик освещения BH1750.

Сейчас на шине 3 ведомых устройства, - часы DS3231, датчик атмосферного давления BMP085 и BH1750.

Подтягиваю SDA и SCL к 3.3v резистором номиналом 1кОм (следую рекомендациям http://student-proger.ru/2014/08/vliyanie-nominala-podtyagivayushhih-rezistorov-na-signal-shiny-i2c/)

i2c сканер мне пишет:

Scanning...

I2C device found at address 0x57  !
I2C device found at address 0x68  !
I2C device found at address 0x77  !
done
 
Из них 0x57 - память DS3231; 0x68 - сами часы DS3231; 0x77 - BMP085.
Датчика освещения в этом списке нету.
 
Убираю резисторы, получаю:
 
Scanning...
I2C device found at address 0x23  !
I2C device found at address 0x24  !
I2C device found at address 0x57  !
I2C device found at address 0x68  !
I2C device found at address 0x77  !
done

0x23 - это как раз датчик освещения. Кто такой 0x24, - понятия не имею?

Что я делаю не так? Почему с резисторами датчик освещения не находится?

P/S/ использую DUE от внешнего источника питания, все датчики питаются от 3.3v

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Насколько я помню дэйташит, минимальный номинал резистора составляет 1.8к. Правда, при 5-вольтовом питании.

Проблема в том, что если Вы используете не "голые" датчики, а датчики, смонтированные на платах с обвязкой, производители сами впаивают эти резисторы в каждое устройство. В результате параллельного включения сопротивление оказывается недопустимо низким.

Zhyravlev_AS
Offline
Зарегистрирован: 03.04.2013

Ну а чем можно объяснить не очевидное повидение? Ардуина видит датчики через раз. Сейчас картина такая - что с резисторами что без них, сканер не видит датчики, ни один :((

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Вы задаете вопросы, не предоставив необходимой информации.

Никто не гарантирует, что, предоставив ее, Вы получите решение. Но без информации угадать можно только случайно.

Опубликуйте хотя бы схему и скетч.

Zhyravlev_AS
Offline
Зарегистрирован: 03.04.2013

Вот скетч, стандартный

#include <Wire.h>

void setup()
{
  Wire.begin();
 
  Serial.begin(9600);
  while (!Serial);             // Leonardo: wait for serial monitor
  Serial.println("\nI2C Scanner");
}
 
 
void loop()
{
  byte error, address;
  int nDevices;
 
  Serial.println("Scanning...");
 
  nDevices = 0;
  for(address = 1; address < 127; address++ )
  {
    // The i2c_scanner uses the return value of
    // the Write.endTransmisstion to see if
    // a device did acknowledge to the address.
    Wire.beginTransmission(address);
    error = Wire.endTransmission();
 
    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("Unknow error at address 0x");
      if (address<16)
        Serial.print("0");
      Serial.println(address,HEX);
    }    
  }
  if (nDevices == 0)
    Serial.println("No I2C devices found\n");
  else
    Serial.println("done\n");
 
  delay(5000);           // wait 5 seconds for next scan
}

и плата, собрана она у меня только на запаяной макетке, но принцеп подключения тот же

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Zhyravlev_AS, прочитайте 2-й абзац ответа №1.

Zhyravlev_AS
Offline
Зарегистрирован: 03.04.2013

Прочитал уже давно, но что вы этим хотите сказать? 1. Убрать те резисторы что я поставил? 2. Выпяивать те что есть уже на датчиках?

Просто пытаюсь понять природу проблемы, почему ардуино через раз определяет датчики... и ни как не могу найти зависимость.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Теперь прочитайте 1-й абзац ответа №3.

В модули наверняка впаяны резисторы, их номинал Вы не считаете нужным никому сообщать. Ну не хотите давать информацию - разбирайтесь сами.

Zhyravlev_AS
Offline
Зарегистрирован: 03.04.2013

andriano, меня глупца сразу нужно прямо спрашивать какие исходные данные нужны)) а то долго тупить буду))

Сфоткать свои датчики не получилось, но в интернете нашел такие же картинки. Разница только в номинале резисторов.

И так первый BH1750. Если я правильно понял то его линия подтянута резисторами 103, номинал который онлайн калькулятор мне сказал аж 10 кОм!!!

Следующий BMP180. Линии которого так же подтянуты через 10 кОм. Как в этих случаях работает транзистор к сожалению не знаю :((

И часы DS3231. Номиналы резисторов такие же как и на фото. Только не понятно, подтянута ли здесь линия или нет. С обратной стороны они идут под батарейкой и там ничего не видно.

andriano, пожалуйста подскажи как быть? Я предполагаю что стоит выпаять эти транзисторы и подтянуть линию транзисторами 1 кОм?

a5021
Offline
Зарегистрирован: 07.07.2013

Не знаю, покажется ли мой опыт интересным, но я с модулей сенсоров поснимал подтяжки вместе со стабилизаторами. У меня МК на три вольта и в стабилизаторах нет нужды.

 

Подтяжка осуществляется резисторами (по одному на линиях SDA и SCL) номинала 10 килоом только на плате МК.

 

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

У этих преобразователей (662К) ток потребления и падения очень маленькие, можно было и оставить)

Zhyravlev_AS
Offline
Зарегистрирован: 03.04.2013

a5021 пишет:

Не знаю, покажется ли мой опыт интересным, но я с модулей сенсоров поснимал подтяжки вместе со стабилизаторами. У меня МК на три вольта и в стабилизаторах нет нужды

А до этого какие проблемы были?

a5021
Offline
Зарегистрирован: 07.07.2013

Yarik.Yar пишет:
У этих преобразователей (662К) ток потребления и падения очень маленькие, можно было и оставить)

Насчет "маленького" -- это еще, как посмотреть. По даташиту собственное потребление у них 1-3мка. В конструкции беспроводного сенсора у меня три датчика (BMP180, SI7021 и BH1750) с такими регуляторами на борту. Зачем мне еще 3-9мка постоянного потребления, если без них все устройство (датчики, МК, радиомодуль) в режиме сна потребляет 4-5мка ?

Zhyravlev_AS пишет:
А до этого какие проблемы были?

Для устройств с автономным питанием лишнее энергопотребление крайне не желательно. Даже микроамперное. Проблемы набортные регуляторы датчиков начинают создавать в случае, когда емкость источника питания небольшая, а желаемые сроки автономной работы, наоборот. Простейший расчет показывает, что до трети емкости батарейки может уходить на "кормление" этих стабилизаторов, которые, к тому же, в схеме не выполняют никакой полезной работы. Оставлять их на месте в этом случае было бы крайне неосмотрительно.

Zhyravlev_AS
Offline
Зарегистрирован: 03.04.2013

a5021, дык у меня проблема-то не в энергопотреблении в автономном режиме)) как вариант конечно я могу выпилить и стабилизаторы. Меня больше интересует вопрос: как правильно сделать что бы бы МК адекватно видел все устройства на I2C. Убрать все подтягивающие резисторы с датчиков и оставить только одни? И еще, в доках пишут, но у Due одна шина TWI уже подтянута а другая нет, вопрос - какая из них подтянута а какая нет?)) Что-то у меня не получилось найти по разводки платы. Может кто-то ткнуть носом?)

Zhyravlev_AS
Offline
Зарегистрирован: 03.04.2013

А нет, кажется нашел) Если правильно понял по разводки то это порты 20 и 21, подтянуты 1.5кОм к 3.3 вольтам?

a5021
Offline
Зарегистрирован: 07.07.2013

Резисторы по 1.5к и так выбраны там, похоже, по минимуму для подтяжки. Если им в параллель еще встают резисторы с I2C устройств, то общее сопротивление снижается настолько, что "перетянуть" их и прижать потенциал на линии к земле маломощным датчикам может оказаться затруднительно. Я бы начал с того, что поснимал все подтягивающие резисторы на датчиках, оставив подтяжку только на ардуине.