亚洲欧美第一页_禁久久精品乱码_粉嫩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色婷婷| 国产福利91精品一区二区三区| 欧美日韩成人综合在线一区二区 | 精品国产免费久久| 亚洲国产成人va在线观看天堂| 丁香网亚洲国际| 国产亚洲精品免费| 男人的天堂久久精品| 欧美日韩第一区日日骚| 亚洲成人激情综合网| 精品视频一区 二区 三区| 亚洲精品乱码久久久久久黑人| 色综合天天综合| 日韩美女啊v在线免费观看| 成人黄色在线看| 亚洲欧美视频一区| 91国产视频在线观看| 亚洲福利视频三区| 欧美精品第1页| 久久se精品一区二区| 久久综合九色综合欧美亚洲| 国产美女一区二区| 国产日产精品1区| 国产成人鲁色资源国产91色综| 国产日韩欧美综合在线| 成人在线视频一区二区| 国产精品久久一级| 色狠狠一区二区| 偷拍日韩校园综合在线| 欧美日韩国产高清一区二区| 日本91福利区| 国产欧美日韩久久| 一本在线高清不卡dvd| 亚洲精品国产一区二区精华液| 在线观看亚洲精品视频| 日产精品久久久久久久性色| 久久综合九色综合97婷婷| 国产麻豆9l精品三级站| 亚洲欧美偷拍另类a∨色屁股| 欧美在线视频你懂得| 蜜臀久久久久久久| 国产精品久久久久9999吃药| 欧美日精品一区视频| 精品伊人久久久久7777人| 久久精品亚洲国产奇米99| 国产精品小仙女| 亚洲一级在线观看| 精品久久久久久久人人人人传媒| 成年人网站91| 青青青伊人色综合久久| 日本一区二区动态图| 欧美老肥妇做.爰bbww视频| 国产在线精品一区二区夜色| 自拍偷拍亚洲激情| 欧美电影免费观看高清完整版在线观看| 国产成人精品影视| 日韩电影一区二区三区四区| 国产成人精品三级| 久久日韩精品一区二区五区| 欧美日韩的一区二区| 91亚洲精华国产精华精华液| 国产成人在线观看免费网站| 精品一区二区在线视频| 美国三级日本三级久久99| 图片区日韩欧美亚洲| 一个色妞综合视频在线观看| 亚洲欧美日韩一区二区三区在线观看| 亚洲国产精品精华液2区45| 久久久久国产精品免费免费搜索 | 欧美情侣在线播放| 欧美色爱综合网| 欧美日韩精品三区| 欧美日韩在线播放三区四区| 欧洲中文字幕精品| 欧美丝袜丝交足nylons| 精品视频123区在线观看| 在线观看成人小视频| 欧美日韩一区三区| 欧美一区二区三区播放老司机| 91精品福利在线一区二区三区 | 欧美国产激情一区二区三区蜜月| 国产亚洲美州欧州综合国| 久久久99免费| 国产精品免费视频观看| 亚洲黄色小视频| 亚洲综合一二三区| 日韩精品91亚洲二区在线观看| 日韩精品电影在线| 精东粉嫩av免费一区二区三区| 国产乱人伦偷精品视频不卡| 高清不卡一区二区在线| 91婷婷韩国欧美一区二区| 欧美亚洲国产一区二区三区va| 欧美丰满少妇xxxxx高潮对白| 欧美丰满少妇xxxxx高潮对白| 精品国产欧美一区二区| 欧美国产日本韩| 亚洲一区中文在线| 免费成人在线观看视频| 国产精品一二三四区| 波多野结衣欧美| 精品视频一区二区不卡| 精品福利av导航| 最新欧美精品一区二区三区| 五月天一区二区三区| 极品少妇xxxx偷拍精品少妇| 成人黄色在线网站| 欧美疯狂做受xxxx富婆| 国产日韩欧美不卡| 香蕉久久夜色精品国产使用方法 | 一区二区三区在线高清| 日本成人在线看| 成人激情黄色小说| 欧美美女一区二区三区| 欧美高清在线视频| 无码av免费一区二区三区试看| 国产一区二区三区免费观看| 日本精品一级二级| 国产夜色精品一区二区av| 亚洲综合在线观看视频| 国产精品亚洲人在线观看| 欧美精品久久天天躁| 亚洲欧美怡红院| 激情五月播播久久久精品| 欧美吻胸吃奶大尺度电影| 日本一区二区三区视频视频| 日韩av在线播放中文字幕| 99视频有精品| 久久老女人爱爱| 午夜精品久久久久久久| 成人午夜激情在线| 精品日韩成人av| 亚洲一卡二卡三卡四卡五卡| 波多野结衣亚洲一区| 精品国产1区二区| 五月婷婷综合网| 色婷婷综合久久久久中文| 久久久www成人免费无遮挡大片| 亚洲国产精品久久久男人的天堂| 国产99久久久国产精品潘金网站| 91精品国产麻豆| 一区二区三区在线免费视频| 国产一区二区福利| 欧美一区二区三区日韩| 一区二区成人在线| 9i在线看片成人免费| 国产欧美va欧美不卡在线| 日产国产欧美视频一区精品| 欧美亚洲日本一区| 一区二区三区免费看视频| 成人黄色av电影| 中文字幕av一区二区三区| 国产精品一区二区男女羞羞无遮挡| 欧美一区二区精美| 天天av天天翘天天综合网 | 一本色道综合亚洲| 国产精品日韩成人| 成人免费毛片片v| 欧美激情一区三区| jvid福利写真一区二区三区| 中文字幕av一区二区三区免费看| 国产精品18久久久久久久网站| 欧美成人激情免费网| 老司机精品视频一区二区三区| 91精品国产福利在线观看| 日本不卡不码高清免费观看| 欧美精品精品一区| 免费精品99久久国产综合精品| 欧美日韩的一区二区| 日韩电影网1区2区| 欧美成人免费网站| 国产精品羞羞答答xxdd| 国产精品麻豆一区二区| www.日韩精品| 亚洲久草在线视频| 欧美色成人综合| 蜜臂av日日欢夜夜爽一区| 精品精品欲导航| 国产高清精品久久久久| 中文字幕佐山爱一区二区免费| 色又黄又爽网站www久久| 视频在线观看91| 精品剧情在线观看| 国产成人免费视频一区| 亚洲特级片在线| 欧美日韩国产综合草草| 免费成人在线网站| 欧美国产在线观看| 欧洲另类一二三四区| 日本不卡123| 亚洲国产精品精华液2区45| 日本精品一区二区三区高清| 日本视频一区二区| 欧美国产欧美综合| 欧美男同性恋视频网站| 国产在线国偷精品产拍免费yy| 国产精品理伦片| 69av一区二区三区| 成人免费观看av|