导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→ARM9工控主板内嵌AD的应用[原创]

* 71588: ARM9工控主板内嵌AD的应用[原创]

   emtronix 
emtronix发表的帖子 

 ARM9工控主板内嵌AD的应用[原创]
文章来源:

      英创公司推出的ARM9 嵌入式工控主板产品系列,均预装了正版WinCE5.0 操作系统。支持微软公司的eVC 进行应用程序的开发。eVC 是微软针对嵌入式系统提供的一套功能完善且可免费获取的开发工具,与PC 平台通用的VC 保持了高度的一致性,同时考虑C/C++的执行效率,因此eVC 被作为英创ARM9 工控主板上应用程序开发的首选工具。在利用英创ARM9 工控主板进行产品开发时,可能会出现简单的模拟信号的采集。因此,英创公司的EM9260和EM9160就考虑到了这些应用,引出了系统自带的ADC(Analog-to-digital Converter)接口,并提供相应的程序库,方便客户的使用。

      EM9260有2路ADC,EM9160有2路ADC,均是与GPIO复用:

            采样速度:300kSPS
            数据宽度:10位
            基准信号:3.3V
            量程范围:0 – 3.3V
            信号输入:

  ADC0  ADC1  
 EM9260  GPIO4 GPIO5  
 EM9160  GPIO4 GPIO5 


      在使用ADC的时候,将“EM9X60_ADC_API.lib”和 “EM9X60_ADC_API.h”两个文件放在工程目录下,并在应用程序中加入 “EM9X60_ADC_API.h”文件,如下图所示:

在工程中加入EM9X60_ADC_API.h文件

在应用程序中添加EM9X60_ADC_API.h头文件

      然后对工程进行设置,主要是使工程链接EM9X60_ADC_API.lib库文件。

      从“Project”菜单下,打开工程的 “settings”项(或是快捷键“ALT+F7”),在“LINK”选项中的“Object/library modules:”栏,加入“EM9X60_ADC_API.lib”,如下图所示:


 
      设置好后,点击“OK”确认。应当注意的是,在工程中的“Debug”和“Release”两个状态下都要进行分别设置。

      由于是和GPIO复用,所以使用ADC后,GPIO功能将不能使用。具体操作函数如下:

      启动ADC:

      BOOL  StartADC( int ChIndex );

      输入参数:
            ChIndex  要启动的ADC的通道号,仅0和1有效
      返回值:
            启动成功,返回TRUE
            启动失败,返回FALSE

      读取ADC数据:

      DWORD GetADC(int ChIndex);

      输入参数:
            ChIndex  要读取数据的ADC的通道号,仅0和1有效
      返回值:
            0xffffffff:数据没有转换好
      其它:
            可用的ADC输出的数据

      基本应用框图:

      应用示例:

      bStart_AD=StartADC(nChr);  //启动ADC,其中,nChr为要启动的ADC通道号
      if ( bStart_AD != TRUE )     //判断ADC是否启动成功
      {
            printf('ADC%d Initialize Fail!!\n',nChr);
            return -1;
      }

      printf('ADC%d Initialize OK!!\n',nChr);
      for (ni=0 ; ni  <20 ; ni++ )
      {
            Do  
            {
                  dwtmp = GetADC(nChr); //数据读取
            }
            while( dwtmp == Invalid );    //判断数据是否为有效数据
            dwCLDATA[ni] = dwtmp;     //ADC数据缓存
      } 
      dwAverage=0;             //ADC数据处理,在这里,是进行了20次的平均
      for (ni=0 ; ni  <20 ; ni++ )     //  然后再算出相应的输入信号的电压值并打印出来
      dwAverage+=dwCLDATA[ni];
      dwAverage/=20; 
      // ref 3.3V  10位  (1023)
      //电压分辨率Div约为3.2mV
      fVot=(float) (dwAverage*Div)/1000;  
      printf('ADC%d Vot %1.2f V\r',nChr,fVot);
      Sleep(500);



发表时间:2009年6月25日9:06:55

  
回复该帖

本主题共有 1 帖,分页:>>>>>该主题的所有内容[1]条

 *树形目录 只列出部分跟帖的标题以及简单的摘要信息 该主题的部分跟帖如下:

[上一篇帖子]:英创EM9X60系列嵌入式主板与122x32点阵液晶的硬件连接方法[原创]文章来源:http://w
[下一篇帖子]:FM收音机IC,收音电路GS1288深圳广视美电子有限公司推出内置MCU用户无需写程序立体声收音IC