Не работает bmp280 по spi

Тема в разделе "Arduino & Shields", создана пользователем WhiteFox, 7 апр 2021.

Метки:
  1. WhiteFox

    WhiteFox Нерд

    МК - ATMEGA 2560
    VCC - 3.3V
    GND - GND
    SCL - SCK
    SDA - MOSI
    CSB - D30
    SDO - MISO

    Доходит до bmp.begin() и встает намертво, при этом сенсор находит.
    Если при зависшем bmp.begin() отключить CSB,
    то сенсор сразу теряется и выдает "BMP280 SENSOR ERROR".
    Сам датчик полностью рабочий, проверял через протокол I2C.
    С SPI дело имею первый раз...


    Код (C++):
    #include <Wire.h>
    #include <SPI.h>
    #include <Adafruit_BMP280.h>

    //#define BMP280_ADDRESS (0x76)

    Adafruit_BMP280 bmp(30);

    void setup() {
      Serial.begin(9600);
      if (!bmp.begin()) { // Если датчик BMP280 не найден
        Serial.println("BMP280 SENSOR ERROR");
        while (1);
      }
      Serial.println("start");
    }

    void loop() {
      delay(5000);
      // Выводим значение температуры
      Serial.print(F("Температура = "));
      Serial.print(bmp.readTemperature());
      Serial.println(" *C");

      // Выводим значение атмосферного давления
      Serial.print(F("Давление = "));
      Serial.print(bmp.readPressure());
      Serial.println(" Pa");

      // Выводим значение высоты
      Serial.print(F("Высота над уровнем моря = "));
      Serial.print(bmp.readAltitude(1013.25));
      Serial.println(" m");
    }
     
    Последнее редактирование: 7 апр 2021
  2. akl

    akl Гуру

    а если попробовать с программным вариантом spi? то есть написать типа
    Adafruit_BMP280 bmp(30,51,50,52);
     
  3. Andrey12

    Andrey12 Гик

    А вы интерфейс то переключили? Неплохо бы схему подключения увидеть.
    Если вы его до этого подключали по I2C и все работало, то куда сейчас нога 2(CSB) подключена и от чего вы ее отключаете?

    upload_2021-4-7_11-14-47.png
    Вот с даташита что куда подключать надо .
    upload_2021-4-7_11-17-36.png
     
  4. WhiteFox

    WhiteFox Нерд

    Заработало, но я хочу по аппаратному SPI...
     
  5. WhiteFox

    WhiteFox Нерд

    CSB я подключаю на любой цифровой пин, при этом указываю его в конструкторе Adafruit_BMP280 bmp(30); //30 - pin chip select
     
  6. akl

    akl Гуру

    загадочно. а если вместо 30 пина на 53 подключить?

    может у аппаратного скорость великовата
     
  7. WhiteFox

    WhiteFox Нерд

    53 пин ничего не изменил...
    А вот со скоростью передачи скорее всего проблема.
    Попробую покопаться...
     
  8. WhiteFox

    WhiteFox Нерд

    Проблема оказалась в скорости передачи, на 4МГЦ все заработало, хотя SPI по дефолту должен всегда в 4МГЦ запускаться...
     
  9. akl

    akl Гуру

    кстати, в SPI есть еще такие настройки - полярность и фаза клок-сигнала. У атмег это тычки CPOL и CPHA в регистре SPDR. Для некоторых устройствам они должны быть настроены определенным образом. просто сам только что столкнулся с этим, думал че не работает, а в даташите на эту приблуду ваще не очевидно