2834|11

4

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

小弟跪求大神帮助 [复制链接]


由于本人在单片机数菜鸟级别,下面这程序已经调试半个来月,搞得寝食难安,现已经筋疲力尽,在这发出求助 还请大神们伸出援助之手 帮帮小弟,小弟将万分感激。本程序为电池保护程序 ,过放切断负载 过充切断 充电太阳能板

//     PIC16F616头文件

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

#include

#include

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

//     PIC16F616配置

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

__CONFIG(0x3F04);

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

//    宏定义

#define uint  unsigned int

#define uchar unsigned char   

#define Solar_SW   RA2

#define Load_SW    RA4   

#define led        RA5

#define LOW_V         224   //2.8V

#define LOW_renew     253   //3.1V

#define HIGH_V        341   //4.25V

#define HIGH_renew    327   //4.08V

#define Solar_V       200   //2.5V

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

void  delay1(uint x)      //延时程序 1ms

{

uint a,b;            

for(a=x;a>0;a--)

      for(b=110;b>0;b--);        

}

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

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

//     全局变量

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

uint  DC_vbat,DC_vbat1;

void  initialIO()           

{   

    TRISA=0x01;

    TRISC=0x01;

    TRISA3=1;

        PORTA=0xfe;

    ANSEL=0x11;

    delay1(10);

}

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

//   AD初始化

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

void ad_init(uchar channel)

{

        while(GO_nDONE);

        switch(channel)       

   {

        case 0:TRISA0=1;ANS0=1; break;

        case 1:TRISA1=1;ANS1=1; break;

        case 2:TRISA2=1;ANS2=1; break;

        case 3:TRISA4=1;ANS3=1; break;

        case 4:TRISC0=1;ANS4=1; break;

        case 5:TRISC1=1;ANS5=1; break;

        case 6:TRISC2=1;ANS6=1; break;

        case 7:TRISC3=1;ANS7=1; break;

        }

     ADCON0=0xc1;

     ADCON1=0x04;

     delay1(10);

}

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

//  AD读电压

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

uint ad_read(uchar channel)

{

        uint adval;

        while(GO_nDONE);

        ADON=1;

    switch(channel)

     {

        case 0: {CHS2=0;CHS1=0;CHS0=0;}break;

        case 1: {CHS2=0;CHS1=0;CHS0=1;}break;

        case 2: {CHS2=0;CHS1=1;CHS0=0;}break;

        case 3: {CHS2=0;CHS1=1;CHS0=1;}break;

        case 4: {CHS2=1;CHS1=0;CHS0=0;}break;

                case 5: {CHS2=1;CHS1=0;CHS0=1;}break;

                case 6: {CHS2=1;CHS1=1;CHS0=0;}break;

                case 7: {CHS2=1;CHS1=1;CHS0=1;}break;

        default:break;

     }

        delay1(10);

        GO_nDONE=1;

        while(GO_nDONE);

        adval=ADRESH;

        adval=adval<<8|ADRESL;

        return(adval);

}

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

void chargingled()

{

                DC_vbat1=ad_read(4);

                        if(DC_vbat1<=Solar_V)

                        {

                                led=1;

                                delay1(600);

                                led=0;

                                delay1(600);

                                DC_vbat1=ad_read(4);

                        }       

      else  

              led=1;       

}



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

//    主函数

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

void Dischang()

{

        delay1(10);

     DC_vbat=ad_read(0);

     if(DC_vbat<=LOW_V)         //低压保护     

                {

                        Solar_SW=0;

                        Load_SW=1;

                        DC_vbat1=ad_read(4);

                        chargingled();

                        delay1(10);

                        do{

                DC_vbat=ad_read(0);

                                delay1(10);

                                Solar_SW=0;

                                delay1(20);       

                                chargingled();

                                Load_SW=1;

                                delay1(50);                                                                     

              }

            while(DC_vbat<=LOW_renew);//2.5~2.9低压恢复;

                        //Load_SW=1;

        }

     else if((DC_vbat>LOW_V)&&(DC_vbat< HIGH_V))  //充电放电

            {

                            Load_SW=0;

                delay1(10);

                    Solar_SW=0;

                                delay1(10);

                                chargingled();

                delay1(10);

                        }

          else if (DC_vbat>=HIGH_V)  //高压保护

                {

                                        Solar_SW=1;   

                   do{  

                        Solar_SW=1;

                              Load_SW=0;

                                                delay1(20);                                               

                                                chargingled();

                         delay1(10);

                                        }

                     while((DC_vbat>=HIGH_renew)); //4.08~4.35高压恢复

                 }                       

       }

                      

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

//    主函数

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

void main(void)                                                                  

{   

        delay1(1000);

        initialIO();

        ad_init(0);

        ad_init(4);

    while(1)

     {

                Dischang();

         }

}  

Protel Schematic.pdf

71.52 KB, 下载次数: 6

电路硬件部分

最新回复

1.首先,要说明你要完成功能的具体要求,如电压工作点,监视点,有无低功耗要求等, 2.另外应该提供下你的硬件原理图(对软件编写有关的部分就可以) 3.最好说明下现阶段你卡在哪里,好针对性的帮助解决问题.  详情 回复 发表于 2015-7-13 15:27
点赞 关注
 

回复
举报

4

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
顶起啊 不要沉下去  怎么没人帮我
 
 
 

回复

4005

帖子

0

TA的资源

版主

板凳
 
这种贴不太好帮,不知道你哪里有问题.
 
 
 

回复

211

帖子

13

TA的资源

一粒金砂(高级)

4
 
对啊····应该具体说说程序运行出了什么问题····
 
个人签名You have to do everything you can.You have to work your hardest.And if you do,if you stay positive,the you have a shot at a sliver lining.
 
 

回复

1298

帖子

0

TA的资源

纯净的硅(高级)

5
 
楼主只要思路对了应该是没问题的,无非就是单片机检测电压和IO开启和关断操作,思路思路……
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(初级)

6
 
huo_hu 发表于 2015-7-9 16:03
这种贴不太好帮,不知道你哪里有问题.

现在问题就是 低压保护后 恢复供电要等到4V才可以
 
 
 

回复

2886

帖子

0

TA的资源

五彩晶圆(初级)

7
 
那么长的代码,很少有人会认真读一遍的
 
个人签名昵称:灰小子
 
 

回复

4

帖子

0

TA的资源

一粒金砂(初级)

8
 
exiao 发表于 2015-7-9 17:32
那么长的代码,很少有人会认真读一遍的

好吧 还是得自己解决

点评

你也可以外包的  详情 回复 发表于 2015-7-9 22:42
 
 
 

回复

3471

帖子

11

TA的资源

五彩晶圆(高级)

9
 
把思路捋清楚,问题就应该就简单一些了。恢复供电要等到4V才可以,看看程序在小于4V时的运行情况。
 
 
 

回复

2886

帖子

0

TA的资源

五彩晶圆(初级)

10
 


你也可以外包的
 
 
 

回复

136

帖子

0

TA的资源

一粒金砂(中级)

11
 
跟你一样也是菜鸟,逛逛看看能不能遇到大神
 
 
 

回复

637

帖子

2

TA的资源

版主

12
 
1.首先,要说明你要完成功能的具体要求,如电压工作点,监视点,有无低功耗要求等, 2.另外应该提供下你的硬件原理图(对软件编写有关的部分就可以) 3.最好说明下现阶段你卡在哪里,好针对性的帮助解决问题.
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表