青草国产精品久久久久久,国产高清一区二区三区视频,免费av一区二区三区,午夜熟女插插XX免费视频

產(chǎn)品
有人云 — 物聯(lián)網(wǎng)云平臺 零編程,組態(tài)拖拽即可實現(xiàn)遠程監(jiān)控。同時支持私有部署,擁有屬于自己的軟硬件一體化方案
200
+
私有云項目
數(shù)據(jù)本地化
業(yè)務個性化
10
+
萬 公有云注冊用戶
80%公有云功能免費
付費VIP享自定義品牌服務
有人云官網(wǎng)
有人智造 — ODM/EMS 依托自動化、智能化、柔性化、透明化的智能工廠,
提供代研、代料、代工一站式OEM/ODM服務
有人智造官網(wǎng)
有人智能 — 解決方案 打包提供云、管、邊、端整體解決方案
從問題診斷、方案設計,到實施落地、系統(tǒng)運維
有人智能官網(wǎng)
新聞資訊
AVR單片機模擬比較器實驗 ATmage16
2010-11-07


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

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

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

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

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

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

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

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

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

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

  1. 位4—ACI:模擬比較器中斷標志位

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

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

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

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

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

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

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

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

ACIS1

ACIS0

中 斷 模 式

0

0

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

0

1

保留

1

0

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

1

1

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

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

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

用戶可以選擇ADC7..0引腳中的任一路的模擬信號代替AIN1引腳,作為模擬比較器的反向輸入端。模數(shù)轉(zhuǎn)換的ADC多路復用器提供這種選擇的能力,但此時必須關閉芯片的ADC功能。當模擬比較器的多路選擇使能位(SFIOR中的ACME位)置“1”,同時ADC被關閉時(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

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

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

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

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

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

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

}

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

[/code]

工作日每天: 14:00~17:00
抖音、天貓 "有人旗艦店"

關注有人微信公眾號
了解更多信息