野外做受三级视频,人妻无码第一区二区三区,精品欧美成人高清在线观看,色屁屁WWW影院免费观看入口

新聞資訊
AVR單片機(jī)模擬比較器實(shí)驗(yàn) ATmage16
2010-11-07


6.1 模擬比較器實(shí)驗(yàn)
6.1.1 實(shí)例功能
模擬比較器和模數(shù)轉(zhuǎn)換ADC是單片機(jī)內(nèi)部最常見的兩種支持模擬信號(hào)輸入的功能接口。大部分AVR都具備這兩種類型的接口。本實(shí)例將以ATmage16芯片為例,介紹模擬比較器的使用方法,在下一個(gè)實(shí)例中介紹模數(shù)轉(zhuǎn)換ADC。
使用模擬比較器可以實(shí)現(xiàn)單片機(jī)系統(tǒng)電源電壓的檢測(cè),更巧妙的應(yīng)用是利用模擬比較器和一些簡單的外圍電路,設(shè)計(jì)簡單的模數(shù)轉(zhuǎn)換ADC。
本實(shí)例實(shí)現(xiàn)利用模擬比較器比較某一點(diǎn)電壓與內(nèi)部模擬比較器參考電壓的高低。共有3個(gè)功能模塊,分別描述如下:
● 單片機(jī)系統(tǒng):使用ATmega16單片機(jī)的模擬比較器比較某一點(diǎn)的電壓與參考電壓的關(guān)系。
● 外圍電路:利用電阻設(shè)計(jì)的分壓電路。
● 軟件程序:熟悉掌握ATmega16單片機(jī)的模擬比較器的使用。
通過本實(shí)例的學(xué)習(xí),掌握相關(guān)電路設(shè)計(jì),并掌握以下知識(shí)點(diǎn):
● 了解單片機(jī)的模擬比較器。
● 了解單片機(jī)的模擬比較器的使用。
● 掌握單片機(jī)模擬比較器的編程。
6.1.2、器件和原理
1、模擬比較器的介紹
ATmega16的模擬比較器可以實(shí)現(xiàn)對(duì)兩個(gè)輸入端:正極AIN0和負(fù)極AIN1(分別對(duì)應(yīng)于ATmage16的引腳PB2、PB3)的模擬輸入電壓進(jìn)行比較。當(dāng)AIN0上的電壓高于AIN1的電壓時(shí),模擬比較器輸出ACO被設(shè)為“1”。比較器的輸出還可以被設(shè)置作為定時(shí)計(jì)數(shù)器1輸入捕獲功能的觸發(fā)信號(hào)。此外,比較器的輸出可以觸發(fā)一個(gè)獨(dú)立的模擬比較器中斷。用戶可以選擇使用比較器輸出的上升沿、下降沿或事件觸發(fā)作為模擬比較器中斷的觸發(fā)信號(hào)。
2、與模擬比較器相關(guān)的寄存器
與模擬比較器相關(guān)的寄存器是SFIOR、ACSR。用戶通過這兩個(gè)寄存器的相關(guān)位實(shí)現(xiàn)對(duì)模擬比較器的設(shè)置和控制。

  1. 特殊功能IO寄存器—SFIOR

  2. 寄存器SFIOR中的第3位ACME為模擬比較器多路使能控制位。當(dāng)該位為邏輯“1”,同時(shí)模數(shù)轉(zhuǎn)換(ADC)功能被關(guān)閉(ADCSRA寄存器中的ADEN使能位為“0”)時(shí),允許使用ADC多路復(fù)用器選擇ADC的模擬輸入端口作為模擬比較器反向端的輸入信號(hào)源。當(dāng)該位為零時(shí),AIN1引腳的信號(hào)將加到模擬比較器反向端。
  3. 本實(shí)例中我們使用ADC的模擬輸入端口作為模擬比較器反向端的輸入信號(hào)源,所以需要設(shè)置第3位ACME為1.
  4. 模擬比較器控制和狀態(tài)寄存器—ACSR

  ACSR是模擬比較器主要的控制寄存器,其中各個(gè)位的作用如下:

  1. 位7ACD:模擬比較器禁止

