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

How to implement buzzer in ble_uart_peripheral example

Hi,

I am using nrf52 with sdk11.0, I have migrated the code of pwm_library code to ble_uart_peripheral. But when i'm initializing the pwm the code it stops the advertising.Is there an code which works Ble and buzzer at the same time. Please help me.

Thanks&Regards,

Prudhvi

  • I do not see any reason why using the PWM library should cause advertising to stop (it should be independent of each other). My guess is that some form error has occurred. Have you tried using a debugger to see if for example an error check has failed? In that case you could probably pinpoint the location of the problem.

  • Hi, please post initialization part of code. I had the same problem so maybe I can help you.

  • Code:

    static void power_manage(void)
    {
        uint32_t err_code = sd_app_evt_wait();
        APP_ERROR_CHECK(err_code);
    }
    
    /***********PWM callback function*********/
    void pwm_ready_callback(uint32_t pwm_id)    
    {
        ready_flag = true;
    }
    /* 2channel PWM, 5kHz, output on DK LED pins. */
     app_pwm_config_t pwm1_cfg = APP_PWM_DEFAULT_CONFIG_2CH(200L, TEST_PIN,BSP_LED_1); 
    static void on_timeout(void * p_context)
    {
    	uint32_t err_code;
    	uint32_t value;
    		 app_pwm_enable(&PWM1);
       // APP_ERROR_CHECK(err_code);
    	for (uint8_t i = 0; i < 60; ++i)
    	{
    		 value = (i < 30) ? (i * 5) : (100 - (i - 30) * 5); 
    		 ready_flag = false;
    		 while (app_pwm_channel_duty_set(&PWM1, 0, value) == NRF_ERROR_BUSY);
    		//while(!ready_flag);
    		APP_ERROR_CHECK(app_pwm_channel_duty_set(&PWM1, 1, value));
    	}  
      
    }
    void timer_init()
    {
    		uint32_t err_code;
    		APP_TIMER_INIT(APP_TIMER_PRESCALER, APP_TIMER_OP_QUEUE_SIZE, false);
        err_code = app_timer_create(&m_led_a_timer_id,APP_TIMER_MODE_REPEATED,on_timeout);
    	  err_code = app_timer_start(m_led_a_timer_id, APP_TIMER_TICKS(2000, APP_TIMER_PRESCALER), NULL);
        APP_ERROR_CHECK(err_code);
    	
    }
    
    /**@brief Application main function.
     */
    int main(void)
    {
        uint32_t err_code;
        bool erase_bonds;
      	timer_init();			
    	  uart_init(); // baudrate 115200
        buttons_leds_init(&erase_bonds);
       	pwm1_cfg.pin_polarity[1] = APP_PWM_POLARITY_ACTIVE_HIGH;
    	  app_pwm_init(&PWM1,&pwm1_cfg,pwm_ready_callback);
    	  ble_stack_init();
        gap_params_init();
        services_init();
        advertising_init();
        conn_params_init();
        printf("\r\nUART Start!\r\n");
        err_code = ble_advertising_start(BLE_ADV_MODE_FAST);
    	  
        
        // Enter main loop.
        for (;;)
        {
            power_manage();
        }
    }
    
  • Please let me know what should i do to resolve this problem regards prudhvi

  • .

    static void power_manage(void)
    {
        uint32_t err_code = sd_app_evt_wait();
        APP_ERROR_CHECK(err_code);
    }
    
    /***********PWM callback function*********/
    void pwm_ready_callback(uint32_t pwm_id)    
    {
        ready_flag = true;
    }
    /* 2channel PWM, 5kHz, output on DK LED pins. */
     app_pwm_config_t pwm1_cfg = APP_PWM_DEFAULT_CONFIG_2CH(200L, TEST_PIN,BSP_LED_1); 
    static void on_timeout(void * p_context)
    {
        uint32_t err_code;
        uint32_t value;
             app_pwm_enable(&PWM1);
       // APP_ERROR_CHECK(err_code);
        for (uint8_t i = 0; i < 60; ++i)
        {
             value = (i < 30) ? (i * 5) : (100 - (i - 30) * 5); 
             ready_flag = false;
             while (app_pwm_channel_duty_set(&PWM1, 0, value) == NRF_ERROR_BUSY);
            //while(!ready_flag);
            APP_ERROR_CHECK(app_pwm_channel_duty_set(&PWM1, 1, value));
        }  
    
    }
    void timer_init()
    {
            uint32_t err_code;
            APP_TIMER_INIT(APP_TIMER_PRESCALER, APP_TIMER_OP_QUEUE_SIZE, false);
        err_code = app_timer_create(&m_led_a_timer_id,APP_TIMER_MODE_REPEATED,on_timeout);
          err_code = app_timer_start(m_led_a_timer_id, APP_TIMER_TICKS(2000, APP_TIMER_PRESCALER), NULL);
        APP_ERROR_CHECK(err_code);
    
    }
    
    /**@brief Application main function.
     */
    int main(void)
    {
        uint32_t err_code;
        bool erase_bonds;
        timer_init();           
          uart_init(); // baudrate 115200
        buttons_leds_init(&erase_bonds);
        pwm1_cfg.pin_polarity[1] = APP_PWM_POLARITY_ACTIVE_HIGH;
          app_pwm_init(&PWM1,&pwm1_cfg,pwm_ready_callback);
          ble_stack_init();
        gap_params_init();
        services_init();
        advertising_init();
        conn_params_init();
        printf("\r\nUART Start!\r\n");
        err_code = ble_advertising_start(BLE_ADV_MODE_FAST);
    
    
        // Enter main loop.
        for (;;)
        {
            power_manage();
        }
    }
    
Related