原创 manymany-2440裸机篇之8 ADC模数转换

2009-7-20 09:39 4574 5 8 分类: MCU/ 嵌入式

//manymany-2440裸机篇之8 ADC模数转换
//***************************************************
//为了对温度,压力,流量,速度,位移等物理量进行测量和控制,都是通过各种
//传感器把上述物理量转换成模拟物理量的电信号,即模拟电信号,然后经过模数
//转化器转换成数字量,送进处理器处理
//目的:掌握ADC的使用
//***************************************************
//Designed by:
http://blog.ednchina.com/Manymany/
//2009-07-10
/****************************************************************

功能:
AD函数主要实现对模拟通道的转换,通过调节接在通道上的可调节电阻来
改变模拟量的输入,通过串口将回显的数据显示到终端。
*****************************************************************/

#include "2440addr.h"
#include "2440lib.h"


void Test_Adc(void);


void xmain(void)
{
 ChangeClockDivider(3,1);   //1:3:6
 ChangeMPllValue(127,2,1);   //405MHZ
 Port_Init();
 Isr_Init();
 Uart_Init(0, 115200);
 Uart_Select(0);
 Uart_Printf("the main is running\n");
 
 Test_Adc();   //AD测试函数
}


//==================================================================================  
int ReadAdc(int ch)   //读ADC函数,ch决定那个通道被选择,通道数(ch为0-7
{
    int i;
    static int prevCh="-1";


    //ADC设置使能端
    //设置数分频值为49
    //选择通道位,选中的通道上的电压被连接到AD
    rADCCON = (1<<14)|(49<<6)|(ch<<3); 


    if(prevCh!=ch)
    {
     for(i=0;i<1000;i++); //delay to set up the next channel
     prevCh="ch";
    }
    rADCCON|=0x1;   //使能ADC


    while(!(rADCCON & 0x8000)); //判断转换是否完成,如果完成跳到下一个语句,
                                //否则死循环,直到完成为止。
       //ADCCON[15]位:转换结果标志位,是只读位,如果值为0则表示在
       //模数转换过程中,如果为1则表示模数转换已完成。

    return ( (int)rADCDAT0 & 0x3ff );   //返回的数即为ADC转换的数字量。
}


//==================================================================================


void Test_Adc(void)
{
    int adcdata="0"; //定义一个变量,用来存放转换后的数字量
    Uart_Printf( "\nADC INPUT Test, press ESC key to exit !\n" ) ;
    while( Uart_GetKey() != ESC_KEY )
    {
        adcdata="ReadAdc"(ADC_CH);
     Uart_Printf( "AIN%d: %04d\n", ADC_CH,adcdata );   //终端的显示
  Delay( 2000 ) ;
    }
 }
/*在这里是在整个工程文件压缩包https://static.assets-stash.eet-china.com/album/old-resources/2009/7/19/c31aa9cb-cd18-4e2c-8848-12b7dbcfc2ba.rar" target=_blank>rariconicon鉴于AD在比较多的场合用到,manymany特另写一个纯AD子函数,方便今后调用。*/

PARTNER CONTENT

文章评论3条评论)

登录后参与讨论

用户228599 2009-9-21 22:29

博主:请教一下,为什么我把代码用DNW下载后终端显示Now, Downloading [ADDRESS:30000000h,TOTAL:19826] RECEIVED FILE SIZE: 19826 (19KB/S, 1S) Downloaded file at 0x30000000, size = 19816 bytes Failed initailizing heap region Sorry. We can not run vivi 不能在VIVI上运行?请博主指点。

用户188963 2009-7-21 21:18

像tengjingshu说的一样,2440lib.c官方写的延时函数里嵌入了看门狗的原理,manymany个人认为确实可以不用嵌入,用普通的延时函数完全能胜任。但是话说回来用基本长度的程序,实现的功能更好,性能更稳定,何乐不为。像在中断定时过程中,可以去实现其他动作一样,只要需要嵌套的动作在其时间中就可以了。在延时函数里运用看门狗,manymany认为这是官方的一大巧妙之处,也是我们平时该学习提高的地方。

tengjingshu_112148725 2009-7-20 14:25

哈哈,终于跟新了,我是三周前刚买的mini2440,现在赶上你的步伐了。一直看你的程序。 有一点不明,在串口程序中,发送前有个Delay,而且用到看门狗,不知道为什么这样。用普通的延时不知道行不行?我知道这是官方的程序。
相关推荐阅读
用户188963 2009-08-28 16:56
我来猜09年全国电赛小车的题目
我来猜09年全国电赛小车的题目 小车+无线收发模块+2米卷尺+光电传感器+继电器 1.无线模块用来设置小车的行驶轨迹,圆的,方的,任意轨迹的。2.2米卷尺和光电传感器:小车行驶速度,距离。3.壁障4....
用户188963 2009-06-08 00:36
manymany-2440裸机篇之开篇
                              manymany-2440裸机篇之开篇          manymany前段时间买了块广州友善之臂的mini2440开发板,现在想学习AR...
用户188963 2009-06-08 00:36
manymany-2440裸机篇之1 流水灯与蜂鸣器
//***************************************************//manymany-2440裸机篇之流水灯与蜂鸣器//*******************...
用户188963 2009-06-08 00:36
manymany-2440裸机篇之2 下载与调试
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />玩裸机的时候,肯定要用到下载与调试,...
用户188963 2009-06-08 00:36
manymany-2440裸机篇之3 按键点亮LED
//***************************************************//manymany-2440裸机篇之3 按键点亮LED//*****************...
EE直播间
更多
我要评论
3
5
关闭 站长推荐上一条 /3 下一条