• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Кому нибудь приходилось цеплять CCS811 к esp8266?

МихCCS811

New member
Пытаюсь общаться с сим чудом на lua. Откликается на HW_ID=0x81, HW Version и т.п., однако при считывании данных из MEAS_MODE выдает данные по такому сценарию:
обратился к HW_ID получил HW_ID=0x81
далее обратился к ALG_RESULT_DATA (запрос на 4 байта) получил ALG_RESULT_DATA=0x81,0xfd,0xfd,0xfd:(
или так:
обратился к FW_Boot_Version получил FW_Boot_Version=0x10,0x00
далее обратился к ALG_RESULT_DATA (запрос на 4 байта) получил ALG_RESULT_DATA=0x10,0x00,0xfd,0xfd:mad:
обратился к ENV_DATA получил ENV_DATA=0x10,0x00,0xfd,0xfd
При этом как его только не инициализировал (например SW_RESET->MEAS_MODE->APP_START), какие только задержки не вводил- один хрен одно и тоже.:eek:
Может кто подскажет в чем дело?
 
Последнее редактирование:

МихCCS811

New member
Забросил надолго это дело под esp8266. Сегодня решил его прицепить к другому МК. Практически сразу разобрался. Если кому интересно для общего понимания asm код для c8051f340 (его значимая часть)
Код:
;---Инициализация чипа ccs811---
INSTccs811:;maxsentcounter- макс. кол-во передаваемых байт
;maxreccounter- макс. кол-во принимаемых байт
;TARGET- Адрес ведомого чипа
;SMB_DATA_OUT- Буфер передаваемых данных
;SMB_DATA_IN- Буфер принимаемых данных
;---
mov R0,#TARGET;- Адрес ведомого чипа
mov @R0,#0xB4;- Адрес ведомого чипа ccs811(ADDR=GND=0x5A;ADDR=Vdd=0x5B)
mov maxreccounter,#0x01;- макс. кол-во принимаемых байт
mov R0,#SMB_DATA_OUT
mov @R0,#0x20;- адрес регистра "ID" чипа ccs811
mov maxsentcounter,#0x02;- макс. кол-во передаваемых байт
CALL    SMB_Write
mov maxsentcounter,#0x01;- макс. кол-во передаваемых байт
CALL    SMB_Write
CALL    SMB_Read
mov R0,#SMB_DATA_IN
mov A,@R0
cjne A,#0x81,INSTccs811m3
jmp INSTccs811m4
INSTccs811m3:clr bit_ccs811;- =0- чип ccs811 не обнаружен;=1- чип ccs811 подключен
jmp INSTccs811m9
INSTccs811m4:setb bit_ccs811;- =0- чип ccs811 не обнаружен;=1- чип ccs811 подключен
;--
mov R0,#TARGET
mov @R0,#0xB4;- Адрес ведомого чипа ccs811(ADDR=GND=0x5A;ADDR=Vdd=0x5B)
mov maxreccounter,#0x01;- макс. кол-во принимаемых байт
mov R0,#SMB_DATA_OUT
mov @R0,#0x00;- адрес регистра "STATUS" чипа ccs811
mov maxsentcounter,#0x02;- макс. кол-во передаваемых байт
CALL    SMB_Write
mov maxsentcounter,#0x01;- макс. кол-во передаваемых байт
CALL    SMB_Write
CALL    SMB_Read
mov R0,#SMB_DATA_IN
mov A,@R0
;APP_VALID=1?
jnb ACC.4,INSTccs811m3;переход при APP_VALID=0
;APP_VALID=1- Valid application firmware loaded
;--
mov maxsentcounter,#0x01;- макс. кол-во передаваемых байт
mov R0,#SMB_DATA_OUT
mov @R0,#0xF4;- адрес регистра "APP_START" чипа ccs811
CALL    SMB_Write
mov maxsentcounter,#0x01;- макс. кол-во передаваемых байт
mov R0,#SMB_DATA_OUT+1
mov @R0,#0x00
mov R0,#SMB_DATA_OUT+2
mov @R0,#0x00
CALL    SMB_Write
;-
;--
mov R0,#TARGET
mov @R0,#0xB4;- Адрес ведомого чипа ccs811(ADDR=GND=0x5A;ADDR=Vdd=0x5B)
mov maxreccounter,#0x01;- макс. кол-во принимаемых байт
mov R0,#SMB_DATA_OUT
mov @R0,#0x00;- адрес регистра "STATUS" чипа ccs811
mov maxsentcounter,#0x02;- макс. кол-во передаваемых байт
CALL    SMB_Write
mov maxsentcounter,#0x01;- макс. кол-во передаваемых байт
CALL    SMB_Write
CALL    SMB_Read
mov R0,#SMB_DATA_IN;- Буфер принимаемых данных
mov A,@R0
;FW_MODE=1?
jnb ACC.7,INSTccs811m3;переход при FW_MODE=0
;FW_MODE=1- Firmware is in application mode. CCS811 is ready to take ADC measurements
;--
mov maxsentcounter,#0x01;- макс. кол-во передаваемых байт
mov R0,#SMB_DATA_OUT
mov @R0,#0x01;- адрес регистра "MEAS_MODE" чипа ccs811
CALL    SMB_Write
mov maxsentcounter,#0x01;- макс. кол-во передаваемых байт
mov R0,#SMB_DATA_OUT+1
mov @R0,#0x10
mov R0,#SMB_DATA_OUT+2
mov @R0,#0x00
CALL    SMB_Write
;--
mov R0,#TARGET
mov @R0,#0xB4;- Адрес ведомого чипа ccs811(ADDR=GND=0x5A;ADDR=Vdd=0x5B)
mov maxreccounter,#0x01;- макс. кол-во принимаемых байт
mov R0,#SMB_DATA_OUT
mov @R0,#0xE0;- адрес регистра "ERROR_ID" чипа ccs811
mov maxsentcounter,#0x02;- макс. кол-во передаваемых байт
CALL    SMB_Write
mov maxsentcounter,#0x01;- макс. кол-во передаваемых байт
CALL    SMB_Write
CALL    SMB_Read
;--
;---считываем через 1сек.
;eCO2=[400,8192]
;TVOC=[0,1187]
mov R0,#TARGET
mov @R0,#0xB4;- Адрес ведомого чипа ccs811(ADDR=GND=0x5A;ADDR=Vdd=0x5B)
mov maxreccounter,#0x08; макс. кол-во принимаемых байт
mov R0,#SMB_DATA_OUT
mov @R0,#0x02;- адрес регистра ALG_RESULT_DATA
mov maxsentcounter,#0x02;- макс. кол-во передаваемых байт
CALL    SMB_Write
mov maxsentcounter,#0x01;- макс. кол-во передаваемых байт
CALL    SMB_Write
CALL    SMB_Read
mov R0,#SMB_DATA_IN
mov DPTR,#BufCompCcs811HL;- данные из ccs811 [BufCompTsl2561HL,BufCompTsl2561HL+0x07]
mov R1,#0x08
INSTccs811m55:mov A,@R0
movx @DPTR,A
inc R0
inc DPTR
djnz R1,INSTccs811m55
;---
INSTccs811m9:
;---END---
 
Сверху Снизу