This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

current time gets 0 after connectiong with bluetooth

hi, i am using ble_uart example to take time when data arrives and time when data being sent over bluetooth. when i prints the time without connecting to bluetooth. then the time gives a value. but after connecting with bluetooth it gives 0. i dont know what makes it 0.

below is my code:

/**@snippet [Handling the data received over UART] */
void uart_event_handle(app_uart_evt_t * p_event)
{
    static uint8_t data_array[BLE_NUS_MAX_DATA_LEN];
		uint8_t data[5];
    static uint8_t index,push = 0;
    uint32_t       err_code;
		static uint32_t previous_time,current_time,duration_time,waiting_time;
		waiting_time=450;
		

    switch (p_event->evt_type)
    {
        case APP_UART_DATA_READY:
            UNUSED_VARIABLE(app_uart_get(&data_array[index]));
            index++;
						push++;
						if(index%3 == 0)
						{
							count++;
							err_code = app_timer_cnt_get(&current_time);
							APP_ERROR_CHECK(err_code);
							
							err_code = app_timer_cnt_diff_compute(current_time,previous_time,&duration_time);
							APP_ERROR_CHECK(err_code);
							current_time = app_timer_ms(current_time);
							previous_time = app_timer_ms(previous_time);
							duration_time = app_timer_ms(duration_time);
							SEGGER_RTT_printf(0, "current:%d\tprevious:%d\tduration:%d\n",current_time,previous_time,duration_time);
							
							SEGGER_RTT_printf(0, "%x\t%x\t%x\n",data_array[0],data_array[1],data_array[2]);
									sendData(data_array,index);
									previous_time = current_time;
							index = 0;
							preCount=count;
						}						
							
            break;
}

what i am doing wrong here.

thanks!!

Parents Reply Children
  • FormerMember
    0 FormerMember in reply to Mathias

    I don't understand what you mean, could you elaborate a little?

  • Well, I have the same problem as the two people above. If use the SoftDevice but don't connect (so just stay advertising), app_timer_cnt_get gives me the current value of the RTC1 Counter register, as expected. But when the advertiser connects with a central and thus becomes a peripheral, app_timer_cnt_get gives 0 constantly.

    The app_timer module is used in my application and initializes RTC1 with a prescaler of 0. Above you stated "When you are using app_timer with the softdevice, could you try to explicitly start app_timer using app_timer_start(..), and see if that changes anything?". How can you start the app_timer in general with that method (app_timer_start(..) ) ? From what I see in the infocenter, I can only use this method to start self defined timers that use RTC1 underneath. When I start such a timer (with an empty handler and repeated (not single mode) )  using app_timer_start, after a connection is established, app_timer_cnt_get doesn't give me 0 anymore but gives me seemingly correct counter values. But I don't understand why I need to start an unused timer to get this effect?

  • FormerMember
    0 FormerMember in reply to Mathias

    I see. I had forgotten what this thread was about.

    It should not be necessary to to use the app_timer module, what is necessary is to explicitly start RTC1. You should get the same result if you do the following:

    NRF_RTC1->TASKS_START = 1;

  • Unfortunately, that doesn't seem to be working. If I explicitly start RTC1 using NRF_RTC1->TASKS_START = 1, and don't run the empty, self defined timer anymore, I again get 0 on every request for the RTC1 Counter register's value.

  • FormerMember
    0 FormerMember in reply to Mathias

    Is app_timer used somewhere in your application? I so, your timer and app_timer will share RTC1. In that case, could you try to use RTC2 instead for your timer?

     

     

Related