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

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

?? adc.c

?? 智能充電參考程序 可以控制整個充電過程希望對大家有幫助
?? C
字號:
/****************************************Copyright (c)**************************************************
**                              智 能 充 電 器 開 發(fā) 小 組
**                                     OurAVR 論壇
**                                   QQ 群: 26052247 
**
**                               http://www.ouravr.com/bbs
**
**--------------文件信息--------------------------------------------------------------------------------
**文   件   名: ADC.c
**創(chuàng)   建   人: Trinove
**最后修改日期: 2008年01月13日
**描        述: AD轉(zhuǎn)換的底層函數(shù)  FOR AVR MCU / Mega16
**              
**--------------歷史版本信息----------------------------------------------------------------------------
** 創(chuàng)建人: Trinove
** 版  本: v0.03
** 日 期: 2008年01月13日
** 描 述: 原始版本
**
**--------------當(dāng)前版本修訂------------------------------------------------------------------------------
** 修改人: martin7wind 楓仔
** 日 期: 2008年03月01日
** 描 述: For 智能充電器
**
**--------------當(dāng)前版本修訂------------------------------------------------------------------------------
** 修改人: 呂海安
** 日 期: 2008年03月02日
** 描 述: 修改格式,歸檔
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#include "config.h"
#include "ADC.h"  

// ADCSR
#define    ADEN     7
#define    ADSC     6
#define    ADATE    5  
#define    ADFR     5
#define    ADIF     4
#define    ADIE     3
#define    ADPS2    2
#define    ADPS1    1
#define    ADPS0    0

// 模擬量處理相關(guān)的全局變量的定義(僅在模塊內(nèi)被調(diào)用)


/*********************************************************************************************************
** 函數(shù)名稱: s_analog_init
** 功能描述: ADC 初始化,查詢模式,預(yù)分頻128,轉(zhuǎn)換時間104us,右對齊
** 輸入?yún)?shù): 無
** 輸出參數(shù): 無
********************************************************************************************************/
void s_analog_init(void)
{
    // adc轉(zhuǎn)換初始化
    ADCSRA = 0x00;  // 禁止 AD 轉(zhuǎn)換
    ADMUX = 0x00;
    SFIOR |= 0x00;
    ACSR = 0x80;    // 禁止模擬比較器
    ADCSRA = 0xE7;
    //ADCSRA |= BIT(ADSC);
}

/*********************************************************************************************************
** 函數(shù)名稱: s_analog
** 功能描述: 模擬量采集函數(shù),用以一次采集某個關(guān)鍵模擬量
** 輸入?yún)?shù): 無
** 輸出參數(shù): INT16U result: ADC data
********************************************************************************************************/
INT16U s_analog(void)
{
    INT32U value = 0;  // 聲明為long,否則在后續(xù)計算中會溢出
    INT16U result = 0;
    Disable(); 
  
    ADCSRA |= BIT(ADSC); // ADSR 置位,ADC開始
    
    while(!(ADCSRA & BIT(ADIF))) // ADSR被清0代表轉(zhuǎn)換完成
    {
        // 計算實際電壓
        value = ADCL; // 首先讀低位
        value |= (INT16S)ADCH << 8; // 然后讀高位     
        result = (value * VREF_VOL) >> 10; // 10 Bit ADC 計算出采樣到的電壓值
        Enable();
        break;
    }
    
    return result;
}

/*********************************************************************************************************
** 函數(shù)名稱: vol_to_bat_vol
** 功能描述: ADC 測量電壓向電池實際模擬量轉(zhuǎn)化函數(shù)
** 輸入?yún)?shù): INT16U vol: 電壓采樣電路上面 AD 采樣出的值
** 輸出參數(shù): INT16U result: 
********************************************************************************************************/
INT16U vol_to_bat_vol(INT16U vol)
{   
    INT16U temp = 0;
    INT32U temp1 = 0;
    temp1 = (vol * ((INT8U)(VOL_AMP * 10))) / 10;
    temp = (INT16U) temp1;
    return temp; 
}

/*********************************************************************************************************
** 函數(shù)名稱: vol_to_bat_cur
** 功能描述: 放電的時候,電壓是負值
**           采樣電阻0.1歐. 
**           放電電流2A 
**           充電電流2A 
**           放大倍數(shù)為1+100/8.2=13.2 
**           放大后電壓為0.1*2*13.2=+/-2.64 
**           放大器后偏置電壓VREF=3.75 
**           最后的電壓為1.11~6.39V
**           最后的電壓為(1.11~6.39V) / 2 = 0.555 V ~ 3.195 V  
**    
**           ( Vcur * 13.2 + 3.75 ) / 2 = Vadc
**       =>   6.6 * Vcur = Vadc - 0x01FF / 2
**       =>   CUR_AMP * Vcur = Vadc - 0xFF
**
** 輸入?yún)?shù): INT16U vol: 電流采樣電路上面 AD 采樣出的值
** 輸出參數(shù): INT16S temp: 實際電流 mA
********************************************************************************************************/
INT16S vol_to_bat_cur(INT16U vol)
{
    INT32S temp;
    
    temp = vol - (VREF_VOL / 2);
    temp = (INT16S)(temp * 100 / (INT8U)(CUR_AMP * 10));
    
    return temp;
}

