* Точность измерения температуры: ±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 как включить прерывания.