ccs811 Luftreinheit Sensor IC2 auslesen

    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!

    • ccs811 Luftreinheit Sensor IC2 auslesen

      Hallo, ich habe mir das JOY-IT Breakout-Board CCS811 zur Messung der Luftreinheit zugelegt.
      Link zum Board
      Leider haperts mit dem Auslesen. Google spuckt leider nicht viel Hilfe aus.
      Ich betreibe das Board mit einem Arduino nano ohne Boot Loader.
      Ich habe nur ein komplettes Bascom Beispiel hier gefunden:

      Gefundenes Beispielprogramm aus Japan
      Dort werden aber 2 Sensoren ausgelesen und die Programmierung ist nicht wirklich übersichtlich.
      Ich habe mir die Stellen rausgesucht um ein kurzes Bascom Programm zum Verständnis zu haben.
      Die Ausgelesenen Daten (VOC ist für mich wichtig TVoc wäre noch besser) werden über USB Serial ausgegeben, um einfach mit Putty schauen zu können.

      Kann mir jemand sagen, was ich falsch mache?

      Ich bekomme seriell nur eine Zahl 65535 angezeigt.
      putty.png

      Hier mein Code:


      BASCOM-Quellcode: Joyit_Sensorboard_CCS811.bas

      1. $Regfile="m328pdef.dat"
      2. $Crystal=16000000
      3. $hwstack=80
      4. $swstack=80
      5. $framesize=80
      6. $baud= 9600
      7. Print "com Test"
      8. 'Config Com1 = 9600 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0 'Serielle Schnittstelle aktivieren
      9. $lib "i2cV2.LBX"
      10. Config Scl = Portc.5 'Arduino nano A5
      11. Config Sda = Portc.4 'Arduino nano A4
      12. I2cinit
      13. Const Ccs811_adr = &HB4 'Die I2C-Adresse von CCS811.
      14. Dim Eco2 As Word '-eCO2-Wert (Äquivalent CO2) ppm.
      15. Dim Tvoc As Word 'TVOC-Wert (Gesamt-VOC) ppb.
      16. Dim I2cbuff (30) As Byte 'I2C-Sende- / Empfangspuffer.
      17. Dim I2clength As Byte 'Die Anzahl der empfangenen I2C-Datenbytes.
      18. Dim Ccs811temp1 As byte
      19. Waitms 30 'Wartet auf die CCS811-Startzeit (tSTART).
      20. 'Reset Ccs811_nwake 'Setzen Sie den [nWAKE] -Pin des CCS811 auf [L].
      21. Waitus 60 'Wartet auf die Startzeit (tAWAKE) von [nWAKE] = [L] von CCS811.
      22. I2cbuff (1) = &H20 '[HW_ID] -Register.
      23. I2clength = 1 'Anzahl der empfangenen I2C-Bytes.
      24. i2cstart
      25. I2cbuff (1) = &H01 '[MEAS_MODE] -Register.
      26. I2csend &hb4, I2cbuff (1), 2 '1-Byte-Adresse und 1-Byte-Daten über den I2C-Bus senden.
      27. I2cbuff(2) = &B0001_1000 ' (Abtastintervall 0: 1 Sekunde = &B0001_1000, 1:10 Sekunde=&B0010_1000, 2:60 Sekunden=&B0011_1000 )
      28. I2csend Ccs811_adr , I2cbuff(1) , 2 '1-Byte-Adresse und 1-Byte-Daten über den I2C-Bus senden.
      29. i2cstop
      30. '##########################################################################
      31. do
      32. print "neu"
      33. 'Ccs811read:
      34. I2cbuff (1) = &H02 '[ALG_RESULT_DATA] Register.
      35. I2clength = 5 'Anzahl der empfangenen I2C-Bytes.
      36. I2csend Ccs811_adr , I2cbuff(1) , 1
      37. waitus 100
      38. I2cstart
      39. I2cwbyte Ccs811temp1 + &H01
      40. Ccs811temp1 = 1
      41. While I2clength <> 1
      42. I2crbyte I2cbuff(ccs811temp1) , Ack
      43. Ccs811temp1 = Ccs811temp1 + 1
      44. I2clength = I2clength - 1
      45. Wend
      46. I2crbyte I2cbuff(ccs811temp1) , Nack
      47. ' I2creceive &hb4 + &H01,empfang
      48. I2cstop
      49. waitms 300
      50. Eco2 = Makeint (i2cbuff (2), I2cbuff (1)) 'Konvertiert 2-Byte-ECO2-Daten in eine Wortvariable.
      51. Tvoc = Makeint (i2cbuff (4), I2cbuff (3))
      52. waitms 1000
      53. Print Tvoc ;"Tvoc"
      54. print eco2 ;"eco2"
      55. loop
      56. '##########################################################################
      Alles anzeigen
      Ich habe die Twi Hardware Pins genommen, aber wie im Beispiel software i2c genutzt.
      Wake wurde dauerhaft auf Masse gelegt.
      diagram.png

      Hier gibt es eine Arduino Libary

      Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von mirco99 ()

    • mirco99 schrieb:

      I2csend &hb4, I2cbuff (1), 2 '1-Byte-Adresse und 1-Byte-Daten über den I2C-Bus senden.
      Das ist so nicht ganz richtig; er sendet die adresse und zwei Byte nämlich i2cbuff(1) und (2).
      Was sein Init verwirrt. Zuerst bekommt er 1,0 dann ohne Stop oder Restart seine Adresse,1 und $18 womit er fünf Byte als Daten aufgedrückt bekommt und damit sonstwas (oder gar nichts) macht.
      Ohne die Zeile 33 sollte es besser aussehen.
    • Den Inhalt der Zeile 34 vor der Zeile 33 ausführen, hätte ich gesagt. In Zeile 34 wird doch die Variable geladen, die aber schon vorher gesendet wird.

      Zeile 35 wäre auch zuviel.
      @Pluto25 hat die schickere Lösung beschrieben :)
      Raum für Notizen

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

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

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von tschoeatsch ()

    • Hallo Pluto und tschoeatsch,

      danke fürs drüberschauen. Habe ein CCS811 Programming and Interfacing Guide i, Netz bei Sparkfun gefunden.
      CCS811 Programming and Interfacing Guide

      Meine Slave Adresse stimmt demnach nicht.
      Hier die Adressen
      Const Ccs811_adr = &h5A 'Die I2C-Adresse von CCS811.
      'STATUS_REG 0x00
      Const MEAS_MODE_REG = &H01
      Const ALG_RESULT_DATA =&H02
      'define ENV_DATA 0x05
      'define NTC_REG 0x06
      'define THRESHOLDS 0x10
      'define BASELINE 0x11
      'define HW_ID_REG 0x20
      'define ERROR_ID_REG 0xE0
      'define APP_START_REG 0xF4
      'define SW_RESET 0xFF
      'define CCS_811_ADDRESS 0x5A
      'define GPIO_WAKE 0x5
      'define DRIVE_MODE_IDLE 0x0
      const DRIVE_MODE_1SEC= &H10
      'define DRIVE_MODE_10SEC 0x20
      'define DRIVE_MODE_60SEC 0x30
      'define INTERRUPT_DRIVEN 0x8
      'define THRESHOLDS_ENABLED 0x4

      Demnach muss die Slave Adresse &h5A heissen ?!
    • Hm, wenn ich im Datenblatt nachlese, gibt es noch einen Adresspin. Abhängig von dem wird eine Adresse eingestellt.
      Single address select bit to allow alternate address to be selected•When ADDR is low the 7 bit I²C address is decimal 90 / hex 0x5A•When ADDR is high the 7 bit I²C address is decimal 91 / hex 0x5B.
      Die schreiben aber von 7bit, das 8.bit (bit0) schaltet zwischen lesen und schreiben um. Beim Schreiben ist dieses bit=0, beim Lesen 1. Wenn du jetzt den chip beschreiben willst, musst du die h5A nach links shiften, bit0 bleibt 0 und beim Lesen nach links shiften und 1 addieren.
      ams.com/ccs811

      avrhelp.mcselec.com/using_the_i2c_protocol.htm siehe BUS ADRESSING
      Raum für Notizen

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

      -----------------------------------------------------------------------------------------------------
    • Hallo tschoeatsch, danke deine Anmerkungen waren anfangs verwirrend, aber jetzt sehr hilfreich.
      Ich habe das Programm dementsprechend umgestellt.

      habe das gleiche Problem.
      Es werden nur 8 Byte mit wert 255 ausgegeben
      putty.png
      I2c ist nicht meins, muss ich feststellen.

      Ich habe die Sensoradresse in Lese- und Schreibadresse wegen dem Bit 0 unterteilt.
      Im Datenblatt steht, das man erst noch in den Application Mode wechseln muss, um Daten zu bekommen.
      Dies habe ich auch eingebaut.

      Ach ja, wenn ich jemals diesen Sensor zu laufen bringe, poste ich hier natürlich das funktionierende Programm, damit andere nicht von vorn beginnen müssen und sich dem eigentlichem Programm zuwenden können.

      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. Config Scl = Portc.5 'Arduino nano A5
      9. Config Sda = Portc.4 'Arduino nano A4
      10. I2cinit
      11. Dim I2cbuff (30) As Byte 'I2C-Sende- / Empfangspuffer.
      12. Dim schleife as byte
      13. Dim Ccs811temp As byte
      14. const Ccs811_schreiben = &hB4 ' Die I2C-Adresse von CCS811 zum schreiben 1011 0100 =B4 7 Bit Plus das Bit 0 für lesen (0) oder schreiben(1)
      15. const Ccs811_lesen = &hB5 ' Die I2C-Adresse von CCS811 zum lesen 1011 0101 =B5
      16. 'STATUS_REG 0x00
      17. const MEAS_MODE_REG = &h01
      18. const ALG_RESULT_DATA =&h02
      19. 'define ENV_DATA 0x05
      20. 'define NTC_REG 0x06
      21. 'define THRESHOLDS 0x10
      22. 'define BASELINE 0x11
      23. 'define HW_ID_REG 0x20
      24. 'define ERROR_ID_REG 0xE0
      25. const APP_START_REG = &hF4
      26. 'define SW_RESET 0xFF
      27. 'define CCS_811_ADDRESS 0x5A
      28. 'define GPIO_WAKE 0x5
      29. 'define DRIVE_MODE_IDLE 0x0
      30. const DRIVE_MODE_1SEC= &h10
      31. 'define DRIVE_MODE_10SEC 0x20
      32. 'define DRIVE_MODE_60SEC 0x30
      33. 'define INTERRUPT_DRIVEN 0x8
      34. 'define THRESHOLDS_ENABLED 0x4
      35. Waitus 60
      36. '------------------------Modus einstellen---------------------------
      37. i2cstart
      38. I2cwbyte Ccs811_schreiben
      39. I2cwbyte Drive_MODE_1SEC
      40. i2cstop
      41. waitms 25
      42. '--------------------- In den Application Mode wechseln-------------------
      43. i2cstart
      44. I2cwbyte Ccs811_schreiben
      45. I2cwbyte APP_START_REG
      46. i2cstop
      47. waitms 25
      48. '#########################################################################################################################################################
      49. do
      50. print
      51. print "#####neu#####"
      52. I2cstart
      53. I2cwbyte Ccs811_schreiben
      54. I2cwbyte ALG_RESULT_DATA 'Sensor soll neue Werte schicken 8 Bytes kommen zurück
      55. ccs811temp=1
      56. I2cstart
      57. I2cwbyte Ccs811_lesen
      58. for schleife = 1 to 7
      59. I2crbyte I2cbuff(ccs811temp) , Ack 'Ack=1. Byte
      60. ccs811temp =ccs811temp +1
      61. next
      62. I2crbyte I2cbuff(ccs811temp) , Nack 'Nack = letztes Byte
      63. i2cstop
      64. waitms 25
      65. ccs811temp=1 'Daten 8 Bit Seriell ausgeben
      66. for schleife = 1 to 8
      67. print I2cbuff(ccs811temp)
      68. ccs811temp =ccs811temp +1
      69. next
      70. waitms 2000
      71. loop
      72. '#########################################################################################################################################################
      Alles anzeigen

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von mirco99 ()

    • Hm, im Datenblatt steht
      When powering on the CCS811, a typical action is to transitionfrom Boot to App mode, a write to register APP_START with nodata is required.
      Das wären die Zeilen 51..56
      Und dann
      When in App mode, the next step is to start measuring.For example, writing 1 to register MEAS_MODE selectsoperation mode Mode1s: every second new measurement data(CO2, TVOC) becomes available.
      Das wären doch die Zeilen 43..49.
      Somit ist deine Reihenfolge umgedreht.
      Das Register 'App_Start' finde ich nicht, das Bildchen im DB würde ich so interpretieren, dass der 'MEAS-Mode' auf 0 gesetzt wird.
      Also
      i2cwrite ccs811_schreiben
      i2cwrite &H01 'Adresse von MEAS_mode
      i2cwrite 0
      i2cstop
      und jetzt den Meas_mode einstellen mit
      i2cwrite ccs811_schreiben
      i2cwrite &H01 'Adresse von MEAS_mode
      i2cwrite &b0001_0000 '1 Sekunde Messabstand
      i2cstop
      Raum für Notizen

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

      -----------------------------------------------------------------------------------------------------
    • Ok, hatte ich bisher nicht entdeckt. App_start_reg hat die Adresse &HF4 und es steckt wohl auch kein Datenbyte dahinter. Dann ist dein code

      i2cstart
      I2cwbyte Ccs811_schreiben
      I2cwbyte APP_START_REG
      i2cstop
      waitms 25

      aus meiner Sicht ok. Da steht aber auch noch, man soll vorher den Status auslesen, ob eine valide Application drauf ist, was immer das wieder heißt. Hat das Ding firmware drauf? Ich würde das mal ignorieren :D

      Obiger code sollte halt vor dem Auswählen der Messmethode mit MEAS_MODE stehen. Da ist in deinem code der Fehler drin, dass du nicht adressiert hast. Da bleibe ich bei meinem Vorschlag

      i2cwrite ccs811_schreiben
      i2cwrite &H01 'Adresse von MEAS_mode
      i2cwrite &b0001_0000 '1 Sekunde Messabstand
      i2cstop

      ich denke, das Ziel ist damit näher
      Raum für Notizen

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

      -----------------------------------------------------------------------------------------------------
    • Ich finde das Datenblatt auch etwas unübersichtlich. Auch das das Dingens 'eingebrannt' Early-Life (Burn-In) werden muss, bevor sinnvolle Daten kommen, macht es nicht einfacher.
      Hast du das auch beachtet
      So, tying nWAKE to ground is the simplest hardwareconfiguration – CCS811 will always be Wake and ready tocommunicate but consumes more power.
      Da müsste es einen pin am Modul geben. Den Adresspin vielleicht mal nach Spannunganlegen messen, ob der low ist, oder auch gleich an gnd legen, damit die Adresse stimmt.
      Raum für Notizen

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

      -----------------------------------------------------------------------------------------------------
    • Reagiert er denn überhaupt? Vielleicht versuchst Du mal sowas:

      Quellcode

      1. I2cstart
      2. I2cwbyte ccs811_schreiben
      3. #if _sim = 0
      4. I2cstop
      5. If Err = 1 Then
      6. Print "Sensor Ausfall. Suche.."
      7. For A = $20 To $FE Step 2
      8. I2cstart
      9. I2cwbyte A
      10. #if _sim = 0
      11. I2cstop
      12. #endif
      13. Print A;
      14. If Err = 1 Then
      15. Print " keine Reaktion"
      16. Else
      17. Print "ok"
      18. ccs811_schreiben = A
      19. End If
      20. Next
      21. End If
      22. #endif
      Alles anzeigen
      255 kommt auch dann raus wenn niemand antwortet.
    • Meine Vermutung ist, der Sensor ist im idle-Modus. Das erste Ansprechen im Programm, Zeile 45-49, bewirk nix, das Schreiben des App_start_reg, Zeile 52-56, bewirkt, das er im idle ist und jetzt ein Kommando für das Messverfahren bekommen könnte, bekommt er aber nicht mehr.
      Raum für Notizen

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

      -----------------------------------------------------------------------------------------------------
    • Hallo, ich habe deine Ideen umgesetzt. Leider das Gleiche Problem.
      Die I2C Adresse ist definitiv 0x5A. Die Joy-It Seite wovon das Board ist, verweist auf
      Adafruit Arduino Beispiel .

      Meine Adresse war somit falsch und lesen und schreiben vertauscht.


      ccs811.pngboard.jpg
      Der Adress Pin ist mit einem Pull down Widerstand versehen.
      0x5a =Bin 01011010
      +bit(0) 1 =01011011 für schreiben = &h5B
      +Bit(0) 0 =01011010 für lesen = &h5A

      Ich bin schon so viele Tage dran, die Burn in Zeit sollte vorüber sein.
    • Ein Blick in die Unterlagen, da iat ein Beispiel für das Lesen, was ja auch einen Schreibbefehl vorneweg hat
      i2cread.PNG
      Da erkennt man, dass dein Programm aus post #6 die richtigen Adressen verwendet. Schreiben auf &HB4 und lesen auf &HB5.

      Den Adresspin würde ich direkt auf gnd legen und damit was funktioniert, muss wake auch auf gnd sein.
      Raum für Notizen

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

      -----------------------------------------------------------------------------------------------------
    • Ich bin etwas weiter. Ich habe auf Hardware Twi gewechselt und Verwende Adresse read 5A Write 5B
      Ich kann jetzt das Status_Reg auslesen.
      Es kommt eine 0 raus.
      Das Byte wird folgendermaßen aufgeschlüsselt.
      CCS811_Datasheet-DS000459.pdf.png


      0 heisst, keine Fehler und im Boot Mode.
      Ich komme nicht aus dem Boot Mode raus.

      Ich habe mich mehr mit dem Meas Mode beschäftigt.
      und Sende ein &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

      Datasheet-DS000459.pdf.png


      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 = 100000
      13. Dim I2cbuff (30) As Byte 'I2C-Sende- / Empfangspuffer.
      14. Dim schleife as byte
      15. Dim Ccs811temp As byte
      16. const Ccs811_schreiben = &h5B ' Die I2C-Adresse von CCS811 zum schreiben 0x5a = 0101 101_1 = 5B 1011 0100 =B4 7 Bit Plus das Bit 0 für lesen (0)
      17. const Ccs811_lesen = &h5A ' Die I2C-Adresse von CCS811 zum lesen 0101 101_0 = 5A 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. Waitus 60
      38. i2cstart
      39. i2cwbyte STATUS_REG 'Status abfragen
      40. i2crbyte ccs811temp ,Ack '
      41. i2cstop
      42. waitms 25
      43. print ccs811temp
      44. print
      45. waitms 1500
      46. '--------------------- In den Application Mode wechseln-------------------
      47. i2cstart
      48. I2cwbyte Ccs811_schreiben
      49. I2cwbyte APP_START_REG
      50. i2cstop
      51. waitms 25
      52. i2cstart
      53. i2cwbyte STATUS_REG 'Status abfragen
      54. i2crbyte ccs811temp ,Ack
      55. i2cstop
      56. waitms 25
      57. print ccs811temp
      58. print
      59. waitms 1500
      60. '------------------------Modus einstellen---------------------------
      61. i2cstart
      62. I2cwbyte Ccs811_schreiben
      63. i2cwbyte MEAS_MODE_REG
      64. 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
      65. i2cstop
      66. waitms 25
      67. 'i2cstart
      68. 'I2cwbyte Ccs811_schreiben
      69. 'I2cwbyte Drive_MODE_1SEC
      70. 'i2cstop
      71. 'waitms 25
      72. '#########################################################################################################################################################
      73. do
      74. print
      75. print "#####neu#####"
      76. i2cstart
      77. i2cwbyte STATUS_REG 'Status abfragen
      78. i2crbyte ccs811temp ,Ack
      79. i2cstop
      80. waitms 25
      81. print ccs811temp
      82. print
      83. waitms 1500
      84. I2cstart
      85. I2cwbyte Ccs811_schreiben
      86. I2cwbyte ALG_RESULT_DATA 'Sensor soll neue Werte schicken 8 Bytes kommen zurück
      87. ccs811temp=1
      88. i2cstop
      89. i2cstart
      90. I2cwbyte Ccs811_lesen
      91. for schleife = 1 to 8
      92. I2crbyte I2cbuff(ccs811temp) , Ack 'Ack=1. Byte 8x1 Byte in Array auslesen
      93. ccs811temp =ccs811temp +1
      94. next
      95. i2cstop
      96. waitms 25
      97. ccs811temp=1 'Daten 8 Bit Seriell ausgeben
      98. for schleife = 1 to 8
      99. print I2cbuff(ccs811temp)
      100. ccs811temp =ccs811temp +1
      101. next
      102. waitms 2000
      103. loop
      Alles anzeigen


      Config Twi = 1000000 auf 100 Khz
      getestet mit gleicher Auswirkung.

      Mein Daten Array gibt jetzt bei allen 8 byte 90 aus und Status_reg 0

      Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von mirco99 ()

    • mirco99 schrieb:

      du liest auch nirgend etas aus in deinem Beispiel.
      Das ist nur zum Testen ob ein i2c Gerät vorhanden ist.
      _sim ist eine Bascom interne Variable die 1 ist wenn des Programm im Simulator läuft. Der Simulator bleibt er beim i2cstop hägen. Durch das if wird der Code nicht vollständig im Simulator ausgeführt.
      Nachdem die Adresse gesant wurde antwortet das angesprochene i2c Gerät mit einem Ack was die Variable Err bei 0 läßt . kommt jedoch kein Ack wird sie 1 und man weiß das Getät funktioniert nicht richtig. (Nicht vorhanden, Adresse falsch, Verkabelung ...)


      mirco99 schrieb:

      Kleinere Werte werden als Fehler beim Compilieren angezeigt
      Der Wert bestimmt den I2c Takt. Der Prescaler ist begrenzt daher kann er bei Deinem großen Quartz (16Mhz) nicht langsamer werden als die angegebenen 100 khz. Wenn alles gut läuft kann er auf 400.000 hochgesetzt werden dann werden die Daten schneller übertragen.
      Bei mir steht da 40.000 hier meckert er wenn ich 100.000 versuche (1Mhz AVR-Takt)

      Die Schreib und lese Adressen stimmen jetzt? In Zeile 21,22 siehts noch konfus aus
      const Ccs811_schreiben = &hB4 ,const Ccs811_lesen = &hb5 sollte stimmen

      mirco99 schrieb:

      114. for schleife = 1 to 8
      sollte for schleife = 1 to 7 heißen. Das achte Byte danach mit I2crbyte I2cbuff(ccs811temp) , Nack
      abholen sonst versucht er ein neuntes Byte zurechtzulegen und bekommt dann ein Stop vorm Bug. Einige reagieren da allergisch drauf.

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Pluto25 ()