/*********************************************************************************************************
** 函數(shù)名稱: vol_to_temp
** 功能描述: 
** 輸入?yún)?shù): INT16U vol:
** 輸出參數(shù): INT16U vol:
********************************************************************************************************/
INT16U vol_to_temp(INT16U vol)
{
    return vol;
}


/*********************************************************************************************************
** 函數(shù)名稱: filter_adc
** 功能描述: 多通道數(shù)值濾波處理,用全局變量做為緩沖區(qū)
**           均值法濾波
** 輸入?yún)?shù): INT8U channel:
** 輸出參數(shù): 0
********************************************************************************************************/
INT8U filter_adc(INT8U channel)
{
    INT32U temp1 = 0;
    INT16U result = 0;

    ADMUX = (ADMUX & 0xF8) | channel;   // 選擇對應(yīng)的通道  
    
    delay_us(300);
        
    s_analog();  // 舍去第一次值    
    result = s_analog();
    
   
    //將測量數(shù)據(jù)存入全局數(shù)據(jù)表
    switch(channel)
    {
        case BAT_0_VOL_CH:
            temp1 = (((INT16U)Bat0_Vol_H) << 8) + Bat0_Vol_L; 
            temp1 = temp1 * 0.75 + vol_to_bat_vol(result) * 0.25;   
            Bat0_Vol_H = (INT8U)(temp1 >> 8);
            Bat0_Vol_L = (INT8U) (temp1 & 0xff);               
            break;
       
        case BAT_0_CUR_CH:    
            if((result > (VREF_VOL / 2 - 100)) && (result < (VREF_VOL / 2 + 100)))
            {
                result = VREF_VOL / 2;
            }       
            temp1 = ((INT16U)Bat0_Cur_H << 8) + Bat0_Cur_L; 
            temp1 = temp1 * 0.75 + vol_to_bat_cur(result) * 0.25;   
            Bat0_Cur_H = (INT8U)(temp1 >> 8);
            Bat0_Cur_L = (INT8U) (temp1 & 0xff);          
          break;
        
        case BAT_0_TEMP_CH:                
            temp1 = ((INT16U)Bat0_Temp_H << 8) + Bat0_Temp_L; 
            temp1 = temp1 * 0.75 + vol_to_temp(result) * 0.25;   
            Bat0_Temp_H = (INT8U)(temp1 >> 8);
            Bat0_Temp_L = (INT8U) (temp1 & 0xff); 
            break;
      
        case BAT_1_VOL_CH:
            temp1 = (((INT16U)Bat1_Vol_H) << 8) + Bat1_Vol_L; 
            temp1 = temp1 * 0.75 + vol_to_bat_vol(result) * 0.25;   
            Bat1_Vol_H = (INT8U)(temp1 >> 8);
            Bat1_Vol_L = (INT8U) (temp1 & 0xff);          
            break;
        
        case BAT_1_CUR_CH:  
            if((result > (VREF_VOL / 2 - 100)) && (result < (VREF_VOL / 2 + 100)))
            {
                result = VREF_VOL / 2;
            }  
            temp1 = ((INT16U)Bat1_Cur_H << 8) + Bat1_Cur_L; 
            temp1 = temp1 * 0.75 + vol_to_bat_cur(result) * 0.25;   
            Bat1_Cur_H = (INT8U)(temp1 >> 8);
            Bat1_Cur_L = (INT8U) (temp1 & 0xff);   
            break;
       
        case BAT_1_TEMP_CH:         
            temp1 = ((INT16U)Bat1_Temp_H << 8) + Bat1_Temp_L; 
            temp1 = temp1 * 0.75 + vol_to_temp(result) * 0.25;   
            Bat1_Temp_H = (INT8U)(temp1 >> 8);
            Bat1_Temp_L = (INT8U) (temp1 & 0xff); 
            break;
  
        default:
            break;     // 異常處理為空
    }
      
    return 0;
}

