ADC转换

S3C2440芯片内部共有8路A/D转换通道AIN0~AIN7

AIN4、AIN5、AIN6、AIN7给触摸屏用的;

AIN0用于可调电阻(这样电压就可以作为一路模拟信号进行转换)

设置采样频率

最大的转换率在2.5MHZ转换时钟下能达到500KSPS(每秒采样5000千次)

怎么判断开始转换了?用一个whlie循环,查询ENABLE_START是否变成0

怎么判断转换完成了?不断查询ECFLG是否为1

读取转换值

void Main(void)

{     
    int a0=0,tmp;  
    int Scom=0;  
    Set_Clk();  
    Uart_Init(0,115200);  
    Uart_Select(Scom);  
        
    adc_init();  
       while(1)  
    {  
        a0=ReadAdc(0);  
        Uart_Printf( "AIN0: %04d\n", a0);  
        delay(1000) ;  
    }  
  
}

#define ADC_FREQ 2500000

void adc_init(void)  
{  
    volatile U32 preScaler;
    int channel=0; //AIN0,对应开发板上W1可调电阻  
      
    preScaler = ADC_FREQ;  
    Uart_Printf("ADC conv,freq. = %dHz\n",preScaler);  
    preScaler = 50000000/ADC_FREQ - 1; //PCLK=50M   preScaler = 19
                                       // 50MHz/(19+1)=2.5MHz
    Uart_Printf("PRSCVL=PCLK/ADC_FREQ - 1=%d\n",preScaler);  
      
    /*AD转换频率设置,最大频率为2.5MHz*/  
    rADCCON = (1<<14)|(preScaler<<6)|(channel<<3);    //setup channel 1<<14使能预分频器   
    delay(1000);                                      //(preScaler<<6)设置预分频值  channel<<3选择通道0
  
}

int ReadAdc(int channel)

{   
    /*开启AD转换*/  
    rADCCON |= 0x01; //start ADC   
    while(rADCCON & 0x1);   //检测是否已启动转换      
    while(!(rADCCON & 0x8000)); //判断转换是否结束          
    return ( (int)rADCDAT0 & 0x3ff );//读取转换后的值  
}

时间: 2024-11-08 05:30:57

ADC转换的相关文章

STM32 ADC DMA 中断模式多通道读取ADC转换值

因为做一个电机控制项目,其中需要用到用PWM触发ADC,读取ADC的转换值. 这里有两个关键问题: 第一,如何使PWM触发ADC转换? 第二,如何在ADC多通道扫描模式下,读取各个channel的adc转换值? 第三,如何使用DMA读取多通道ADC转换值? 第一个问题,首先需要将ADC设置成外部触发转换,第二需要选择触发是发生在Timer的上升沿还是下降沿.程序如下: adc.ADC_Resolution = ADC_Resolution_12b; adc.ADC_ScanConvMode =E

电赛菜鸟营培训(四)&mdash;&mdash;STM32F103CB之ADC转换

一.ADC概念 实现模拟信号转换成数字信号就是这样子= = 二.代码框架 #include "stm32f10x.h" void delay(u32 kk) { while(kk--); } int main() { u16 ad=0,adc0=0; GPIO_InitTypeDef GPIO_InitStructure; ADC_InitTypeDef ADC_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC

ADC 转换序列暂时难理解

通常情况下,core文件会包含了程序运行时的内存,寄存器状态,堆栈指针,内存管理信息还有各种函数调用堆栈信息等,我们可以理解为是程序工作当前状态存储生成第一个文件,程序出错的时候理论上都会产生一个core文件,通过工具分析这个文件,我们可以定位到程序异常退出的时候对应的堆栈调用等信息,找出问题所在并进行及时解决. 相信大多数人都遇到过url出现中文乱码的情况,绝大多数人为了避免出现这种问题,所以设计 url 一般都会尽量设计成都是英文字符.但总避免一种情况就是当你的系统中拥有搜索功能时,你无法预

STM32F207 两路ADC连续转换及GPIO模拟I2C给Camera Sensor初始化参数

1.为了更好的方便调试,串口必须要有的,主要打印一些信息,当前时钟.转换后的电压值和I2C读出的数据. 2.通过GPIO 模拟I2C对镁光的MT9V024进行参数初始化.之前用我以前公司SP0A19芯片,是I2C是8位宽的,而镁光的地址是8位,而数据位是16个字节, 其实不管是8位还是16位,每次发送都是8个字节然后一个应答位,所以只要稍微改下代码即可. 3.实现两路ADC连续转换,两路ADC转换:一路是检测锂电池电压:一路是检测压力传感器,其实都是检测电压,当检测到压力为零,并累计多长时间后进

重学STM32---(五)ADC

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

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

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

HAL驱动库学习-ADC

如何使用ADC驱动库 1  实现如下两个函数 a: HAL_ADC_MspInit()使能ADC时钟,设置时钟源, 使能ADC Pin,设置为输入模式,可选 DMA,中断 b:HAL_ADC_MspDeInit() 与 HAL_ADC_MspInit()作用相反,用来关闭ADC,可选 DMA,中断 2  配置ADC参数,详细参数描述参考ADC属性定义.通过HAL_ADC_Init()来加载参数 3  配置ADC通道,包括使用的通道,采样时间等 HAL_ADC_ConfigChannel() 4

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

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