sail2ithaki (sail2ithaki) wrote,
sail2ithaki
sail2ithaki

Category:

Модуль измерения температуры на базе ADT7420

Некоторые особенности и наблюдения.

1. На плате EVAL-ADT7420-PMDZ подтяжка шины I2C отсутствует, лучше ставить внешнюю, не касающуюся платы.
2. Подтяжку выводов прерывания с платы EVAL-ADT7420-PMDZ стоит снять и сделать внешней.
3. RC-фильтры по питанию, если они нужны, тоже делать внешними.
Все выше, как изящно выражается публика на Analog Devices, нужно для того, чтобы гарантировать, что the thermal
mass is kept as low as possible.

В режиме прерываний флажки Tlow, Thigh, Tcrit не работают, ни в регистре Status, ни, при 13-битном режиме, в регистре LSB Temperature value. Если эти флажки нужны, включите режим comparator mode / CT в регистре Configuration.

Если Вы используете 13-битный режим, можно обнулить 3 младших бита в (LSB) Temperature value (в INT mode там всегда нули, но я б не полагался...) и использовать то же преобразование, что и для 16-битного режима:
ADT7420_ui16_to_degC(code) ((float)((int16_t)(code))/128.0f)
Альтернатива - сдвиг на 3 бита вправо и деление на 16.

Программирование регистров Setpoint Tlow, Thigh, Tcrit - всегда в 16 бит. Я делаю так:
ADT7420_degC_to_ui16(degC) (uint16_t)(128.0f*(degC)+0.5f-signbit(degC))

При чтении 16 бит в Arduino IDE перед Wire.requestFrom нужна Wire.endTransmission(false).

Я использую
union WB {
uint8_t b[2];
uint16_t w;
};

и, соответственно, при чтении
wb.b[1] = Wire.read();
wb.b[0] = Wire.read();
val = wb.w;

при записи
Wire.write(wb.b[1]);
Wire.write(wb.b[0]);
Subscribe

  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 3 comments