nRF52 TMP102 讀取温度值

TMP102是一個温度感測器,可以用I2C或TWI界面來和MCU溝通。


而Nordic的藍牙晶片到了nRFSDK 15之後,已經提供很多的範例程式,I2C或TWI存取的寫法也有提供。最基本的scan 是否有設備存在的程式範例就是/examples/peripheral/twi_scanner。本文以這支範例程式來試驗讀取TMP102温度值的程式寫法。

----------------------------------------------------------------------------
硬體接線
  依以下方式,只要接4條線。左為nRF52840 DK腳位,右為TMP102腳位。
P0.27  -> SCL
P0.26 -> SDA
GND -> GND
VDD nRF -> 1.4 - 3.6V
如下圖,這四個腳位都在右上角P4, P20

----------------------------------------------------------------------------
程式寫法
  打開twi_scanner這支程式,在main()之前加入以下程式:

#define TMP_ADDRESS (0x48)

/**
 * @brief read TMP102 temperature
 */
 void read_tmp102(void)
 {
    uint8_t tmp_data[2];
    uint8_t tmp_data_le[2];
    uint16_t *tmp = (uint16_t *) &tmp_data_le[0];

    nrf_drv_twi_rx(&m_twi, TMP_ADDRESS, tmp_data, 2);

    tmp_data_le[0] = tmp_data[1];
    tmp_data_le[1] = tmp_data[0];
    float tmp102 = (*tmp >> 4) * 0.0625;

    NRF_LOG_INFO("DATA: 0x%x, 0x%x", tmp_data[0], tmp_data[1]);
    NRF_LOG_INFO("TMP: " NRF_LOG_FLOAT_MARKER  "\r\n", NRF_LOG_FLOAT(tmp102));
    NRF_LOG_FLUSH();
 }

這樣在main()的最下方while之前,就可以加入叫用read_tmp102()的程式來取得温度值。


看程式就知道只用了nrf_drv_twi_rx()這個讀取資料的函數。其他部份只是對資料格式的解讀而已。這部份寫法不是太完美,不過正常情形下還勘用。

-----------------------------------------------------------------------------
SCL, SDA腳位的選擇
    這兩個腳位其實不是一定固定使用P0.27, P0.26,只是因為nRF52840 DK這張開發板的接腳設定和Arduino Uno相容,而Arduino SCL, SDA腳位正好在右上角位置,也就是P0.27, P0.26的位置。其實想換腳位也是可以的,只要修改以下:

/**
 * @brief TWI initialization.
 */
void twi_init (void)
{
    ret_code_t err_code;

    const nrf_drv_twi_config_t twi_config = {
       .scl                = NRF_GPIO_PIN_MAP(1,15), //ARDUINO_SCL_PIN,
       .sda                = NRF_GPIO_PIN_MAP(1,14), //ARDUINO_SDA_PIN,
       .frequency          = NRF_DRV_TWI_FREQ_100K,
       .interrupt_priority = APP_IRQ_PRIORITY_HIGH,
       .clear_bus_init     = false
    };

    err_code = nrf_drv_twi_init(&m_twi, &twi_config, NULL, NULL);
    APP_ERROR_CHECK(err_code);

    nrf_drv_twi_enable(&m_twi);
}

可以看到範例程式還為P0.27, P0.26定義了常數ARDUINO_SCL_PIN,ARDUINO_SDA_PIN,我們可以將之替換成想使用的腳位,如上程式,就改成了P1.15, P1.14



留言

這個網誌中的熱門文章

D-BUS學習筆記

關於藍牙裝置找尋(inquiry, scan)兩三事

Cisco Switch學習筆記: EtherChannel