在线时间1312 小时
UID3124330
注册时间2015-11-26
NXP金币2830
TA的每日心情 | 开心 2019-3-5 08:47 |
---|
签到天数: 1 天 连续签到: 1 天 [LV.1]初来乍到
金牌会员
 
- 积分
- 9004
- 最后登录
- 2025-7-20
|
本帖最后由 jundao721 于 2016-3-30 22:41 编辑
KL27 mini板子上有个可调电阻接AD端口,可以练习一下AD转换。A0口连接到A023端口,即AD0的23通道。知道这些就足够了,再对照datasheet熟悉一下这款芯片的AD,然后开始调试了。还是一贯作风,配置环境,编译没错误,开始写AD的代码。首先比原来的文件需要加入这两个头文件,一个是AD驱动文件,一个和外部参考电压有关系。
- #include "fsl_adc16_driver.h"
- #include "fsl_pmc_hal.h"
复制代码 宏定义通道端口:
- #define ADC_CHN (kAdc16Chn23) //ADC channel
复制代码 在main函数中配置AD
- ADC16_DRV_StructInitUserConfigDefault(&adcUserConfig);
- #if (FSL_FEATURE_ADC16_MAX_RESOLUTION >=16)
- adcUserConfig.resolution = kAdc16ResolutionBitOf16;
- #endif
-
- #if BOARD_ADC_USE_ALT_VREF
- adcUserConfig.refVoltSrc = kAdc16RefVoltSrcOfValt;
- #endif
- ADC16_DRV_Init(0,&adcUserConfig);
复制代码 然后就是在while循环中调用转换函数,下面是转换函数的配置和转换代码。将Value值放入watch1窗口中,转动电电位器,观察AD转换值的变化。
- adc16_chn_config_t adcChnConfig;
- #if FSL_FEATURE_ADC16_HAS_HW_AVERAGE
- adc16_hw_average_config_t userHwAverageConfig;
- #endif
- pmc_bandgap_buffer_config_t pmcBandgapConfig = {
- .enable = true,
- #if FSL_FEATURE_PMC_HAS_BGEN
- .enableInLowPower = false,
- #endif
- #if FSL_FEATURE_PMC_HAS_BGBDS
- .driver = kPmcBandgapBufferDriveLow,
- #endif
- };
- // uint32_t Value =0;
- // uint32_t vdd =0;
- #if FSL_FEATURE_ADC16_HAS_CALIBRATION
- //auto calibration
- adc16_calibration_param_t adcCalibrationParam;
- ADC16_DRV_GetAutoCalibrationParam(0,&adcCalibrationParam);
- ADC16_DRV_SetCalibrationParam(0,&adcCalibrationParam);
- #endif
-
- //Enable reference voltage
- PMC_HAL_BandgapBufferConfig(PMC_BASE_PTR,&pmcBandgapConfig);
- #if FSL_FEATURE_ADC16_HAS_HW_AVERAGE
- // Use hardware average to increase stability of the measurement.
- userHwAverageConfig.hwAverageEnable = true;
- userHwAverageConfig.hwAverageCountMode= kAdc16HwAverageCountOf32;
- ADC16_DRV_ConfigHwAverage(0,&userHwAverageConfig);
- #endif
-
- // Configure the conversion channel
- // differential and interrupt mode disable.
- adcChnConfig.chnIdx = (adc16_chn_t)ADC_CHN;
- #if FSL_FEATURE_ADC16_HAS_DIFF_MODE
- adcChnConfig.diffConvEnable = false;
- #endif
- adcChnConfig.convCompletedIntEnable = false;
- ADC16_DRV_ConfigConvChn(0,0,&adcChnConfig);
- // Wait for the conversion to be done
- ADC16_DRV_WaitConvDone(0,0);
- // Get current ADC BANDGAP value and format it.
- Value = ADC16_DRV_GetConvValueSigned(0,0);
- // Calculates bandgapValue in 16bit resolution
- // from 12bit resolution to calibrate.
- #if (FSL_FEATURE_ADC16_MAX_RESOLUTION<16)
- Value = Value <<4;
- #endif
- // ADC stop conversion
- ADC16_DRV_PauseConv(0,0);
复制代码 我比较赞成自己敲一遍代码,会有很多和看代码不一样的收获,很多不明白的忽然就明白了,这是我的感觉。
|
-
评分
-
查看全部评分
|