【ADC】ADC初始化的注意事项

ADC的初始化如果没设置好,对于整个系统是有很大的影响的,首先就是拖慢采集速度。

再有就是没打开通道没有检测。那直接看710的ADC初始化代码来理解吧

  1. 要用的引脚需要先设置为输入。
  2. 27     AD1PCFGH=0XFFFF;                        //选择AN0引脚作为模拟输入
    28     AD1PCFGL=0XFFF0;  这两个寄存器设置需要注意,0为模拟输入,所以你要多个采集的话就要把那几位置零了
  3. AD1CSSL=0X0001;                            //对AN0进行扫描,    还有就是这个寄存器的设置了。对哪几个扫描
  4. 其他的不用纠结,就那样没问题
 1 /************************************************************
 2 **FileName: ADC.c
 3 **Author:   cm     Version :  V1.0      Date: 2017-4-16
 4 **Chip:         dsPIC33FJ256GP710
 5 **Description:          ADC
 6 **              工作频率FCY=40M
 7 **              使用外部XT 应定义XT_PLL
 8 **Function List:
 9 **
10 ***********************************************************/
11 #include "ADC.h"
12 #include "Delay.h"
13 #define N 7
14 void Init_ADC()
15 {
16     _TRISB0=1;                                //端口引脚定义
17     _TRISB1=1;
18     _TRISB2=1;
19     _TRISB3=1;
20     _TRISA9=1;
21     _TRISA10=1;
22     AD1CON1bits.ADON=0;                        //禁止ADC
23     AD1CON1bits.AD12B=0;                    //选择10位模式
24     AD1CON2bits.VCFG=0B011;                    //参考电压选择外部Vref+和外部Vref-
25     AD1CON3bits.ADCS=0X02;                    //选择模拟转换时钟
26     AD1CON3bits.ADRC=0;                        //选择内部时钟
27     AD1PCFGH=0XFFFF;                        //选择AN0引脚作为模拟输入
28     AD1PCFGL=0XFFF0;
29     AD1CHS0=0X0000;                            //确定如何将输入分配给采样保持通道
30     AD1CON2bits.CHPS=0B00;                    //使用的通道为CH0
31     AD1CON1bits.SIMSAM=0;                    //按顺序依次单独采样多个通道中每个通道
32     AD1CSSL=0X0003;                            //对AN0进行扫描
33     AD1CON1bits.SAMP=0;                        //手动采样
34     AD1CON1bits.FORM=0B00;                    //缓冲区的存储方式输出格式为整数
35     AD1CON4=0X0004;                            //给每个模拟输入分配16字的缓冲区
36     AD1CON1bits.ADON=1;                        //开启ADC
37 }
38
39 unsigned int ADC(unsigned int input)
40 {
41     static unsigned int AD=0;
42     AD1CHS0=input;
43     AD1CON1bits.SAMP=1;                        //收到采样
44     DelayUs(1);                            //延时等待
45     AD1CON1bits.SAMP=0;                        //开始装换
46     while(!AD1CON1bits.DONE);
47     AD=ADC1BUF0;                            //取值
48     return AD;
49 }
50
51 unsigned int filter(unsigned int ANx)
52 {
53     unsigned int sum,AD_value,i;
54     for(i=0;i<20;i++)
55     {
56     sum=ADC(ANx)+sum;
57     }
58     AD_value=sum/20;
59     sum=0;
60     return AD_value;
61 }
62
63 unsigned int filter1(unsigned int ANx)
64 {
65
66     unsigned int AD_temp;
67     unsigned int value_buf[N];
68     unsigned char count,i,j;
69     for ( count=0;count<N;count++)
70     {
71         value_buf[count]=ADC(ANx);
72         DelayMs(1);
73     }
74     for (j=0;j<N-1;j++)
75     {
76         for (i=0;i<N-j;i++)
77         {
78             if ( value_buf[i]>value_buf[i+1] )
79             {
80                 AD_temp = value_buf[i];
81                 value_buf[i]= value_buf[i+1];
82                 value_buf[i+1] = AD_temp;
83             }
84         }
85     }
86     return value_buf[(N-1)/2];
87 }
88 unsigned int filter2(unsigned int ANx)
89 {
90     unsigned int sum,AD_value,i;
91     for(i=0;i<5;i++)
92     {
93     sum=filter1(ANx)+sum;
94     }
95     AD_value=sum/5;
96     sum=0;
97     return AD_value;
98 }
时间: 2024-10-24 13:48:31

【ADC】ADC初始化的注意事项的相关文章

Citrix ADC MPX初始化配置

多功能 Citrix ADC.专用 Citrix 网关企业版和专用 Citrix Web 应用防火墙设备的初始配置相同.您可以使用以下任何接口进行设备的初始配置: 首次使用向导-如果您使用 Web 浏览器连接到设备,系统会提示您输入网络配置和授权信息(如果尚未指定). LCD 键盘-您可以指定网络设置,但必须使用不同的界面来上传您的许可证. 串行控制台-连接到串行控制台后,可以使用 Citrix ADC 命令行指定网络设置并上传您的许可证, 动态主机配置协议 (DHCP) — 如果要从远程网络配

