ATtiny85 提供 8 鍵快閃記憶體、512 位元組 SRAM 及六個可用 GPIO 腳位,適合硬體空間有限且功能完整的微控制器過於昂貴設計。它運行於 1.8-5.5 V 電壓,包含一個 10 位元的四通道 ADC,並透過其通用序列介面支援軟體驅動的序列通訊。以下我將介紹它的腳位配置、內部架構、程式設計流程,以及實際使用時重要的取捨。
重點摘要:
- 六個 GPIO 腳位共享 ADC、PWM 及串列功能;謹慎的腳位分配可防止真實佈局中的資源衝突。
- RESET 腳位可透過保險絲重新配置為 GPIO,但此舉會將你鎖定在高壓程式設計中 - - 在提交前請先規劃除錯與生產工作流程。
- USI 要求 I²C 與 SPI 手動位元敲擊;它適用於低速周邊設備,但相較硬體周邊會增加韌體複雜度。
- ADC穩定性取決於電源品質與接地;ADC 降噪睡眠模式在基線噪音存在時,能明顯改善結果。
- 根據資料手冊,GPIO 腳位的源/匯最大值為 40 mA,但持續運作超過 20 mA 會加速劣化 - - 必須在外部緩衝高電流負載。
技術規格
| 參數 | 價值 |
|---|---|
| 中央處理器 | 8位元 AVR RISC |
| 操作電壓 | 1.8-5.5 V |
| 快閃記憶體 | 8 KB |
| SRAM | 512 位元組 |
| EEPROM | 512 位元組 |
| GPIO 腳 | 6 |
| ADC | 10位元,4頻道 |
| 計時器 | 兩個 8 位元 |
| 時脈速度 | 最高可達 20 MHz(外接)、8 MHz(內置 RC,預設) |
| 套件 | PDIP-8、SOIC-8、TSSOP-8、QFN/MLF-20 |
| 溫度範圍 | -40 至 +125 °C |
| 串列介面 | USI(可軟體配置 SPI 或 I²C) |
| 電壓下降偵測 | 是的 |
| 看門狗計時器 | 是的 |

腳位配置
| 釘 | 主要功能 | 替代功能 |
|---|---|---|
| 1 | PB5(重置) | PCINT5、ADC0、dW(debugWIRE) |
| 2 | PB3 | PCINT3、XTAL1、CLKI、ADC3 |
| 3 | PB4 | PCINT4、XTAL2、CLKO、ADC2 |
| 4 | GND | 地面 |
| 5 | PB0 | MOSI、DI、SDA、AIN0、oc0A、AREF、PCINT0 |
| 6 | PB1 | MISO、DO、AIN1、OC0B、OC1A、PCINT1 |
| 7 | PB2 | SCK、USCK、SCL、ADC1、T0、INT0、PCINT2 |
| 8 | VCC | 電源供應 |

每個 GPIO 腳位至少會多工三個功能。根據經驗,最常見的衝突發生在SPI程式設計(使用PB0、PB1、PB2)與相同腳位上的應用程式周邊設備之間。如果你的應用電路對這些腳位負載過重或保持固定狀態,ISP 程式設計可能會間歇性失敗。在 ATtiny85 與 SPI 線路的外部元件之間加入串聯電阻(220-470 Ω),讓程式設計師在上傳時能覆蓋應用電路。
腳位 1 預設為 RESET 並內建上拉。透過 RSTDISBL 保險絲設定為 GPIO(PB5)會多一個 I/O 腳位,但你就失去了透過標準 ISP 重新編程的能力。接著需要高壓平行程式設計(HVPP),這需要專業的程式設計師,並增加生產工作流程的複雜性。我看過團隊為了取得第六個腳位而關閉 RESET 後期,卻發現現場更新變得不切實際。
方塊圖與內部架構

