完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
我正在嘗試使用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;} |
|
相关推荐
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
【瑞萨RA6E2】瑞萨E2S软件安装过程,等待过程玩下97_e2 studio_ZGZZ
140 浏览 0 评论
483 浏览 0 评论
【原创】【RA4M2-SENSOR开发板评测】低功耗+USB综合测试
815 浏览 0 评论
1346 浏览 2 评论
804 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
16903 浏览 31 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 15:26 , Processed in 0.468335 second(s), Total 39, Slave 32 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
2432