當(dāng)該位設(shè)為“1”時(shí),提供給模擬比較器的電源關(guān)閉。該位可以在任何時(shí)候被置位,從而關(guān)閉模擬比較器。在MCU閑置模式,且無需將模擬比較器作為喚醒源的情況下,關(guān)閉模擬比較器可以減少電源的消耗。要改變ACD位的設(shè)置時(shí),應(yīng)該先將寄存器ACSR中的ACIE位清零,把模擬比較器中斷禁止掉。否則,在改變ADC位設(shè)置時(shí)會(huì)產(chǎn)生一個(gè)中斷。

  1. 位6—ACBG:模擬比較器的能隙參考源選擇

當(dāng)該位為“1”時(shí),芯片內(nèi)部一個(gè)固定的能隙(Bandgap)參考電源1.22V將代替AIN0的輸入,作為模擬比較器的正極輸入端。當(dāng)該位被清零時(shí),AIN0的輸入仍然作為模擬比較器的正極輸入端。

  1. 位5—ACO:模擬比較器輸出

模擬比較器的輸出信號(hào)經(jīng)過同步處理后直接與ACO相連。由于經(jīng)過同步處理,ACO與模擬比較器的輸出之間,會(huì)有1~2個(gè)時(shí)鐘的延時(shí)。

  1. 位4—ACI:模擬比較器中斷標(biāo)志位

當(dāng)模擬比較器的輸出事件符合中斷觸發(fā)條件時(shí)(中斷觸發(fā)條件由ACIS1 和ACIS0 定義),ACI由硬件置“1”。若ACIE 位置“1”,且狀態(tài)寄存器中的I位為“1”時(shí),MCU響應(yīng)模擬比較器中斷。當(dāng)轉(zhuǎn)入模擬比較中斷處理向量時(shí),ACI被硬件自動(dòng)清空。此外,也可使用軟件方式清零ACI:對(duì)ACI標(biāo)志位寫入邏輯“1”來清零該位。

  1. 位3ACIE:模擬比較器中斷允許

當(dāng)ACIE位設(shè)為“1”,且狀態(tài)寄存器中的I位被設(shè)為“1”時(shí),允許模擬比較器中斷觸發(fā)。當(dāng)ACIE被清“0”時(shí),模擬比較器中斷被禁止。

  1. 位2—ACIC:模擬比較器輸入捕獲允許

當(dāng)該位設(shè)置為“1”時(shí),定時(shí)計(jì)數(shù)器1的輸入捕獲功能將由模擬比較器的輸出來觸發(fā)。在這種情況下,模擬比較器的輸出直接連到輸入捕獲前端邏輯電路,從而能利用定時(shí)器/計(jì)數(shù)器1輸入捕獲中斷的噪聲消除和邊緣選擇的特性。當(dāng)該位被清零時(shí),模擬比較器和輸入捕獲功能之間沒有聯(lián)系。要使能比較器觸發(fā)定時(shí)器/計(jì)數(shù)器1的輸入捕獲中斷,定時(shí)器中斷屏蔽寄存器(TIMSK)中 的TICIE1位必須被設(shè)置。

  1. 位1、0—ACIS1、ACIS0:模擬比較器中斷模式選擇

這2個(gè)位決定哪種模擬比較器的輸出事件可以觸發(fā)模擬比較器的中斷。不同的設(shè)置參見表6.1.1。

表6.1.1  模擬比較器中斷模式選擇

ACIS1

ACIS0

中 斷 模 式

0

0

比較器輸出的上升沿和下降沿都觸發(fā)中斷

0

1

保留

1

0

比較器輸出的下降沿觸發(fā)中斷

1

1

比較器輸出的上升沿觸發(fā)中斷

注意:當(dāng)要改變ACIS1、ACIS0時(shí),必須先清除ACSR寄存器中的中斷允許位,以禁止模擬比較器中斷;否則,當(dāng)這些位被改變時(shí),會(huì)發(fā)生中斷。
在本實(shí)例中,我們要使用模擬比較器,所以應(yīng)當(dāng)允許模擬比較器,即ACD應(yīng)為0,選擇芯片內(nèi)部的固定能隙參考電源。即ACBG設(shè)置為1,我們不使用中斷和捕獲,所以不必理會(huì)與此相關(guān)的各位。

  1. 模擬比較器的多路輸入

