[原创] 贴一个12F683AD采集的例程,双通道。

mon51   2014-2-7 11:34 楼主
//********************************
#include         "Use.h"
#include        "Ver.H"
#include

#define MAX_REF                (5000)                //5.00v
#define MAX_UK                (1)                        //变比系数10最大测量范围

#define U_CH                (0)                        //电压通道
#define I_CH                (1)                        //电流通道

#define ADC_MAX_CNT                4                //采集次数

/*-----------------------------------------------------------
//ADCON0 ADFM VCFG - - CHS1 CHS0 GO/DONE ADON 00-- 0000 58,83
ADFM: A/D 结果格式选择位
1 = 右对齐
0 = 左对齐
//ch=输入的ADC的通道 B0000_1111
--------------------------------------------------------------*/
void ADC_Init(unsigned char ch){
        ANSEL  =B0111_0000 | ch;                //使用内部特殊RC=500K
        CMCON0 =B0000_0111;                                //Cout在内部,V-=Cin-关闭比较器       
        TRISIO =B0000_1000 | ch;                //必须采用或处理
        if(ch & B0000_1000) TRISIO |=B0001_0000;        //CH4=ENABLED
}
//-----------------------------------------------------------
//ADC采集开始 channel=0~3
unsigned int  ADC(unsigned char channel){                //AD转换.
        const unsigned char ADCNok[]={
                B1000_0001,B1000_0101,B1000_1001,B1000_1101,
        };
        while(GODONE);                           //等待转换完成.查询方式.
        ADCON0=ADCNok[channel];
        GODONE=1;                                     //开启转换过程.
    while(GODONE);                           //等待转换完成.查询方式.
        return (ADRESH<<8 |ADRESL);
}
//*******************************************************
//电压检测 得到电压的豪伏值 CH=0-3
unsigned int Get_ADC_ONE_Channel(unsigned char ch){
        unsigned long u;       
        unsigned char i;
       
        u=0;
        for(i=0;i         //**********************************
        //均值滤波
        u /=ADC_MAX_CNT;
        u =u*MAX_REF/1024;       
//        u *=MAX_UK;//得到电压值
        return u;
}
//*************************************************
//启动ADC转换,得到3路ADC的电压值
void Get_ADC_Value(void){
        Current_U=Get_ADC_ONE_Channel(U_CH)*MAX_UK;                //得到电压值       
        Current_I=Get_ADC_ONE_Channel(I_CH);                        //电流系数1       
}

回复评论

暂无评论,赶紧抢沙发吧
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复