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

 *第42468篇: ARM9工控主板内嵌AD的应用--成都英创[嵌入式主板,工控主板,核心板,开发板]

  
楼 主:emtronix 2009年5月7日11:05
 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);


[]


>>>>>>对该主题发表你的看法

本主题贴数1,分页: [第1页]


[上一篇主题]:中嵌学院隆重推出“先就业,后付款”

[下一篇主题]:1394信号超长距离传输产品==1394光纤延长器