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

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

?? pwm.c~

?? 智能充電參考程序 可以控制整個充電過程希望對大家有幫助
?? C~
字號:
/****************************************Copyright (c)**************************************************
**                              智 能 充 電 器 開 發 小 組
**                                     OurAVR 論壇
**                                   QQ 群: 26052247 
**
**                               http://www.ouravr.com/bbs
**
**--------------文件信息--------------------------------------------------------------------------------
**文   件   名: PWM.c
**創   建   人: Trinove
**最后修改日期: 2008年01月13日
**描        述: PWM 輸出的底層函數  FOR AVR MCU / Mega16
**              
**--------------歷史版本信息----------------------------------------------------------------------------
** 創建人: Trinove
** 版  本: v0.01
** 日 期: 2008年01月13日
** 描 述: 原始版本
**
**--------------歷史版本信息------------------------------------------------------------------------------
** 修改人: martin7wind
** 日 期: 2008年02月24日
** 描 述: For 智能充電器
**
**--------------當前版本修訂------------------------------------------------------------------------------
** 修改人: 呂海安
** 日 期: 2008年03月03日
** 描 述: 修改格式,歸檔
**
**------------------------------------------------------------------------------------------------------
**--------------當前版本修訂------------------------------------------------------------------------------
** 修改人: 村長 aleyn.wu
** 日 期: 2008年3月3日
** 描 述: 修改了一些BUG,使本項目能在CVAVR下編譯通過
**         
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#include "config.h"
#include "PWM.h"


#define CHARGER_CHANNEL_1_OCR   OCR1A
#define CHARGER_CHANNEL_2_OCR   OCR1B


// 根據全局數據表的PWM相關定義
#define PID_FLAG     18

#define CHARGE       1
#define DisCHARGE    2

// 打開或關閉 Timer1
#define START_CHARGE	     TCCR1B = 0x0A
#define STOP_CHARGE	     TCCR1B = 0x00

// 更改端口的輸入輸出特性,從而控制放電
#define STOP_DisCHARGE	     BIT_CLR(DDRB, PB3);BIT_CLR(DDRD,PD7)
#define START_DisCHARGE      BIT_SET(DDRB, PB3);BIT_SET(DDRD,PD7)

//BAT0
#define BAT0_PWM_STATUS             40
#define BAT0_PWM_VOL_OR_CUR         41  // 0: vol, 1: cur
#define BAT0_PWM_OUTPUT_STATUS      42  // 0: 連續, 1: 斷續
#define BAT0_PWM_BAT0               43
#define BAT0_PID_P                  45
#define BAT0_PID_I                  47
#define BAT0_PID_D                  49
#define BAT0_VOL_SET                51
#define BAT0_CUR_SET                53
#define BAT0_PCHARGE_CHARGE_TIME    55
#define BAT0_PCHARGE_DiCHARGE_TIME  56
#define BAT0_PCHARGE_PAUSE_TIME     57

//BAT1
#define BAT1_PWM_STATUS             61
#define BAT1_PWM_VOL_OR_CUR         62  // 0: vol, 1: cur
#define BAT1_PWM_OUTPUT_STATUS      63  // 0: 連續, 1: 斷續
#define BAT1_PWM_BAT1               64
#define BAT1_PID_P                  66
#define BAT1_PID_I                  68
#define BAT1_PID_D                  70
#define BAT1_VOL_SET                73
#define BAT1_CUR_SET                75
#define BAT1_PCHARGE_CHARGE_TIME    76
#define BAT1_PCHARGE_DiCHARGE_TIME  77
#define BAT1_PCHARGE_PAUSE_TIME     78

#define VOL 1
#define CUR 2


/*******************************************************************************************************
** 函數名稱: pwm_port_init
** 功能描述: PWM 輸出端口定義初始化
** 輸入參數: 無
** 輸出參數: 無
********************************************************************************************************/
void pwm_port_init()
{
    BIT_SET(DDRD, PD5);
    BIT_SET(DDRD, PD4);
    
    BIT_SET(DDRB,PB3);
    BIT_SET(DDRD,PD7);
}