ATtiny85 採用哈佛架構,分別使用 8 KB 快閃記憶體儲存程式,以及 512 位元組的 SRAM 執行時資料。Flash 耐久度每頁可完成 10,000 次寫入/擦除循環;EEPROM 的額定頻率為 100,000 次。如果你的應用程式經常寫入校正資料或日誌,你會比預期更快達到 EEPROM 限制 - - 例如分散寫入多個位址,或切換到外部儲存裝置以取得高週期數的資料。
兩個 8 位元計時器(Timer0 和 Timer1)產生 PWM、計數外部事件並觸發中斷。Timer0 較為簡單,通常用於基本的 PWM 或延遲功能。Timer1 包含一種 PLL 模式,可產生高頻 PWM(在 5V 供電下,PB1/PB4 最高可達 64 MHz),適用於紅外線載波產生或高頻調光等應用。
看門狗計時器可以在韌體當機時重置晶片,但在睡眠模式下也能作為低功耗間隔計時器運作。在一個電池供電設計中,我們利用看門狗每8秒喚醒ATtiny85,測量感測器後再進入睡眠 - - 導致平均電流消耗低於10 μA。
電源供應器與時脈配置
ATtiny85 配備內部 8 MHz RC 振盪器除以 8 的保險絲,實際時脈為 1 MHz。這種保守的預設在整個電壓範圍內有效,但性能卻是問題所在。對於5V運作,重新配置保險絲使內部振盪器以全8 MHz運作相當直接,且不需要外部元件。
當你需要精確的時序 - - 例如標準波特率的UART或頻率計數器 - - 內部振盪器的±10%工廠校正不夠精確。外接 16 MHz 或 20 MHz 晶體可提升精度至 ±50 ppm,但需增加兩個電容,佔用 PB3/PB4。這種取捨對於通訊密集的應用來說是值得的,但如果你已經腳本受限,這會很痛苦。
電壓下降偵測(BOD)防止 CPU 在供電電壓下降時執行無效指令。啟用 2.7 V 或 4.3 V 的 BOD 會為睡眠電流增加約 20-25 μA。針對亞微安培睡眠的電池設計,可能需要關閉 BOD 並在韌體中處理低電壓狀況 - - 同時接受關機時偶爾出現故障的風險。
GPIO 特性與負載限制
根據Microchip的數據表,每個GPIO腳位的絕對最大電流可達40 mA,但這是破壞性的限制,並非操作規格。建議每個腳位的連續電流為20 mA,所有腳位的總電流應保持在200 mA以下,以避免內部接地反彈及鎖存風險。
在業餘專案中,直接從 GPIO 驅動 LED 很常見,但正向電壓和電流需要仔細考慮。標準紅光燈在5V電源上,2 V正向降為20 mA,最低電阻需150 Ω。我曾除錯過有人用 47 Ω,因為「LED 太暗」 - - 它運作了幾個小時,然後 GPIO 永久失效。
對於超過 20 mA 的負載 - - 馬達、繼電器、電磁閥,甚至高功率 LED - - 可使用外接 MOSFET 或 BJT。一個 2N7002 N 通道 MOSFET 價格低廉,且使用 10 kΩ 閘極電阻即可乾淨切換數百毫安。嘗試並聯 GPIO 腳位以增加電流容量並不可靠;腳位阻抗的細微差異會導致電流共享不均,並可能造成損害。
ADC 操作與噪音管理
10位元 ADC 將 0-VCC(或內部 1.1 V 或 2.56 V 參考)轉換為 0 到 1023 的值。解析度是 10 位元,但在嘈雜環境中,有效位元數(ENOB)如果不處理電源雜訊,可能會降到 8 甚至 7 位元。
以我的經驗,有三件事能提升ADC穩定性:
- 將解耦電容器靠近晶片。 一顆100 nF陶瓷與10 μF電解電容並聯,置於距VCC和GND腳位5毫米內,可減少高頻切換雜訊。
- ADC 降噪睡眠模式。 在轉換過程中停止 CPU 可消除晶片內的數位切換雜訊。差異是可以測量的:我看過光是啟用這個模式,噪音底就從±8 LSB降到±2 LSB。
- 分別進行類比接地或星形接地。 如果 ADC 與 PWM 驅動負載共用回傳路徑,PWM 的接地電流會將雜訊注入 ADC 測量中。將專用的接地線線回電源供應器作為 ADC 參考,效果會明顯改善。
ADC 也支援差分輸入模式,並在某些針腳對上選擇增益(1×、8×、20×、32×)。這在教學中很少被記錄,但對於像熱電偶或應變計橋這類小型差動訊號效果很好。增益會以輸入範圍縮短和偏移誤差為代價,因此校正變得至關重要。
透過USI進行串行通訊
通用序列介面(USI)是一個最小限度的硬體區塊,協助序列協定,但大部分工作仍交由韌體處理。它包含移位暫存器、計數器及基本時鐘產生功能 - - 足以在低至中速速度下實現位元爆 I²C 或 SPI。
當USI運作良好時:
- 與單一 I²C 感測器在 100 kHz 通訊。
- 驅動 SPI 顯示器或 DAC,ATtiny85 始終是主控。
- 在韌體複雜度可接受的情況下,進行原型或低量設計。
當USI成為問題時:
- 多主控 I²C 或時脈拉伸情境;USI 不會自動處理這些。
- 1 MHz以上的高速SPI;沒有專用硬體,時機掌握會很困難。
- 需要 UART 的應用 - - 因為沒有 UART 硬體,所以你也會用 bit-bang 方式,消耗 CPU 週期並增加時序。
我曾成功使用基於 USI 的 I²C 函式庫,如 TinyWireM,搭配 BMP280 和 SSD1306 OLED 等感測器。但我也花了好幾個小時除錯一個案例,I²C 裝置將 SCL 保持低(時脈拉伸),但函式庫沒偵測到,導致韌體當機。教訓是:早期就用你的周邊設備測試 USI 程式碼,而不是在理想條件下的工作台上。
用 Arduino IDE 編程 ATtiny85