/*********************************************************************************************************
** 函數(shù)名稱: ReadBatterySTAT
** 功能描述: 察看電池狀態(tài)
** 輸入?yún)?shù): INT8U channel: 第幾路電池
** 輸出參數(shù): 0
********************************************************************************************************/
void ReadBatterySTAT(INT8U channel)
{   
    INT8U Key = NO_KEY;
    INT8U i; 
    
    if(channel == BATTERY0)
    {
        lcd_locate(0,0); 
        lcd_print_stringF("BAT0:       mV  ");      	     
        lcd_locate(0,1);
        lcd_print_stringF("            mA  ");      
    }
    else if (channel == BATTERY1)
    {
        lcd_locate(0,0); 
        lcd_print_stringF("BAT1:       mV  ");     	     
        lcd_locate(0,1);
        lcd_print_stringF("            mA  ");		
    }
    
    else if (channel == BATTERY_BOTH)
    {
        lcd_cls();  // 清屏 
        lcd_locate(5,0);
        lcd_print_stringF("mV"); 
         lcd_locate(14,0);
        lcd_print_stringF("mV");  
        lcd_locate(5,1);
        lcd_print_stringF("mA"); 
         lcd_locate(14,1);
        lcd_print_stringF("mA");     				
    }      
    
    while (Key != BT_CANCEL)
    {
        LED1 = 1;
        LED2 = !LED2;
        for(i=0; i<7; i++)
        {
            filter_adc(i);  
        }
        
        if(channel == BATTERY0)
        {
            lcd_locate(7,0);  
            lcd_print_number((((INT16U)Bat0_Vol_H << 8) + Bat0_Vol_L),4,0);         	     
            lcd_locate(7,1);
            lcd_print_number((((INT16U)Bat0_Cur_H << 8) + Bat0_Cur_L),4,0);       
        }
        else if (channel == BATTERY1)
        {
            lcd_locate(7,0);
            lcd_print_number((((INT16U)Bat1_Vol_H << 8) + Bat1_Vol_L),4,0);      	     
            lcd_locate(7,1);                            
            lcd_print_number((((INT16U)Bat1_Cur_H << 8) + Bat1_Cur_L),4,0); 		
        }
    	
        else if (channel == BATTERY_BOTH)
        {
            lcd_locate(0,0);  
            lcd_print_number((((INT16U)Bat0_Vol_H << 8) + Bat0_Vol_L),4,0);         	     
            lcd_locate(0,1);
            lcd_print_number((((INT16U)Bat0_Cur_H << 8) + Bat0_Cur_L),4,0);       
            
            lcd_locate(9,0); 
            lcd_print_number((((INT16U)Bat1_Vol_H << 8) + Bat1_Vol_L),4,0);      	     
            lcd_locate(9,1);                             
            lcd_print_number((((INT16U)Bat1_Cur_H << 8) + Bat1_Cur_L),4,0); 				
        }  
        
        Key = read_keycode();
    }
    
}

