嵌入式系統/PIC 微控制器
由 Microchip 製造的(“外設介面控制器”)微控制器在工程師和愛好者中都很受歡迎。PIC 微控制器有各種“口味”,每種都有不同的元件和功能。
許多型別的電子專案可以使用 PIC 微處理器系列輕鬆構建,其中包括時鐘、非常簡單的電子遊戲、機器人、伺服控制器等等。PIC 是一款非常通用的微控制器,可以提供多種選擇,價格合理。
該系列的其他微處理器包括 Parallax SX、Holtek HT66Fxxx 系列、Holtek HT48FxxE 系列 以及一些“PIC-on-a-FPGA”實現。
通用儀器生產了一款名為 PIC1650 的晶片,被稱為可程式設計智慧計算機。該晶片是所有 PIC 晶片的鼻祖,在功能上與目前的 16C54 相似。它被設計為其 CP1600 微處理器的外設。也許這就是為什麼大多數人認為 PIC 代表外設介面控制器。Microchip 從未使用 PIC 作為縮寫,只是用 PIC。最近,Microchip 開始將其 PIC 稱為 PICmicro MCU。
如何在近 2000 種不同的 PIC 微控制器型號中找到適合您的 PIC 呢?
Microchip 網站有一個非常棒的產品選擇工具。您只需輸入最低要求,並選擇性地輸入所需的可選要求,就會顯示生成的零件編號及其基本特性列表。
您可以直接從 Microchip 的線上商店Microchip Direct 購買 PIC 處理器。價格與許多分銷商相同,有時甚至更優惠。
規則一:只選擇您可以實際獲得的微處理器。PIC 都是相似的,因此您不必過於挑剔要使用哪種型號。
如果您的學校倉庫裡只有一種 PIC,就使用它。如果您從 Newark 或 DigiKey 等公司訂購,請忽略任何“缺貨”的零件,只訂購“有貨”的零件。這將節省您大量用於建立專案的時間。
曾經,PIC16F84 是愛好者最棒的 PIC,遙遙領先。但由於生產水平的提高,Microchip、Parallax 和 Holtek 現在正在製造許多晶片,它們甚至更好,而且往往更便宜。
- 我想要一個包含前 4 名左右 PIC 推薦的列表,以及*為什麼*推薦它們,以便當有更好/更便宜的晶片出現時,可以輕鬆地確認並新增到列表中。
(總結 PICList PIC 微控制器入門清單、PIC Elmer 160:附錄“A”:“其他 PIC” 2003 以及 Wouter van Ooijen :)
PIC:選擇一顆晶片,然後購買。
許多人推薦以下 PIC 作為愛好者“第一個 PIC”的不錯選擇,請考慮修訂號(例如 16F628A 中的 A)
- PIC18F4620:它有 13 個模擬輸入——Wouter van Ooijen 建議愛好者使用最大且功能最強大的晶片 [1],而這是(截至 2006 年 1 月)最大的晶片。約 9 美元
PIC16F877A——16F87x 系列中最大的晶片;有 8 個模擬輸入——Wouter 推薦 (#2);AmQRP;PICList。約 8 美元- PIC16F877A,這可能是愛好者社群中最受歡迎的仍在生產的 PIC。這是其家族中最棒的 PIC,曾經與 PIC16F84 一起是較大愛好者專案的“首選 PIC”。具有 14KB 的程式儲存器、368 位元組的 RAM、40 引腳封裝、2 個 CPP 模組、8 個 ADC 通道,每個通道可實現 10 位。它還支援 UART 和 MSSP,後者是一個 SSP,能夠充當主控,控制連線到 I2c 和 SPI 匯流排的任何裝置。與迄今為止提到的其他 PIC 相比,沒有內建振盪器,這一點需要注意。此外,這款 PIC 的功能與價格相比相對昂貴。這可能是 Microchip 為了促使遷移到更好的晶片而採取的措施。——Ivaneduardo747 推薦;Wouter (#2);AmQRP——[2]。約 9 美元
PIC16F88——有 7 個模擬輸入——AmQRP 推薦;SparkFun。約 5 美元- PIC16F88,它是 PIC16F628A 的增強版本。它擁有 16F628 的所有功能,外加兩倍的程式儲存器,7KB;七個 10 位 ADC,一個 SSP(同步序列埠),能夠接收透過 I2C 和 SPI 匯流排傳送的訊息。它還支援自程式設計,這一功能被某些開發板用來避免使用程式設計器,節省了購買程式設計器的成本。——Ivaneduardo747 推薦;AmQRP——SparkFun。約 5 美元
PIC16F628——比 PIC16F84A 便宜,內建 4 MHz 時鐘和 UART,但沒有模擬輸入——Wouter 推薦 (#3);AmQRP——約 4 美元- PIC16F628A,這是一款不錯的入門級 PIC,因為它與過去愛好者最喜歡的 PIC 之一 PIC16F84 相容。這樣,初學者就可以從大量的專案和程式目錄中選擇,尤其是使用 PIC 彙編器等低階語言建立的專案和程式。它具有 18 引腳封裝、3.5KB 的快閃記憶體,使用 20MHZ 晶體時,每秒可執行高達 500 萬條指令 (MIPS)。需要注意的是它沒有模擬-數字轉換器 (ADC)。與 PIC16F84A 相比,它有一個 UART,能夠生成和接收 RS-232 訊號,這對於除錯非常有用。有些人覺得諷刺的是,這款晶片比功能更少的 PIC16F84A 還便宜。——Ivaneduardo747 推薦;Wouter (#3) AmQRP——約 5 美元
- PIC16F1936,一款功能強大的中檔 PIC,帶有 11 個通道、10 位 ADC;兩個間接指標暫存器;XLP(超低功耗)用於電池供電裝置的低功耗消耗。——某些人在 PICList 上推薦它作為 16F877 更快、更好、更便宜的替代品。——約 3 美元
- PIC12F683,一款小型 8 引腳微控制器。它是一款適用於小型應用的不錯的微控制器,因為它體積小、功耗相對較高,並且具有多種功能,如 4 個 ADC 通道和內建 4MHZ 振盪器。——Ivaneduardo747 推薦;[3]。約 2.50 美元
Microchip 自 2003 年以來推出了許多新零件,其中是否有任何零件在某些方面比這些晶片更適合愛好者使用? 待辦事項:"開始 PIC 程式設計:什麼 PIC 晶片適合入門?" 是否有任何有用的建議新增到以上內容中?
有幾個不同的“系列”。
- “F” 字尾表示晶片具有可重新程式設計的快閃記憶體。
PIC10F—in super-tiny 6 pin packages PIC12F—in tiny 8-pin packages PIC14F PIC16F—in tiny 14-pin packages PIC18F PIC24F PIC24E PIC24H dsPIC30F dsPIC33F dsPIC33E
- “C” 字尾表示晶片使用 EPROM 儲存器。其中一些晶片曾經使用非常昂貴的紫外線擦除器擦除。這種方法主要由公司使用。但大多數這些晶片是專門製造的,一旦寫入就不能更改:它是 OTP(一次性可程式設計)。人們過去會在將程式寫入此類晶片之前仔細檢查他們的程式。最近,隨著快閃記憶體成本的下降,這種晶片的使用越來越少,但其中一些仍然被使用,因為它們具有可靠性或降低了成本。
PIC12C PIC16C PIC17C PIC18C
每個系列都有一個具有所有功能的“完整”成員和一些缺少某些功能的變體成員。例如,在 16F84 系列中,16F84 是功能最全面的 PIC,具有快閃記憶體,其程式空間是 16F83 的兩倍。該系列還包括 16C84 和 16C83,它們是少數可重新程式設計的 C 字尾 PIC 之一。對於原型設計,我們通常使用“完整”版本以確保我們能夠使原型能夠正常工作。在原型設計期間,我們希望反覆調整程式碼、重新程式設計和測試,直到它正常工作。因此,除非必要,否則我們使用上述“快閃記憶體”系列,而不是“OTP”系列。對於短期生產,建議使用 C 部件。對於非常長的生產線,一些帶有掩碼程式設計 ROM 的 PIC 被使用。現在,Microchip 提供工廠預程式設計服務。
每個系列的每個成員通常都有幾種不同的封裝。愛好者通常使用塑膠雙列直插式封裝(通常稱為 DIP 或 PDIP),因為它最容易插入無焊麵包板 並進行除錯。(“寬 DIP”也一樣好)。他們避免使用陶瓷雙列直插式封裝 (CDIP),不是因為陶瓷不好(它同樣容易插入無焊麵包板),而是因為塑膠部件同樣好用且便宜得多。
(稍後,為了大規模生產,我們可能會弄清楚哪種最便宜的簡化版本僅僅具有足夠的效能來正常工作,並且採用最便宜的封裝,該封裝僅具有足夠數量的引腳來滿足此特定應用… 甚至可能是一個 OTP 晶片)。
然後,每個系列每個成員的每種不同封裝都有“商業溫度範圍”和“工業溫度範圍”。
PIC 16 系列被認為是 PIC 的一個良好通用系列。PIC 16 通常具有 3 個輸出埠。以下是該系列中一些曾經很常見的型號
- PIC 16C54 - 最初的 PIC 型號,'C54 提供 18 引腳 DIP 封裝,有 12 個 I/O 引腳。
- PIC 16C55 - 提供 28 引腳 DIP 封裝,有 20 個可用 I/O 引腳
- PIC 16C56 - 與 'C54 具有相同的外形尺寸,但功能更多
- PIC 16C57 - 與 'C55 具有相同的外形尺寸,但功能更多
- PIC 16C71 - 具有 4 個可用 ADC,它們對映到與埠 A 相同的引腳(雙用途引腳)。
- PIC 16C84 - 具有在電路中擦除和重新程式設計 EEPROM 的能力
網上有許多為 PIC16x 系列編寫的程式可以免費獲取。
基於快閃記憶體的晶片(如 PIC16F88)在開發方面更加方便,並且可以執行為上述晶片編寫的程式碼,幾乎不需要更改。
PIC12x 系列是最小的系列,具有 8 個引腳,最多 6 個可用 I/O 引腳。當空間和/或成本是一個因素時,這些晶片就會被使用。
PIC 18x 系列提供 28 引腳和 40 引腳 DIP 封裝。它們具有更多埠、更多 ADC 等… PIC 18 通常被認為是高階微控制器,有時甚至被稱為成熟的 CPU。
Microchip 目前(截至 2007 年)生產 6 款具有 USB 介面的快閃記憶體微控制器。它們全部屬於 PIC18Fx 系列。(28 引腳 PIC18F2450、PIC18F2455、PIC18F2550;以及 40/44 引腳 PIC18F4450、PIC18F4455、PIC18F4550)。
PIC 棧是一個專用的暫存器組(與程式設計師可訪問的暫存器分開),它只能用於在函式呼叫(或中斷)期間儲存返回地址。
- 12 位:具有 12 位核心的 PIC 微控制器(第一代 PIC 微控制器)(包括大多數 PIC10、一些 PIC12、少數 PIC16)在其硬體棧中只有 2 個暫存器。12 位 PIC 程式中的子程式最多隻能巢狀2 層,否則棧就會溢位,資料就會丟失。編寫 12 位 PIC 程式的人們會花很多努力來解決這個問題。(這些人被迫嚴重依賴避免使用硬體棧的技術。例如,宏、狀態機和軟體棧)。
- 14 位:具有 14 位核心的 PIC 微控制器(大多數 PIC16)在其硬體棧中具有 8 個暫存器。這使得函式呼叫更容易使用,即使編寫它們的程式設計師應該意識到一些剩餘的問題 [4].
- 16 位:具有 16 位核心的 PIC 微控制器(所有 PIC18)具有“31 層深”的硬體棧深度。這對於大多數人編寫的程式來說已經足夠深了。
許多演算法涉及將資料推送到某個棧中,然後稍後從該棧中拉取資料。在 PIC 上編寫此類演算法的人們必須為資料使用一個單獨的軟體棧(類似於Forth)。(使用其他微處理器的人們通常為子程式返回地址和這個“棧資料”共享一個棧)。
呼叫樹分析可用於查詢程式使用的最深子程式巢狀。(除非程式使用w:遞迴)。只要“主”程式的最深巢狀加上中斷例程的最深巢狀的總和少於其執行的微控制器的棧大小,那麼一切都會正常工作。一些編譯器會自動執行這種呼叫樹分析,如果硬體棧不足,編譯器會自動切換到使用“軟體棧”。組合語言程式設計師被迫手動執行這種分析。
PIC 微控制器提供了 BASIC、C、Forth 和幾種其他程式語言的版本。請參閱嵌入式系統/PIC 程式設計.
你需要一個名為“下載器”的裝置來將編譯後的程式從你的 PC 傳輸到微控制器並將其燒錄到微控制器中。(不幸的是,“程式設計”有兩種含義—請參閱嵌入式系統/術語#程式設計)。
下載器有兩種型別。如果你在系統中擁有 PIC,並且想要更改軟體,
- 使用“IC 程式設計器”型別的裝置,你必須取出 PIC,將其插入“IC 程式設計器”,重新程式設計,然後將 PIC 放回你的系統中。
- 使用“線上程式設計器”樣式的裝置(ICSP),您無需接觸PIC本身,只需將程式設計器的電纜直接插入您(希望)放置在PIC旁邊的接頭,重新程式設計,然後拔下電纜。
(不完整)的程式設計器列表包括
- BobProg - 帶外部電源的簡單 ICSP 程式設計器 [5]
- JDM 程式設計器 為 LVP 微控制器修改 [6]
- PIC16F84 的線上程式設計器 PIC16F84 程式設計器
- IC 程式設計器 ICProg 程式:12Cxx、16Cxxx、16Fxx、16F87x、18Fxxx、16F7x、24Cxx、93Cxx、90Sxxx、59Cxx、89Cx051、89S53、250x0、PIC、AVR、80C51 等。
- 許多其他程式設計器在 MassMind 上列出。
許多人更喜歡在可能的情況下使用“引導載入程式”進行程式設計。引導載入程式在第 引導載入程式和引導扇區 章中詳細介紹。
電源
[edit | edit source]任何電子電路中最重要的部分是電源。PIC 程式設計器需要 +5 伏和 +13 伏穩壓電源。需要兩個電源是由於不同的程式設計演算法
- 高功率程式設計模式 - 在這種模式下,我們透過將 PIC 的 RB7(資料)和 RB6(時鐘)引腳驅動為低電平,同時將 MCLR 引腳從 0 驅動到 VCC(+13v)來進入 PIC 的程式設計模式。
- 低功率程式設計模式 - 此演算法僅需要 +5v 用於程式設計操作。在此演算法中,我們將 RB3(PGM)從 VDD 驅動到 GND 以進入程式設計模式,然後將 MCLR 設定為 VDD(+5v)。
這已經在 PIC 燃燒器硬體內部處理。如果您好奇如何做到這一點,您可能想檢視線上的各種 PIC 燃燒器硬體原理圖。[1][2]
引腳圖
[edit | edit source]振盪器電路
[edit | edit source]所有 PIC 微控制器都內建了可用的 RC 振盪器電路,儘管它們很慢,而且顆粒度很高。也可以應用外部振盪器電路,最高頻率為 20 MHz。PIC 指令每個機器指令週期需要 4 個時鐘週期,因此可以以 5 MHz 的最大有效速率執行。但是,某些 PIC 內建了 PLL(鎖相環)乘法器。使用者可以啟用 4 倍乘法器,從而產生 4 x 外部振盪器的虛擬振盪器頻率。例如,在允許的最大振盪器為 16 MHz 的情況下,虛擬振盪器以 64 MHz 執行。因此,PIC 將執行 64 / 4 = 16 MIPS(每秒百萬條指令)。某些 PIC 還內建了振盪器,通常為 4Mhz 用於精確的 1MIPS,或低功耗不精確的 48kHz。這釋放了兩個 I/O 引腳用於其他目的。如果您想將其他硬體與一個 PIC 的內部時鐘同步,這些引腳也可以用來產生頻率。
程式設計
[edit | edit source]繼續使用 嵌入式系統/PIC 程式設計。
進一步閱讀
[edit | edit source]PICList 檔案中有很多關於使用 PIC 微控制器(以及一般的電子設計)的資訊。如果您真的不知道怎麼辦,您可以考慮訂閱 PICList,提出您的問題……並作為回報回答其他人的問題。PICList 檔案託管在 MassMind
- PIC 微控制器文件指南 將更詳細地介紹。
- 遙控飛機/RCAP 討論了一個使用 PIC16F876A 的專案。
- Parallax SX 常見問題解答 由 Guenther Daubach 提供
- Microchip PIC:原始製造商的網站
- PICmicro 控制器入門 由 Wouter van Ooijen 提供
- “PIC 16F628A:為什麼 PIC 16F84 現在已經過時。”
- “PIC 16F88:為什麼 PIC 16F84 現在真的已經過時。”
- “帶有描述、原理圖和原始碼的免費 PIC 資源和專案。”
- “使用 C 程式語言程式設計 PICmicros”
- “使用其他程式語言程式設計 PICmicros:Forth、JAL、BASIC、Python 等”
- “8 位 PIC® 微控制器解決方案手冊” 描述了每個 PIC 微控制器系列中 PIC 硬體堆疊的大小,以及各個系列之間其他主要差異。
- Micro&Robot - 877:帶有自程式設計 PIC 微控制器的機器人套件!您不需要 PIC 程式設計器。
- 使用 SDCC 程式設計 PIC16f628a:一個偶爾更新的示例列表,展示瞭如何使用 PIC 的外設以及使用免費 SDCC pic 編譯器與其他裝置互動。