* Точность измерения температуры: ±0.2°C * Диапазон температур –40°C to 85°C * Интерфейс I2C * Диапазон напряжений: от 1.62 В до 3.6 В HDC2080 имеет два режима работы: 1. режим ожидания(sleep) 2. режим измерения(measurement). После включения питания HDC20X0 переходит в спящий режим. В этом режиме HDC20X0 ожидает команды I2C для установки программируемого времени преобразования, запуска измерения/преобразования или чтения/записи достоверных данных. При запуске измерения HDC20X0 выходит из спящего режима, чтобы перейти в режим измерения. В режиме измерения HDC20X0 преобразует значения температуры или влажности от встроенных датчиков через внутренний АЦП и сохраняет информацию в соответствующих регистрах данных [0x00 - 0x03]. Вывод DRDY /INT можно контролировать, чтобы проверить, готовы ли данные после преобразования измерений. Полярность выводов DRDY/INT и режим прерывания устанавливаются в соответствии с конфигурацией регистров Разрешения прерывания и конфигурации DRDY/INT. После завершения преобразования HDC20X0 возвращается в спящий режим. В устройствах HDC доступны два различных типа преобразования АЦП (режимы измерения): Запуск по требованию и Автоматический режим. В режиме запуска по требованию команда I2C запускает преобразование измерений. После преобразования измерения устройство остается в спящем режиме до тех пор, пока не будет записан новый триггер. Автоматический режим - это непрерывная работа, настройка сброса и регистра конфигурации DRDY /INT позволяет пользователю выбирать из 7 различных частот преобразования (от 5 Гц до 1/120 Гц). В автоматическом режиме HDC20X0 переходит из спящего режима в режим измерения в зависимости от выбранной частоты дискретизации. Таблица регистров | ADDRESS (HEX) | NAME | RESET VALUE | DESCRIPTION | | ------------------|-------- |----------------|-----------------| |0x00| TEMPERATURE LOW | 00000000 | Temperature [7:0] | |0x01| TEMPERATURE HIGH | 00000000 | Temperature [15:8] | |0x02| HUMIDITY LOW | 00000000 | Humidity [7:0] | |0x03| HUMIDITY HIGH | 00000000 | Humidity [15:8] | |0x04| INTERRUPT/DRDY | 00000000 | DataReady and interrupt configuration| |0x05| TEMPERATURE MAX | 00000000 | Maximum measured temperature (Not supported in Auto Measurement Mode) | |0x06 |HUMIDITY MAX | 00000000 |Maximum measured humidity(Not supported in Auto Measurement Mode) | |0x07| INTERRUPT ENABLE | 00000000 | Interrupt Enable | |0x08| TEMP_OFFSET_ADJUST | 00000000 |Temperature offset adjustment | |0x09| HUM_OFFSET_ADJUST | 00000000 | Humidity offset adjustment | |0x0A| TEMP_THR_L | 00000000 | Temperature Threshold Low | |0x0B| TEMP_THR_H | 11111111 | Temperature Threshold High | |0x0C| RH_THR_L | 00000000 | Humidity threshold Low | |0x0D| RH_THR_H | 11111111 | Humidity threshold High | |0x0E| RESET&DRDY/INT CONF | 00000000 |Soft Reset and Interrupt Configuration | |0x0F| MEASUREMENT CONFIGURATION | 00000000 |Measurement configuration | |0xFC| MANUFACTURER ID LOW | 01001001 | Manufacturer ID Low | |0xFD| MANUFACTURER ID HIGH | 01010100 | Manufacturer ID High | |0xFE| DEVICE ID LOW | 11010000 | Device ID Low | |0xFF| DEVICE ID HIGH | 00000111 | Device ID High | ### Единичное получение #### Последовательность запуска После включения питания HDC20X0 находится в спящем режиме в ожидании входных команд I2C. Чтобы настроить устройство на сбор данных о влажности и температуре в режиме единого сбора, выберите "TRIGGER ON DEMAND" в регистре CONFIG (0x0E), выберите желаемые разрешения температуры и влажности и конфигурацию измерения температуры + влажности в регистре MEASUR_CONFIG (0x0F). #### Процедура считывания Чтобы запустить одно измерение, бит MEAS_TRIG устанавливается в '1' в регистре MEASUR_CONFIG. Устройство выйдет из спящего режима и выполнит одно измерение. После преобразования устройство обновит соответствующий регистр измерений и вернется в спящий режим. Доступ к регистру можно получить с помощью механизма указателей. При чтении из HDC20X0 текущее местоположение указателя используется для определения того, какой регистр следует считывать - местоположение указателя указывает на адрес последнего записанного регистра. Чтобы изменить адрес для операции чтения, в указатель должно быть записано новое значение. Эта транзакция выполняется путем выдачи байта адреса ведомого устройства с битом R/W, установленным на '0', за которым следует байт указателя. Указатель автоматически увеличивается, поэтому можно прочитать все 4 байта информации, относящейся к температуре и влажности, за одну транзакцию. ### Непрерывное считывание #### Последовательность запуска После включения питания HDC20X0 находится в спящем режиме в ожидании входных команд I2C. Чтобы настроить устройство на сбор данных о влажности и температуре в непрерывном режиме, выберите нужный режим Auto Measurement Mode (AMM) в регистре CONFIG (0x0E) и выберите разрешения температуры и влажности и конфигурацию измерения температуры + влажности в регистре MEASUR_CONFIG (0x0F). #### Процедура считывания Чтобы инициировать начало измерений, бит MEAS_TRIG устанавливается в '1' в регистре MEASUR_CONFIG (0x0F). Устройство выйдет из спящего режима и начнет периодически преобразовывать измерения на основе выбранной частоты дискретизации в регистре CONFIG (0x0E). После каждого преобразования устройство обновит регистры, связанные с измерением, и снова перейдет в спящий режим. Доступ к регистру можно получить с помощью механизма указателей. При чтении из HDC20X0 текущее местоположение указателя используется для определения того, какой регистр следует считывать - местоположение указателя указывает на адрес последнего записанного регистра. Чтобы изменить адрес для операции чтения, в указатель должно быть записано новое значение. Эта транзакция выполняется путем выдачи байта адреса ведомого устройства с битом R/W, установленным на '0', за которым следует байт указателя. 1. Для работы I2C нужно указать адресс устройства. Поиск - отправка данных на адрес и проверка статуса возврата. ``` uint8_t detect_address() { ret_code_t err_code; uint8_t address = 0; uint8_t sample_data; bool detected_device = false; while(!detected_device && address <= TWI_ADDRESSES) { address++; err_code = nrf_drv_twi_rx(&m_twi, address, &sample_data, sizeof(sample_data)); if (err_code == NRF_SUCCESS) { detected_device = true; NRF_LOG_INFO("TWI device detected at address 0x%x.", address); NRF_LOG_FLUSH(); } } return address; } ``` 2. Перед началом работы, нужно сбросить значение конфигурационного регистра 0x0E. Все регистры, кроме 0x0E, сбрасывается при включении питания, значение 0x0E хранится в EEPROM. Чтобы сбросить значение требуется выполнить Soft Reset, записав единицу в 7 бит. 0x80 = 0b1000 0000. ``` /*Bit 7 of the INT_CONFIG register can be used to trigger a soft reset */ void reset(void) { uint8_t configContents; configContents = readReg(INT_CONFIG); configContents = (configContents | 0x80); writeReg(INT_CONFIG, configContents); nrf_delay_ms(50); } ``` 3. Все биты регистра 0x0E | Бит | Поле | Тип | Описание | | ------------------|-------- |----------------|-----------------| | 7 | SOFT_RES | R/W | 0 = Normal Operation mode, this bit is self-clear 1 = Soft Reset EEPROM value reload and registers reset | | [6:4] | AMM[2:0] | R/W | Auto Measurement Mode (AMM) 000 = Disabled. Initiate measurement via I2C 001 = 1/120Hz (1 samples every 2 minutes) 010 = 1/60Hz (1 samples every minute) 011 = 0.1Hz (1 samples every 10 seconds) 100 = 0.2 Hz (1 samples every 5 second) 101 = 1Hz (1 samples every second) 110 = 2Hz (2 samples every second) 111 = 5Hz (5 samples every second) | | 3 | HEAT_EN | R/W | 0 = Heater off 1 = Heater on | | 2 | DRDY/INT_EN | R/W | DRDY/INT_EN pin configuration 0 = High Z 1 = Enable | | 1 | INT_POL | R/W | Interrupt polarity 0 = Active Low 1 = Active High | | 0 | INT_MODE | R/W | Interrupt mode 0 = Level sensitive 1 = Comparator mode | TODO Нарисовать схему лагоритма работы датчика Есть регистр 0x04 Data ready/Interrupt, который содержит бит DRDY_STATUS. DRDY_STATUS указывает, что преобразование температуры и/или влажности завершено. Этот бит очищается при считывании регистра 0x04 Interrupt/DRDY или выходных регистров TEMPERATURE_HIGH, TEMPERATURE_LOW, HUMIDITY_HIGH и HUMIDITY_LOW. Когда активировано несколько битов, вывод DRDY/INT может одновременно отражать состояние только одного бита прерывания. Вывод DRDY/INT НЕ работает как логическое ИЛИ. Наивысший приоритет отдается биту TH_ENABLE, за которым следуют биты TL_ENABLE, HH_ENABLE и HL_ENABLE в порядке убывания. Поэтому рекомендации по программированию представлены следующим образом: * DRDY/INT будет отслеживать HL_ENABLE, если он включен, а все остальные РАЗРЕШАЮЩИЕ биты отключены * DRDY/INT будет отслеживать HH_ENABLE, если он включен, а TH_ENABLE и TL_ENABLE отключены. * DRDY/INT будет отслеживать TL_ENABLE, если он включен, а TH_ENABLE отключен. * DRDY/INT будет отслеживать значение TH_ENABLE, если оно включено, и не зависит от других настроек бита ВКЛЮЧЕНИЯ. TODO как включить прерывания.