ADC取样

#include<ioavr.h>
#include "adcproc.h"
#include "utils.h"
#include "globdefs.h"

#define SKIP_SAMPLES 1//ADC采样时忽略样本数

#define BYTE unsigned char

#define ADC_MUX_I 0x00//MUX选择第0通道
#define ADC_MUX_U 0x01
#define ADC_MUX_T 0x02

BYTE fADCFlag = 0;
int iADCData = 0;

void InitADCSystem(void)
{
  PORTA_PORTA0 = PORTA_PORTA1 = PORTA_PORTA2 = 0; //内部上拉电阻无效,减少干扰
  DDRA_DDA0 = DDRA_DDA1 = DDRA_DDA2 = 0; //输入
  ADMUX_REFS1 = ADMUX_REFS0 = 1; //内部参考电压2.56V
  ADCSRA_ADATE = 0; //单次转换模式
  ADMUX_ADLAR = 0; //结果右对齐
}

void OpenADCSystem(void)
{
  ADCSRA_ADEN = 1; //允许ADC转换
  ADCSRA_ADIE = 1; //中断使能
}

void CloseADCSystem(void)
{
  ADCSRA_ADEN = 0;
  ADCSRA_ADIE = 0; //关闭ADC中断
}

void SetADCInput(TMEAS_CHAN channel)
{
  switch(channel)
  {
  case TMEAS_I_SENSE:
    ADMUX = ADMUX & 0xF0 | ADC_MUX_I; //ADMUX_MUX3=ADMUX_2=ADMUX_1=ADMUX_0=0;
    break;
  case TMEAS_U_SENSE:
    ADMUX = ADMUX & 0xF0 | ADC_MUX_U; //ADMUX_MUX3=ADMUX_2=ADMUX_1=0;ADMUX_0=1;
    break;
  case TMEAS_T_SENSE:
    ADMUX = ADMUX & 0xF0 | ADC_MUX_T; //ADMUX_MUX3=ADMUX_2=ADMUX_0=0;ADMUX_1=1;
    break;
  }
}

int ADCGetData(BYTE aver)
{
  int adccode = 0;
  BYTE repeats = (1 << aver) + SKIP_SAMPLES;
  BYTE i = 0;
  fADCFlag = 0;

  for(i = 0; i < repeats; i++)
  {
    ADCSRA_ADSC = 1; //开始转换
    while(!fADCFlag)//等待ADC中断
    {
      ;
    }
    if(i > (SKIP_SAMPLES - 1))
    {
      SREG_I = 0;//M8C_DisableGInt;
      adccode += iADCData;
      SREG_I = 1;//M8C_EnableGInt;
    }
    fADCFlag = 0;
  }

  adccode >>= aver;
  return (adccode);
}

#pragma vector=ADC_vect
__interrupt void ADCConverted(void)
{
  iADCData = ADC;
  fADCFlag = 1;
}
时间: 2024-12-13 14:11:35

ADC取样的相关文章

ADC

  stm32f207,  引脚对应的模拟通道: PA0 IN0, PA1 PA2 PA3 PA4 PA5 PA6 PA7 IN PB0 IN8 PB1 IN9 PC0 IN10 PC1 PC2 PC3  PC4 IN14 PC5 IN15  ADC采样转换时间 ADC转换就是输入模拟的信号量,单片机转换成数字量.读取数字量必须等转换完成后,完成一个通道的读取叫做采样周期.采样周期一般来说=转换时间+读取时间.而转换时间=采样时间+12.5个时钟周期.采样时间是你通过寄存器告诉stm32采样模拟

重学STM32---(五)ADC

这两天把外部中断和ADC看了下,个人感觉外部中断不是很难,也就没有把记下来了,毕竟写这个挺浪费时间.ADC是比较复杂的,如果想让完全自由的运用ADC必须经过多次实践可能才可以.由于已经学过库函数,也就打算自己看数据手册写了一个简单的寄存器版的ADC,期间也遇到了很多问题,幸好都解决了. 把这次学习的重点都记下来,以后再看不知是什么感觉O(∩_∩)O哈哈~ 1. 模拟看门狗特性允许应用程序检测输入电压是否超出用户定义的高/低阀值. ADC的输入时钟不得超过14MHz,它是由PCLK2经分频产生.