/**************************************************************************************×*****************
**                                 END OF FILE
********************************************************************************************************/

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲成人动漫一区| 欧美高清在线视频| 欧亚一区二区三区| 色综合咪咪久久| 欧美亚一区二区| 欧美喷潮久久久xxxxx| 欧美老人xxxx18| 日韩一区二区在线播放| 欧美成人vr18sexvr| 久久亚洲综合色一区二区三区 | 91网站最新地址| 国产精品一区二区在线观看网站| 久久国产精品露脸对白| 国产精华液一区二区三区| 国产大陆亚洲精品国产| 99国产精品久久久久久久久久| 一本一本久久a久久精品综合麻豆| 色视频欧美一区二区三区| 欧美精品自拍偷拍| 26uuu成人网一区二区三区| 国产欧美日产一区| 亚洲一区在线观看网站| 免费成人美女在线观看| 91小宝寻花一区二区三区| 欧美日韩一区国产| 精品美女一区二区| 国产精品精品国产色婷婷| 天天综合网天天综合色| 黄色资源网久久资源365| www.色精品| 欧美电影在线免费观看| 国内精品视频一区二区三区八戒| 久久综合给合久久狠狠狠97色69| 日韩毛片在线免费观看| 99久久婷婷国产综合精品| 欧美亚洲一区三区| 精品国产乱码久久久久久影片| 国产精品欧美一级免费| 亚洲狠狠爱一区二区三区| 国精产品一区一区三区mba桃花| 成人免费视频免费观看| 欧美久久久久久蜜桃| 亚洲精品国产第一综合99久久| 蜜臀99久久精品久久久久久软件 | 91久久精品一区二区二区| 日韩欧美你懂的| 亚洲精品国产精华液| 高清免费成人av| 亚洲精品一线二线三线无人区| 亚洲综合av网| 91蜜桃视频在线| 久久精品人人做| 国产资源精品在线观看| 欧美在线观看视频在线| 日本一区二区三区dvd视频在线| 日本在线不卡视频| 国产偷国产偷精品高清尤物| 亚洲国产成人tv| 色综合久久88色综合天天 | 91在线观看地址| 国产欧美一区二区精品秋霞影院| 奇米在线7777在线精品| 欧美绝品在线观看成人午夜影视| 亚洲免费毛片网站| heyzo一本久久综合| 欧美国产亚洲另类动漫| 国产99久久久精品| 久久精品一区二区三区不卡牛牛| 久久精品av麻豆的观看方式| 欧美军同video69gay| 国产精品自在在线| 久久久国产午夜精品| 久久精品国产久精国产爱| 欧美日韩成人综合天天影院| 亚洲影院在线观看| 日本道免费精品一区二区三区| 最好看的中文字幕久久| 99精品视频在线观看| 亚洲蜜臀av乱码久久精品| 91免费在线视频观看| 一区二区三区资源| 欧美日韩亚洲高清一区二区| 日日夜夜精品视频免费| 91精品国产品国语在线不卡| 蜜臂av日日欢夜夜爽一区| 亚洲免费色视频| 欧美日韩一区久久| 奇米888四色在线精品| 欧美成人一区二区三区片免费 | 欧美性欧美巨大黑白大战| 亚洲国产人成综合网站| 欧美二区三区91| 精品中文字幕一区二区小辣椒| 2020国产精品自拍| 99久久婷婷国产| 日韩制服丝袜av| 久久免费电影网| 97久久人人超碰| 日韩 欧美一区二区三区| 久久久久久久久久美女| 91在线一区二区| www.亚洲人| 亚洲成在人线在线播放| 亚洲精品一线二线三线| 色综合久久中文综合久久97| 偷拍日韩校园综合在线| 国产色产综合色产在线视频| 日本韩国一区二区三区视频| 裸体一区二区三区| 亚洲精品五月天| 精品日韩一区二区| 97久久精品人人做人人爽| 日产国产高清一区二区三区 | 欧美视频第二页| 国产又粗又猛又爽又黄91精品| 亚洲人成网站在线| 亚洲一区二区三区在线看| 久久久亚洲高清| 91精品国产综合久久精品 | 亚洲摸摸操操av| 日韩美女主播在线视频一区二区三区| 成人性生交大片免费看中文网站| 亚洲韩国一区二区三区| 国产精品欧美综合在线| 欧美xxxxx裸体时装秀| 欧美主播一区二区三区美女| 国产麻豆9l精品三级站| 青青草成人在线观看| 亚洲国产视频在线| 亚洲色图制服诱惑| 欧美激情艳妇裸体舞| 亚洲一区影音先锋| 国产欧美日韩视频在线观看| 2020国产精品自拍| 日韩欧美资源站| 69久久99精品久久久久婷婷| 在线免费观看视频一区| 色综合天天综合网国产成人综合天 | 国产日韩欧美精品一区| 精品日韩欧美在线| 欧美一区二区三区视频免费 | 成人免费在线视频观看| 亚洲一区中文在线| 亚洲人亚洲人成电影网站色| 久久精品无码一区二区三区| 欧美哺乳videos| 欧美mv和日韩mv国产网站| 精品美女一区二区| 精品久久久久久久久久久久久久久久久 | 欧美一区二区视频在线观看 | 美女任你摸久久| 日韩国产精品久久| 99国产精品国产精品久久| 国产一区二区三区不卡在线观看| 狠狠色丁香婷婷综合久久片| 国产在线一区观看| 国产.欧美.日韩| 不卡的av在线播放| 99久精品国产| 精品视频资源站| 91精品国产综合久久香蕉的特点 | 中文在线资源观看网站视频免费不卡 | 精品视频一区二区三区免费| 欧美在线短视频| 日韩视频免费观看高清完整版 | 欧美一区欧美二区| 26uuu亚洲综合色欧美| 国产色综合一区| 亚洲女人小视频在线观看| 亚洲成av人片观看| 久久不见久久见免费视频1| 国内成人自拍视频| 99久久精品国产一区| 欧美日韩中文一区| 久久久久久久久久久久电影| 亚洲国产精品成人综合| 亚洲精品乱码久久久久久黑人| 亚洲bt欧美bt精品| 国产精品一区二区无线| 色一情一乱一乱一91av| 91精品久久久久久蜜臀| 国产精品美女久久久久久2018 | 日本丰满少妇一区二区三区| 欧美日韩成人一区二区| 久久久久成人黄色影片| 一区二区三区不卡视频在线观看| 日本午夜一本久久久综合| 成人精品视频.| 欧美一区二区三区在线观看| 欧美国产一区二区| 日本欧美一区二区| 成人av网站在线观看| 日韩精品一区二区三区视频在线观看| 国产精品视频看| 久久精品噜噜噜成人88aⅴ| 99精品偷自拍| 国产亚洲成年网址在线观看| 日韩激情一二三区| 91亚洲精品乱码久久久久久蜜桃| 欧美电影免费观看高清完整版在线观看|