ask about TX power in ANT application

HI Nordic support team.

I have a question relate to TX power in ANT application:

- ANT Tx application using: ant_broadcast ->Tx

ANT Rx application using:  ant_continuous_scanning_controller

- SDK 17.1, segger embedded studio

We using ANT application connect to sensor. Each 6s sensor wakeup Ant appliction by external interupt and transmit data by call ant_message_send();

It mean we can see Tx power each 6s.

When we using power consumtion monitor i see that it seem ANT appliction transmit power each 1s instead 6s as my target.

You can see in PIC bellow:

Here is som configure and function in my code:

// ANT sTx configuration 
static void application_initialize()
{
    uint32_t err_code;
    /* Set library config to report RSSI and Device ID */
    //err_code = sd_ant_lib_config_set(ANT_LIB_CONFIG_MESG_OUT_INC_RSSI | ANT_LIB_CONFIG_MESG_OUT_INC_DEVICE_ID);
    //APP_ERROR_CHECK(err_code);

    const uint16_t dev_num = (uint16_t)NRF_FICR->DEVICEID[0];

    const ant_channel_config_t ms_channel_config =
    {
        .channel_number    = ANT_MS_CHANNEL_NUMBER,
        .channel_type      = CHANNEL_TYPE_MASTER,
        .ext_assign        = 0x00,
        .rf_freq           = RF_FREQ,            // channel 25
        .transmission_type = CHAN_ID_TRANS_TYPE,
        .device_type       = CHAN_ID_DEV_TYPE,
        .device_number     = dev_num,
        .channel_period    = CHAN_PERIOD,       // PERIOD   32767
        .network_number    = ANT_NETWORK_NUM,
    };

    err_code = ant_channel_init(&ms_channel_config);
    APP_ERROR_CHECK(err_code);

    // Fill tx buffer for the first frame
    ant_message_send();

    err_code = sd_ant_channel_open(ANT_MS_CHANNEL_NUMBER);
    APP_ERROR_CHECK(err_code);
}


//Callback function for external interupt
//each time interupt happened will send Tx messa, period is 6s 
static void in_pin_handler(nrf_drv_gpiote_pin_t pin, nrf_gpiote_polarity_t action)
{
    NRF_LOG_INFO("Int example0\n");
    Qflag = true;
    //nrf_drv_gpiote_out_toggle(PIN_OUT);
    ant_message_send();
    //NRF_LOG_INFO("Message sent %s", string);
    NRF_LOG_INFO("Index  %d", index);
    index++;
    
}

// <o> RF_FREQ - RF Frequency. 
#ifndef RF_FREQ
#define RF_FREQ 25
#endif

// <o> CHAN_PERIOD - Channel Period (in 32 kHz counts). 
#ifndef CHAN_PERIOD
#define CHAN_PERIOD   32767
#endif

Can you help me explain, why Tx power is transmited each 1s instead 6s.

I try to change period of sensor to 30s, i receive same result. Tx transmit power each 1s.

=> it take so much power, and our production cannot running in target time(2-3 year)

  • Hello,

    I can see you have #define CHAN_PERIOD   32767, this means that the ANT channel will communicate every 1second.

    I believe the slowest channel possible is 2seconds, so you can try to use #define CHAN_PERIOD 65536 (2seconds).

    Do you need bidirectional data? If you don't need bidirectional data you can use CHANNEL_TYPE_MASTER_TX_ONLY instead of CHANNEL_TYPE_MASTER.

    Edit: You can find the following useful for estimation of current consumption:
    https://www.thisisant.com/developer/components/developer 

    The nRF52833 is similar to the nRF52832 in terms of current consumption, example:

    Kenneth

  • hi my friend,

    we are making TPMS(tire pressure monitor system) for our customer, 

    So power consumtion is very important for running application in 3-5 years.

    You said that:"I believe the slowest channel possible is 2seconds, so you can try to use #define CHAN_PERIOD 65536 (2seconds)."

    It is so close time to transmit data, we need at least 30s Tx one time.

    Why Ant need keep transmit each 2s(or smaller time 2s), i think it is not BLE so dont need keep alive connection.

    I mean: RF application only need transmits data base on time we define for it. Why Ant need transmit 2s and how to control the time transmit data by our define time?

    Our customer request qty 500k/year.

    Can you help me connect to get more support from ANT organization? It is so urgent with us.

  • Hello,

    In ANT all devices are low power, so both the master node (sensor) and the slave node (display) are low power nodes. So 2second is a nice trade-off between current consumption between the master and slave, and still allow the ability to send data both direction. If you want to send data slower than 2seconds, then I suggest to open channel, send data, close channel, and sleep for instance for 30seconds before you repeat. This means that the slave (display, receiving device) can't be in synchronised mode, but instead the slave need to scan continuosly for any sensor data. This is fully possible. If you want to discuss ANT directly with someone, then I suggest to reach out to www.thisisant.com, or I can put you in contact with someone there if you want. Let me know.

    Kenneth

  • hi,

    your idea is the same solution i think.

    Can i wakeup application by external interrupt?

    Can you suggest me ANT example refer to put it in sleep mode?

    I am thinking apply sleep mode on "BLE peripheral example".

    Now, i think we can complete make solution with your suggestion, so dont need contact to person on ANT system.

  • Hello,

    Independent of protocol used, the way to sleep and configure wakeup is the same. Please run through for instance the nRF Connect SDK Fundamentals course:
    https://academy.nordicsemi.com/ 

    To work with ANT in specific you can check out:
    https://www.thisisant.com/APIassets/ANTnRFConnectDoc/index.html 

    Kenneth

Related