/*******************************************************************************************************
** 函數名稱: timer0_init
** 功能描述: 定時器 T0 初始化
** 輸入參數: 無
** 輸出參數: 無
********************************************************************************************************/
void timer0_init(void)
{  
    // Timer/Counter 0 initialization
    // Clock source: System Clock
    // Clock value: 15.625 kHz
    // Mode: Fast PWM top=FFh
    // OC0 output: Non-Inverted PWM
    
    TCCR0  = 0x00;  // 停止定時器
    TCNT0  = 0x00;  // 初始值   16.384 mS
    OCR0   = 0x00;  // 匹配值
    TIMSK |= 0x01;  // 中斷允許
    //TCCR0  = 0x6D;  // 啟動定時器  
    TCCR0  = 0x4D;  // 啟動定時器
}

/*******************************************************************************************************
** 函數名稱: timer0_init
** 功能描述: 定時 T1 初始化
**           OCR1A 升序匹配0,降序匹配1
**           OCR1B 升序匹配0,降序匹配1
**           8 的預分頻,3.906KHZ
**           9 位快速PWM
** 輸入參數: 無
** 輸出參數: 無
********************************************************************************************************/
void timer1_init(void)
{    
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 16000.000 kHz
// Mode: Fast PWM top=01FFh
// OC1A output: Non-Inv.
// OC1B output: Non-Inv.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off

    TCCR1B = 0x00;  // 停止定時器
    TIMSK |= 0x00;  // 中斷允許
    TCNT1H = 0x00;
    TCNT1L = 0x00;  // 初始值
    OCR1AH = 0x00;
    OCR1AL = 0x00;  // 匹配 A 值
    OCR1BH = 0x00;
    OCR1BL = 0x7F;  // 匹配 B 值
    ICR1H  = 0xFF;
    ICR1L  = 0xFF;  // 輸入捕捉匹配值
    TCCR1A = 0xA2;
    TCCR1B = 0x09;  // 啟動定時器
}       



/*******************************************************************************************************
** 函數名稱: timer0_init
** 功能描述: 定時器 T2 初始化
** 輸入參數: 無
** 輸出參數: 無
********************************************************************************************************/
void timer2_init(void)
{
    // Timer/Counter 2 initialization
    // Clock source: System Clock
    // Clock value: 15.625 kHz
    // Mode: Fast PWM top=FFh
    // OC2 output: Non-Inverted PWM
    
    TCCR2  = 0x00;  // 停止定時器
    ASSR   = 0x00;  // 異步時鐘模式
    TCNT2  = 0x00;  // 初始值
    OCR2   = 0x7f;  // 匹配值
    TIMSK |= 0x00;  // 中斷不允許
    //TCCR2  = 0x6F;  // 啟動定時器  
    TCCR2 = 0x4F;
}

/*******************************************************************************************************
** 函數名稱: pwm_init
** 功能描述: PWM 初始化
** 輸入參數: 無
** 輸出參數: 無
********************************************************************************************************/
void pwm_init()
{
    pwm_port_init(); // 端口初始化
    
    timer1_init();   // 兩路充電 PWM 
    timer0_init();   // 第一路放電 PWM,主時鐘
    timer2_init();   // 第二路放電 PWM
}

#define BAT0   1
#define BAT1   2

/*******************************************************************************************************
** 函數名稱: bat_discharge
** 功能描述: 電池放電, 僅支持電流模式
** 輸入參數: INT8U bat_no:
**           INT16U discharge_value:
** 輸出參數: 無
********************************************************************************************************/
void bat_discharge(INT8U bat_no,INT16U discharge_value)
{
    
/*    STOP_CHARGE;    // 關閉充電
    
    START_DisCHARGE;    // 開始放電
    
    if(bat_no == BAT0)
    {
        memory[BAT0_PWM_STATUS - 1] = DisCHARGE;
        memory[BAT0_CUR_SET - 1] = discharge_value >> 8;
        memory[BAT0_CUR_SET] = discharge_value & 0x00ff;
    }
    else
    {
        memory[BAT1_PWM_STATUS - 1] = DisCHARGE;
        memory[BAT1_CUR_SET - 1] = discharge_value >> 8;
        memory[BAT1_CUR_SET] = discharge_value & 0x00ff;
    }
*/
}

