嵌入式系統/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-01)。約 9 美元
PIC16F877A -- 16F87x 系列中最大的晶片;有 8 個模擬輸入 - 由 Wouter (#2) 推薦;AmQRP;PICList。約 8 美元- PIC16F877A ,這可能是愛好者社群中最受歡迎的仍在生產的 PIC。這是其系列中最好的 PIC,曾經是用於大型愛好者專案的“PIC”,以及用於小型專案的 PIC16F84。它具有 14KB 的程式儲存器、368 位元組的 RAM、40 引腳封裝、2 個 CPP 模組、8 個 10 位 ADC 通道。它還具有 UART 和 MSSP,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 的 Flash 儲存器,可以使用 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”字尾表示晶片具有可重新程式設計的 Flash 儲存器。
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(一次性可程式設計)。以前人們在將程式寫入此類晶片之前會仔細檢查程式。最近,隨著 Flash 儲存器成本的下降,這些晶片的使用越來越少,但有些晶片仍然在使用,因為它們可靠性高或成本較低。
PIC12C PIC16C PIC17C PIC18C
每個系列都包含一個具有所有功能的“完整”成員,以及缺少一項或多項功能的子系列變體成員。例如,在 16F84 系列中,16F84 是功能完整的 PIC,具有 Flash 儲存器,程式空間是 16F83 的兩倍。該系列還包含 16C84 和 16C83,它們是為數不多的可重新程式設計的 C 字尾 PIC 之一。在原型設計中,我們通常使用“完整”版本以確保原型至少能正常工作。在原型設計過程中,我們希望反覆調整程式碼、重新程式設計和測試,直到它能夠正常工作。因此,我們使用上述“Flash”系列之一,而不是“OTP”系列,除非有必要。對於短期的生產,建議使用 C 部分。對於非常長的生產線,以前曾使用過一些具有掩模程式設計 ROM 的 PIC。現在 Microchip 提供了工廠預程式設計服務。
每個系列的每個成員通常有多種不同的封裝。愛好者通常使用塑膠雙列直插式封裝(通常稱為 DIP 或 PDIP),因為它最容易插到無焊麵包板上進行除錯。(“寬 DIP”效果也一樣)。他們避免使用陶瓷雙列直插式封裝 (CDIP),不是因為陶瓷不好(它同樣容易插到無焊麵包板上),而是因為塑膠部件效果一樣好,而且便宜得多。
(後來,為了大規模生產,我們可能會找出哪種最便宜的削減版本,它僅僅有足夠的東西可以工作,並使用最便宜的封裝,它只有足夠多的引腳適合這種特定應用… 也許甚至是一個 OTP 晶片)。
然後,每個系列的每個成員的每個不同封裝都以“商用溫度範圍”和“工業溫度範圍”兩種形式提供。
PIC 16x
[edit | edit source]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,在開發方面方便得多,並且可以執行為上述晶片編寫的程式碼,幾乎不需要進行任何更改。
PIC 12x
[edit | edit source]PIC12x 系列是最小的系列,具有 8 個引腳,最多有 6 個 I/O 引腳可用。當空間和/或成本是一個因素時,這些系列被使用。
PIC 18x
[edit | edit source]PIC 18x 系列採用 28 引腳和 40 引腳 DIP 封裝。它們具有更多埠、更多 ADC 等等… PIC 18 通常被認為是高階微控制器,有時甚至被稱為成熟的 CPU。
截至 2007 年,Microchip 目前正在生產 6 款具有 USB 介面的快閃記憶體微控制器。所有這些都屬於 PIC18Fx 系列。(28 引腳 PIC18F2450、PIC18F2455、PIC18F2550;以及 40/44 引腳 PIC18F4450、PIC18F4455、PIC18F4550)。
PIC 棧
[edit | edit source]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:recursion)。只要“主”程式的最深可能的巢狀,加上中斷例程的最深可能的巢狀,得到的總和小於其執行的微控制器的棧大小,那麼一切都會正常工作。一些編譯器會自動執行這種呼叫樹分析,如果硬體棧不足,編譯器會自動切換到使用“軟體棧”。組合語言程式設計師必須手動進行這種分析。
你還需要什麼
[edit | edit source]編譯器、彙編器
[edit | edit source]PIC 微控制器的 BASIC、C、Forth 和其他幾種程式語言版本都可用。請參閱嵌入式系統/PIC 程式設計。
下載器
[edit | edit source]你需要一種稱為“下載器”的裝置,將編譯後的程式從你的 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 上列出了許多其他程式設計器。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 倍於外部振盪器的虛擬振盪頻率。例如,如果最大允許振盪頻率為 16 MHz,則虛擬振盪頻率為 64 MHz。因此,PIC 的執行速度為 64 / 4 = 16 MIPS(每秒百萬條指令)。某些 PIC 還內建了振盪器,通常為 4 MHz(對應 1 MIPS),或低功耗非精確 48 kHz 振盪器。這使得可以將兩個 I/O 引腳用於其他目的。這些引腳也可以用來產生一個頻率,如果您想將其他硬體與某個 PIC 的內部時鐘同步,就可以使用這些引腳。
繼續閱讀 嵌入式系統/PIC 程式設計。
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 語言程式設計 PIC 微控制器"
- "使用其他程式語言程式設計 PIC 微控制器:Forth、JAL、BASIC、Python 等。"
- "8 位 PIC® 微控制器解決方案手冊" 描述了每個 PIC 微控制器系列中 PIC 硬體堆疊的大小,以及各個系列之間的其他主要區別。
- Micro&Robot - 877:帶有可自程式設計 PIC 微控制器的機器人套件!您不需要 PIC 程式設計器。
- 使用 SDCC 程式設計 PIC16f628a:一個偶爾更新的示例列表,演示瞭如何使用 PIC 的外設以及如何使用免費的 SDCC pic 編譯器與其他裝置進行互動。