ccs811 sleep mode

OP #7809035
Lesenswert?

Ich möchte einen batteriebetriebenen co2-sensor bauen. der ccs811 kann lt. datenblatt im sleep-md betrieben werden (4uA).

wie das geht, erschließt sich mir nicht eindeutig :

  • entweder steht da, man kann das mit der wake-leitung schalten (mittels gpio)

  • oder man setzt ein register im sensorprozessor

was jetzt ?

#7809089
Lesenswert?

Reiner D. schrieb:

wie das geht, erschließt sich mir nicht eindeutig :

  • entweder steht da, man kann das mit der wake-leitung schalten (mittels gpio)
  • oder man setzt ein register im sensorprozessor

Diese Aussage klemmt in der Logik. Wenn ich sie mal in das übersetze, was du vermutlich meinst, dann steht das nicht im Datenblatt, jedenfalls nicht in diesem hier: https://cdn.sparkfun.com/assets/learn_tutorials/1/4/3/CCS811_Datasheet-DS000459.pdf

Dort kommt das Wort "sleep" überhaupt nur ein einziges Mal vor, zusammen mit der Angabe 19 µA (du sagtest "4 µA"?). Ist offensichtlich ein Lapsus im Datenblatt, denn ansonsten heißt es dort immer nur "low power".

Jedenfalls steht dort, dass es genau 5 Betriebsmodi gibt, davon zwei mit "low power".

Um einen der Modi zu wählen, muss man per I2C in ein Register schreiben. Um das I2C-Interface zu aktivieren (kostet Strom), setzt man nWAKE zum Zugreifen auf ein Register auf low. Wer keinen Strom sparen muss/will, kann nWAKE auch fest auf low legen.

OP #7809190
Lesenswert?

Weil ich da Probleme mit der Funktion habe, schreib ich diesen Thread.

Meine Info kommt da her : https://cdn.sparkfun.com/datasheets/BreakoutBoards/CCS811_Programming_Guide.pdf

(CCS811 Programming and Interfacing Guide)

Orginaltext : "When this pin is logic high the CCS811 enters sleep mode"

Leider funktioniert das aber nicht :

Das hier klappt zwar vom Stromverbrauch her (Attiny mitgemessen) :

1
void setup()
2
{
3
  pinMode(1, OUTPUT);  //das ist die onboard-LED
4
  pinMode(3, OUTPUT);  //GPIO für Sensor an (Wake=0)
5
  digitalWrite(3,0);   //Sensor an
6
  //ccs.begin();       // ***** !!!
7
}
8

9
void loop()
10
{  
11
    digitalWrite(1,HIGH);   //LED ein : kurzes Aufleuchten
12
    delay(100);
13
    digitalWrite(1,LOW);    //LED aus
14
    //--------------------------------------------------------
15
    digitalWrite(3,0);      //Sensor an (Wake=0)
16
    delay(3000);            //******17,2 mA***************
17
    digitalWrite(3,1);      //Sensor aus (Wake=1)
18
    delay(3000);            //******11,6 mA***************

Wenn ich aber messen will, und den Sensor initialisiere :

1
void setup()
2
{
3
  pinMode(1, OUTPUT);  //das ist die onboard-LED
4
  pinMode(3, OUTPUT);  //GPIO für Sensor an (Wake=0)
5
  digitalWrite(3,0);   //Sensor an
6
  ccs.begin();       // ****************
7
}
8

9
void loop()
10
{  
11
    digitalWrite(1,HIGH);   //LED ein : kurzes Aufleuchten
12
    delay(100);
13
    digitalWrite(1,LOW);    //LED aus
14
    //--------------------------------------------------------
15
    digitalWrite(3,0);      //Sensor an (Wake=0)
16
    delay(3000);            //******31,0 mA***************
17
    digitalWrite(3,1);      //Sensor aus (Wake=1)
18
    delay(3000);            //******29,4 mA***************

dann sinkt der Strom praktisch nicht mehr !

Weiter : wenn ich den IDLE-Mode aktiviere, geht der Strom wie beschrieben drastisch runter. ABER : Zurück in einen Betriebsmodus (z.b. 1SEC) bedeutet für den Sensor einen Reset, incl. neuer BAseline usw., der CO2-Wert ist dann stets 400 am Anfang.

#7809419
Lesenswert?

Reiner D. schrieb:

Weil ich da Probleme mit der Funktion habe, schreib ich diesen Thread.

Meine Info kommt da her :

https://cdn.sparkfun.com/datasheets/BreakoutBoards/CCS811_Programming_Guide.pdf

Du sagtest "Datenblatt", das ist aber keins. Und du sagtest "4 µA", obwohl dort nirgendwo irgendeine µA-Angabe vorkommt. :-(

Orginaltext : "When this pin is logic high the CCS811 enters sleep mode"

Das ist praktisch derselbe Lapsus wie im von mir verlinkten Datenblatt. Gemeint ist offensichtlich: "When this pin is logic high the CCS811's I2C interface enters sleep mode". Das hat nichts mit dem Gesamtstromverbrauch zu tun. Das erkennt man klar an der Beschreibung im Datenblatt.

Was deinen Code angeht, da sehe ich nicht, wo da irgendetwas zur Initialisierung per I2C in eins der Chip-Register geschrieben wird. Mach es so, wie ich es dem Datenblatt folgend geschrieben habe – dann kann man weitersehen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren