МК - 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"); }
а если попробовать с программным вариантом spi? то есть написать типа Adafruit_BMP280 bmp(30,51,50,52);
А вы интерфейс то переключили? Неплохо бы схему подключения увидеть. Если вы его до этого подключали по I2C и все работало, то куда сейчас нога 2(CSB) подключена и от чего вы ее отключаете? Вот с даташита что куда подключать надо .
CSB я подключаю на любой цифровой пин, при этом указываю его в конструкторе Adafruit_BMP280 bmp(30); //30 - pin chip select
53 пин ничего не изменил... А вот со скоростью передачи скорее всего проблема. Попробую покопаться...
Проблема оказалась в скорости передачи, на 4МГЦ все заработало, хотя SPI по дефолту должен всегда в 4МГЦ запускаться...
кстати, в SPI есть еще такие настройки - полярность и фаза клок-сигнала. У атмег это тычки CPOL и CPHA в регистре SPDR. Для некоторых устройствам они должны быть настроены определенным образом. просто сам только что столкнулся с этим, думал че не работает, а в даташите на эту приблуду ваще не очевидно