본문 바로가기

Nordic/nRF51

[nRF51822 xBee EVM] 기본 동작테스트 - I2C 테스트(IAR)

nRF5x 를 이용하는 프로젝트는 대부분 IOT용 센서가 많이 있으므로 I2C 는 가장 기본이 될것 같다.

nRF5 SDK에서 제공하는 I2C 예제를 이용하여 테스트 해보자.

 
가장 쉽게 테스트 해 볼 수 있는 I2C 스캐너 예제를 구동해 보자.
/examples/peripheral/twi_scanner

 

[nRF51822 xBee EVM] 보드의 I2C는 IO21, IO20에 할당되어 있다.

pca10028.h 파일에서 핀맵을 [nRF51822 xBee EVM] 보드에 맞도록 수정 한다.

//#define ARDUINO_SCL_PIN             7     // SCL signal pin
//#define ARDUINO_SDA_PIN             30    // SDA signal pin

#define ARDUINO_SCL_PIN             21    // SCL signal pin
#define ARDUINO_SDA_PIN             20    // SDA signal pin

 

기본 소스코드를 구동하면 시리얼 포트로 아무런 출력이 나오지 않는다.

뭐가 문제 일까?

 

NRF_LOG_INFO() 함수에서 시리얼 포트로 출력 하는것 같은데...

 

APP_ERROR_CHECK(NRF_LOG_INIT(NULL));
    NRF_LOG_INFO("TWI scanner.\r\n");
    NRF_LOG_FLUSH();
    twi_init();

    for (address = 1; 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.\r\n", address);
        }
        NRF_LOG_FLUSH();
    }

    if (!detected_device)
    {
        NRF_LOG_INFO("No device was found.\r\n");
        NRF_LOG_FLUSH();
    }

 

설정 파일에서 NRF_LOG_INFO를 출력 할 수 있도록 수정 해 주어야 한다.

/examples/peripheral/twi_scanner/pca10028/blank/configsdk_config.h

 

우선 NRF_LOG_ENABLED 를 1로 설정 하고

 

UART 핀맵 설정 NRF_LOG_BACKEND_SERIAL_UART_TX_PIN, NRF_LOG_BACKEND_SERIAL_UART_RX_PIN 을 보드에 맞도록 수정해 주어야 한다.

#ifndef UART_ENABLED
#define UART_ENABLED 1
#endif

	:
	:

// <o> NRF_LOG_BACKEND_SERIAL_UART_TX_PIN - UART TX pin 
#ifndef NRF_LOG_BACKEND_SERIAL_UART_TX_PIN
//#define NRF_LOG_BACKEND_SERIAL_UART_TX_PIN 9
#define NRF_LOG_BACKEND_SERIAL_UART_TX_PIN 1
#endif

// <o> NRF_LOG_BACKEND_SERIAL_UART_RX_PIN - UART RX pin 
#ifndef NRF_LOG_BACKEND_SERIAL_UART_RX_PIN
//#define NRF_LOG_BACKEND_SERIAL_UART_RX_PIN 11
#define NRF_LOG_BACKEND_SERIAL_UART_RX_PIN 0
#endif

 

그러면 아래와 같이 시리얼 포트로 I2C address값을 출력 하는것을 확인 할수 있다.

TWI sensor example
APP:INFO:TWI scanner.
APP:INFO:TWI device detected at address 0x48.
 
 

그리고 nRF5 SDK에 I2C 온도 센서 LM75의 온도 값을 출력한는 예제가 있다.

examples/peripheral/twi_sensor

 

TCN75 온도 센서 모듈을 이용하여 온도 테스트 해보자

static void read_sensor_data()
{
    m_xfer_done = false;

    /* Read 1 byte from the specified address - skip 3 bits dedicated for fractional part of temperature. */
    ret_code_t err_code = nrf_drv_twi_rx(&m_twi, LM75B_ADDR, &m_sample, sizeof(m_sample));
    APP_ERROR_CHECK(err_code);
}

int main(void)
{
    APP_ERROR_CHECK(NRF_LOG_INIT(NULL));

    NRF_LOG_INFO("\r\nTWI sensor example\r\n");
    NRF_LOG_FLUSH();
    twi_init();
    LM75B_set_mode();

    while (true)
    {
        nrf_delay_ms(500);

        do
        {
            __WFE();
        }while (m_xfer_done == false);

        read_sensor_data();
        NRF_LOG_FLUSH();
    }
}

 

 

소스코드 구동하면 LM75 온도 센서 모듈의 온도 값을 정상적으로 출력 하는것을 확인 할 수 있다.

APP:INFO:
TWI sensor example
APP:INFO:Temperature: 22 Celsius degrees.
APP:INFO:Temperature: 22 Celsius degrees.
APP:INFO:Temperature: 22 Celsius degrees.
APP:INFO:Temperature: 22 Celsius degrees.

 

반응형