2011年6月7日 星期二

Chapter 8

註: 本文為中文翻譯,原文請見底下網址:

http://www.mikroe.com/eng/chapters/view/9/chapter-8-other-mcu-s-circuits/

TOC Introduction Ch. 1 Ch. 2 Ch. 3 Ch 4. Ch. 5 Ch. 6 Ch. 7 Ch. 8 Ch. 9 App. A App. B App. C

Chapter 8: Other MCU's Circuits

振盪器 (Oscillators)

如下圖所示,時脈訊號可以由兩個內建振盪器的其中一個產生。

image
Fig. 8-1 Two built in oscillators

外部振盪器 (external oscillator) 與微控制器安裝在一起並且連接到 OSC1 和 OSC2 腳位。它被稱為 "外部(external)" 是因為它依賴外部電路來作時脈訊號與頻率的穩定 (frequency stabilization),例如獨立的振盪器、石英晶體、陶瓷諧振器或電阻-電容電路 (resistor-capacitor circuit)。振盪器模式是在燒錄的期間選擇的,稱之為 Config Word (Configuration bits)。

內部振湯器含有兩個個別的振湯器:

HFINTOSC 是一個高頻內部振盪器,運作速度為 8MHz。微控制器可以使用這種速度產生的時脈,或是經過 prescaler 除過的時脈; 及

LFINTOSC 是一個低頻內部振盪器,運作速度為 31kHz。它的時脈用於 watch-dog 和 power-up timing,不過也可以當整台微控制器的運作時脈來源。

系統時脈可以在外部或內部時脈來源之中選擇,透過 OSCCON 暫存器的 System Clock Select (SCS) 位元。

OSCCON 暫存器

OSCCON 暫存控制系統時脈與頻率的選項。它包含下列位元: 頻率選擇位元 (IRCF2, IRCF1, IRCF0)、頻率狀態位元 (HTS, LTS)、系統時脈控制位元 (OSTA, SCS)。

image

外部時脈模式 (External Clock Modes)

為了啟用外部振盪器,讓微控制器以不同的速度運作,並且使用不同的元件讓頻率穩定,外部振盪器可以在多種模式中選擇一種模式運作。模式也可以在程式撰寫與編譯完成的時候選擇。首先,必須啟動 PC 上用來燒錄韌體的程式,在目前的情況下,是 PICFlash。在 oscillator combox 上點一下,並且在下拉式選單中挑選一個選項。之後,恰當的位元將會被設定起來變成多個位元組中的一部份,這些位元組構成 Config Word。

在燒錄韌體的時候,Config Word 會被寫到微控制器的 ROM 記憶體,並且儲存在特殊的暫存器中,這些暫存器使用者存取不到。以這些位元為基底,微控制器 "知道" 該做什麼,儘管這些設定不是由程式明確指定的。

image
Fig.8-3 PICflash Program

外部振盪器 EC 模式

外部時脈 (EC) 模式使用外部振盪器當作系統時脈的來源。這個時脈來源的頻率是沒有限制的 (0-20MHz)。

image
Fig. 8-4 External Oscillator

這種模式有下列優點:

● 外部時脈來源連接到 OSC1 輸入腳位,而且 OSC2 可當作通用 I/O 使用 (general purpose I/O);

● 可以讓微控制器的運作和板子上的其它電子設備同步;

● 在這種模式中,微控制器在電源開啟後會立即開始運作。不需要延遲以穩定頻率; 及

● 暫時停止外部時脈的輸入,有停止設備運作而讓資料完整無缺的效果。在重新啟動外部時脈之後,設備會繼續運作,就好像從沒發生過什麼事。

image
Fig. 8-5 External Oscillator in EC Mode

外部振盪器 LP, XT 或 HS 模式

image
Fig. 8-6 Two Types of External Oscillators

LT, XT 和 HS 模式提供設置時脈來源的使用方式。這類振盪器的頻率取決於連接到 OSC1 和 OSC2 腳位的石英晶體或陶瓷諧振器。根據所用的振盪器的特性,選擇下列其中一種模式:

