zoukankan      html  css  js  c++  java
  • ADC转换

    S3C2440芯片内部共有8路A/D转换通道AIN0~AIN7
    AIN4、AIN5、AIN6、AIN7给触摸屏用的;
    AIN0用于可调电阻(这样电压就可以作为一路模拟信号进行转换)

     

     设置采样频率

     

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

     怎么判断开始转换了?用一个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 ", 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 ",preScaler);  
        preScaler = 50000000/ADC_FREQ - 1//PCLK=50M   preScaler = 19
                                           
    // 50MHz/(19+1)=2.5MHz
        Uart_Printf("PRSCVL=PCLK/ADC_FREQ - 1=%d ",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 );//读取转换后的值  
  • 相关阅读:
    什么是垃圾回收??
    Nginx教程3:SSL设置
    Nginx教程2:性能
    Nginx教程1:基本概念
    iOS 设计中-- 自定义-- 评星图标的方法
    iOS设计中对Xcode设置中创建PCH文件的过程
    iOS设计中不同屏幕适配的方法-登陆界面
    iOS设计之--OC学习总结之延展类目协议
    iOS 最新版 CocoaPods 的安装流程介绍
    iOS基本UI控件总结
  • 原文地址:https://www.cnblogs.com/liuchengchuxiao/p/4185837.html
Copyright © 2011-2022 走看看