Sida 1 av 1

BME280 och matning från en pin, reset av I2C [löst]

Postat: 29 februari 2020, 13:26:55
av JanErik
Vill sätta en BME280 att matas från en pin och bli spänningslös när mikrokontrollern går i sleep.
Då verkar nåt gå fel antingen i kommunikationen eller kalibreringarna; har använt Sparkfuns bibliotek till Arduino.

Första mätningen är OK, alltså före matningen släcks.

Kod: Markera allt

Humidity: Reading basic values from BME280
Humidity: 26.32 Pressure: 963.71 Temp: 18.73
Humidity: 91.33 Pressure: 648.42 Temp: 22.08
Humidity: 91.71 Pressure: 651.90 Temp: 22.08
Humidity: 91.71 Pressure: 651.90 Temp: 22.08
Humidity: 91.71 Pressure: 651.90 Temp: 22.08
Humidity: 91.71 Pressure: 651.90 Temp: 22.08
Humidity: 91.71 Pressure: 651.90 Temp: 22.08
Prövat köra sensorbibliotekets reset-funktion, prövat köra Wire.begin utan resultat.
Prövat sensorbibliotekets beginI2C men då verkar den frysa.

Re: BME280 och matning från en pin, reset av I2C

Postat: 29 februari 2020, 14:43:24
av Klas-Kenny
Kod?

Re: BME280 och matning från en pin, reset av I2C

Postat: 29 februari 2020, 14:49:34
av lond
µP? ESP8266?

/// Marcus

Re: BME280 och matning från en pin, reset av I2C

Postat: 29 februari 2020, 15:16:42
av JanErik
Det är löst, måste köra reset() och begin(). Atmega328.

Kod: Markera allt

#include <Wire.h>

#include "SparkFunBME280.h"
BME280 mySensor;
#define POWERPIN 2

void setup()
{
  Serial.begin(9600);
  Serial.println("Reading basic values from BME280");
  
  pinMode(POWERPIN, OUTPUT);
  digitalWrite(POWERPIN, HIGH);
  delay(10);
  
  Wire.begin();
  Wire.setClock(100000);

  mySensor.setI2CAddress(0x76);
  if (mySensor.beginI2C() == false) //Begin communication over I2C
  {
    Serial.println("The sensor did not respond. Please check wiring.");
    while(1); //Freeze
  }
  mySensor.setTempOverSample(16); //0 to 16 are valid. 0 disables temp sensing. See table 24.
  mySensor.setPressureOverSample(16); //0 to 16 are valid. 0 disables pressure sensing. See table 23.
  mySensor.setHumidityOverSample(16); //0 to 16 are valid. 0 disables humidity sensing. See table 19.
  mySensor.setMode(MODE_FORCED); //MODE_SLEEP, MODE_FORCED, MODE_NORMAL is valid. See 3.3
}

void loop()
{
  digitalWrite(POWERPIN, HIGH);
  delay(10);
  mySensor.reset();
  mySensor.begin();
  delay(10);
  
  Serial.print("Humidity: ");
  Serial.print(mySensor.readFloatHumidity(), 2);

  Serial.print(" Pressure: ");
  Serial.print(mySensor.readFloatPressure()/100, 2);

  Serial.print(" Temp: ");
  Serial.print(mySensor.readTempC(), 2);
  Serial.println();

  digitalWrite(POWERPIN, LOW);
  
  delay(10000);
}

Re: BME280 och matning från en pin, reset av I2C

Postat: 29 februari 2020, 15:20:57
av JanErik
Dock vet jag inte varför den första tryckmätningen visar 96x när de senare visar korrekt 99x. Men jag ska inte använda den ändå.

Re: BME280 och matning från en pin, reset av I2C

Postat: 29 februari 2020, 15:29:37
av PeterH
Vad händer om du lägger till en längre delay innan första mätningen? Du har ju som jag förstår det stängt ner BME:n och den kanske behöver tid att komma igång innan mätningen vid uppstart?

Re: BME280 och matning från en pin, reset av I2C [löst]

Postat: 1 mars 2020, 15:34:50
av JanErik
Nu funkar nog allt. Måste lägga en dummy-läsning av temperaturen efter första initalisering i setup(). Medföljande exemplet uppförde sig likadant.
Även med riktig sleep fungerar det, efter att jag kör power_twi_disable() före och power_twi_enable() efter uppvakning.