/*******************************************************************************************************
** 函數名稱: bat_charge_set
** 功能描述: 電池充電設置
** 輸入參數: INT8U bat_no: 電池 1 或 2
**           INT8U cur_or_vol: 電流控制還是電壓控制
**           INT16U charge_data_set: 電流或電壓設置值
** 輸出參數: 無
********************************************************************************************************/
void bat_charge_set(INT8U bat_no, INT8U cur_or_vol,INT16U charge_data_set)
{
/*    //關閉放電
    STOP_DisCHARGE;
    
    START_CHARGE;
    
    if(bat_no == BAT0)
    {
        memory[BAT0_PWM_STATUS - 1] = CHARGE;
        
        memory[BAT0_PWM_VOL_OR_CUR - 1] = cur_or_vol;
    
        if(cur_or_vol==VOL)
        {
            memory[BAT0_VOL_SET - 1] = charge_data_set >> 8;
            memory[BAT0_VOL_SET] = charge_data_set & 0x00ff;
        }
        else if(cur_or_vol==CUR)
        {
            memory[BAT0_CUR_SET - 1] = charge_data_set >> 8;
            memory[BAT0_CUR_SET] = charge_data_set & 0x00ff;
        }
        else
        {
            
        }
    }

    else if(bat_no == BAT1)
    {
        memory[BAT1_PWM_STATUS - 1] = CHARGE;
        
        memory[BAT1_PWM_VOL_OR_CUR - 1] = cur_or_vol;
        
        if(cur_or_vol == VOL)
        {
            memory[BAT1_VOL_SET - 1] = charge_data_set >> 8;
            memory[BAT1_VOL_SET] = charge_data_set & 0x00ff;
        }
        else if(cur_or_vol == CUR)
        {
            memory[BAT1_CUR_SET - 1] = charge_data_set >> 8;
            memory[BAT1_CUR_SET] = charge_data_set & 0x00ff;
        }
        else
        {
        //
        }			
    }*/
}

/*******************************************************************************************************
** 函數名稱: cell_pid0
** 功能描述: 電池1 PID 運算
** 輸入參數: 無
** 輸出參數: PID運算出來的差值
********************************************************************************************************/
INT16S cell_pid0(void)
{/*
    INT16S result;
    
    if(memory[BAT0_PWM_STATUS - 1] == CHARGE)
    {
        if(memory[BAT0_PWM_VOL_OR_CUR-1] == VOL)
        {
            filter_adc(BAT_0_VOL_CH);
            
            result = Memory_Char_to_Int(BAT_0_BASE + BAT_0_VOL - 1) - Memory_Char_to_Int(BAT0_VOL_SET - 1);
        }
        else if(memory[BAT0_PWM_VOL_OR_CUR - 1] == CUR)
        {
            filter_adc(BAT_0_CUR_CH);
            
            result = Memory_Char_to_Int(BAT_0_BASE + BAT_0_CUR - 1) - Memory_Char_to_Int(BAT0_CUR_SET - 1);
        }
        else
        {
        
        }
    }
    else if(memory[BAT0_PWM_STATUS - 1] == DisCHARGE)
    {
        filter_adc(BAT_0_CUR_CH);
        
        result = Memory_Char_to_Int(BAT_0_BASE + BAT_0_CUR - 1) + Memory_Char_to_Int(BAT0_CUR_SET - 1);
    
    }
    else
    {
        //put_c(98);
    }
                  */
    return result;
}



/*******************************************************************************************************
** 函數名稱: cell_pid1
** 功能描述: 電池2 PID 運算
** 輸入參數: 無
** 輸出參數: PID運算出來的差值
********************************************************************************************************/
INT16S cell_pid1(void)
{
    INT16S result;

    return result;
}



