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

Övriga diskussioner relaterade till komponenter. Exempelvis radiorör, A/D, kontaktdon eller sensorer.
JanErik
Inlägg: 3118
Blev medlem: 11 februari 2008, 17:15:58
Ort: Vasa, Finland

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

Inlägg 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.
Senast redigerad av JanErik 29 februari 2020, 15:27:41, redigerad totalt 1 gång.
Användarvisningsbild
Klas-Kenny
Inlägg: 11292
Blev medlem: 17 maj 2010, 19:06:14
Ort: Växjö/Alvesta

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

Inlägg av Klas-Kenny »

Kod?
Användarvisningsbild
lond
Inlägg: 3508
Blev medlem: 23 september 2009, 11:52:45
Ort: Hyssna

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

Inlägg av lond »

µP? ESP8266?

/// Marcus
JanErik
Inlägg: 3118
Blev medlem: 11 februari 2008, 17:15:58
Ort: Vasa, Finland

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

Inlägg 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);
}
Senast redigerad av JanErik 29 februari 2020, 15:21:58, redigerad totalt 1 gång.
JanErik
Inlägg: 3118
Blev medlem: 11 februari 2008, 17:15:58
Ort: Vasa, Finland

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

Inlägg 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å.
Användarvisningsbild
PeterH
Inlägg: 8613
Blev medlem: 15 mars 2006, 15:57:10
Ort: Gävle/Valbo

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

Inlägg 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?
JanErik
Inlägg: 3118
Blev medlem: 11 februari 2008, 17:15:58
Ort: Vasa, Finland

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

Inlägg 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.
Skriv svar