LP mode (Low Power) 只用於低頻石英晶體; 這種模式只設計用來驅動 32.768kHz 的晶體,通常內嵌於石英錶。它很容易辨識,因為它們很小而且是特殊的圓柱形。它是三種模式中耗電最小的;

XT mode 用於中間型頻率的石英晶體,最多 8 MHz。它是三種模式是耗電居於中間的; 及

HS mode (High Speed) 用於超過 8 MHz 的高頻石英晶體。它是三種模式中耗電最高者。

image
Fig.8-7 Schematic of External Oscillator and Additional External Components

陶瓷諧振器 XT 或 HS 模式 (Ceramic resonators in XT or HS mode)

image
Fig.8-8 Ceramic Resonator

陶瓷諧振器 (Ceramic resonators) 特性跟石英晶體很像。這就是為什麼它們的連接方式會是一樣的。與石英晶體的不同點是,它們比較便宜,而使用陶瓷諧振器會降低振盪器的品質。它們用於 100kHz 到 20MHz 的時脈頻率。

外部振盪器 RC 和 RCIO 模式(External oscillator in RC and RCIO mode)

使用頻率穩定元件無疑會有很多優點,不過有時候它們真的是非必要的。振盪器頻率不是很精確的定義是沒有問題的,所以以內嵌這類昂貴的元件代表浪費錢。在這些情況下,最簡單且最便宜的解決方案是使用一個電阻跟一個電容以供振盪器運作。有兩種模式:

image RC mode. 在 RC 模式下,RC 電路連接到 OSC1 腳位,如右圖所示。OSC2 腳位輸出 RC 振盪器 4 倍的除頻結果。這個訊號可以用來畫刻度 (calibration)、同步或其它應用。

 

 

 

image

RCIO mode. 跟前一個情況很像,RC 電路連接到 OSC1 腳位,但這次 OSC2 腳位當作額外的通用 I/O 腳位(general purpose I/O pin)。

 

 

 

 

在這兩種情況,建議使用圖中顯示的元件。

這類振盪器的頻率是根據 f=1/t 的公式計算而得,其中:

f = frequency [Hz]
T = R*C = time constant [s]
R = resistor resistance [Ω]
C = capacitor capacity [F]

內部時脈模式

內部振盪器電路包含兩個個別的振盪器,可以用來當作系統時脈來源:

HFINTOSC 是經過工廠校準而且以 8MHz 運作的振盪器。它的頻率可以由使用者透過軟體調整,使用 OSCTUNE 暫存器的位元;及

LFINTOSC 是非經工廠校準而且以 31kHz 運作振盪器。

類似於外部振盪器,內部振盪器也可以在幾種模式下運作。模式的選擇方式跟外部振盪器的情況一樣 – 使用 Config Word 暫存器。換句話說,一切都在 PC 上的軟體上執行,在將韌體燒錄到微控制器的時候。

內部振盪器 INTOSC 模式

image 在這種模式下,OSC1 腳位當通用 I/O用 (GPIO),而 OSC2 則輸出內部振盪器 4 倍的除頻結果。

image 內部振盪器 INTOSCIO 模式

在這種模式下,OSC1 腳位和 OSC2 腳位都當通用 I/O 用 (GPIO)。

 

 

 

 

 

內部振盪器設定

內部振盪器包含兩個個別的電路。

1. 高頻內部振盪器 HFINTOSC 連接到 postscaler (除頻器)。它是經過工廠校準而且以 8MHz 運作的振盪器。使用後除器,這個振盪器可以輸出七種頻率,頻率可以經過軟體使用 OSCCON 暫存器的 IRCF2, IRCF1 和 IRCF0 腳位選擇。

HINTOSC 的啟用辦法是透過選擇七種頻率中其中一種 (介於 8 MHz 和 125kHz),之後設定 OSCCON 暫存器的 System Clock Source (SCS) 位元。如下圖所示,一切都是使用 OSCCON 暫存器來完成。

image
Fig. 8-13 Internal Oscillator settings

 

2. 低頻內部振盪器 LFINTOSC 是非經工廠校準而且以 31kHz 運作的振盪器。它的啟用辦法是透過選擇這個頻率 (OSCCON 暫存器) 並設定同一個暫存器的 SCS 位元。