/*******************************************************************************************************
** 函數名稱: cell_output
** 功能描述: 電池1、2  PWM  輸出控制
**           根據需要調用相應的PID控制程序,由PID使能標志控制
** 輸入參數: 無
** 輸出參數: 無
********************************************************************************************************/
void cell_output(void)
{   /*
    INT16U pwm_value;
    INT8U temp;

    temp = OCR1AH;
    
    pwm_value = ((INT16U)temp) << 8;
    
    pwm_value |= OCR1AL;
    
    if(memory[18])  //進行PID運算控制PWM
    {
    
    }
    else  //直接進行PWM控制操作
    {
        if(cell_pid0() > 0)
        {		
            //put_c(98);
            if(memory[BAT0_PWM_STATUS - 1] == CHARGE)
            {	
                //put_c(97);
                if(pwm_value != 0x0000)					
                {
                    pwm_value--;
                }
                OCR1AH = (INT8U)(pwm_value >> 8);
        
                OCR1AL = (INT8U)(pwm_value & 0x00ff);
            }
            else if(memory[BAT0_PWM_STATUS - 1] == DisCHARGE)
            {
                if(OCR0 != 0xfe)
                {
                    OCR0 ++;
                }
            }
        }
        else
        {
            //put_c(97);
        
            if(memory[BAT0_PWM_STATUS - 1] == CHARGE)
            {
                if(pwm_value != 0xFFFF)					
                pwm_value++;
                
                OCR1AH = (INT8U)(pwm_value >> 8);
                
                OCR1AL = (INT8U)(pwm_value & 0x00ff);
            }
            else if(memory[BAT0_PWM_STATUS - 1] == DisCHARGE)
            {
                if(OCR2 != 0x01)
                {
                    OCR0 --;
                }
            }
        
        }
        
    }*/

}

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

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人夜色高潮福利影视| 欧美群妇大交群中文字幕| 欧美三区在线观看| 亚洲欧美激情插| 91在线高清观看| 亚洲免费观看高清完整版在线观看熊| 久久久综合激的五月天| 国产成人免费9x9x人网站视频| 麻豆精品新av中文字幕| 亚洲美女屁股眼交3| 1000精品久久久久久久久| 欧美中文字幕亚洲一区二区va在线| 亚洲.国产.中文慕字在线| 欧美一级黄色大片| 成人丝袜高跟foot| 亚洲成a人v欧美综合天堂| 亚洲国产aⅴ成人精品无吗| 久久精品亚洲精品国产欧美| 欧美视频一区二区在线观看| 国产乱对白刺激视频不卡| 亚洲成人av福利| 久久精品国产久精国产爱| 亚洲欧洲国产日本综合| 亚洲一区二区三区四区的| 中文字幕欧美日韩一区| 欧美精品一二三四| 色综合久久天天| 国产综合久久久久久久久久久久| 亚洲老妇xxxxxx| 国产欧美久久久精品影院| 日韩一区二区三区在线观看| 国产色产综合色产在线视频| 亚洲免费电影在线| 久久精品国产99| 色先锋aa成人| 久久久亚洲午夜电影| 亚洲精品第1页| 国产精品羞羞答答xxdd| 欧美日韩亚洲综合| 国产人伦精品一区二区| 亚洲成a人片在线观看中文| 国产精品888| 欧美亚洲综合另类| 中文字幕av免费专区久久| 午夜精品久久久久久久久久久 | 自拍偷拍国产亚洲| 久久久久久一级片| 亚洲精品欧美二区三区中文字幕| 精品一区二区三区免费毛片爱| 日韩成人av影视| 一区二区三区在线播| 亚洲黄色在线视频| 国产乱人伦偷精品视频免下载| 欧美综合视频在线观看| 中文字幕欧美日本乱码一线二线| 天天色天天爱天天射综合| 成人a级免费电影| 成人精品电影在线观看| 日韩欧美国产综合在线一区二区三区| 在线综合亚洲欧美在线视频| 欧美色中文字幕| 亚洲免费电影在线| 成人短视频下载| 国产精品污www在线观看| 亚洲视频在线观看一区| 国产成人免费视频网站| 欧美不卡一区二区三区四区| 欧美xfplay| 欧美aⅴ一区二区三区视频| 黄网站免费久久| 日韩欧美第一区| 成人小视频在线| 精品国产乱码久久| 国产人成亚洲第一网站在线播放| 视频一区中文字幕国产| 国内精品在线播放| 精品国产污网站| 国产真实乱偷精品视频免| 日韩一级大片在线观看| 日韩黄色免费电影| 91麻豆精品国产91久久久久久久久 | 欧美亚洲愉拍一区二区| 亚洲人成精品久久久久| 97精品超碰一区二区三区| 欧美主播一区二区三区| 亚洲aaa精品| 91精品国产乱码| 一区二区三区四区激情| 日本久久电影网| 久久亚区不卡日本| 亚洲图片有声小说| 欧美美女bb生活片| 紧缚奴在线一区二区三区| wwww国产精品欧美| 99久久免费视频.com| 亚洲精品国产一区二区三区四区在线| 欧美专区在线观看一区| 日韩精品欧美精品| 国产色产综合色产在线视频| 99视频超级精品| 精品成人一区二区三区| 国产盗摄一区二区三区| 亚洲欧美日韩综合aⅴ视频| 欧美日韩综合在线免费观看| 麻豆精品视频在线观看视频| 久久久久久久久免费| 97精品电影院| 九色综合国产一区二区三区| 国产精品久久久久久妇女6080 | 成人av影院在线| 亚洲成人激情综合网| 欧美videofree性高清杂交| www.欧美精品一二区| 亚洲福利视频一区| 国产日韩欧美电影| 91精品国产综合久久福利| 国产不卡视频在线观看| 日本一区二区三区四区| 欧美性三三影院| 懂色av一区二区三区免费观看| 亚洲影院理伦片| 国产精品色婷婷| 欧美一区二区三区免费视频 | 久久国产生活片100| 国产精品理论片| 日韩欧美成人午夜| 欧美日韩免费观看一区三区| www.欧美日韩国产在线| 黄色资源网久久资源365| 亚洲综合精品自拍| 国产精品你懂的在线欣赏| 日韩丝袜情趣美女图片| 色狠狠一区二区三区香蕉| 国产精品18久久久久久久久| 午夜久久久久久久久久一区二区| 自拍偷拍欧美激情| 中文字幕欧美日韩一区| 精品毛片乱码1区2区3区| 欧美精品少妇一区二区三区| 色综合久久久久久久久| 成人午夜视频在线| 国产福利电影一区二区三区| 九一久久久久久| 久久精品国产久精国产| 日韩影院免费视频| 亚洲国产美女搞黄色| 亚洲久草在线视频| 亚洲精品乱码久久久久久久久| 中文字幕乱码久久午夜不卡| 精品精品欲导航| 精品少妇一区二区三区视频免付费| 欧美人体做爰大胆视频| 欧美日韩成人综合| 欧美区在线观看| 555www色欧美视频| 欧美一级二级在线观看| 日韩欧美亚洲国产精品字幕久久久| 欧美一区在线视频| 日韩免费在线观看| 精品免费一区二区三区| 精品欧美乱码久久久久久 | 欧美精品乱人伦久久久久久| 欧美色国产精品| 555www色欧美视频| 精品久久久久久久久久久久久久久| 欧美岛国在线观看| 久久久久九九视频| 日韩理论电影院| 亚洲h动漫在线| 久久av资源网| 99精品久久免费看蜜臀剧情介绍| eeuss国产一区二区三区| 色婷婷综合激情| 日韩欧美激情一区| 国产午夜精品理论片a级大结局| 国产精品乱人伦| 亚洲一区二区三区激情| 久久成人免费日本黄色| 国产69精品久久久久777| 色爱区综合激月婷婷| 欧美一区二区女人| 中文一区一区三区高中清不卡| 亚洲女同女同女同女同女同69| 日日夜夜免费精品| 国产福利精品一区二区| 欧美在线观看视频一区二区| 日韩三级.com| 18涩涩午夜精品.www| 蜜臀av一区二区| 9久草视频在线视频精品| 欧美日韩亚洲综合一区| 亚洲国产精品99久久久久久久久| 亚洲成人资源在线| 丁香桃色午夜亚洲一区二区三区| 欧洲一区在线电影| 国产亚洲婷婷免费| 日av在线不卡| 色国产精品一区在线观看| 日韩精品一区二区在线| 一区二区免费视频|