立即注册 登录
返回首页

uid:161409的个人空间

日志

stc12c5a60s2 + GP2Y1010AU 尝试

已有 817 次阅读2017-1-12 10:58 | 传感器

stc12c5a60s2 + GP2Y1010AU 尝试
从传感器一直读不出正确的数值,总是拿到3.7-3.8v的电压。。。向传感器吹烟测试也不管用。。。折腾一天了。。。

/*----------------------------
初始化ADC
----------------------------*/
void InitADC()
{
//POWER SPEED1 SPEED0 ADC_FLAG   ADC_START CHS2 CHS1 CHS0
P1M1=0x20; //P1^5仅高阻输入//100000//AD口
P1M0=0x10; //P1^4推挽输出(强上拉输出,可达20mA,要加限流电阻)//10000//LED控制IO
P1ASF=0x20;// P1^5作为模拟功能AD使用//P1^2,P1^3预留给串口2//10000
ADC_RES=0;   //清零转换结果寄存器高8位
ADC_RESL=0; //清零转换结果寄存器低2位                 //清除结果寄存器
ADC_CONTR = ADC_POWER;
AD_delay(2);   //等待1ms,让AD电源稳定
}

/*** 尝试中断方式,未果 ***
PM_LED=0;//传感器的输入信号     
TMOD=0x11;//设置定时器0为工作方式1    
TH0=(65536-40)/256;    
TL0=(65536-40)%256;    
ET0=1;//开定时器0中断    
TR0=1;//启动定时器0     
EA=0; //开总中断   

void timer0() interrupt 1 {
//TH0=(65536-37)/256;
//TL0=(65536-37)%256;
AUXR &= 0x7F; //定时器时钟12T模式
TL0 = 0xDB; //设置定时初值
TH0 = 0xDB; //设置定时重载值

N++;
if(N==7)
dustResult[i] = GetADCResult(ADC_CH_5);
if(N==8)
PM_LED=1;
if(N==250)
{
PM_LED=0;
N=0;
}
}
*** 中断方式 尝试 End *****/

/****************
 *Get ADC result
*****************/
U8 GetADCResult(U8 ch)
{
        ADC_CONTR=ADC_POWER|ADC_SPEEDHH|ch|ADC_START;
        _nop_();//Must wait before inqurity
        _nop_();
        _nop_();
        _nop_();
        while(!(ADC_CONTR&ADC_FLAG));//Wait complete flag
        ADC_CONTR&=~ADC_FLAG;//Close ADC
        return ADC_RES;
}

/* **** Read PM2.5 value *****/
void Get_PM25()
{
U8 i;
for(i=0;i<10;i++)
{
//POWER SPEED1 SPEED0 ADC_FLAG   ADC_START CHS2 CHS1 CHS0
/* 延时方式 尝试 start */
PM_LED = 1; //打开PM传感器LED
Delay280us();//0.28ms
dustResult[i] = GetADCResult(ADC_CH_5);
Delay40us();
PM_LED = 0;//关闭PM传感器LED
Delay9680us();
/* 延时方式 尝试 end */


/* 01/12/2017 - 尝试用中断方式,未果// 
PM_LED = 0; //打开PM传感器LED

//TMOD=0x11;//设置定时器0为工作方式1    
//TH0=(65536-37)/256;    
//TL0=(65536-37)%256;    
//ET0=1;//开定时器0中断    
//TR0=1;//启动定时器0     
//EA=0; //开总中断  

AUXR &= 0x7F; //定时器时钟12T模式
TMOD &= 0xF0; //设置定时器模式
TMOD |= 0x02; //设置定时器模式
TL0 = 0xDB; //设置定时初值
TH0 = 0xDB; //设置定时重载值
TF0 = 0; //清除TF0标志
//ET0=1;//开定时器0中断  
TR0 = 1; //定时器0开始计时      
//EA=0; //开总中断 
/中断方式 尝试 end */
}

result = Get_Average();

VAL = result * 5000 / 256;// 将上面的数字量转换成电压值-mV
dust_density = (int)(VAL * 0.17 - 100);//固体悬浮颗粒浓度计算 Y=0.17*X-0.1 // X 采样电压
}

路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

返回顶部