在线时间888 小时
UID3067179
注册时间2014-10-23
NXP金币2339
TA的每日心情 | 开心 昨天 16:28 |
---|
签到天数: 1483 天 连续签到: 3 天 [LV.10]以坛为家III
版主
  
- 积分
- 8660
- 最后登录
- 2025-7-30
|
本帖最后由 TLLED 于 2024-11-7 08:16 编辑
测试板卡ADC功能,采集电位器电压显示在SCLD并串口打印输出。
一、硬件部分
主板ADC部分电路
电位器连接到主板ADC引脚PTB0
二、配置ADC引脚
配置ADC引脚
三、程序部分
3.1、adc.c
- #include "pin_mux.h"
- #include "fsl_adc16.h"
- #include "fsl_debug_console.h"
- #include "adc/adc.h"
- #define ADC16_BASE ADC0
- #define ADC16_CHANNEL_GROUP 0U
- #define ADC16_USER_CHANNEL 8U /* PTB0, ADC0_SE8 */
- const uint32_t g_Adc16_12bitFullRange = 4096U;
- adc16_config_t adc16ConfigStruct;
- adc16_channel_config_t adc16ChannelConfigStruct;
- uint32_t adc_readval(void)
- {
- uint32_t adv=0;
- ADC16_SetChannelConfig(ADC16_BASE, ADC16_CHANNEL_GROUP, &adc16ChannelConfigStruct);
- while (0U == (kADC16_ChannelConversionDoneFlag & ADC16_GetChannelStatusFlags(ADC16_BASE, ADC16_CHANNEL_GROUP)));
- adv=ADC16_GetChannelConversionValue(ADC16_BASE, ADC16_CHANNEL_GROUP);
- return adv;
- }
- void init_adc(void)
- {
-
-
- init_adc_pins();
-
- /*
- * adc16ConfigStruct.referenceVoltageSource = kADC16_ReferenceVoltageSourceVref;
- * adc16ConfigStruct.clockSource = kADC16_ClockSourceAsynchronousClock;
- * adc16ConfigStruct.enableAsynchronousClock = false;
- * adc16ConfigStruct.clockDivider = kADC16_ClockDivider8;
- * adc16ConfigStruct.resolution = kADC16_ResolutionSE12Bit;
- * adc16ConfigStruct.longSampleMode = kADC16_LongSampleDisabled;
- * adc16ConfigStruct.enableHighSpeed = false;
- * adc16ConfigStruct.enableLowPower = false;
- * adc16ConfigStruct.enableContinuousConversion = false;
- */
-
- ADC16_GetDefaultConfig(&adc16ConfigStruct);
- #ifdef BOARD_ADC_USE_ALT_VREF
- adc16ConfigStruct.referenceVoltageSource = kADC16_ReferenceVoltageSourceValt;
- #endif
- ADC16_Init(ADC16_BASE, &adc16ConfigStruct);
- ADC16_EnableHardwareTrigger(ADC16_BASE, false); /* Make sure the software trigger is used. */
-
- #if defined(FSL_FEATURE_ADC16_HAS_CALIBRATION) && FSL_FEATURE_ADC16_HAS_CALIBRATION
- if (kStatus_Success == ADC16_DoAutoCalibration(ADC16_BASE))
- {
- PRINTF("ADC16_DoAutoCalibration() Done.\r\n");
- }
- else
- {
- PRINTF("ADC16_DoAutoCalibration() Failed.\r\n");
- }
- #endif /* FSL_FEATURE_ADC16_HAS_CALIBRATION */
-
- PRINTF("ADC Full Range: %d\r\n", g_Adc16_12bitFullRange);
- PRINTF("Press any key to get user channel's ADC value ...\r\n");
- adc16ChannelConfigStruct.channelNumber = ADC16_USER_CHANNEL;
- adc16ChannelConfigStruct.enableInterruptOnConversionCompleted = false;
- #if defined(FSL_FEATURE_ADC16_HAS_DIFF_MODE) && FSL_FEATURE_ADC16_HAS_DIFF_MODE
- adc16ChannelConfigStruct.enableDifferentialConversion = false;
- #endif /* FSL_FEATURE_ADC16_HAS_DIFF_MODE */
-
- }
复制代码
3.2、adc.h
- #ifndef __ADC_H
- #define __ADC_H
- #define BOARD_ADC_USE_ALT_VREF 1U
- void init_adc(void);
- uint32_t adc_readval(void);
- #endif
复制代码
3.3、main.c
- #include "pin_mux.h"
- #include "clock_config.h"
- #include "board.h"
- #include "fsl_debug_console.h"
- #include "fsl_gpio.h"
- #include "slcd/slcd.h"
- #include "led/led.h"
- #include "systick/systick.h"
- #include "slcd_engine.h"
- #include "adc/adc.h"
- void init_board(void)
- {
- SysTick_Init();
- BOARD_InitPins();
- BOARD_BootClockRUN();
- BOARD_InitDebugConsole();
- init_led();
- init_adc();
- init_slcd();
- }
- int main(void)
- {
- uint32_t m_adv=0;
- float vl= 0.0f;
-
- init_board();
- while (1)
- {
- m_adv = adc_readval();
- vl = (m_adv*3.3)/4096;
- slcd_disp_adc(m_adv);
-
- PRINTF("m_adv=%d vl=%0.1fV \r\n",m_adv,vl);
- SysTick_Delay_ms(1000);
- }
- }
复制代码
四、程序运行
4.1、slcd显示ADC采样值
4.2、串口打印输出
|
|