当前位置: > 华清远见教育科技集团 > 嵌入式学习 > 讲师博文 > S5PC100AD示例
S5PC100AD示例
时间:2016-12-13作者:华清远见

一、 S5PC100 A/D转换器概述

1.简述

10位或12位CMOS再循环式模拟数字转换器,它具有10通道输入,并可将模拟量转换至10位或12位二进制数。5MHz A/D转换时钟时,大1Msps的转换速度。A/D转换具备片上采样保持功能,同时也支持待机工作模式。

2.特性
        ●  ADC接口包括如下特性。
        ●  10bit/12bit输出位可选。
        ●  微分误差±1.0LSB。
        ●  积分误差±2.0LSB。
        ●  大转换速率:1 Msps。
        ●  功耗少,电压输入3.3v。
        ●  模拟量输入范围:0~3.3v。
        ●  支持片上样本保持功能。
        ●  通用转换模式。

3.模块图

S5PC100 A/D转换器的控制器接口框图如图1所示。


图1 S5PC100 ADC控制器接口框图

二、 S5PC100 A/D控制器寄存器

1.寄存器组

S5PC100中的A/D控制器集成了电阻触摸屏控制功能。此处为了简化学习,只考虑的A/D转换使用到的两个寄存器,即A/D控制寄存器(ADCCON)、A/D转换数据寄存器(ADCDAT)。

A/D控制寄存器ADCCON(address = 0xF3000000)如表1所示。

表2 ADCCON描述

ADCCON 描 述 初 始 值
RES [16] 0=10bit 输出 1=12bit输出 0
ECFLG [15] A/D转换结束标志
    0:A/D转换正在进行
    1:A/D转换结束
0
PRSCEN [14] A/D转换预分频允许
    0:不允许预分频
    1:允许预分频
0
PRSCVL [13:6] 预分频值PRSCVL 0xFF
Reserved [5:3] 保留 0
STDBM [2] 待机模式选择位
    0:正常模式
    1:待机模式
1
READ_START [1] A/D转换读-启动选择位
    0:禁止Start-by-read
    1:允许Start-by-read
0
ENABLE_START [0] A/D转换器启动
    0:A/D转换器不工作
    1:A/D转换器开始工作
0

A/D转换数据寄存器ADCDAT0(地址:0xF300000C)如表3所示。

表3 ADCDAT0描述

ADCDAT0 Bit 描 述 初 始 值
UPDOWN [15] 等待中断模式,Stylus电平选择
    0:低电平
    1:高电平
AUTO_PST [14] 自动按照先后顺序转换X,Y坐标
    0:正常A/D转换顺序
    1:按照先后顺序转换
XY_PST [13:12] 自定义X,Y位置
    00:无操作模式
    01:测量X位置
    10:测量Y位置
    11:等待中断模式
XPDATA [11:0] X坐标转换数据值(包括正常的ADC转换数值)

2.A/D转换的转换时间计算

例如,PCLK为66M Hz,PRESCALER = 65;所有10位转换时间为:
        66 MHz / (65 + 1) = 1MHz
        转换时间为1/(1M/5 cycles) = 5μs。
        完成一次A/D转换需要5个时钟周期。A/D转换器的大工作时钟为5MHz,所以大的采样率可以达到1Mbit/s。

三、A/D转换器示例

1) 电路连接

电路连接如图2所示,利用一个电位计输出电压到S5PC100 的AIN0管脚。输入的电压范围是0~3.3V。


图2 分压电路

2) 程序的编写

编写软件程序,实现电压值的获取、显示。 程序主要是对S5PC100中的A/D模块进行操作,所以软件程序也主要是对A/D模块中的寄存器进行操作,其中包括对ADC控制寄存器(ADCCON)、ADC数据寄存器(ADCDAT)的读/写操作。同时为了观察转换结果,可以通过串口调试助手里面观察ADC采集的电压值。

1.相关寄存器定义

#define rADCCON (*(volatile unsigned *)0x58000000) //ADC 控制寄存器
        ypedef struct {
                                unsigned int ADCCON;
                                unsigned int ADCTSC;
                                unsigned int ADCDLY;
                                unsigned int ADCDAT0;
                                unsigned int ADCDAT1;
                                unsigned int ADCUPDN;
                                unsigned int ADCCLRINT;
                                unsigned int ADCMUX;
                                unsigned int ADCPNDCLR;
        }adc;
        #define ADC (* (volatile adc * )0xF3000000 )

2.A/D测试程序

#include "s5pc100.h"
        #include "uart.h"
        unsigned char table[10]={'0','1','2','3','4','5','6','7','8','9'};
        int main()
        {
            unsigned int temp = 0;
            unsigned int a;
            unsigned char bit4,bit3,bit2,bit1;
            unsigned int count;
            uart0_init();
            ADC.ADCMUX = 0;
            ADC.ADCCON = ( 1<<16 | 1<<14 | 0xff<<6 | 0<<2 | 1<<1 ) ;
            temp = ADC.ADCDAT0 & 0XFFF; //使用读启动的方式启动ADC
            while(1)
            {
       nbsp;             while(!(ADC.ADCCON & 0X8000));
                    temp = ADC.ADCDAT0 & 0XFFF;
                    temp = 3.3 * 1000 * temp/ 0xfff;
                    bit4 = temp/1000;
                    putc(table[bit4]);
                    bit3 = (temp%1000)/100;
                    putc(table[bit3]);
                    bit2 = ((temp%1000)%100)/10;
                    putc(table[bit2]);
                    bit1 = ((temp%1000)%100)%10;
                    putc(table[bit1]);
                    puts("mV");
                    putc('\n');
                    for(count = 1000000; count != 0; count--);
            }
            return 0;
        }

3) 调试与运行结果

1.串口接收设置

在PC上运行串口调试助手通信程序(波特率为115200、8、1位停止位、无校验位、无硬件流控制);或者使用其他串口通信程序。

2.测试程序

(1)编译程序后可得到ELF文件,通过仿真器下载代码到开发板。

3.观察实验结果

uart0 device ok
        1770mv
        1765mv
        1771mv
        1772mv

转动开发板上的电位器,ADC采集的电压值为在0V到3300mv之间变化。

发表评论
评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)