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

[复制链接]
 楼主| 盾视工作室 发表于 2020-7-3 19:59 | 显示全部楼层 |阅读模式
N76E003电压检测比较      功耗太大,现在功耗20MA多谁帮我优化下,有偿优化!
  1. unsigned  char xdata ADCdataH[10], ADCdataL[10];
  2. unsigned int ADP03,ADP04,ADP07,ADP17;
  3. unsigned int tempH,tempL,tempHLD,tempHLI;

  4. /******************************************************************************


  5. DS功能:


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

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

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

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

  19.         P06_Quasi_Mode;
  20.         P13_Quasi_Mode;
  21.         P14_Quasi_Mode;
  22.         P06=1;
  23.         P14=0;
  24.         P13=0;

  25.         //Timer1_Delay10ms(100);
  26.         Timer1_Delay10ms(100);//延时2s
  27.         /*----电源欠压采样----P07------*/
  28.   P06=0;
  29.          
  30.         ADP17 =0x07FF;
  31.                 for(i=0;i<10;i++)
  32.                 {
  33.                         Enable_ADC_AIN2;                                                                                                                        // P07
  34.                         set_ADCS;                                                                                                                                                        
  35.                         while(ADCF == 0);//等待采样完毕
  36.                         ADCdataH[i] = ADCRH;
  37.                         ADCdataL[i] = ADCRL;
  38.                 }
  39.                 tempH =(ADCdataH[6]+ADCdataH[7]+ADCdataH[8]+ADCdataH[9]+ADCdataH[5])/5;
  40.                 tempL =(ADCdataL[5]+ADCdataL[6]+ADCdataL[7]+ADCdataL[8]+ADCdataL[9])/5;
  41.                 ADP07 =((unsigned int)tempH<<4) + tempL;
  42.                 if(ADP07<=(ADP17+5))
  43.                 {
  44.                         P13=1;
  45.                 }
  46.                 else if(ADP07>ADP17)
  47.                 {
  48.                         P13=0;
  49.                 }
  50.                 Timer1_Delay10ms(10);
  51.                 clr_ADCF;     //这里关闭ADC达到省电        

  52.         /*----电压采样----P03------*/
  53.         for(i=0;i<10;i++)
  54.         {
  55.                 Enable_ADC_AIN6;                                                                                                                        // P03
  56.                 set_ADCS;                                                                                                                                                        
  57.                 while(ADCF == 0);//等待采样完毕
  58.                 ADCdataH[i] = ADCRH;
  59.           ADCdataL[i] = ADCRL;
  60.         }
  61.         tempH =(ADCdataH[6]+ADCdataH[7]+ADCdataH[8]+ADCdataH[9]+ADCdataH[5])/5;
  62.         tempL =(ADCdataL[5]+ADCdataL[6]+ADCdataL[7]+ADCdataL[8]+ADCdataL[9])/5;
  63.         ADP03 =((unsigned int)tempH<<4) + tempL;
  64.         clr_ADCF;     //这里关闭ADC达到省电看下入这位置对吗
  65.         while(1)
  66.         {
  67.                 /*----电压采样----P04------*/
  68.                 for(i=0;i<10;i++)
  69.                 {
  70.                         Enable_ADC_AIN5;                                                                                                                        // P04
  71.                         set_ADCS;                                                                                                                                                        
  72.                         while(ADCF == 0);//等待采样完毕
  73.                         ADCdataH[i] = ADCRH;
  74.                         ADCdataL[i] = ADCRL;
  75.                 }
  76.                 tempH =(ADCdataH[6]+ADCdataH[7]+ADCdataH[8]+ADCdataH[9]+ADCdataH[5])/5;
  77.                 tempL =(ADCdataL[5]+ADCdataL[6]+ADCdataL[7]+ADCdataL[8]+ADCdataL[9])/5;
  78.                 ADP04 =((unsigned int)tempH<<4) + tempL;
  79. //                ADP03=256;
  80. //                ADP04=265;
  81.                 if(ADP04>(ADP03+20))   //100=0.1V
  82.                 {
  83.                         P06=1;
  84.                         P14=1;
  85.                        Timer1_Delay10ms(10);
  86.                        P14=0;
  87.                        P06=0;
  88.                 }
  89.                 else if(ADP04<=ADP03)
  90.                 {
  91.                         P14=0;
  92.                         P06=0;
  93. //想在这位置加个如果在这行代码运行有1分钟,说明设备没有工作,进入掉电省电模式
  94.                 }
  95.                
  96.                 Timer1_Delay10ms(100);

  97.                 nop;
  98.                
  99.                 //当(ADP04>ADP03)电压唤醒休眠接着向下运行代码
  100.                
  101.                
  102.         }                        
  103. }
tyw 发表于 2020-7-3 21:26 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
一事无成就是我 发表于 2020-7-3 23:30 | 显示全部楼层
20多mA,你还是看看你的硬件问题较好
jimsboy 发表于 2020-7-4 09:15 | 显示全部楼层
软件也就是2个mA的事.你这个应该哪里设计上引入额外耗电了
15625004279 发表于 2020-7-4 10:55 | 显示全部楼层
功耗大多是器件参数引起的
290399937 发表于 2020-7-4 19:22 来自手机 | 显示全部楼层
原理图?
 楼主| 盾视工作室 发表于 2020-7-5 16:41 | 显示全部楼层
jimsboy 发表于 2020-7-4 09:15
软件也就是2个mA的事.你这个应该哪里设计上引入额外耗电了

那就是说这个软件上最多就是2MA吗?AD一直在运行是不是耗电不只2MA?
 楼主| 盾视工作室 发表于 2020-7-5 16:43 | 显示全部楼层
jimsboy 发表于 2020-7-10 11:42 | 显示全部楼层
盾视工作室 发表于 2020-7-5 16:41
那就是说这个软件上最多就是2MA吗?AD一直在运行是不是耗电不只2MA?

一般的软件运行也就是2mA左右.AD打开一般额外消耗不到1mA
 楼主| 盾视工作室 发表于 2020-7-11 20:05 | 显示全部楼层
jimsboy 发表于 2020-7-10 11:42
一般的软件运行也就是2mA左右.AD打开一般额外消耗不到1mA

测了光运行这芯片不带负载是8mA
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

50

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部