历史上的今天
今天是:2024年11月25日(星期一)
2019年11月25日 | TX2440裸机程序-AD
2019-11-25 来源:eefocus
一、基本概念
ADC:模/数转换器。
一种将模拟信号转换成数字信号的装置;
DAC:数/模转换器。
一种将数字信号转换成模拟信号的装置。
模拟信号转换为数值信号的步骤:
1.取值;
2.量化;
3.编码;
二、硬件电路
S3C2440ADC
S3C2440芯片内部共有8路A/D转换通道AIN0~AIN7,但是转换器只有一个。转换精度为10位,故转换后的值最小时会接近0,最大时会接近1024.

最大的转换率在2.5MHZ转换时钟下能达到500KSPS(每秒采样5000千次)
在常见的设计中,如TX2440开发板,一般AIN4、AIN5、AIN6、AIN7被用作了四线电阻触摸的YM、YP、XM、XP通道;剩余的AIN0~3被引出,其中AIN0、AIN1连接采样电路。

三、程序
ADC驱动流程
1.初始化 2.启动 3.转换结束 4.读取转换值;

寄存器说明


读取转换值:
源码
//======================================================================
//========================================================
// 函数名称: main
// 功能描述: 通过串口,显示AD值
// 维护记录: 2009-08-14 v1.0
//========================================================
#include "2440addr.h"
#include "2440lib.h"
#include "option.h"
#include "uart.h"
#include "ADC.h"
void Main()
{
SetSysFclk(FCLK_400M); //设置系统时钟 400M
ChangeClockDivider(2, 1); //设置分频 1:8:16
CalcBusClk(); //计算总线频
Uart_Select(0);
Uart_Init(0, 115200);
Uart_Printf("n ---ADC测试程序---n");
while(1)
{
Test_ADC();
}
}
//====================================================================
// 文件名 : ADC.c
// 功 能 : ADC测试程序
//====================================================================
#include "def.h"
#include "2440addr.h"
#include "2440lib.h"
#include "uart.h"
#include "ADC.h"
void Test_ADC(void)
{
U8 ch, mode;
Uart_Printf("Select ADC Chanel: 0 or 1");
ch=Uart_Getch();
Uart_Printf("n%cnn", ch);
if (ch!='0' && ch !='1')
{
Uart_Printf("you select wrong chanel!n");
return;
}
rADCDLY = 100; //ADC转换延时
// rADCTSC = 0; //设置ADC为普通模式
/* 进行ADC模块设置,其中x< (0 << 1) | // 读AD数据触发AD转换 未使用 (0 << 2) | // StandBy模式选择 为普通操作模式 (ch << 3) | // ADC通道选择 ch (49 << 6) | // CLKDIV = Fpclk /49+1/5 ,即转换时钟为1MHz Fpclk = 10M ADC转换频率400K (1 << 14) ; // 使能软件预设值 Uart_Printf("Select ADC Mode: 1.Enable 2.Read"); mode=Uart_Getch(); Uart_Printf("n%cnn", mode); if (mode!='1' && mode !='2') { Uart_Printf("you select wrong model!n"); return; } switch(mode) { case '1': Uart_Printf("ADC Enable-Convert Moden"); while(Uart_GetKey() != ESC_KEY) { AD_ENABLE(); } break; case '2': Uart_Printf("ADC Read-Convert Moden"); while(Uart_GetKey() != ESC_KEY) { AD_READ(); } break; // default: // break; } } //======================================================================= //名称:AD_ENABLE() //功能:采用置位使能方式启动AD转换 //参数: 无 //返回值: 无 //======================================================================= void AD_ENABLE (void) { int i,j; int val; val = 0; for(i=0;i<16;i++) { rADCCON |= 0x1; //使能ADC 转换 while(rADCCON&0x1); //判断是否使能ADC转换 while(!rADCCON&0x8000); //判断ADC转换是否结束 val += (rADCDAT0 &0x03ff); //取出ADC转换值 for(j=0;j<500;j++); } val = val/16; //计算ADC平均转换值 Delay(500); Uart_Printf("ADC val = %dn", val); //发送到串口显示 } //======================================================================= //名称:AD_READ() //功能:采用读控制器的方式启动AD转换 //参数: 无 //返回值: 无 //======================================================================= void AD_READ (void) { int i,j; int val,aa; val = 0; rADCCON |= 0x2; //ADC转换通过读操作来启动 aa = rADCDAT0 &0x03ff; //启动ADC转换 for(i=0;i<16;i++) { while(!rADCCON&0x8000); //判断ADC转换是否结束 val += (rADCDAT0 &0x03ff); //取出ADC转换值 for(j=0;j<500;j++); } val = val/16; //计算ADC平均转换值 Delay(500); Uart_Printf("ADC val = %dn", val); //发送到串口显示 }
上一篇:S3C2440时钟和电源管理
下一篇:TX2440裸机程序-uart
史海拾趣
|
哪位朋友有STC单片机的下载器资料。我想制作一个下载器啊。谢谢啦 急急。。。。。。。。有的话 希望大家传个电路图上来看看 [ 本帖最后由 08221034 于 2010-6-1 20:54 编辑 ]… 查看全部问答> |
|
我用DELPHI做了个监控程序,当监控程序给POS机发送数据时,POS机接收的数据都是正确的,但是我从POS机发送数据是,SERVER客户端接收的数据就是乱码了,POS机发送功能的代码如下 & ...… 查看全部问答> |
|
arm-elf-gcc在arm上的一个bug,如何绕开这个bug? 经过多次测试,发现arm-elf-gcc编译器在格式带有浮点参数的字符串的时候会导致CPU(无论是arm9还是arm7)跑飞,gcc版本号为arm-elf-gcc 4.1.1,编译的批处理文件内容如下: path=c:\\windows;c:\\windows\\system32;E:\\GNUARM\\bin arm-elf-as ...… 查看全部问答> |
|
在PC的linux下可以通过该cdma无线网卡上网,移植到开发板就不行了,已经移植了pppd和chat以及pppoe到了开发板,内核编译进了ppp,放在了bin目录下,编写了脚本文件放在了/etc/ppp目录下,开发板启动后输入pppd,有乱麻出现,但是如果运行 pppd cal ...… 查看全部问答> |
|
请仙人指路! LPC1114 与外部flash SST25配置的相关问题 我是这样配置SPI的: void SPIInit() { uint8 i; //LPC_SYSCON->PRESETCTRL &= (0x01… 查看全部问答> |
|
请问msp430F1232如何产生13.56Mhz的频率 各位大侠,如何通过430单片机的引脚输出13.56Mhz的频率 谢谢!主要作用是想实现MF1卡检测功能,在平常无卡时低功耗待机每秒检测2次,有卡来到时可以通过430检测到卡片到来, 然后启动射频芯片RC531或TRF7 ...… 查看全部问答> |
|
/*采用2*3键盘中的key0来实现键盘引起的中断程序,以此来验证中断*/#include<msp430x54x.h> void sys_init() //初始化{ P1DIR &=0XFE; //p1.0为输入 P1OUT |=BIT0; //p1.0输出高电平 ...… 查看全部问答> |




