打印

N76E003电压检测比较功耗太大,谁帮我优化下,有偿

[复制链接]
938|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
盾视工作室|  楼主 | 2020-7-3 19:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
N76E003电压检测比较      功耗太大,现在功耗20MA多谁帮我优化下,有偿优化!
unsigned  char xdata ADCdataH[10], ADCdataL[10];
unsigned int ADP03,ADP04,ADP07,ADP17;
unsigned int tempH,tempL,tempHLD,tempHLI;

/******************************************************************************


DS功能:


P17=2.5V电压
开机检测一次P07电压,不循环。当P07<P17时,P13为高电平,当P07>P17时,P13为低电平。

检测P03电压,并保存不变的固定电压值假设为a。

下面为循环到关机为止。
检测P04电压,
当P04>P03时,P06和P13输出高电平。
当P04<P03时,(P06和P13输出低电平,也可以不管,因为上面默认=0)

P0.6/P1.3/P0.0/P1.6输出高电平
P0.3/P0.4/P0.7/P17  ADC检测功能
******************************************************************************/
void main (void)
{
        unsigned char i;

        P06_Quasi_Mode;
        P13_Quasi_Mode;
        P14_Quasi_Mode;
        P06=1;
        P14=0;
        P13=0;

        //Timer1_Delay10ms(100);
        Timer1_Delay10ms(100);//延时2s
        /*----电源欠压采样----P07------*/
  P06=0;
         
        ADP17 =0x07FF;
                for(i=0;i<10;i++)
                {
                        Enable_ADC_AIN2;                                                                                                                        // P07
                        set_ADCS;                                                                                                                                                        
                        while(ADCF == 0);//等待采样完毕
                        ADCdataH[i] = ADCRH;
                        ADCdataL[i] = ADCRL;
                }
                tempH =(ADCdataH[6]+ADCdataH[7]+ADCdataH[8]+ADCdataH[9]+ADCdataH[5])/5;
                tempL =(ADCdataL[5]+ADCdataL[6]+ADCdataL[7]+ADCdataL[8]+ADCdataL[9])/5;
                ADP07 =((unsigned int)tempH<<4) + tempL;
                if(ADP07<=(ADP17+5))
                {
                        P13=1;
                }
                else if(ADP07>ADP17)
                {
                        P13=0;
                }
                Timer1_Delay10ms(10);
                clr_ADCF;     //这里关闭ADC达到省电        

        /*----电压采样----P03------*/
        for(i=0;i<10;i++)
        {
                Enable_ADC_AIN6;                                                                                                                        // P03
                set_ADCS;                                                                                                                                                        
                while(ADCF == 0);//等待采样完毕
                ADCdataH[i] = ADCRH;
          ADCdataL[i] = ADCRL;
        }
        tempH =(ADCdataH[6]+ADCdataH[7]+ADCdataH[8]+ADCdataH[9]+ADCdataH[5])/5;
        tempL =(ADCdataL[5]+ADCdataL[6]+ADCdataL[7]+ADCdataL[8]+ADCdataL[9])/5;
        ADP03 =((unsigned int)tempH<<4) + tempL;
        clr_ADCF;     //这里关闭ADC达到省电看下入这位置对吗
        while(1)
        {
                /*----电压采样----P04------*/
                for(i=0;i<10;i++)
                {
                        Enable_ADC_AIN5;                                                                                                                        // P04
                        set_ADCS;                                                                                                                                                        
                        while(ADCF == 0);//等待采样完毕
                        ADCdataH[i] = ADCRH;
                        ADCdataL[i] = ADCRL;
                }
                tempH =(ADCdataH[6]+ADCdataH[7]+ADCdataH[8]+ADCdataH[9]+ADCdataH[5])/5;
                tempL =(ADCdataL[5]+ADCdataL[6]+ADCdataL[7]+ADCdataL[8]+ADCdataL[9])/5;
                ADP04 =((unsigned int)tempH<<4) + tempL;
//                ADP03=256;
//                ADP04=265;
                if(ADP04>(ADP03+20))   //100=0.1V
                {
                        P06=1;
                        P14=1;
                       Timer1_Delay10ms(10);
                       P14=0;
                       P06=0;
                }
                else if(ADP04<=ADP03)
                {
                        P14=0;
                        P06=0;
//想在这位置加个如果在这行代码运行有1分钟,说明设备没有工作,进入掉电省电模式
                }
               
                Timer1_Delay10ms(100);

                nop;
               
                //当(ADP04>ADP03)电压唤醒休眠接着向下运行代码
               
               
        }                        
}

使用特权

评论回复

相关帖子

沙发
tyw| | 2020-7-3 21:26 | 只看该作者
N76E003相关资料 65M.rar (44.58 MB)

使用特权

评论回复
板凳
20多mA,你还是看看你的硬件问题较好

使用特权

评论回复
地板
jimsboy| | 2020-7-4 09:15 | 只看该作者
软件也就是2个mA的事.你这个应该哪里设计上引入额外耗电了

使用特权

评论回复
5
15625004279| | 2020-7-4 10:55 | 只看该作者
功耗大多是器件参数引起的

使用特权

评论回复
6
290399937| | 2020-7-4 19:22 | 只看该作者
原理图?

使用特权

评论回复
7
盾视工作室|  楼主 | 2020-7-5 16:41 | 只看该作者
jimsboy 发表于 2020-7-4 09:15
软件也就是2个mA的事.你这个应该哪里设计上引入额外耗电了

那就是说这个软件上最多就是2MA吗?AD一直在运行是不是耗电不只2MA?

使用特权

评论回复
8
盾视工作室|  楼主 | 2020-7-5 16:43 | 只看该作者

使用特权

评论回复
9
jimsboy| | 2020-7-10 11:42 | 只看该作者
盾视工作室 发表于 2020-7-5 16:41
那就是说这个软件上最多就是2MA吗?AD一直在运行是不是耗电不只2MA?

一般的软件运行也就是2mA左右.AD打开一般额外消耗不到1mA

使用特权

评论回复
10
盾视工作室|  楼主 | 2020-7-11 20:05 | 只看该作者
jimsboy 发表于 2020-7-10 11:42
一般的软件运行也就是2mA左右.AD打开一般额外消耗不到1mA

测了光运行这芯片不带负载是8mA

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

50

帖子

0

粉丝