雙速啟動模式 (Two-Speed Clock Start-up Mode)

Two-Speed Clock Start-up mode 提供額外的省電功能,當微控制器在睡眠模式下運作的時候。這是在說什麼呢?

當微控制器設置為 LP, XT, HS 模式時,為了降低整體功耗,當轉換到睡眠模式時,外部振盪器會被關閉。

當滿足喚醒的條件時,微控制器並不會立即開始運作,因為它必須等待時脈頻率穩定下來。這段延遲時間持續整整 1024 個脈衝。之後,微控制器會繼續執行程式。問題是,在微控制器再度進入睡眠模式以等待外部時脈頻率穩定下來之前,只有少數幾個指令可以執行。這意味著從電池中獲得的電力大部分時間都浪費掉了。這個問題的解決是當這 1024 個脈衝在計數時使用內部振盪器執行程式。之後,一旦外部振盪器頻率穩定下來,它會自動接管 "領導角色"。 整個過程的啟用是透過設定 Configuration Word 其中一個位元。為了讓微控制器使用這種模式,必須在軟體裏選擇 Int-Ext Switchover 這個選項。

image
Fig.8-14 Enable Int-Ext Switchover

 

錯誤修復時脈監視器 (Fail-Safe Clock Monitor)

Fail-Safe Clock Monitor (FSCM) 監視外部振盪器的運作,並且允許微控制器繼續執行程式,即使外部振盪器因為某些原因失效。在這種情況下,內部振盪器會接管時脈來源的角色。

image
Fig. 8-15 Fail-Safe Clock Monitor

fail-safe clock monitor 是透過比較內部與外部時脈來源以偵測失去作用的振盪器。如果外部時脈需要 2mS 才會到來,時脈來源將會自動被切換。內部振盪器將因此使微控制器得以根據 OSCCON 暫存器的設定繼續運作。當 PIE2 暫存器的 OSFIE 位元設定起來時,將會產生一個中斷。系統時脈將由內部振盪器供應,直到設備成功重啟外部振盪器並且切換到外部振盪器為止。

類似前一個情況,這個模組的啟用是透過改變 Configuration Word 的設定,在把程式燒錄到晶片之前。這次是透過選擇 Fail-Safe Clk. Monitor 選項。

image
Fig. 8-16 Enabling Fail-Safe Clock Monitor

OSCTUNE 暫存器

對 OSCTUNE 暫存器的調整影響 HFINTOSC 的頻率,但不會影響 LFINTOSC 的頻率。再者,在做這項改變的時候不會有任何跡象。

image
Fig. 8-17 OSCTUNE Register

image

EEPROM

EEPROM 既不是 program memory (ROM) 也不是 data memory (RAM),而是一塊特殊的記憶體。雖然這塊記憶體不像其它暫存器一樣容易存取,速度也不快,但它們很重要,因為 EEPROM 的資料是永久保存的 (在電源關閉後)。EEPROM 的資料可以在任何時刻改變。因為這些特殊的特性,EEPROM 的每個 byte 都很珍貴。

PIC16F887 微控制器有 256 個資料位置的 EEPROM,受下列這些暫存器控制:

● EECON1 (控制暫存器);

● EECON2 (控制暫存器);

● EEDAT (儲存準備用來寫入與讀出的資料);及

● EEADR (儲存 EEPROM 要被存取的位址)。

此外,EECON2 不是真正的暫存器,它實體上並不存在。它只用於在對 EEMPROM 寫資料的時候。

EEDATH 和 EEADRH 暫存器都屬於同一個群組,用於讀寫 EEPROM。它們兩個因此可以用於讀寫 program memory (FLASH)。

由於這是一個危險的地區 (你肯定不希望微控制器意外清除你的程式),我們不打算進一步討論,只建議你要小心。

EECON1 暫存器

image
Fig.8-18 EECON1 Register

image

從 EEPROM 讀取資料

為了讀取 EEPROM 記憶體,要照著下列步驟做:

步驟 1: 把位址寫到 (00h - FFh) EEADR暫存器;

步驟 2: 清除 EECON1 暫存器的 EEPGD 位元以選擇 EEPROM 記憶體區塊;