透過 Arduino IDE 編寫 ATtiny85 需要新增第三方板子定義,例如 Spence Konde 的 ATTinyCore 或 David Mellis 較舊的 attiny 套件。這些核心將 Arduino 函式如「digitalWrite()」和「analogRead()」對應到 ATtiny85 硬體。
ISP 程式的接線:
| ATtiny85 圖釘 | ISP 程式設計師訊號 |
|---|---|
| 1(重置) | 重置 |
| 5 (PB0) | MOSI |
| 6(PB1) | MISO |
| 7(PB2) | SCK |
| 8(VCC) | +5V(或目標電壓) |
| 4(GND) | GND |
你可以用專用的 USBtinyISP、USBasp,或任何設定為「Arduino 作為 ISP」的 Arduino 板。如果使用 Arduino 作為 ISP,請在 ARDUINO 的 RESET 和 GND 之間放置一個 10 μF 電容,以防止上傳時重置。
主板設定很重要:
- 選擇正確的時脈速度(內部1 MHz、8 MHz,外部16 MHz)。
- 選擇一次「燒毀開機載入程式」來寫入保險絲設定 - - 此步驟不會安裝開機載入程式(ATtiny85 不使用),但會將保險絲設定為與你選擇的時鐘相匹配。
- 設定保險絲後,透過「Sketch > Upload Using Programmer」上傳草圖,或在偏好設定中將程式設計師設為預設。
Arduino 的腳位號碼和實體腳位不直接對應。例如,Arduino 數位腳位 0 對應於 PB0(物理腳位 5),而 Arduino 數位腳位 2 則是 PB2(物理腳位 7)。接線前請先查看核心文件或腳位圖。
極簡工作電路

