[已解决]ADC低功耗唤醒后不工作

蓝牙 BLE设备、蓝牙 MESH设备、蓝牙 Beacon设备、Sub-G设备等


Bryan Guo
Posts: 13

有点意思,按你这样轮询采集两个通道,第二个通道始终为0。 先采集6通道,读出来是144mV, 8通道是0. 先采集8通道,读出来是1732mV, 6通道是0.
你那边怎么样?

Code: Select all

int battery_low_voltage_detect_test(void) {
    int                 retval    = 0;
    uint32_t            adc_value = 0;
    TUYA_ADC_BASE_CFG_T adc_cfg   = {
          .ch_nums      = 1,
          .ch_list.data = (1 << 8),  //(1 << 8),
          .width        = 12,
          .type         = TUYA_ADC_EXTERNAL_SAMPLE_VOL,
    };

/* read channel 6 */
tal_adc_deinit(TUYA_ADC_NUM_0);
adc_cfg.ch_list.data = (1 << 6);
tal_adc_init(TUYA_ADC_NUM_0, &adc_cfg);
retval = (uint32_t)tal_adc_read_voltage(TUYA_ADC_NUM_0, &adc_value, 1);
TAL_PR_INFO("adc_value ch6 read value = %d mV.", adc_value);
/* read channel 8 */
tal_adc_deinit(TUYA_ADC_NUM_0);
adc_cfg.ch_list.data = (1 << 8);
tal_adc_init(TUYA_ADC_NUM_0, &adc_cfg);
retval = (uint32_t)tal_adc_read_voltage(TUYA_ADC_NUM_0, &adc_value, 1);
TAL_PR_INFO("adc_value ch8 read value = %d mV.", adc_value);

return retval;
}

Tags:
jinyuan
Posts: 92

Re: ADC低功耗唤醒后不工作

PC4/PC5 这两路ADC比较特殊, 在一个循环内使用会有问题,涉及到这两路ADC 的时候建议采用pingpong的形式。演示代码如下:

Code: Select all

TIMER_ID app_adc_test_timer_id = NULL;
UINT8_T enter_sleep = 0;
UINT8_T pingpong = 0;
VOID_T app_adc_test_timeout_handler(TIMER_ID timer_id, VOID_T *arg)
{
    if(enter_sleep == 0) {
        enter_sleep = 1;
        tal_ble_advertising_stop();
        tal_cpu_allow_sleep();
    }

INT32_T adc_value = 0;
OPERATE_RET ret = OPRT_OK;

// 读取通道6

TUYA_ADC_BASE_CFG_T adc_cfg = {
    .ch_nums = 1,
    .ch_list.data = (1<<6),
    .width = 12,
    .type = TUYA_ADC_EXTERNAL_SAMPLE_VOL,
};

if(pingpong == 0) {
    pingpong  =1;

    tal_adc_deinit(TUYA_ADC_NUM_0);
    tal_adc_init(TUYA_ADC_NUM_0, &adc_cfg);
    ret = tal_adc_read_voltage(TUYA_ADC_NUM_0, &adc_value, 1);
    if (ret == OPRT_OK) {
        TAL_PR_DEBUG("ADC CH6 Value: %d", adc_value);
    } else {
        TAL_PR_DEBUG("ADC Read Flase: %d", ret);
    }

} else {
    pingpong = 0;

    // 读取通道8
    adc_cfg.ch_list.data = (1 << 8);
    tal_adc_deinit(TUYA_ADC_NUM_0);
    tal_adc_init(TUYA_ADC_NUM_0, &adc_cfg);
    ret = tal_adc_read_voltage(TUYA_ADC_NUM_0, &adc_value, 1);
    if (ret == OPRT_OK) {
        TAL_PR_DEBUG("ADC CH8 Value: %d", adc_value);
    } else {
        TAL_PR_DEBUG("ADC Read Flase: %d", ret);
    }
}
}
Bryan Guo
Posts: 13

Re: ADC低功耗唤醒后不工作

可以了,感谢。

Post Reply