用戶可以選擇ADC7..0引腳中的任一路的模擬信號(hào)代替AIN1引腳,作為模擬比較器的反向輸入端。模數(shù)轉(zhuǎn)換的ADC多路復(fù)用器提供這種選擇的能力,但此時(shí)必須關(guān)閉芯片的ADC功能。當(dāng)模擬比較器的多路選擇使能位(SFIOR中的ACME位)置“1”,同時(shí)ADC被關(guān)閉時(shí)(ADCSRA中的ADEN位置“0”),由寄存器ADMUX中的MUX[2:0]位所確定的引腳將代替AIN1作為模擬比較器的反向輸入端,如表6.1.2所示。如果ACME被清零,或ADEN被置1,則AIN1仍將為模擬比較器的反向輸入端。

表6.1.2  模擬比較器多路輸入選擇

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

本實(shí)例中我們采用ADC0作為模擬比較器的反向輸入端,所以選擇ADMUX寄存器中的MUX2:0=0
6.1.3、電路
本實(shí)例的電路包含分壓電路,下面的電路是電阻分壓電路,如下圖所示。

1、電路原理
在本實(shí)例中利用電位器(即可調(diào)電阻)組成分壓電路,單片機(jī)的PA0連接在電位器的動(dòng)片引腳上,這個(gè)電路實(shí)際上相當(dāng)于兩個(gè)電阻組成的串聯(lián)電路,只不過這兩個(gè)電阻的阻值是可變的,改變動(dòng)片的位置,就可以改變PA0與地之間的電阻值,根據(jù)串聯(lián)電路分壓的原理,當(dāng)動(dòng)片移動(dòng)時(shí),PA0處的電壓就會(huì)發(fā)生變化。
2、電路連接
電路電位器的動(dòng)片引腳連接到單片機(jī)的PA0口,作為模擬比較器的反向輸入端。
6.1.4、程序設(shè)計(jì)
1、程序功能
程序的功能是使用單片機(jī)的模擬比較器比較PA0口的電壓與單片機(jī)內(nèi)部的固定能隙電壓(1.22V)之間的高低,如果PA0的電壓低于1.22V,則D1燈點(diǎn)亮,否則D2燈點(diǎn)亮。
2函數(shù)說明
本程序有兩個(gè)功能函數(shù),分別是:
● 端口初始化函數(shù),設(shè)置連接D1、D2兩個(gè)LED的端口PB0、PB1為輸出口,輸出低電平,使兩個(gè)LED都處于熄滅狀態(tài)。
● 模擬比較器初始化函數(shù)
設(shè)置與模擬比較器相關(guān)的寄存器,使模擬器按照一定的方式工作。
 3、使用WINAVR開發(fā)環(huán)境,我們使用的是外部12M的晶振,所以需要將makefile文件中的時(shí)鐘頻率修改為12M。另外在程序燒錄到單片機(jī)的時(shí)候,熔絲位也要選擇為外部12M晶振(注意是晶振,不是外部振蕩器,一定不要選擇錯(cuò)了,否則會(huì)導(dǎo)致單片機(jī)不能再燒寫程序)。
 4、程序代碼
[code="CPP"]
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h> //中斷函數(shù)頭文件

//函數(shù)聲明
void Port_Init(void); //端口初始化配置
void Compare_Init(void); //模擬比較器初始化設(shè)置

int main(void)
{
Port_Init();
Compare_Init();

sei(); //使能全局中斷

while(1)
{
if(ACSR & (1 << ACO)) //判斷ADC0的電壓是否大于1.22V
{
PORTB = 0X01; //低于1.22V,D1點(diǎn)亮,
}
else
{
PORTB = 0X02; //高于1.22V,D2點(diǎn)亮,
}
}
}

//端口狀態(tài)初始化設(shè)置函數(shù)
void Port_Init()
{
PORTB = 0X00; //
DDRB |= (1 << PB0) | (1 << PB1); //PB0、PB1設(shè)置為輸出

}

//模擬比較器初始化函數(shù)
void Compare_Init()
{
SFIOR |= (1 << ACME); //使用ADC多路復(fù)用器選擇ADC的模擬輸入端口
//作為模擬比較器反向輸入端的信號(hào)源。
//同時(shí)選擇ADC的ADC0作為輸入端,并且關(guān)閉AD轉(zhuǎn)換的使能
ACSR |= (1 << ACBG); //允許模擬比較器,AIN0設(shè)置為內(nèi)部固定能隙參考電源1.22V
}

[/code]


關(guān)注有人微信公眾號(hào)
了解更多信息