实验结果:
注意:电位计的旋钮位置和LED灯的亮度,前后两次发生了变化,即用电位计调节小灯亮度。
附录:主要代码
1、首先,初始化:
hardware_init();
//硬件初始化
OSA_Init();
//初始化实时系统,主要是时钟
dbg_uart_init();
//调试串口初始化,用于串口打印,便于调试程序
2、校正ADC,即电位计
ADC_DRV_GetAutoCalibrationParam(HW_ADC0, &MyAdcCalibraitionParam);
ADC_DRV_SetCalibrationParam(HW_ADC0, &MyAdcCalibraitionParam);
先获得自动校正参数,主要是使能ADC内部时钟,这里的校正参数可以用结构体自行定义,也可以默认不定义,内部会以ADC最高精度进行校正,再设置初始化ADC,这里设置成了中断模式,一些参数定义如下:
* .intEnable = true;
* .lowPowerEnable = true;
* .clkDividerMode = kAdcClkDividerInputOf8;
* .resolutionMode = kAdcResolutionBitOf12or13;
* .clkSrcMode = kAdcClkSrcOfAsynClk;
* .asyncClkEnable = true;
* .highSpeedEnable = false;
* .hwTriggerEnable = false;
* .dmaEnable = false;
* .refVoltSrcMode = kAdcRefVoltSrcOfVref;
* .continuousConvEnable = true;
3、初始化中断模式
ADC_DRV_StructInitUserConfigForOneTimeTriggerMode(&MyAdcUserConfig);
MyAdcUserConfig.resolutionMode = kAdcResolutionBitOf12or13;
ADC_DRV_Init(HW_ADC0, &MyAdcUserConfig, &MyAdcState);
//这里的电位计是12位的ADC,范围0-4095
4、FTM配置及初始化
configure_ftm_pins(BOARD_FTM_INSTANCE);
ftm_user_config_t ftmInfo;
memset(&ftmInfo, 0, sizeof(ftmInfo));
FTM_DRV_Init(BOARD_FTM_INSTANCE, &ftmInfo);
5、采集ADC数值
//Get Voltage value
adcValue_RV2= getVoltage(0, false, MyAdcUserConfig.resolutionMode);
getVoltage函数的第一个参数是电位计ADC的通道Number,0是RV2,第二个参数是是否差分,false是不差分,第三个参数是ADC分辨率模式,这里是12位ADC;
|