【CH579M-R1】小试牛刀之ADC遇到的问题
[复制链接]
本帖最后由 yangjiaxu 于 2020-12-27 23:41 编辑
感觉最近的进度有些慢了,近期应该加速了。最近疫情可能有些严重了,愿各位朋友都保护好自己,注意身体。
今天抽些时间把当时要做的项目分解一下,就搞了段ADC采样的代码,也是从例程里扒出来的。使用定时器,1秒采样20次。
部分代码如下:
void TMR0_IRQHandler( void ) // TMR0 定时中断
{
UINT8 i;
signed short RoughCalib_Value = 0; // ADC粗调偏差值
if( TMR0_GetITFlag( TMR0_3_IT_CYC_END ) )
{
TMR0_ClearITFlag( TMR0_3_IT_CYC_END ); // 清除中断标志
/* 单通道采样:选择adc通道9做采样,对应 PA0引脚, 带数据校准功能 */
PRINT( "\n2.Single channel sampling...\n");
GPIOA_ModeCfg(GPIO_Pin_0, GPIO_ModeIN_Floating);
ADC_ExtSingleChSampInit( SampleFreq_4, ADC_PGA_0 );
ADC_ChannelCfg( 9 );
for(i=0; i<20; i++)
{
abcBuff[i] = ADC_ExcutSingleConver() + RoughCalib_Value; // 连续采样20次
ADC_DataCalib_Fine( &abcBuff[i], ADC_PGA_0 );
}
for(i=0; i<20; i++)
{
PRINT("%d ", abcBuff[i]);
}PRINT("\n");
}
}
代码可以正常运行,不过采样有误差。比如我接 3.3V的电源,采样得到的数据是4045.
接GND的时候理论上是0,不过实际是54。
不知道这块应该怎么解决,是不是我操作的问题,还是硬件的参考电压或者模拟部分有问题。今天就困扰我一下吧。暂时还没有找到问题。
|