Proteus—AVR單片機(jī)(ATMEGA16單片機(jī))系統(tǒng)時(shí)鐘及時(shí)鐘選項(xiàng)設(shè)置
掃描二維碼
隨時(shí)隨地手機(jī)看文章
在設(shè)置之前呢,我得把ATMEGA16里面的datasheet里面的資料說(shuō)說(shuō),當(dāng)然是關(guān)于系統(tǒng)時(shí)鐘和時(shí)鐘選項(xiàng)的
一、系統(tǒng)時(shí)鐘及時(shí)鐘選項(xiàng)(這里主要是介紹原理,三里面會(huì)介紹如何設(shè)置,其實(shí)你會(huì)了一,那后面的二和三就相當(dāng)簡(jiǎn)單了~~你懂得,就是根據(jù)一來(lái)的)
1. 時(shí)鐘系統(tǒng)及其分布:
Figure 11為AVR的主要時(shí)鐘系統(tǒng)及其分布。這些時(shí)鐘并不需要同時(shí)工作。為了降低功耗,
可以通過(guò)使用不同的睡眠模式來(lái)禁止無(wú)需工作的模塊的時(shí)鐘。
1)CPU 時(shí)鐘- clkCPU
CPU時(shí)鐘與操作AVR內(nèi)核的子系統(tǒng)相連,如通用寄存器文件、狀態(tài)寄存器及保存堆棧指針
的數(shù)據(jù)存儲(chǔ)器。終止CPU 時(shí)鐘將使內(nèi)核停止工作和計(jì)算。
2)I/O 時(shí)鐘- clkI/O
I/O時(shí)鐘用于主要的I/O 模塊,如定時(shí)器/ 計(jì)數(shù)器、SPI 和USART。I/O 時(shí)鐘還用于外部中斷
模塊。要注意的是有些外部中斷由異步邏輯檢測(cè),因此即使I/O 時(shí)鐘停止了這些中斷仍然
可以得到監(jiān)控。此外, USI 模塊的起始條件檢測(cè)在沒(méi)有clkI/O 的情況下也是異步實(shí)現(xiàn)的,
使得這個(gè)功能在任何睡眠模式下都可以正常工作。
3)Flash 時(shí)鐘- clkFLASH
Flash 時(shí)鐘控制Flash 接口的操作。此時(shí)鐘通常與CPU 時(shí)鐘同時(shí)掛起或激活。
4)異步定時(shí)器時(shí)鐘- clkASY
異步定時(shí)器時(shí)鐘允許異步定時(shí)器/ 計(jì)數(shù)器與LCD 控制器直接由外部32 kHz 時(shí)鐘晶體驅(qū)
動(dòng)。使得此定時(shí)器/ 計(jì)數(shù)器即使在睡眠模式下仍然可以為系統(tǒng)提供一個(gè)實(shí)時(shí)時(shí)鐘。
5)ADC 時(shí)鐘- clkADC
ADC具有專門的時(shí)鐘。這樣可以在ADC工作的時(shí)候停止CPU和I/O時(shí)鐘以降低數(shù)字電路產(chǎn)
生的噪聲,從而提高ADC 轉(zhuǎn)換精度。
2.時(shí)鐘源
ATmega16芯片有如下幾種通過(guò)Flash熔絲位進(jìn)行選擇的時(shí)鐘源。時(shí)鐘輸入到AVR時(shí)鐘發(fā)
生器,再分配到相應(yīng)的模塊。(這個(gè)還是很好理解的,就是通過(guò)CKSEL3~0位既4位來(lái)確定是使用外部晶振、外部低頻晶振、外部RC振蕩器、標(biāo)定的內(nèi)部RC振蕩器還是外部時(shí)鐘,很簡(jiǎn)單吧)
3.默認(rèn)時(shí)鐘源
器件出廠時(shí)CKSEL = “0010”, SUT = “10”。這個(gè)默認(rèn)設(shè)置的時(shí)鐘源是1 MHz 的內(nèi)部RC
振蕩器,啟動(dòng)時(shí)間為最長(zhǎng)。這種設(shè)置保證用戶可以通過(guò)ISP 或并行編程器得到所需的時(shí)鐘
源。(這里STU可能還不明白,后面還有介紹的~~)
4.晶體振蕩器(從現(xiàn)在開(kāi)始,就真正要介紹他們的系統(tǒng)時(shí)鐘和時(shí)鐘選項(xiàng)了)
XTAL1 與XTAL2 分別為用作片內(nèi)振蕩器的反向放大器的輸入和輸出,如Figure 12 所示,
這個(gè)振蕩器可以使用石英晶體,也可以使用陶瓷諧振器。熔絲位CKOPT 用來(lái)選擇這兩種
放大器模式的其中之一。當(dāng)CKOPT 被編程時(shí)振蕩器在輸出引腳產(chǎn)生滿幅度的振蕩。這種
模式適合于噪聲環(huán)境,以及需要通過(guò)XTAL2 驅(qū)動(dòng)第二個(gè)時(shí)鐘緩沖器的情況。而且這種模
式的頻率范圍比較寬。當(dāng)保持CKOPT 為未編程狀態(tài)時(shí),振蕩器的輸出信號(hào)幅度比較小。
其優(yōu)點(diǎn)是大大降低了功耗,但是頻率范圍比較窄,而且不能驅(qū)動(dòng)其他時(shí)鐘緩沖器。
對(duì)于諧振器, CKOPT 未編程時(shí)的最大頻率為8 MHz, CKOPT 編程時(shí)為16 MHz。C1
和C2 的數(shù)值要一樣,不管使用的是晶體還是諧振器。最佳的數(shù)值與使用的晶體或諧振器
有關(guān),還與雜散電容和環(huán)境的電磁噪聲有關(guān)。Table8 給出了針對(duì)晶體選擇電容的一些指
南。對(duì)于陶瓷諧振器,應(yīng)該使用廠商提供的數(shù)值。若想得到更多的有關(guān)如何選擇電容以及
振蕩器如何工作的信息,請(qǐng)參考多用途振蕩器應(yīng)用手冊(cè)。
振蕩器可以工作于三種不同的模式,每一種都有一個(gè)優(yōu)化的頻率范圍。工作模式通過(guò)熔絲
位CKSEL3..1 來(lái)選擇,如Table 4 所示。(這里可能會(huì)有一點(diǎn)疑問(wèn),不是CKSEL3~0用來(lái)選擇器件的,怎么CKSEL3~1用來(lái)選擇什么鳥(niǎo)頻率范圍,對(duì)嘍,就是這個(gè)樣子,CKSEL3~1就是用來(lái)選擇你選擇好的晶體振蕩器工作模式的(順便給出了范圍),這就是為什么上面CKSEL3~0為什么選擇器件有個(gè)范圍的原因了。然后就是CKSEL0位呢?熔絲位CKSEL0以及STU1~0用來(lái)選擇啟動(dòng)時(shí)間的,下面會(huì)有介紹的)
如Table 5 所示,熔絲位CKSEL0 以及SUT1..0 用于選擇啟動(dòng)時(shí)間。
5)低頻晶體振蕩器
為了使用32.768 kHz 鐘表晶體作為器件的時(shí)鐘源,必須將熔絲位CKSEL 設(shè)置為“1001”
以選擇低頻晶體振蕩器。晶體的連接方式如Figure 12 所示(此圖跟晶體振蕩器的連接圖一樣的~~)。通過(guò)對(duì)熔絲位CKOPT 的編程,用戶可以使能XTAL1 和XTAL2 的內(nèi)部電容,從而去除外部電容。內(nèi)部電容的標(biāo)稱數(shù)
值為36 pF。
選擇了這個(gè)振蕩器之后,啟動(dòng)時(shí)間由熔絲位SUT 確定,如Table 6 所示。
6)外部RC振蕩器
對(duì)于時(shí)間不敏感的應(yīng)用可以使用Figure 13 的外部RC 振蕩器。頻率可以通過(guò)方程f =
1/(3RC) 進(jìn)行粗略地鼓估計(jì)。電容C 至少要22 pF。
通過(guò)編程熔絲位CKOPT,用戶可以使能XTAL1 和GND 之間的片內(nèi) 36 pF 電容,從而無(wú)需外部電容。
振蕩器可以工作于四個(gè)不同的模式,每個(gè)模式有自己的優(yōu)化頻率范圍。工作模式通過(guò)熔絲
位CKSEL3..0 選取,如Table 7 所示。
選擇了這個(gè)振蕩器之后,啟動(dòng)時(shí)間由熔絲位SUT 確定,如Table 8 所示。
7)標(biāo)定的片內(nèi)RC振蕩器
標(biāo)定的片內(nèi)RC 振蕩器提供了固定的1.0、2.0、4.0 或8.0 MHz 的時(shí)鐘。這些頻率都是
5V、25°C 下的標(biāo)稱數(shù)值。這個(gè)時(shí)鐘也可以作為系統(tǒng)時(shí)鐘,只要按照Table 9 對(duì)熔絲位
CKSEL進(jìn)行編程即可。選擇這個(gè)時(shí)鐘(此時(shí)不能對(duì)CKOPT進(jìn)行編程)之后就無(wú)需外部器件
了。復(fù)位時(shí)硬件將標(biāo)定字節(jié)加載到OSCCAL 寄存器,自動(dòng)完成對(duì)RC 振蕩器的標(biāo)定。在
5V,25°C 和頻率為1.0 MHz 時(shí),這種標(biāo)定可以提供標(biāo)稱頻率 ± 1% 的精度。當(dāng)使用這個(gè)振
蕩器作為系統(tǒng)時(shí)鐘時(shí),看門狗仍然使用自己的看門狗定時(shí)器作為溢出復(fù)位的依據(jù)。
選擇了這個(gè)振蕩器之后,啟動(dòng)時(shí)間由熔絲位SUT 確定,如Table 10 所示。XTAL1 和
XTAL2 要保持為空(NC)。
8)振蕩器標(biāo)定寄存器- OSCCAL(這個(gè)寄存器主要是對(duì)內(nèi)部振蕩器進(jìn)行調(diào)節(jié)的,可以消除由于生產(chǎn)工藝所帶來(lái)的振蕩器頻率偏差~~后面有詳細(xì)介紹的,說(shuō)實(shí)話,我還真的沒(méi)有用過(guò)~~)
? Bits 7..0 – CAL7..0: 振蕩器標(biāo)定數(shù)據(jù)
將標(biāo)定數(shù)據(jù)寫(xiě)入這個(gè)地址可以對(duì)內(nèi)部振蕩器進(jìn)行調(diào)節(jié)以消除由于生產(chǎn)工藝所帶來(lái)的振蕩
器頻率偏差。復(fù)位時(shí)1 MHz 的標(biāo)定數(shù)據(jù)( 標(biāo)識(shí)數(shù)據(jù)的高字節(jié),地址為0x00) 自動(dòng)加載到
OSCCAL 寄存器。如果需要內(nèi)部RC 振蕩器工作于其他頻率,標(biāo)定數(shù)據(jù)必須人工加載。
首先通過(guò)編程器讀取標(biāo)識(shí)數(shù)據(jù),然后將標(biāo)定數(shù)據(jù)保存到Flash 或EEPROM 之中。這些數(shù)據(jù)
可以通過(guò)軟件讀取,然后加載到OSCCAL 寄存器。當(dāng)OSCCAL 為零時(shí)振蕩器以最低頻
率工作。當(dāng)對(duì)其寫(xiě)如不為零的數(shù)據(jù)時(shí)內(nèi)部振蕩器的頻率將增長(zhǎng)。寫(xiě)入0xFF 即得到最高頻
率。標(biāo)定的振蕩器用來(lái)為訪問(wèn)EEPROM 和Flash 定時(shí)。有寫(xiě)EEPROM 和Flash 的操作
時(shí)不要將頻率標(biāo)定到超過(guò)標(biāo)稱頻率的10%,否則寫(xiě)操作有可能失敗。要注意振蕩器只對(duì)
1.0、2.0、4.0 和8.0 MHz 這四種頻率進(jìn)行了標(biāo)定,其他頻率則無(wú)法保證。
9)外部時(shí)鐘
為了從外部時(shí)鐘源驅(qū)動(dòng)芯片, XTAL1 必須如Figure 14 所示的進(jìn)行連接。同時(shí),熔絲位
CKSEL必須編程為“0000”。若熔絲位CKOPT也被編程,用戶就可以使用內(nèi)部的XTAL1和
GND 之間的36 pF 電容。
10)定時(shí)/計(jì)數(shù)器振蕩器
對(duì)于擁有定時(shí)器/ 振蕩器引腳(TOSC1 和TOSC2) 的AVR 微處理器,晶體可以直接與這
兩個(gè)引腳連接,無(wú)需外部電容。此振蕩器針對(duì)32.768 kHz 的鐘表晶體作了優(yōu)化。不建議
在TOSC1 引腳輸入振蕩信號(hào)。
二、IAR for AVR設(shè)置熔絲位(暫時(shí)還真的不會(huì)啊~~等會(huì)了再貼出來(lái)吧~~~,先簡(jiǎn)短的略過(guò)吧)
三、Proteus中的相關(guān)設(shè)置
啊~~~馬上就哦了
Proteus中ATMEGA16的component如下:
這里我就不一一介紹了吧,主要的說(shuō)說(shuō)就哦了:
CKOPT位1是未編程,0代表編程
CKSEL這個(gè)必須知道,熔絲位設(shè)置,這里面有你想設(shè)置的熔絲位,什么晶體振蕩器,低頻晶體振蕩器,外部RC振蕩器,標(biāo)定的片內(nèi)RC振蕩器以及外部時(shí)鐘都是從這里找的~~~(我一般選擇片內(nèi)RC振蕩器,而且是8MHZ的)
然后是boot loder size,這個(gè)是一個(gè)引導(dǎo)程序大小的設(shè)置,暫時(shí)放著先不管~~
STU這個(gè)設(shè)置對(duì)于啟動(dòng)時(shí)間還是很重要的出廠時(shí)的設(shè)置是10,電源是緩慢上升的(上面可是有圖有解釋的~~~這里我就不改動(dòng)了)
現(xiàn)在看看我的設(shè)置吧,但是我還不知道怎么用外部晶振~~~這篇文章持續(xù)更新,以后知道了再給補(bǔ)上,上面說(shuō)的都是些基礎(chǔ)~~你懂得,畢竟我也是個(gè)小菜鳥(niǎo),呵呵