新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > avr單片機模擬比較器初始化配置及說明

        avr單片機模擬比較器初始化配置及說明

        作者: 時間:2016-11-18 來源:網絡 收藏
        avr模擬比較器對正極 AIN0 的值與負極 AIN1 的值進行比較。當 AIN0 上的電壓比負極 AIN1

        上的電壓要高時,模擬比較器的輸出 ACO 即置位。比較器的輸出可用來觸發定時器 / 計
        數器 1 的輸入捕捉功能。此外,比較器還可觸發自己專有的、獨立的中斷。用戶可以選擇
        比較器是以上升沿、下降沿還是交替變化的邊沿來觸發中斷。
        /*

        特殊功能 IO 寄存器- SFIOR

        本文引用地址:http://www.104case.com/article/201611/315765.htm

        7 6 5 4 3 2 1 0
        ADTS2 ADTS1 ADTS0 – ACME PUD PSR2 PSR10

        Bit 3 – ACME: 模擬比較器多路復用器使能

        當此位為邏輯 "1” ,且ADC 處于關閉狀態 (ADCSRA 寄存器的 ADEN 為 "0”) 時,ADC 多
        路復用器為模擬比較器選擇負極輸入。當此位為 "0” 時, AIN1 連接到比較器的負極輸入
        端。


        模擬比較器控制和狀態寄存器-ACSR
        7 6 5 4 3 2 1 0

        ACD ACBG ACO ACI ACIE ACIC ACIS1 ACIS0
        Bit 7 – ACD: 模擬比較器禁用
        ACD 置位時,模擬比較器的電源被切斷。可以在任何時候設置此位來關掉模擬比較器。這
        可以減少器件工作模式及空閑模式下的功耗。改變 ACD 位時,必須清零 ACSR 寄存器的
        ACIE 位來禁止模擬比較器中斷。否則 ACD 改變時可能會產生中斷。

        Bit 6 – ACBG: 選擇模擬比較器的能隙基準源
        ACBG 置位后,模擬比較器的正極輸入由能隙基準源所取代。否則,AIN0 連接到模擬比
        較器的正極輸入。見 P40 “ 片內基準電壓 ” 。

        Bit 5 – ACO: 模擬比較器輸出
        模擬比較器的輸出經過同步后直接連到 ACO。同步機制引入了 1-2 個時鐘周期的延時。

        Bit 4 – ACI: 模擬比較器中斷標志
        當比較器的輸出事件觸發了由ACIS1 及 ACIS0 定義的中斷模式時,ACI 置位。如果 ACIE
        和 SREG 寄存器的全局中斷標志 I 也置位,那么模擬比較器中斷服務程序即得以執行,同
        時 ACI 被硬件清零。 ACI 也可以通過寫 "1” 來清零。

        Bit 3 – ACIE: 模擬比較器中斷使能
        當 ACIE 位被置 "1” 且狀態寄存器中的全局中斷標志 I 也被置位時,模擬比較器中斷被激
        活。否則中斷被禁止。

        Bit 2 – ACIC: 模擬比較器輸入捕捉使能
        ACIC 置位后允許通過模擬比較器來觸發T/C1 的輸入捕捉功能。此時比較器的輸出被直接
        連接到輸入捕捉的前端邏輯,從而使得比較器可以利用 T/C1 輸入捕捉中斷邏輯的噪聲抑
        制器及觸發沿選擇功能。 ACIC 為 "0” 時模擬比較器及輸入捕捉功能之間沒有任何聯系。
        為了使比較器可以觸發 T/C1 的輸入捕捉中斷,定時器中斷屏蔽寄存器 TIMSK 的 TICIE1
        必須置位。

        Bits 1, 0 – ACIS1, ACIS0: 模擬比較器中斷模式選擇
        這兩位確定觸發模擬比較器中斷的事件。

        ACIS1/ACIS0 設置

        ACIS1 ACIS0 中斷模式
        0 0 比較器輸出變化即可觸發中斷
        0 1 保留
        1 0 比較器輸出的下降沿產生中斷
        1 1 比較器輸出的上升沿產生中斷

        需要改變 ACIS1/ACIS0 時,必須清零 ACSR 寄存器的中斷使能位來禁止模擬比較器中
        斷。否則有可能在改變這兩位時產生中斷。


        模擬比較器多工輸入
        可以選擇 ADC7..0 之中的任意一個來代替模擬比較器的負極輸入端。ADC 復用器可用來
        完成這個功能。當然,為了使用這個功能首先必須關掉 ADC。如果模擬比較器復用器使
        能位 (SFIOR 中的ACME) 被置位,且 ADC 也已經關掉 (ADCSRA 寄存器的ADEN 為 0) ,
        則可以通過 ADMUX 寄存器的 MUX2..0 來選擇替代模擬比較器負極輸入的管腳,
        如果 ACME 清零或 ADEN 置位,則模擬比較器的負極輸入為 AIN1。

        模擬比較器復用輸入
        ACME ADEN MUX2..0 模擬比較器負極輸入
        0 x xxx AIN1
        1 1 xxx AIN1
        1 0 000 ADC0
        1 0 001 ADC1
        1 0 010 ADC2
        1 0 011 ADC3
        1 0 100 ADC4
        1 0 101 ADC5
        1 0 110 ADC6
        1 0 111 ADC7

        */
        #include
        #include
        #pragma interrupt_handler ANA_COMP_inter:iv_ANA_COMP
        #pragma interrupt_handler Timer1_CAPT:iv_TIMER1_CAPT
        unsigned int ANA_COMP_fun=0;
        unsigned int T1_CAPT=0;
        void T1_capt_init(void)
        {
        TCNT1=500;//可以賦值,也可以不用。默認是0
        TCCR1A=0x00; //普通端口操作
        TCCR1B|=0X04;//TCCR1B=0X03;256分頻.
        TCCR1B|=0x80;//ICNC1:1使能噪聲捕捉功能
        TCCR1B|=1<TIMSK|=0x20; //T1事件捕捉中斷使能
        }


        void ANA_COMP_init(unsigned char mode,unsigned char ANI1_select)
        {
        //SFIOR|=1
        switch(mode)
        {
        case 0:ACSR&=~((1if(ANI1_select)//如果ANI1_select=0,默認的是模擬比較器的負極輸入端
        {
        switch(ANI1_select)
        {
        case 1:SFIOR|=1}

        T1_capt_init();
        // 如果要用到邊沿觸發功能,就用用到T/C1 的輸入捕捉功能中的觸發沿選擇功能
        //如果不用邊沿觸發功能,也不用T/C1 的輸入捕捉功能,一下兩行不用,就屏蔽掉吧。
        ACSR|=1
        }


        SREG|=0x80; //開放全局中斷
        }

        void ANA_COMP_inter()
        {
        ANA_COMP_fun++;

        }
        void Timer1_CAPT()
        {
        T1_CAPT=ICR1;
        }



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 河北省| 成武县| 启东市| 锡林浩特市| 奎屯市| 宣汉县| 肇源县| 盐亭县| 旅游| 广平县| 汝阳县| 石阡县| 安西县| 文安县| 西青区| 海林市| 青河县| 山阴县| 高碑店市| 玉门市| 肥城市| 当阳市| 清丰县| 饶阳县| 越西县| 江阴市| 黔西| 洛宁县| 姜堰市| 平果县| 兴城市| 江口县| 凤山市| 大足县| 于田县| 饶河县| 韶关市| 内江市| 当雄县| 华蓥市| 丰顺县|