亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? nicd.c

?? ATMEL AVR 單片機 ni-mh 電池充電控制原代碼
?? C
字號:
/****************************************************************************
	
	Device		: AT90S2333

	File name   : NiCd.c

	Ver nr.		: 1.0

	Description : Source file for NiCd charging algorithme
				    - FAST_charge
					- TRICKLE_charge
								 
	Compiler	: IAR icca90
	 
	Author		: Asmund Saetre	/ Terje	Frostad	/ Dietmar Koenig
 
    Change log  : 02.02.2000 Changed to fit Battery Charger refrence	
                  design board	 AS	 
				  17.04.2000 Debugged by AS	
                  15.05.2000 Final test and review AS
 
****************************************************************************/

#include "NiCd.h"							//Battery	specific definitions

// Extern struct prototypes
extern time_struct time;

#ifdef DEBUG                  
extern int term_value1;
extern int term_value2;
extern int charge_current_min;
extern int charge_current_max;
#endif

// Fast	Charge Algorithme
//***************************************************************************
void FAST_charge(void)
{	
	char fast_finish_hour	=	0;
	char trickle_finish_min	=	0;
	int	last_min_temp = 0;
	int	last_min_volt = 0;		
	int	temp = 0;
	int temp2 = 0;
	char last_min	=	0;
	char last_sec	=	0;
	int	top_volt	=	0;
	int	new_top_volt	=	0;
	char i = 0;
	int	last_temp	=	0;

    #ifdef DEBUG                  
	term_value1=0;
	#endif
	
	time.sec = 0x00;
  	time.min = 0x00;
  	time.hour = 0x00;
  	time.t_count = 0x3878;
	OCR1 = 0x00; 
    TCCR1B = 0x01;              // Counter 1 clock prescale = 1
	
	temp = Battery(TEMPERATURE); 
	// if	TEMPERATURE	within absolute	limits
	if ((temp	<	MIN_TEMP_ABS) &&	(temp	>	MAX_TEMP_ABS))
	{
		temp2 = Battery(VOLTAGE);
		// if	VOLTAGE	lower than absolute VOLTAGE
		if (temp2 < MAX_VOLT_ABS)           
		{
    		// if	FAST charge	TEMPERATURE	high enough		
			if (temp < MIN_TEMP_FAST)				
			{
				OCR1 = 0x00; 
				TCCR1B = 0x01;              // Counter 1 clock prescale = 1
				last_min_temp = Battery(TEMPERATURE);
				last_min_volt = Battery(VOLTAGE); 
			
				//Calculate FAST charge	finish time
				trickle_finish_min = (time.min + MAX_TIME_FAST);
				fast_finish_hour = time.hour;
				while	(trickle_finish_min	>	60)
				{
					trickle_finish_min = trickle_finish_min	-	60;
					fast_finish_hour++;
				}
				 
				while	((CHKBIT(CHARGE_STATUS,FAST))	&& (!(CHKBIT(CHARGE_STATUS,ERROR))))
				{
					do                      //Set I_FAST with "soft start"
					{	
                        //Loop until charge current == I_FAST
						temp = Battery(CURRENT);
						if ((temp	<	(I_FAST+1))&&(OCR1 < 0xFF))
						{
							OCR1++;
						}
						else if	((temp > (I_FAST-1))&&(OCR1	>	0x00))
						{
							OCR1--;
						}
					}while (temp !=	I_FAST); // I_FAST	is set now

                    #ifdef DEBUG
                    /*Save the min and max charge current for debug 
                    information*/					
					if (temp <= charge_current_min)
						charge_current_min = temp;
					if (temp > charge_current_max)
    	   				charge_current_max = temp;           
    	   			#endif	
	
						
					if ((time.hour	== fast_finish_hour)&&(time.min	== trickle_finish_min))
					{
						/*Stop the PWM, flag max time charge termination and 
						ERROR. Save the termination value and the max limit 
						value for debug information*/
						Stop_PWM();
						SETBIT(TERMINATION,TIME_MAX);
						SETBIT(CHARGE_STATUS,ERROR);
			            #ifdef DEBUG                  
						term_value1 = time.min;
						term_value2 = trickle_finish_min;
						#endif
					}
					temp = Battery(TEMPERATURE);
					if ( temp	<	MAX_TEMP_ABS)
					{
						/*Stop the PWM, flag max temperature charge 
						termination and ERROR. Save the termination value and
						the max limit value for debug information*/
						Stop_PWM();
						SETBIT(TERMINATION,TEMP_MAX);
						SETBIT(CHARGE_STATUS,ERROR);
						#ifdef DEBUG                  
						term_value1 = temp;
						term_value2 =	MAX_TEMP_ABS;
						#endif
					}
					temp = Battery(VOLTAGE);
					if (temp > MAX_VOLT_ABS)
					{
						/*Stop the PWM, flag max charge voltage charge 
						termination and ERROR. Save the termination value and
						the max limit value for debug information*/
						Stop_PWM();
						SETBIT(TERMINATION,VOLT_MAX);
						SETBIT(CHARGE_STATUS,ERROR);
						#ifdef DEBUG                  
						term_value1 = temp;
						term_value2 =	MAX_VOLT_ABS;
						#endif
					}								
					if (time.min !=	last_min)												 
					{
						last_min = time.min;

						//If charge voltage is falling,	change to trickle mode
						temp = Battery(VOLTAGE);
						if ((last_min_volt - temp) > NEG_dV)
						{
	        				/*Stop the PWM, flag FAST charge dV/dt
    	    				termination and change charge mode to 
    	    				"TRICKLE". Save the termination value and the
    	    				max limit value for debug information*/
							Stop_PWM();
							SETBIT(TERMINATION,dV_dt);
							CLRBIT(CHARGE_STATUS,FAST);
							SETBIT(CHARGE_STATUS,TRICKLE);
							#ifdef DEBUG                  
							term_value1 = temp;
					    	term_value2 =	top_volt;
					    	#endif
						}
						//Store	current	charge voltage to next minute test
						last_min_volt = temp;
						
						/*If Battery temperature rises more than max dT/dt
						change to trickle mode*/
						temp = Battery(TEMPERATURE);
						if ((last_min_temp - temp) >= ntc_c[((temp-400)/25)])
						{																						
	    					/*Stop the PWM, flag FAST charge dT/dt
	    			    	termination and change charge mode to "TRICKLE".
	    					Save the termination value and the max limit 
		    				value for debug information*/
							Stop_PWM();
							SETBIT(TERMINATION,dT_dt);
							CLRBIT(CHARGE_STATUS,FAST);
							SETBIT(CHARGE_STATUS,TRICKLE);
							#ifdef DEBUG
							term_value1 = (last_min_temp -temp);
							term_value2 = ntc_c[((temp-400)/25)];
							#endif
						}						
						//Store	current	Battery	temp to next minute test		 
						last_min_temp = temp; 
					}
				}
			}	
    		else if(!(CHKBIT(CHARGE_STATUS,ERROR)))
	    	{
    	    	/*Flag min temperature termination and ERROR. Save 
    		   	the termination value and the max limit value for debug 
    		    information*/
    			SETBIT(TERMINATION,TEMP_MIN);
    			SETBIT(CHARGE_STATUS,ERROR);
                #ifdef DEBUG
		    	term_value1 = temp;
			   	term_value2 = MIN_TEMP_FAST;
				#endif			   	
			}		 

		}
   		else if(!(CHKBIT(CHARGE_STATUS,ERROR)))
		{
    		/*Flag max charge voltage charge termination and ERROR. Save 
    		the termination value and the max limit value for debug 
    		information*/
			SETBIT(TERMINATION,VOLT_MAX);
			SETBIT(CHARGE_STATUS,ERROR);
			#ifdef DEBUG
			term_value1 = temp;
			term_value2 = MAX_VOLT_ABS;
			#endif
		}		 
	}		 
	else if(!(CHKBIT(CHARGE_STATUS,ERROR)))
	{
		if	(temp	<	MIN_TEMP_ABS)
		{
		    //Flag min temperature termination and save the limit value
		    #ifdef DEBUG
		    term_value2 =	MIN_TEMP_ABS;
		    #endif
			SETBIT(TERMINATION,TEMP_MIN); 
		}
		else
		{
		    //Flag max temperature termination and save the limit value
			SETBIT(CHARGE_STATUS,TEMP_MAX);
			#ifdef DEBUG
			term_value2 =	MAX_TEMP_ABS;
			#endif
		}
    	//Flag ERROR and save the measured value causing the error for debug	
    	SETBIT(CHARGE_STATUS,ERROR);        
    	#ifdef DEBUG
	    term_value1 = temp; 				
	    #endif
    }
}
// Trickle Charge	Algorithm
//***************************************************************************
void TRICKLE_charge(void)
{
	int	temp = 0;

	time.sec = 0x00;
  	time.min = 0x00;
  	time.hour = 0x00;
  	time.t_count = 0x3878;

	OCR1 = 0x00; 
    TCCR1B = 0x01;              // Counter 1 clock prescale = 1

    #ifdef DEBUG
	term_value1=0;
	#endif

	while	((CHKBIT(CHARGE_STATUS,TRICKLE)) &&	(!(CHKBIT(CHARGE_STATUS,ERROR))))	 
	{		 
		temp = Battery(TEMPERATURE); 
		// if TEMPERATURE within absolute limits
		if ((temp	<	MIN_TEMP_ABS) ||	(temp	>	MAX_TEMP_ABS))
		{
			temp = Battery(VOLTAGE);
			// if VOLTAGE lower	than absolute VOLTAGE
			if (temp < MAX_VOLT_ABS)
			{
				do	                  // set I_TRICKLE (with "soft start")
				{
				    //Loop until charge current == I_TRICKLE
					temp = Battery(CURRENT);
					if ((temp	<	I_TRICKLE) &&	(OCR1	<	0xFF))
					{
						OCR1++;
					}
					else if	((temp > I_TRICKLE)	&& (OCR1 > 0x00))
					{
						OCR1--;
					}
				}	while (temp	!= I_TRICKLE);

                #ifdef DEBUG
                /*Save the min and max charge current for debug information*/
				if (temp <= charge_current_min)
					charge_current_min = temp; 
				if (temp > charge_current_max)
	   			charge_current_max = temp;
	   			#endif

			}
			else if(!(CHKBIT(CHARGE_STATUS,ERROR)))
			{
    			/*Stop PWM, flag max charge voltage charge termination and 
    			ERROR. Save the termination value and the max limit value for
    			debug information*/
				Stop_PWM();
				SETBIT(TERMINATION,VOLT_MAX);
				SETBIT(CHARGE_STATUS,ERROR);
				#ifdef DEBUG
				term_value1 = temp;
				term_value2 = MAX_VOLT_ABS;
				#endif
			}
		}
		else if(!(CHKBIT(CHARGE_STATUS,ERROR)))
		{
   			/*Stop PWM, flag min max temperature charge termination and ERROR
   			Save the termination value and the limit value for debug 
   			information*/
			Stop_PWM();
			if (temp < MIN_TEMP_ABS)
			{
				SETBIT(TERMINATION,TEMP_MIN);
				#ifdef DEBUG
				term_value2 = MIN_TEMP_ABS;
				#endif
			}
			else
			{
				SETBIT(TERMINATION,TEMP_MAX);
				#ifdef DEBUG
				term_value2 = MAX_TEMP_ABS;
				#endif
			}
			SETBIT(CHARGE_STATUS,ERROR);
			#ifdef DEBUG
			term_value1 = temp;
			#endif
		}
	}
	Stop_PWM();			// stop	PWM
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
www国产精品av| 日韩一区二区在线观看视频| 精品一区二区三区在线观看国产 | 日本不卡一区二区三区| 亚洲精品高清在线观看| 亚洲免费在线视频| 自拍偷拍国产精品| 亚洲人成电影网站色mp4| 亚洲欧美激情在线| 国内久久精品视频| 精品一区二区在线看| 国产真实乱子伦精品视频| 精品一区二区三区在线播放| 国产乱码精品一区二区三区av | 成人精品一区二区三区四区| 成人午夜激情在线| 色婷婷综合久久久久中文| 色天天综合色天天久久| 欧美色欧美亚洲另类二区| 88在线观看91蜜桃国自产| 91精品国产入口| 国产午夜亚洲精品不卡| 亚洲欧美另类久久久精品| 亚洲福利一二三区| 精品一区免费av| 91丨九色丨蝌蚪富婆spa| 欧美色男人天堂| 久久综合色婷婷| 中文字幕一区三区| 婷婷国产v国产偷v亚洲高清| 久久av资源网| 99在线视频精品| 欧美猛男gaygay网站| 国产亚洲欧美日韩俺去了| 一区二区三区日韩在线观看| 免费成人性网站| 99久久精品情趣| 日韩视频免费观看高清在线视频| 国产亚洲欧洲一区高清在线观看| 亚洲免费视频中文字幕| 麻豆一区二区在线| 色综合一区二区| 精品国产百合女同互慰| 国产精品久久久久久福利一牛影视| 亚洲综合在线第一页| 韩国v欧美v日本v亚洲v| 欧美亚洲国产一区二区三区va | 欧美激情自拍偷拍| 亚洲国产精品人人做人人爽| 国产精品1区2区3区| 欧美精品xxxxbbbb| 中文字幕字幕中文在线中不卡视频| 日本免费新一区视频| 色老头久久综合| 国产欧美1区2区3区| 久久精品国产77777蜜臀| 欧美系列在线观看| 亚洲欧洲三级电影| 高清久久久久久| 欧美成人福利视频| 日韩电影网1区2区| 在线精品观看国产| 亚洲桃色在线一区| 成人激情黄色小说| 日本一区二区高清| 国产精品一二三四五| 日韩一级二级三级精品视频| 亚洲成av人片一区二区三区| 日本乱码高清不卡字幕| 最新欧美精品一区二区三区| 成人永久免费视频| 久久久久久久久一| 国产精品综合久久| 国产日韩欧美一区二区三区乱码| 蜜桃久久av一区| 欧美一区二区三区爱爱| 午夜视频一区二区三区| 欧美人动与zoxxxx乱| 视频一区视频二区中文字幕| 欧美浪妇xxxx高跟鞋交| 视频一区二区三区入口| 欧美日韩国产精选| 免费精品99久久国产综合精品| 欧美日韩国产首页在线观看| 亚洲v日本v欧美v久久精品| 欧美日韩在线播| 日韩精品视频网站| 精品国产凹凸成av人网站| 激情综合五月天| 国产丝袜美腿一区二区三区| 成人久久久精品乱码一区二区三区| 亚洲国产精品成人综合| jiyouzz国产精品久久| 亚洲视频电影在线| 欧美日韩激情一区二区三区| 奇米888四色在线精品| 精品乱人伦小说| 大尺度一区二区| 亚洲一区二区三区三| 337p亚洲精品色噜噜噜| 国产高清精品网站| 日韩理论在线观看| 91麻豆精品国产91久久久| 国产一区二区三区久久悠悠色av| 欧美国产1区2区| 欧美人伦禁忌dvd放荡欲情| 久久99国产精品免费| 亚洲图片欧美激情| 欧美二区三区91| 成人免费毛片app| 午夜精品成人在线| 中文字幕av一区 二区| 欧美丝袜自拍制服另类| 国产乱码精品1区2区3区| 亚洲猫色日本管| 久久免费电影网| 一本久久a久久免费精品不卡| 美女尤物国产一区| 亚洲欧美色一区| 精品播放一区二区| 欧美日韩一区二区三区在线| 国产精品一区免费视频| 香蕉乱码成人久久天堂爱免费| 久久久久国色av免费看影院| 精品视频1区2区| 99re在线精品| 久久国内精品视频| 一区二区在线观看免费视频播放| 欧美xxxxx裸体时装秀| 欧美私人免费视频| 91在线观看美女| 国产一区二区三区在线观看免费视频| 亚洲一区二区三区小说| 欧美激情中文字幕一区二区| 日韩欧美一卡二卡| 欧美日韩一二区| 一本到不卡免费一区二区| 国产一区二区成人久久免费影院 | 久久99久久99| 肉肉av福利一精品导航| 亚洲日本在线看| 欧美国产精品一区二区三区| 欧美va在线播放| 日韩一区二区在线免费观看| 欧美在线观看你懂的| 91蜜桃婷婷狠狠久久综合9色| 国产二区国产一区在线观看| 精品中文av资源站在线观看| 日本午夜一本久久久综合| 亚洲国产美女搞黄色| 樱花草国产18久久久久| 亚洲精品乱码久久久久久日本蜜臀| 国产肉丝袜一区二区| 国产色91在线| 国产清纯美女被跳蛋高潮一区二区久久w| 日韩美女视频在线| 日韩免费视频一区二区| 欧美一级xxx| 精品久久免费看| 久久免费偷拍视频| 中文字幕第一区第二区| 国产精品久久久久久久裸模| 中文子幕无线码一区tr| 国产精品电影院| 亚洲精品国产成人久久av盗摄| 亚洲精品日产精品乱码不卡| 亚洲精品伦理在线| 日日骚欧美日韩| 精彩视频一区二区| 高潮精品一区videoshd| 91免费国产视频网站| 在线观看不卡视频| 欧美一区二区黄| 国产亚洲精品福利| 最近中文字幕一区二区三区| 亚洲国产cao| 国产麻豆9l精品三级站| www.成人在线| 欧美日韩成人在线一区| 欧美www视频| 中文字幕一区二区三区在线不卡 | 欧美日韩国产美女| 亚洲精品一区二区精华| 国产精品久久久久久久久免费丝袜| 亚洲日本丝袜连裤袜办公室| 午夜精品久久久久久不卡8050| 精品一区在线看| 日本高清视频一区二区| 欧美成人a视频| 夜夜精品视频一区二区 | 国产日韩影视精品| 亚洲一区日韩精品中文字幕| 久久精品国产亚洲a| 91香蕉视频污在线| 欧美精品一区二区久久久| 国产精品第五页| 免费观看一级欧美片| 99国产精品久| 26uuu欧美| 亚洲夂夂婷婷色拍ww47|