关于case语句中声明变量并初始化的注意事项

今天看到一句对这个问题特别精辟的总结,记录如下: It is possible to transfer into a block, but not in a way that bypasses declarations with initialization. A program that jumps from a point where a local variable with automatic storage duration is not in scope to a point whe

adc mda 的一些配置,,,非常感谢分享这些内容的人

1.  对于ADC来说,我们关注的是它的分辨率.转换速度.ADC类型.参考电压范围. A. 分辨率,12位分辨率,最小量化单位LSB=VREF+/212 B. 转换时间,可编程的,采样一次至少要用14个ADC时钟周期,而ADC时钟频率最高为14MHz,也就是说它的最短采样时间为1us C. ADC类型,类型决定了性能的极限,stm32是逐次比较型ADC D. 参考电压范围,当需要测量负电压或测量的信号超出范围时,要先经过运算电路进行平移或利用电阻分压 2.  ADC工作过程分析,ADC部件要受到

STM32——ADC

STM32--ADC 宗旨:技术的学习是有限的,分享的精神的无限的. 一.ADC指标 有 18 个通道,可测量 16 个外部和 2 个内部信号源.各通道的 A/D 转换可以单次.连续.扫描或间断模式执行 :ADC的结果可以左对齐或右对齐方式存储在 16 位数据寄存器中 :模拟看门狗特性允许应用程序检测输入电压是否超出用户定义的高 / 低阈值. 对于 ADC 来说,我们最关注的就是它的分辨率.转换时间.ADC 类型.参考电压范围: (1)分辨率:12 位分辨率.不能直接测量负电压,所以没有符号位,

STM32F407VG (三)ADC

12位ADC是一种逐次逼近型模拟数字转换器.它有多达19个通道,可测量16个外部和2个内部信号源和VBAT通道.各通道的A/D转换可以单次.连续.扫描或间断模式执行.ADC的结果可以左对齐或右对齐方式存储在16位数据寄存器中.模拟看门狗特性允许应用程序检测输入电压是否超出用户定义的高/低阀值. 1.ADC通用初始化参数 /* ADC Common 配置 ----------------------------------------------------------*/ //工作在独立模式或多

利用STM32CubeMX来生成USB_HID_Mouse工程【添加ADC】(1)

现在原来的基础上添加ADC的功能. 现在(利用STM32CubeMX来生成USB_HID_Mouse工程)基础上新增硬件 JoyStick Shield 游戏摇杆扩展板 与STM32F103C8的连接 目前使用 JoyStick Shield   STM32F103C8 X----PA1(ADC1_IN1) Y----PA2(ADC1_IN2) 好了我们现在STM32CubeMX来打开之前的工程 现在我们先设置ADC1_IN1 让我们来看其adc的默认配置 现在直接生成工程. 会发现在原来的工程

STM32 ADC 测电压

1. STM32F103 ADC 本例使用STM32F103芯片的PA1引脚测试模拟输入的电压值. 查看文档<STM32F103X.pdf>第31页,引脚定义图: 得知PA1使用ADC1的通道1. 查看文档<STM32F103X.pdf>第13页,时钟树图: 得知ADC1可2,4,6,8分频,又ADC输入时钟不得超过14MHZ(参见STM32参考手册RM0008第11章ADC). //初始化ADC //这里我们仅以规则通道为例 //我们默认将开启通道0~3 void Adc_Ini

STM32之DMA+ADC

借用小甲鱼的经典:各位互联网的广大网友们.大家早上中午晚上好..(打下小广告,因为小甲鱼的视频真的很不错).每次看小甲鱼的视频自学都是比较轻松愉快的..我在想,如果小甲鱼出STM32的视频,我会一集不漏的听的.哈.好了..学习到了STM32的DMA模块..琢磨了一下中文参考手册,官方是这样描述的: 直接存储器存取(DMA)用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输.无须CPU干预,数据可以通过DMA快速地移动,这就节省了CPU的资源来做其他操作. 是的,无需CPU干预,可以想

ADC触摸屏

目录 ADC触摸屏 硬件原理 等效电路 测量逻辑 程序设计(一)获得ADC 寄存器初始化 中断初始化 ADC模式(中断.测量) 中断函数 程序设计(二)获得坐标 生产者与消费者 ADC获取 程序优化 个人修改意见 TODO title: ADC触摸屏 tags: ARM date: 2018-11-02 18:35:45 --- ADC触摸屏 硬件原理 s3c2440有8通道的ADC,一次同时只能查询一个通道.分为A0~A7.这里的P(positive)表示的是正的意思 ADC通道 A4 TSY