一個最小的電路只需:
- VCC(腳位8)接到 3.3 V 或 5 V 電源。
- GND(腳位4)接地。
- 一個 100 nF 陶瓷電容器,位於 VCC 與 GND 之間,靠近 IC。
- 若電源有雜訊,則可選擇在 RESET 上(腳位 1)加裝 10 kΩ 上拉電阻 - - 但內部上拉通常已足夠。
連接PB0(腳位5)的LED帶有限流電阻(5 V時220-470 Ω,3.3 V最低150 Ω),可提供視覺回饋。內建的 8 MHz RC 振盪器預設運作,因此不需要外部晶體。
這種配置在閃爍測試、PWM 實驗和初期韌體開發中都很可靠。對於生產或對噪音敏感的應用,建議在100 nF陶瓷元件旁並聯一個10 μF的體積電容器,以處理瞬態電流需求。
常見問題與實際解決方法
| 問題 | 根本原因 | 解答 |
|---|---|---|
| ISP 上傳失敗,顯示「裝置簽章不匹配」 | IDE 選錯晶片,或保險絲設為外部時脈但沒有晶體 | 確認董事會選擇;如果保險絲故障,請將外部時鐘訊號接到 PB3 或使用 HVPP 來恢復 |
| ADC 讀數隨機漂移或跳躍 | 電源供應器噪音、缺失的解耦電容器,或接地不良 | 在 VCC/GND 附近加上 100 nF + 10 μF 的解耦;啟用 ADC 降噪模式;分開的類比與數位接地路徑 |
| I²C/SPI 通訊間歇性失敗 | USI 時序錯誤、時脈不匹配或外部上拉器缺失(I²C) | 請再次檢查時鐘選擇與保險絲設定;為 I²C 在 SDA/SCL 中增加 4.7 kΩ 上拉;在韌體中降低匯流排速度 |
| GPIO 腳位運行數小時後停止回應 | 針腳被驅動超過電流限制,或暴露於電壓尖峰 | 檢查LED電阻值;以MOSFET緩衝高電流負載;如果針腳連接外部線材,請加裝瞬態保護(二極體或TVS) |
| 程式碼運行速度錯誤或時序不對 | 時脈保險絲設定與 Arduino IDE 主板選擇不符 | 更改時脈設定後燒毀開機載入程式(設定保險絲);用示波器或邏輯分析儀驗證實際時脈頻率 |
當RESET 保險絲意外被停用時:
如果你設定了 RSTDISBL 保險絲卻失去 ISP 存取權,標準程式程式就無法運作。你需要像 AVR Dragon(已停產但二手)這類高壓並列燒錄器(HVPP)或基於 Arduino 的開源設計。此系統在保持特定腳位於定義狀態時,對 RESET 腳位施加 12 V,無論保險絲設定如何,晶片都會進入程式設計模式。雖然可以恢復,但很煩人又耗時。
何時使用 ATtiny85(何時不該使用)
合身度好:
- 簡單的控制任務:LED 驅動器、感測器讀取器、小型顯示器。
- 空間受限設計,8腳封裝可節省電路板面積。
- 利用休眠模式的電池供電應用(關閉看門狗時,電壓降至 ~0.1 μA)。
- 成本敏感設計,每單位每一分錢在大量生產中都很重要。
不合身:
- 需要同時使用多個序列周邊設備(UART + SPI + I²C)的應用 - - 韌體複雜度會爆炸性增加。
- 高速通訊或嚴格時序要求 - - 受限於 USI 與單執行緒執行。
- 開發速度比成本更重要的專案;換成 ATmega328P 或 STM32 會讓你有硬體 UART、SPI、I²C,且減少麻煩。
我成功使用 ATtiny85 在 LED 燈光控制器、電池監控器和紅外線遙控器上。但我也曾在專案中途放棄過,因為需求擴展到需要 UART 除錯埠和 SPI 快閃記錄 - - 這些在大晶片上很簡單,但在 ATtiny85 上卻很麻煩。
結論
ATtiny85 對於以體積、成本與功率為主要限制,且功能必須維持在其明確限制內的設計中仍然具有相關性。其六個 GPIO 腳位與共享功能需要謹慎的腳位分配,軟體驅動的 USI 比硬體周邊裝置需要更多韌體運算。ADC效能高度依賴電源設計,GPIO電流限制是真實存在的 - - 超過此限制後腳位將永久失效。
在決定設計前,了解保險絲設定、RESET 腳位的取捨,以及 ISP 的程式設計流程,可以避免後期出現昂貴的意外狀況。針對特定應用,ATtiny85 能以極小的體積提供可靠的控制。對於較複雜的系統,請評估韌體負擔與硬體限制是否超過成本節省。