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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? nimh.c

?? AVR官方設(shè)計的充電器
?? C
字號:
/****************************************************************************
	
	Device		: AT90S2333

	File name   : NiMH.c

	Ver nr.		: 1.0

	Description : Source file for NiMH 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 "NiMH.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)
{
	int	last_min_temp = 0;
	int	last_min_volt = 0;	 
	int	last_min = 0;
	int	temp = 0;
	int	test = 0;
	unsigned char	fast_finish_hour = 0;
	unsigned char	fast_finish_min = 0;

	OCR1 = 0x05; 
	TCCR1B = 0x01;							//counter1 clock prescale	=	1
	
	#ifdef DEBUG
	term_value1=0;
	#endif
	
	time.sec = 0x00;
  	time.min = 0x00;
  	time.hour = 0x00;
  	time.t_count = 0x3878;
	
	temp = Battery(TEMPERATURE);
	last_min_temp = temp;
	last_min_volt = Battery(VOLTAGE);
	// if TEMPERATURE within absolute limits
	if ((temp	<	MIN_TEMP_ABS)	|| (temp > MAX_TEMP_ABS))		
	{
        // if VOLTAGE lower than absolute VOLTAGE
		if (last_min_volt <=	MAX_VOLT_ABS)
		{   
			// if FAST charge TEMPERATURE high enough	 
			if (temp < MIN_TEMP_FAST)
			{
			    // calculate FAST charge finish	time
				fast_finish_min = (time.min + MAX_TIME_FAST);
				fast_finish_hour = time.hour;
				while (fast_finish_min > 60)
				{
					fast_finish_min = fast_finish_min -	60;
					fast_finish_hour++;
				}
				PORTD	&= 0xDF;			// turn	green	LED	on
				
                // Charge with constant	current	algorithme
				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)
						{
							OCR1++;
						}
					    else if	(temp	>	I_FAST)
						{
						    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	

                    // Check for error and charge termination conditions
					if ((time.hour ==	fast_finish_hour)	&& (time.min ==	fast_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 = fast_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
					}					 
					if (temp > MIN_TEMP_FAST)
					{
						/*Stop the PWM, flag min fast charge temperature 
						charge termination and ERROR. Save the termination
						value and the max limit value for debug information*/
						Stop_PWM();
						SETBIT(TERMINATION,TEMP_MIN);
						SETBIT(CHARGE_STATUS,ERROR);
						#ifdef DEBUG
						term_value1 = temp;
						term_value2 = MIN_TEMP_FAST;
						#endif
					}										 
					temp = Battery(VOLTAGE);
					if (temp > MAX_VOLT_ABS)
					{
    					/*Check	if charge voltage are over max charge voltage
    					the last 3 measurement*/
						test++;																			
						if (test>=4)
						{
    						/*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
						}
					}
					else
					{
						test = 0;
					}

					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 = last_min_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	Algorithme
//************************************************************************************

void TRICKLE_charge(void)
{
	unsigned int temp	=	0;
	unsigned char	trickle_finish_hour	=	0;
	unsigned char	trickle_finish_min	=	0;
	
	OCR1 = 0x05; 
	TCCR1B = 0x01;							//counter1 clock prescale = 1	 

	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")
				{
					temp = Battery(CURRENT);
    				if (temp < I_TRICKLE)
						OCR1++;
					else if ((temp > I_TRICKLE)&&(OCR1 > 0))
					    OCR1--;
				}while (temp !=	I_TRICKLE); // I_TRICKLE 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

			}
			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
		}
	}
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品久久久久久久99蜜桃| 色综合天天性综合| 日韩一区二区在线观看视频| 青椒成人免费视频| 欧美xxxxxxxx| 成人av电影在线| 洋洋av久久久久久久一区| 91精品国产乱| 国产jizzjizz一区二区| 亚洲欧美日韩小说| 欧美精品粉嫩高潮一区二区| 久久精品国产亚洲a| 国产午夜精品一区二区| 在线亚洲一区二区| 奇米影视在线99精品| 久久久久久久久久电影| 色系网站成人免费| 麻豆久久久久久| 国产精品国产三级国产aⅴ无密码| 在线一区二区三区四区| 麻豆国产一区二区| 国产精品福利影院| 欧美高清精品3d| 成人性生交大片免费| 午夜精品久久久久久久99水蜜桃| 久久综合狠狠综合久久综合88| 9i看片成人免费高清| 日本欧美大码aⅴ在线播放| 欧美国产精品一区二区| 欧美日韩一区二区不卡| 国产福利一区在线| 日韩黄色一级片| 国产日产欧产精品推荐色 | 99在线精品一区二区三区| 91视频在线观看免费| 亚洲人吸女人奶水| jvid福利写真一区二区三区| 久久精品视频网| 不卡免费追剧大全电视剧网站| 中文字幕av免费专区久久| 成人高清av在线| 337p粉嫩大胆噜噜噜噜噜91av| 成人国产免费视频| 亚洲第四色夜色| 精品国产制服丝袜高跟| 91蜜桃婷婷狠狠久久综合9色| 免费日本视频一区| 亚洲电影一级黄| 91超碰这里只有精品国产| 亚洲线精品一区二区三区八戒| 7777精品伊人久久久大香线蕉完整版 | 国产精品美女久久福利网站| 欧美一卡2卡三卡4卡5免费| 99久久婷婷国产精品综合| 久久99久久99| 日本系列欧美系列| 亚洲丶国产丶欧美一区二区三区| 中文字幕一区二区三区乱码在线| 欧美mv和日韩mv的网站| 91精品国产一区二区三区| 日本韩国一区二区| 99精品久久只有精品| 大胆欧美人体老妇| 国产一区二区视频在线| 看电影不卡的网站| 奇米亚洲午夜久久精品| 午夜私人影院久久久久| 亚洲国产精品人人做人人爽| 亚洲另类在线视频| 亚洲综合一二区| 一区二区三区高清不卡| 久久人人97超碰com| 4hu四虎永久在线影院成人| 日本成人在线视频网站| 亚洲电影中文字幕在线观看| 国产精品人妖ts系列视频| 久久青草国产手机看片福利盒子| 911精品国产一区二区在线| 91国偷自产一区二区三区成为亚洲经典 | 精品国产免费一区二区三区四区 | 国产 欧美在线| 高清视频一区二区| 国产精品久久久久久亚洲伦| 欧美午夜不卡在线观看免费| 欧美伊人久久久久久久久影院 | 亚洲精品成人a在线观看| 有坂深雪av一区二区精品| 亚洲精品久久久久久国产精华液| 亚洲免费伊人电影| 亚洲成人一区二区| 日韩高清欧美激情| 国产乱妇无码大片在线观看| 美脚の诱脚舐め脚责91 | 久久天堂av综合合色蜜桃网 | 国产精品福利电影一区二区三区四区| 亚洲国产精品99久久久久久久久 | 男男成人高潮片免费网站| 久久99国内精品| 高清国产午夜精品久久久久久| 丁香激情综合五月| 91麻豆高清视频| 91精品国产aⅴ一区二区| 久久亚区不卡日本| 一区二区三区小说| 蜜芽一区二区三区| 成人晚上爱看视频| 欧美日韩一区三区| 久久网站热最新地址| 亚洲男同性视频| 青青国产91久久久久久| 国v精品久久久网| 欧美日韩电影在线播放| 久久久久久久电影| 亚洲精品视频免费观看| 久久国产综合精品| 91在线丨porny丨国产| 91精品国产欧美一区二区| 久久久久99精品一区| 亚洲一二三区视频在线观看| 经典三级在线一区| 在线精品视频一区二区| 久久在线观看免费| 亚洲综合久久久久| 国产高清一区日本| 欧美高清视频一二三区| 中文字幕视频一区二区三区久| 日韩成人免费电影| 91丨九色丨黑人外教| 26uuu欧美日本| 亚洲成人动漫在线观看| 大尺度一区二区| 日韩欧美电影一区| 性做久久久久久久久| jlzzjlzz欧美大全| 久久在线观看免费| 秋霞午夜av一区二区三区 | 欧美三级视频在线观看| 国产午夜精品久久久久久久 | 久久精品国产**网站演员| 91行情网站电视在线观看高清版| 久久精品一区二区三区不卡牛牛| 婷婷久久综合九色国产成人| 97se狠狠狠综合亚洲狠狠| 国产清纯白嫩初高生在线观看91| 日韩电影在线看| 欧美色老头old∨ideo| 亚洲欧美另类在线| 99久久免费精品高清特色大片| 久久久综合网站| 久久精品国产精品亚洲精品| 宅男在线国产精品| 日韩国产欧美在线观看| 欧美日韩一卡二卡| 欧美体内she精高潮| 久久爱另类一区二区小说| 国产99精品在线观看| 久久国产麻豆精品| 国产99精品在线观看| 久久久久久久综合日本| 91黄色激情网站| 亚洲欧美aⅴ...| 一本大道久久a久久精品综合| 欧美国产一区视频在线观看| 国产一区日韩二区欧美三区| 精品国产乱码久久久久久闺蜜| 日产国产欧美视频一区精品| 7777女厕盗摄久久久| 日韩电影免费在线观看网站| 在线电影院国产精品| 日韩精品免费视频人成| 3d动漫精品啪啪1区2区免费| 午夜电影网亚洲视频| 91精选在线观看| 久久精品国产77777蜜臀| 久久久夜色精品亚洲| 粉嫩久久99精品久久久久久夜| 国产精品免费久久久久| jlzzjlzz亚洲日本少妇| 一区二区高清免费观看影视大全| 在线观看成人小视频| 亚洲国产sm捆绑调教视频 | 日本精品裸体写真集在线观看 | 亚洲同性gay激情无套| 91麻豆成人久久精品二区三区| 亚洲色图欧美在线| 欧美日韩精品一区二区三区蜜桃 | 欧美精品18+| 国产麻豆精品视频| 国产精品毛片久久久久久| 色8久久人人97超碰香蕉987| 日日噜噜夜夜狠狠视频欧美人| 精品国产乱码久久久久久牛牛| 国产成人亚洲精品狼色在线| 综合激情网...| 欧美一区中文字幕| 国产福利91精品一区二区三区| 亚洲欧洲日韩综合一区二区| 56国语精品自产拍在线观看| 国产美女精品一区二区三区| 亚洲视频免费在线|