Forum: Mikrocontroller und Digitale Elektronik ccs811 sleep mode


von Reiner D. (dollreiner)


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 ?

von Rolf (rolf22)


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.

von Reiner D. (dollreiner)


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.

: Bearbeitet durch User
von Rolf (rolf22)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.