单片机/MCU论坛
直播中

djfldsthtr

9年用户 1021经验值
擅长:光电显示
私信 关注
[问答]

PSoc6转换器不起作用是怎么回事?

我正在嘗試使用CY8CEVAL-062S2 套件上的 P10.0 讀取類比電壓。以下是我的 SAR ADC 程式碼。我嘗試使用設備配置器和/或手動設定代碼中的參數,但即使電壓變化,ADC 也只顯示一個讀數。我是否遺漏了什麼?
#define ADC_CHANNEL           0         // SAR ADC Channel 0 (e.g., P10_0)#define CTRL           ((uint32_t)CY_SAR_VREF_PWR_100        | (uint32_t)CY_SAR_VREF_SEL_BGR        | (uint32_t)CY_SAR_BYPASS_CAP_ENABLE | (uint32_t)CY_SAR_NEG_SEL_VSSA_KELVIN        | (uint32_t)CY_SAR_CTRL_NEGVREF_HW | (uint32_t)CY_SAR_CTRL_COMP_DLY_12 | (uint32_t)CY_SAR_COMP_PWR_100 | (uint32_t)CY_SAR_DEEPSLEEP_SARMUX_OFF | (uint32_t)CY_SAR_SARSEQ_SWITCH_ENABLE)#define SAMPLE_CTRL                ((uint32_t)CY_SAR_RIGHT_ALIGN | (uint32_t)CY_SAR_SINGLE_ENDED_UNSIGNED | (uint32_t)CY_SAR_DIFFERENtiAL_UNSIGNED | (uint32_t)CY_SAR_AVG_CNT_4 | (uint32_t)CY_SAR_AVG_MODE_SEQUENTIAL_FIXED | (uint32_t)CY_SAR_TRIGGER_MODE_FW_ONLY)#define SAMPLE_TIME01           ((1023 << CY_SAR_SAMPLE_TIME0_SHIFT) | (2 << CY_SAR_SAMPLE_TIME1_SHIFT))#define SAMPLE_TIME23           ((2 << CY_SAR_SAMPLE_TIME2_SHIFT)        | (2 << CY_SAR_SAMPLE_TIME3_SHIFT))#define RANGE_THRES           ((0  << CY_SAR_RANGE_LOW_SHIFT) | (0  << CY_SAR_RANGE_HIGH_SHIFT))#define CHANNEL_EN                 1#define CHANNEL_0_CONFIG         (CY_SAR_CHAN_SINGLE_ENDED | CY_SAR_CHAN_SAMPLE_TIME_1 | CY_SAR_POS_PORT_ADDR_SARMUX | CY_SAR_CHAN_POS_PIN_ADDR_0 | CY_SAR_CHAN_AVG_DISABLE)#define MUX_SWITCH                        ( CY_SAR_MUX_FW_P0_VPLUS | CY_SAR_MUX_FW_VSSA_VMINUS)#define MUX_SWITCH_SQ_CTRL  CY_SAR_MUX_SQ_CTRL_P0#define VREF_MV                         1200ULconst cy_stc_sar_config_t sar0_config = {                .ctrl                         = (uint32_t) CTRL,                .sampleCtrl         = (uint32_t) SAMPLE_CTRL,                .sampleTime01         = SAMPLE_TIME01,                .sampleTime23         = SAMPLE_TIME23,                .rangeThres         = RANGE_THRES,                .rangeCond                 = CY_SAR_RANGE_COND_BELOW,                .chanEn                 = CHANNEL_EN,                .chanConfig         = {CHANNEL_0_CONFIG, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL},                .intrMask                 = CY_SAR_INTR_EOS,                .satIntrMask         = 0UL,                .rangeIntrMask         = 0UL,                .muxSwitch                = MUX_SWITCH,                .muxSwitchSqCtrl= MUX_SWITCH_SQ_CTRL,                .configRouting         = true,                .vrefMvValue         = VREF_MV,                .clock                         = CY_SAR_CLK_PERI,                .fifoCfgPtr         = NULL,                .trTimer                 = false,                .scanCnt                 = false,                .scanCntIntr         = false,};void adc_init(void){        uint8_t result = Cy_SysAnalog_Init(&pass_0_aref_0_config);        if (CY_SYSANALOG_SUCCESS != result)        {                CY_ASSERT(0);        }        Cy_SysAnalog_Enable();    if (Cy_SAR_Init(SAR, &sar0_config) == CY_SAR_SUCCESS)    {                uint32_t chan0SwitchMask = CY_SAR_MUX_FW_P0_VPLUS | CY_SAR_MUX_FW_VSSA_VMINUS;//???            Cy_SAR_SetAnalogSwitch(SAR, CY_SAR_MUX_SWITCH0, chan0SwitchMask, CY_SAR_SWITCH_CLOSE);            Cy_SAR_SetVssaVminusSwitch(SAR, CY_SAR_SWITCH_CLOSE);            uint32_t switchMask     = CY_SAR_MUX_SQ_CTRL_P0;            Cy_SAR_SetSwitchSarSeqCtrl(SAR, switchMask, CY_SAR_SWITCH_SEQ_CTRL_ENABLE);            Cy_SAR_SetVssaSarSeqCtrl(SAR, CY_SAR_SWITCH_SEQ_CTRL_ENABLE);            Cy_SAR_SetChannelOffset(SAR, ADC_CHANNEL, 0);        Cy_SAR_Enable(SAR);        Cy_SCB_UART_PutString(scb_12_HW, "ADC initialized successfully.rn");    }    else    {            Cy_SCB_UART_PutString(scb_12_HW, "ADC initialization failed.rn");        CY_ASSERT(0);    }}float adc_read_voltage(void){        int32_t result_32 = 0;        int32_t adc_result_0 = 0;        Cy_SAR_StartConvert(SAR, CY_SAR_START_CONVERT_SINGLE_SHOT);        while (!Cy_SAR_IsEndConversion(SAR, CY_SAR_RETURN_STATUS)) {}    result_32 = Cy_SAR_GetResult32(SAR, ADC_CHANNEL);    snprintf(uart_buffer, sizeof(uart_buffer),"ADC result_32 = %ldn", result_32);    Cy_SCB_UART_PutString(scb_12_HW, uart_buffer);        adc_result_0 = Cy_SAR_CountsTo_Volts(SAR, ADC_CHANNEL, result_32);    snprintf(uart_buffer, sizeof(uart_buffer),"ADC result = %ldVrn", (long int)adc_result_0);    Cy_SCB_UART_PutString(scb_12_HW, uart_buffer);    Cy_SAR_StopConvert(SAR);    return adc_result_0;}


更多回帖

发帖
×
20
完善资料,
赚取积分