ccs811 Luftreinheit Sensor IC2 auslesen

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • mirco99 schrieb:

      i2cstart
      i2cwbyte STATUS_REG 'Status abfragen
      i2crbyte ccs811temp ,Ack '
      i2cstop
      Hier fehlt die Schreib-Adresse. Du musst erst mal den chip ansprechen, mit einem i2cwrite Ccs811_schreiben nach dem i2cstart. Das musst du immer machen. Da wird er hellhörig und er beachtet die folgende Adresse Status_Reg. Auf die antwortet er. Und wenn du nur ein byte liest, dann kommt ein nack, das eine byte ist ja auch das letzte, was gelesen wird.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Ich danke allen, es funktioniert jetzt. :)
      Die I2c Adresse war doch falsch.
      Ich habe noch das Error Bit und das Data Ready Bit ausgelesen.
      Es werden nur neue Daten gelesen, wenn Data Ready bit 1 ist.

      Wie versprochen der funktionierende Code. Jetzt müssen nur noch die Bytes zusammengesetzt werden.
      Zur info, die Platine wird etwas warm. Ein gutes Zeichen, das der Chip nicht mehr im Idle oder Boot Mode ist.


      BASCOM-Quellcode

      1. $Regfile="m328pdef.dat"
      2. $Crystal=16000000
      3. $hwstack=80
      4. $swstack=80
      5. $framesize=80
      6. $baud= 9600
      7. '$lib "i2cV2.LBX"
      8. $lib "i2c_twi.lbx"
      9. Config Scl = Portc.5 'Arduino nano A5
      10. Config Sda = Portc.4 'Arduino nano A4
      11. I2cinit
      12. Config Twi = 400000 '100khz
      13. Dim I2cbuff (30) As Byte 'I2C-Sende- / Empfangspuffer.
      14. Dim schleife as byte
      15. Dim Ccs811temp As byte
      16. const Ccs811_schreiben = &hb4 ' Die I2C-Adresse von CCS811 zum schreiben 0xB4 =1011 0100 7 Bit Plus das Bit 0 für lesen (0)
      17. const Ccs811_lesen = &hb5 ' Die I2C-Adresse von CCS811 zum lesen 0xB5 = 10110101 7 Bit Plus das Bit 0 für schreiben (1)
      18. const STATUS_REG =&h00
      19. const MEAS_MODE_REG = &h01
      20. const ALG_RESULT_DATA =&h02
      21. 'define ENV_DATA 0x05
      22. 'define NTC_REG 0x06
      23. 'define THRESHOLDS 0x10
      24. 'define BASELINE 0x11
      25. 'define HW_ID_REG 0x20
      26. 'define ERROR_ID_REG 0xE0
      27. const APP_START_REG = &hF4
      28. 'define SW_RESET 0xFF
      29. 'define CCS_811_ADDRESS 0x5A
      30. 'define GPIO_WAKE 0x5
      31. 'define DRIVE_MODE_IDLE 0x0
      32. const DRIVE_MODE_1SEC= &h10
      33. 'define DRIVE_MODE_10SEC 0x20
      34. 'define DRIVE_MODE_60SEC 0x30
      35. 'define INTERRUPT_DRIVEN 0x8
      36. 'define THRESHOLDS_ENABLED 0x4
      37. 'dim bits (8) as bit 'empfangenes Byte Zerlegen
      38. Waitus 60
      39. 'dim flag as bit
      40. '----------------------Status abfragen----------------------------------------
      41. i2cstart
      42. i2cwbyte Ccs811_schreiben ' Bit 7 FW_Mode = 0:Boot Mode 1:Application Mode
      43. i2cwbyte STATUS_REG 'Status abfragen ' Bit 4 = Application Firmware loaded 0: no 1:Valid application loadet
      44. i2cstart ' Bit 3 = Data Ready 0:no new Data 1:new Data
      45. i2cwbyte Ccs811_lesen ' Bit 0 Error dedection 0:no Error 1: Error on i2c or Sensor
      46. i2crbyte ccs811temp ,nack
      47. i2cstop
      48. waitms 25
      49. print "Sensor Status:"
      50. If ccs811temp.7 = 1 then
      51. print "Application Mode"
      52. else
      53. print "Boot Mode"
      54. end if
      55. If ccs811temp.0 = 1 then
      56. print "Error on i2c or sensor"
      57. else
      58. print "no Error"
      59. end if
      60. print
      61. wait 3
      62. '--------------------- In den Application Mode wechseln-------------------
      63. print "wechsle in den App Mode"
      64. i2cstart
      65. I2cwbyte Ccs811_schreiben
      66. I2cwbyte APP_START_REG
      67. i2cstop
      68. waitms 25
      69. '------------------------Modus einstellen---------------------------
      70. i2cstart
      71. I2cwbyte Ccs811_schreiben
      72. i2cwbyte MEAS_MODE_REG
      73. i2cwbyte &b00010000 'Bit7=0reserved, 6-4=001Mode 1 jede sekunde neue daten, 3=0 Interrupt für neue Daten aus, 2=0 Interrupt Mode Normal, 1-0 =00 Reserved
      74. i2cstop
      75. waitms 250
      76. '----------------------Status abfragen----------------------------------------
      77. i2cstart
      78. i2cwbyte Ccs811_schreiben ' Bit 7 FW_Mode = 0:Boot Mode 1:Application Mode
      79. i2cwbyte STATUS_REG 'Status abfragen ' Bit 4 = Application Firmware loaded 0: no 1:Valid application loadet
      80. i2cstart ' Bit 3 = Data Ready 0:no new Data 1:new Data
      81. i2cwbyte Ccs811_lesen ' Bit 0 Error dedection 0:no Error 1: Error on i2c or Sensor
      82. i2crbyte ccs811temp ,nack
      83. i2cstop
      84. waitms 25
      85. '-------------------Status Ausgabe---------------------------------------
      86. print "Sensor Status:"
      87. If ccs811temp.7 = 1 then
      88. print "Application Mode"
      89. else
      90. print "Boot Mode"
      91. end if
      92. If ccs811temp.0 = 1 then
      93. print "Error on i2c or sensor"
      94. else
      95. print "no Error"
      96. end if
      97. wait 10
      98. '#########################################################################################################################################################
      99. do
      100. print
      101. print "#####neu#####"
      102. '----------------------Status abfragen----------------------------------------
      103. i2cstart
      104. i2cwbyte Ccs811_schreiben ' Bit 7 FW_Mode = 0:Boot Mode 1:Application Mode
      105. i2cwbyte STATUS_REG 'Status abfragen ' Bit 4 = Application Firmware loaded 0: no 1:Valid application loadet
      106. i2cstart ' Bit 3 = Data Ready 0:no new Data 1:new Data
      107. i2cwbyte Ccs811_lesen ' Bit 0 Error dedection 0:no Error 1: Error on i2c or Sensor
      108. i2crbyte ccs811temp ,nack
      109. i2cstop
      110. waitms 25
      111. '--------------------Status Ausgabe----------------------------------------
      112. print "Sensor Status:"
      113. If ccs811temp.7 = 1 then ' Bit 7abgefragt
      114. print "Application Mode"
      115. else
      116. print "Boot Mode"
      117. end if
      118. If ccs811temp.0 = 1 then 'Bit0 abgefragt
      119. print "Error on i2c or sensor"
      120. else
      121. print "no Error"
      122. end if
      123. 'print "sensor Status Byte";ccs811temp
      124. wait 1
      125. If ccs811temp.3 =1 then ' Wenn data Ready Bit gesetzt, sind neue Daten verfügbar
      126. I2cstart
      127. I2cwbyte Ccs811_schreiben
      128. I2cwbyte ALG_RESULT_DATA 'Sensor soll neue Werte schicken 8 Bytes kommen zurück
      129. ccs811temp=1
      130. i2cstart
      131. I2cwbyte Ccs811_lesen
      132. for schleife = 1 to 7
      133. I2crbyte I2cbuff(ccs811temp) , Ack 'Ack=1. Byte 8x1 Byte in Array auslesen
      134. ccs811temp =ccs811temp +1
      135. next
      136. i2crbyte I2cbuff(8) ,Nack
      137. i2cstop
      138. waitms 25
      139. end if
      140. ccs811temp=1 'Daten 8 Bit Seriell ausgeben
      141. for schleife = 1 to 8
      142. print I2cbuff(ccs811temp)
      143. ccs811temp =ccs811temp +1
      144. next
      145. loop
      146. '#########################################################################################################################################################
      Alles anzeigen
      PuTTY.png
    • Bin heute einiges weiter gekommen.
      Heute war basteln angesagt und ich habe eine Platine gelötet,ein Display PNP Transistor für die Beleuchtungsabschaltung und 2 Taster für das Menü angeschlossen.
      Der Sensor reagiert super schnell. Man braucht nur in die Richtung pusten und sofort sieht man es an den Werten.
      Selbst, wenn man sich die Hände gewaschen hat und diese nach Seife riechen, verändern sich die VOC Werte wenn man die Hand über dem Sensor hält.
      Jetzt kommt noch eine PWM Steuerung für ein Servo und eine Lüfter Steuerung mit einem Mos Feet dazu. Dann ist meine Schlafzimmerlüftung fertig.
      Jetzt kann der Nachbar draußen rauchen oder Grillen, ohne das alles in mein Schlafzimmer zieht. Die Wandlüftung wird dann mechanisch verschlossen, so lange wie ein hoher Voc Wert herrscht und der Lüfter abgeschaltet. Im 2. Schritt kommt ein Lipo Mppt Laderegler dazu. Zur Zeit läuft die Lüftung noch über ein 10 Watt Solarmodul mit einem Bleiakku. So wird alles kompakter und effizienter.
      voc_sensor.jpg