历史上的今天
返回首页

历史上的今天

今天是: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<    rADCCON = (0 << 0)     | // ADC转换设置 未设置

              (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);  //发送到串口显示

 

 }


推荐阅读

史海拾趣

Beckhoff Automation GmbH公司的发展小趣事

随着电子行业的全球化趋势日益明显,BCD Semi公司积极拓展国内外市场,与众多知名企业建立了紧密的合作关系。公司通过与合作伙伴共同研发、生产和销售半导体产品,实现了资源共享和优势互补,进一步提升了市场竞争力。同时,BCD Semi还积极参加国际电子展会和交流活动,展示公司的最新技术和产品,为公司的品牌建设和市场拓展奠定了坚实的基础。

Endicott Research Group Inc (ERG)公司的发展小趣事

面对日益激烈的市场竞争,ERG始终坚持技术研发和创新。他们与多所知名大学和科研机构建立合作关系,共同研发新型电源技术和照明解决方案。这些合作不仅为ERG带来了先进的技术和研发资源,还使其在行业中保持了技术领先地位。通过与科研机构的紧密合作,ERG不断推出更具创新性和竞争力的产品。

锋鸣电子(Fengming)公司的发展小趣事

福斯特集团在半导体封测领域也展现了强大的实力。集团旗下拥有安徽龙芯微科技有限公司和泸州龙芯微科技有限公司等多家子公司,这些公司均配备有全球领先的集成电路封装测试线。通过不断的技术创新和设备升级,福斯特集团能够满足客户全方位的器件封测要求,为客户提供高质量、高效率的封测服务。此外,公司还积极投入研发,推出多项新技术和新产品,进一步巩固其在半导体封测领域的领先地位。

G24 Innovations公司的发展小趣事

随着产品质量的不断提升,远阳开始将目光投向更广阔的市场。公司制定了详细的市场拓展计划,并加大了品牌营销力度。2010年前后,远阳成功进军国际市场,与多家国际知名企业建立了长期合作关系。同时,公司也注重在国内市场的布局,通过参加各类行业展会、举办技术研讨会等方式,不断提升品牌知名度和影响力。这一时期,远阳的产品线不断丰富,涵盖了HDMI、光纤线、DP线等多个系列,成为了数据工程电缆领域的佼佼者。

Hittite Microwave(ADI)公司的发展小趣事

为了进一步拓展国际市场,远阳公司开始实施国际化布局战略。公司通过设立海外研发中心、生产基地等方式,加强与全球市场的联系和互动。同时,远阳还积极寻求并购整合机会,通过收购同行业优质企业,实现优势互补和资源共享。这些举措不仅增强了远阳的国际竞争力,也为企业的可持续发展注入了新的动力。

磁联达(CND-tek)公司的发展小趣事

为了提高产品质量和客户满意度,磁联达(CND-tek)公司引入了一套严格的质量管理体系。公司从原材料采购、生产过程到成品检验等各个环节都进行了严格把关,确保每一件产品都符合高标准的质量要求。此外,公司还建立了完善的售后服务体系,为客户提供及时、专业的技术支持和解决方案。这些举措使得磁联达(CND-tek)的产品质量得到了客户的高度认可。

问答坊 | AI 解惑

求助。。。STC下载器的制作资料

哪位朋友有STC单片机的下载器资料。我想制作一个下载器啊。谢谢啦 急急。。。。。。。。有的话 希望大家传个电路图上来看看 [ 本帖最后由 08221034 于 2010-6-1 20:54 编辑 ]…

查看全部问答>

AT+CIPSEND乱码问题

我用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  ...…

查看全部问答>

CDMA模块在arm开发板上拨号上网难题

在PC的linux下可以通过该cdma无线网卡上网,移植到开发板就不行了,已经移植了pppd和chat以及pppoe到了开发板,内核编译进了ppp,放在了bin目录下,编写了脚本文件放在了/etc/ppp目录下,开发板启动后输入pppd,有乱麻出现,但是如果运行 pppd cal ...…

查看全部问答>

请大侠们帮忙推荐推荐2410,2440板子的供应商,谢谢

请大侠们帮忙推荐推荐2410,2440板子的供应商,谢谢…

查看全部问答>

请仙人指路! LPC1114 与外部flash SST25配置的相关问题

我是这样配置SPI的: void SPIInit() {   uint8 i;   //LPC_SYSCON->PRESETCTRL &= (0x01…

查看全部问答>

请问msp430F1232如何产生13.56Mhz的频率

请问msp430F1232如何产生13.56Mhz的频率 各位大侠,如何通过430单片机的引脚输出13.56Mhz的频率 谢谢!主要作用是想实现MF1卡检测功能,在平常无卡时低功耗待机每秒检测2次,有卡来到时可以通过430检测到卡片到来, 然后启动射频芯片RC531或TRF7 ...…

查看全部问答>

求大神看看这个msp430的终端程序

/*采用2*3键盘中的key0来实现键盘引起的中断程序,以此来验证中断*/#include<msp430x54x.h> void sys_init()    //初始化{  P1DIR &=0XFE;   //p1.0为输入  P1OUT |=BIT0;   //p1.0输出高电平 ...…

查看全部问答>

SDI方案评估

使用SDI信号源,比如来源于别的开发板产生的彩条,输入到C5开发板,利用DVI HSMC子卡接显示器观看。再进行SDI LOOP测试,利用内部逻辑产生彩条,LOOP,并监看。…

查看全部问答>