步驟 3: 要讀取一個位置的資料,設定 EECON1 暫存器的 RD 位元; 及

步驟 4: 資料會存在 EEDAT 暫存器,準備使用。

底下的範例說明 EEPROM 的資料讀取:

寫到 EEPROM 記憶體

為了寫資料到 EEPROM 記憶體,首先必須把位址寫到 EEADR 暫存器,並在之後把資料寫到 EEDAT 暫存器。然後你必須照著一個特殊的次序以啟動每個位元組的寫入動作。在這段程序的期間,必須停用中斷。

底下的範例說明 EEPROM 的資料寫入:

重置!停電, 電壓不足或干擾?(Reset! Black-out, Brown-out or Noises?)

在重置的時候,微控制器立即停止運作並清除其暫存器的內容。重置訊號可以外部在任何時刻產生 (在 MCLR 腳位給低電位),如果需要也可以由內部控制邏輯產生。打開電源 (Power-on) 永遠會產生重置。也就是說,因為在打開電源的時候,會發生很多過渡性的事件(觸動開關閃光 (switch contact flashing)、火花、電壓緩緩上升,時脈頻率逐漸的穩定等),在微控制器開始運作之前,必須提供一定的延遲時間。兩個內部的計時器 – PWRT 和 OST負責這件事。前一個可以在撰寫程式的時候啟用或停用。故事情節如下:

image

當電壓達到1.2 – 1.7V 時,一個稱為 Power-up timer 的電路會在大約 72mS 之內重置微控制器。在這之後,重置訊號會產生另一個稱作 Oscillator start-up timer 的計時器,週期是 1024 個。當這段延遲過去之後(如圖中標記為 T reset 者),MCLR 腳位會被設定為高電位,微控制器會開始執行程式的第一個指令。

 

 

 

 

 

除了這類發生於上電時刻的 "受控制" 的重置外,還有其它兩種稱為停電 (Black-out) 和電壓不足 (Brown-out) 的重置,這兩種重置可能發生於電源關閉的時刻。

停電重置 (Black-out reset)

image Black-out reset 發生於電源正常關閉時。在這種情況下,微控制器沒有時間做任何事,因為電壓掉的非常快,一下子就低於其最小值。換句話說,燈關,落幕,戲唱完了!

 

 

 

 

電壓不足重置 (Brown-out reset)

image 當電壓慢速的下降 (典型的例子是電池放電,雖然對微控制器來說,這緩慢的過程感覺是很快的電壓下降),內部電子設備逐步地停止運作,稱為 Brown-out reset 的事件便發生了。在這種情況下,在微控制器停止運作之前,以較高電壓運作的電子可能執行無法預測的事,造成嚴重的危險。也有可能會引發程式本身致命的改變,因為程式是儲存在晶片上的 flash memory。

 

 

干擾(Noise)

image 這是一種特殊的 Brown-out reset,發生於工業環境,當電壓在某個瞬間 "閃" 一下並且掉到最小水值的時候。雖然很短暫,但是這種干擾可能會對設候運作有災難性的影響。

 

 

 

 

MCLR 腳位

MCLR 腳位上的邏輯 0 會引發立即而且正常的重置。建議如下圖這樣連接電路。額外元件的功能目的是在正常運作期間維持 "乾淨的" 邏輯 1 的訊號。如果它們主要是在 T reset結束後提供腳位高電位而已,微控制器會立即開始運作。這個特性非常有用,當有必要同步微控制器與附件的電子設備或多台微控制器的運作的時候。

image 為了避免 Brown-out reset 時可能發生的任何錯誤,PIC16F887 有一個內建的 "防禦機制"。它是一個簡單但有效的電路,該電路會對電壓掉到低於 4V 的情況做出反應,並且會維持當時的電位水平超過 100 微秒。在這情況下,電路會產生重置訊號,在這時候,整個微控制器的運作就像剛被打開一樣。

2 意見:

GCY 提到...

終於要進軍單晶片了嗎XD

Cooper Maa 提到...

我還想進軍 Android, iphone, python, ....
只是時間不夠用啊。下個月起工作要開始忙了,到時恐怕就會減少發文了~