1.13裸机ADC部分

1.13.1.ADC的引入 1.13.1.1.什么是ADC (1)ADC:analog digital converter ,AD转换,模数转换(也就是模拟转数字) (2)CPU本身是数数字的,而外部世界变量(如电压.温度.高度.压力)都是模拟的,所以需要用CPU来处理这些外部的模拟量的时候就需要做AD转换 1.13.1.2.为什么需要ADC (1)为了用数字技术来处理外部的模拟量 1.13.1.3.关于模拟量和数字量 (1)模拟的就是连续的,显示生活中的时间.电压.高度等都是模拟的(连续分布的

利用STM32CubeMX来生成USB_HID_Mouse工程【添加ADC】(2)【非dma和中断方式】

上回讲到怎么采集一路的adc的数据,这次我们来采集两路的数据. 现在直接修改原先的代码 /* Private variables ---------------------------------------------------------*/ uint16_t AD_Value_Buf[2]; uint16_t AD_X_Value = 0; uint16_t AD_Y_Value = 0; /* USER CODE END PV */ /* USER CODE BEGIN 3 */ fo

STM32F0的多路ADC 无DMA

前段时间几乎用了一下午的时间, 就为了调F0的两路ADC, 一开始想的办法是将采样的连续模式(ADC_ContinuousConvMode)使能, 然后连续拿两个值, 拿完分别返回. 坏处不用说, 看着就傻, 就算你只需要一个ADC通道的值, 也要拿足N个, 比如你一共要拿5个ADC引脚的电压, 那就要全拿, 然后取其中第若干个, 如果你要拿8个做平均, 就要把时间再乘8, 看着就蠢. 但是反复调试发现如果不连续采样, 第一次ok, 但是后面每次就只采后一个通道了, 很奇怪, 结果发现原来是居然

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

ADC的初始化如果没设置好,对于整个系统是有很大的影响的,首先就是拖慢采集速度. 再有就是没打开通道没有检测.那直接看710的ADC初始化代码来理解吧 要用的引脚需要先设置为输入. 27     AD1PCFGH=0XFFFF;                        //选择AN0引脚作为模拟输入28     AD1PCFGL=0XFFF0; 这两个寄存器设置需要注意,0为模拟输入,所以你要多个采集的话就要把那几位置零了 AD1CSSL=0X0001;                  

MAX10 ADC的一些基知识

MAX10 ADC 的一些知识 1.        MAX 10 内部集成的12bit SAR ADC的特点为: a.        采样速率高达1Mhz. b.        模拟通道多达18个,单个ADC多达17个,双ADC器件中有16个双功能ADC通道,2个专用的ADC. c.         提供单端测量功能. d.        双ADC器件的专用模拟输入管脚具备同步测量功能.因两个专用的管脚的封装布线是匹配的.而双功能管脚,两个ADC模块之间的布线延时在同步测量中导致数据失配.另外I

ADC类型总结

1.SAR型 (逐次逼近型) 摘要:逐次逼近寄存器型(SAR)模数转换器(ADC)占据着大部分的中等至高分辨率ADC市场.SAR ADC的采样速率最高可达5Msps,分辨率为8位至18位.SAR架构允许高性能.低功耗ADC采用小尺寸封装,适合对尺寸要求严格的系统. 本文说明了SAR ADC的工作原理,采用二进制搜索算法,对输入信号进行转换.本文还给出了SAR ADC的核心架构,即电容式DAC和高速比较器.最后,对SAR架构与流水线.闪速型以及Σ-Δ ADC进行了对比. 引言 逐次逼近寄存器型(S

STM32 ADC基础与多通道采样

12位ADC是一种逐次逼近型模拟数字数字转换器.它有多达18个通道,可测量16个外部和2个内部信号源.ADC的输入时钟不得超过14MHZ,它是由PCLK2经分频产生.如果被ADC转换的模拟电压低于低阀值或高于高阀值,AWD模拟看门狗状态位被设置. ADC通常要与DMA一起使用 这里只是简单的用库配置ADC 不断扫描来实现ADC的应用. 配置DMA: void DMA_Config(void) { DMA_InitTypeDef DMA_InitStructure;//定义DMA初始化结构体 DM