[活动专区] 【赛元95F】之五:ADC

[复制链接]
1757|1
 楼主| lisingch 发表于 2020-4-2 16:07 | 显示全部楼层 |阅读模式
      本次实验利用了SC95F8617内部的12位高精度1M 高速ADC,在17路ADC中第15通道通过一只2K微调电阻采集外部电压,然后将采集的数据通过串口模块发送至PC端,利用SSCOM V5.13.1串口调试助手显示。

一、实验资源
1、SC95F8617 demo板;
2、SC-LINK;
3、Keil C51 V9.60;
4、串口模块;
5、SSCOM V5.13.1串口调试助手
6、2K可调电阻;

二、相关资源简介
2020-04-02_141502.png
SC95F8617内部集成有17路12位高精度1M 高速ADC,内部1路连接至1/4VDD,另外16路与外部IO复用。可通过“Code Option”对VDD、内部2.048V、内部1.024V三种参考电压进行选择。通过ADCCON寄存器配置可以对采集通道进行选择;ADCCFG2[4:2]可设置ADC采样时间进行设置;采集结果的高8位存放于ADCVH、低4位存放于ADCVL的高4位,这相当于是“左对齐”吧。

三、程序实现
ADC单通道采集相对还是比较简单的,程序同样参考了官方DEMO。串口函数做了小的修改,使用了“printf()”库函数,重写了“putchar()”重定义函数。
ADC配置、中断等:
  1. void ADC_Config(void)
  2. {
  3.         ADCCON = 0X8f;                //开启ADC,ADCIS[4:0]=11111:ADC输入为1/4VDD 可用于测量电源电压
  4.         //ADCCFG2 = 0x40;                //LOWSP[2:0]=100 采样时间为3个系统时钟 约100ns@fSYS=32MHz
  5.         ADCCFG1 = 0X80;   //设置AIN15(P43) 作为采样口
  6.       
  7.         EADC = 1;                                        //开启ADC中断
  8.         
  9.         EA = 1;
  10. }


  11. unsigned int Get_ADC_Value(void)
  12. {
  13.         ADCCON |= 0X40;                                                   //ADCS=1 触发ADC转换
  14.         while(!ADC_Convert_Flag);                        
  15.         ADC_Convert_Flag = 0;
  16.         ADC_Value = (ADCVH<<4)+(ADCVL>>4);
  17.         
  18.         return ADC_Value;
  19. }


  20. void ADC_INT(void) interrupt 6
  21. {
  22.         ADCCON &= ~(0X20);          //清中断标志位
  23.         ADC_Convert_Flag = 1;
  24. }

putchar()函数重定义:
  1. char putchar(char ch)
  2. {
  3.         SBUF = ch;
  4.         while(!TI);
  5.         TI = 0;
  6.         return ch;
  7. }

主函数:
  1. void main(void)
  2. {
  3.         Uart0_Config();  
  4.         ADC_Config();
  5.         
  6.         printf("\nSC95F8617 ADC_TEST");
  7.         
  8.         while(1)
  9.         {
  10.                 printf("\nADC_Convert_Value = %d",Get_ADC_Value());
  11.                 delayms(1000);
  12.         }
  13. }

Option选择Vref为“VDD”
2020-04-02_155715.png

四、实验结果
IMG20200401125814.jpg
2020-04-01_130232.png

五、总结
      本实验是ADC最简单、最基础的实验,只是实现了最基本的模块功能。实际应用中对于ADC参考电压可以选择内部2.048V或1.024V,并在ADC采样输入端对地增加10n滤波电容,数据软件处理时采用必要的滤波算法。

598330983 发表于 2020-4-5 19:22 | 显示全部楼层
看起来很容易使用ADC模块。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

99

主题

15007

帖子

19

粉丝
快速回复 在线客服 返回列表 返回顶部