S5PV210-ADC

1、输入电压的范围0~3.3V
2、转换后数字量可选:10位/12位
3、片上保持功能,数据转换之后存放在寄存器中直到有新的数据转换出来在这之前一直存储在寄存器中
4、有10个通道,但是只有一个转换器,同一时间只能转换一个通道里面的数据,采用分时复用

关于数字量和模拟量之间的转换:
模拟量输入2.0V,ADC工作在12bits模式,得到数字量应该是多少???
2/3*4096=2730.667
输入电压/最高可测电压*最大数字量分数=输入电压数字量

ADC控制寄存器:
TSADCCON0
第0位:ENABLE_START ADC开始转换使能位,置1开始转换,当转换完成之后此位由硬件自动清零,那么我们要在读取转换完之后的数据之后手动置1
第6~13位:PRSCVL 设定分频值时钟源位PCLK 66MHZ,ADC有自己的频率要求不能高于5MHZ,分频系数的范围为5~255
第14位:PRSCEN 设置是否打开ADC预分频器,1打开0不打开,这不是废话么当然要打开
第15位:ECFLG 转换完成标志位,1表示转换完成,通过这个标志位我们判断有没有完成可不可以读取
第16位:RES 选取10位转换还是12位转换

存放转换之后的数字量寄存器:
TSDATX0
第0~11位:XPDAT 读取里面的值即可

转换通道:
ADCMUX
第0~3位:SEL_MUX 做实验选取AIN0 000 0通道

#include "int.h"
//要用到的定时器的地址
#define TSADCCON0 (*(volatile unsigned int *)0xE1700000)
#define TSDATX0   (*(volatile unsigned int *)0xE170000C)
#define ADCMUX    (*(volatile unsigned int *)0xE170001C)

int main(void)
{
    GPJ2CON &=~(0xffff);
    GPJ2CON |= (0x1111);
    GPJ2DAT |= (0xf<<0);
    //正常模式
    TSADCCON0 &= ~(1<<2);  
    //分频系数为19,66/19=3.47MHZ
    TSADCCON0 |=  (19<<6);  
    //打开预分频器
    TSADCCON0 |=  (1<<14);
    //选择12位转换数字两
    TSADCCON0 |=  (1<<16);
    //选择0通道
    ADCMUX  = 0x0;
    //开始转换
    TSADCCON0 |=  (1<<0);
    while(1)
    {   //是否转换完成
        if(((TSADCCON0>>15)&0x1)==1)
        {   //读取数据并判断(0~11位数据)
            if((TSDATX0 & 0xfff)<1000)
            {
                GPJ2DAT &=~(1<<0);
            }
            else    if(((TSDATX0 & 0xfff)>1000)&&((TSDATX0 & 0xfff)<2000))
            {
                GPJ2DAT &=~(1<<1);
                TSADCCON0 |=  (1<<0);
            }
            else    if(((TSDATX0 & 0xfff)>2000)&&((TSDATX0 & 0xfff)<3000))
            {
                GPJ2DAT &=~(1<<2);
                TSADCCON0 |=  (1<<0);
            }
            else    if(((TSDATX0 & 0xfff)>3000)&&((TSDATX0 & 0xfff)<4000))
            {
                GPJ2DAT &=~(1<<3);
                TSADCCON0 |=  (1<<0);
            }               
            else    if((TSDATX0 & 0xfff)>4000)
            {
                GPJ2DAT =0xA;
                TSADCCON0 |=  (1<<0);
            }
        }
    }
}

以上是通过判断ADC采集到的模拟信号的数字量控制LED闪灭

猜你喜欢

转载自blog.csdn.net/mce_19/article/details/53398002