Подключение BMP180 к Arduino Micro

AlexRaw
Offline
Зарегистрирован: 26.01.2016

Всем привет!

Начинаю изучать платформу ардуино, но увы пока нет опыта в схемотехнике. Решил попробовать подключить железку GY-68 (BMP180) к Arduino Micro. Перепробовал все библиотеки и примеры скетчей, которые нашел, но увы отклика от датчика не могу получить. Подскажите как правильно это провернуть.

Датчик такой: http://www.arduiner.com/en/pressione/2328-bmp180-barometric-pressure-tem...

Подключаем к микре SDA - 2, SCL - 3, как указано здесь https://learn.sparkfun.com/tutorials/bmp180-barometric-pressure-sensor-h...

Пробовал: SFE_BMP180, Adafruit_BMP085. скетчи экзампловые. Симптом один и тот же - на begin() подвисает, который потом возвращает 0. Подключал VCC на 5V и на 3.3V . Датчики разные, на случай если спалю 5В, так как в половине статей строго указано что он умирает с 5 вольтами, а тут https://www.youtube.com/watch?v=_Tke-bhk1gk, свободно подключается и работает к 5 VCC.

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

Вопросы:

1) Можно ли протестировать датчик на предмет работоспособности?

2) Можно ли его подключать к VCC 5V? Если да, то допускается 4.8 или строго 5? питание беру с VCC ардуины, которая подключена к USB, а там 4.8 (судя по вольтметру).

3) В чем еще может быть проблемма? Может указанные либы работают с другими ножками?

 

AlexRaw
Offline
Зарегистрирован: 26.01.2016

Дополнение: датчик куплен тут: https://iarduino.ru/shop/Sensory-Datchiki/barometr-gy-68-datchik-atmosfe...

в описании написано: Питание: 1.8-3.6V, а в ссылке выше - 5V, хоть и внешне они одинаковы. Возможно существуют два вида - на 5В и на 3.6В, и я спалил тот, который подключал к ноге VCC микры, но остается второй датчик, который всегда подключался к 3.3

oleg_kazakof
Offline
Зарегистрирован: 24.04.2015

В поисковой строке форума набери "BMP085, BMP180, метеостанции "  и почитай посты.

 

AlexRaw
Offline
Зарегистрирован: 26.01.2016

Вроде все прочитал - подключаю как указано. Может есть способ пропинговать датчик изолировано?

oleg_kazakof
Offline
Зарегистрирован: 24.04.2015

Нет такого способа.  Проверь для начала где на плате I2C подключи чтонибудь другое, (дисплей) и рины A5 - SCL, A4 - SDA возможно.

 

AlexRaw
Offline
Зарегистрирован: 26.01.2016

Пробовал подключать ЖК 16x2 через переходник I2C - не очень устойчиво, но работает. Как миниммум данные переливает и на дисплей что-то выводит. Пока есть подозрение (если отбросить идею что датчики погорели) что либо адрес не тот, либо действительно управляющие ноги не те. Попробую через Wire достучаться

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

Если датчик именно такой, как на картинке, то он будет работать при подаче питания от 1.8в до 6в. Маленький черный трехконтактный чип на плате (обычно с маркировкой 662) -- это стабилизатор, который позаботится, чтобы напряжение на датчике не было превышено.

AlexRaw
Offline
Зарегистрирован: 26.01.2016

Круто! Да, обвязка четырехконтактная, в большинстве статей указано что действительно стабилизатор уже встроен.

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

YRA
Offline
Зарегистрирован: 10.01.2015

Попробуй сканером I2C, посмотреть какой у него адрес

http://arduino.ru/forum/programmirovanie/lcd-i2c-partizanit?page=1 

70 пост

 

oleg_kazakof
Offline
Зарегистрирован: 24.04.2015

AlexRaw пишет:

Круто! Да, обвязка четырехконтактная, в большинстве статей указано что действительно стабилизатор уже встроен.

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

значит ты плохо читал посты:  адрес этого датчика зашит на заводе и ни как не меняется, у всех BMPшек он одинаковый.

AlexRaw
Offline
Зарегистрирован: 26.01.2016

Здорово!

Действительно сразу нашел по намеку https://www.adafruit.com/products/1603

"This board/chip uses I2C 7-bit address 0x77." - половину вопросов снимается

 

YRA
Offline
Зарегистрирован: 10.01.2015

Спасибо

bwn
Offline
Зарегистрирован: 25.08.2014

AlexRaw пишет:

Здорово!

Действительно сразу нашел по намеку https://www.adafruit.com/products/1603

"This board/chip uses I2C 7-bit address 0x77." - половину вопросов снимается

 

Так взлетело, али нет?

AlexRaw
Offline
Зарегистрирован: 26.01.2016

Попробовал сканер I2C, поток вешается на Wire.endTransmission(), уходит и не возвращается. пины проверил - если подключать LCD, то все нормально, то есть Wire работает с этими ногами

[code]

Wire.begin();
 for (byte i = 8; i < 120; i++)
  {
    Wire.beginTransmission (i);
    if (Wire.endTransmission () == 0) << Тут

   ...

[/code]

причем подвисает даже с полностью отключенным датчиком

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

endTransmission -- это и есть собственно передача по шине. все остальное лишь запись сценария.

oleg_kazakof
Offline
Зарегистрирован: 24.04.2015
[code]

/* 
// i2c_scanner
// Version 1
//    This program (or code that looks like it)
//    can be found in many places.
//    For example on the Arduino.cc forum.
//    The original author is not know.
// Version 2, Juni 2012, Using Arduino 1.0.1
//     Adapted to be as simple as possible by Arduino.cc user Krodal
// Version 3, Feb 26  2013
//    V3 by louarnold
// Version 4, March 3, 2013, Using Arduino 1.0.3
//    by Arduino.cc user Krodal.
//    Changes by louarnold removed.
//    Scanning addresses changed from 0...127 to 1...119,
//    according to the i2c scanner by Nick Gammon
//    http://www.gammon.com.au/forum/?id=10896
// Version 5, March 28, 2013
//    As version 4, but address scans now to 127.
//    A sensor seems to use address 120.

// This sketch tests the standard 7-bit addresses
* Devices with higher bit address might not be seen properly.
 */
#include <Wire.h> 
void setup()
{
  Wire.begin();
  Serial.begin(9600);
  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
}

[/code]

Загрузи этот скетч, посмотри что будет в сериале.

 

AlexRaw
Offline
Зарегистрирован: 26.01.2016

Попробую, но предполагаю, что повиснет на error = Wire.endTransmission();, как и выше, проблемма же в том, что он вообще не возвращается, а не то что ошибка какая-то.

Наверно еще попробую mini pro прошить, может сам arduino micro виноват... Дело в том, что если вообще датчики не подключать, то теоретически код выше (который пингует все адреса) должен все опрашивать и возвращать 0 устройств. В моем случае почему-то это происходит не стабильно, то подвисает (причем на разных адресах), то полностью проходит... короче не понятно

oleg_kazakof
Offline
Зарегистрирован: 24.04.2015

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

 

AlexRaw
Offline
Зарегистрирован: 26.01.2016

Спасибо! Очень похоже на правду...

AlexRaw
Offline
Зарегистрирован: 26.01.2016

подтянул SDA/SCL на VCC через 4.7kOm все равно симптомы остались, прошил Arduino Mini Pro той же прошивкой - успешно подключился даже без резисторов подтяжки. Вероятно у меня Arduino Micro не совсем исправный ...

YRA
Offline
Зарегистрирован: 10.01.2015

Ок