如何將您的 Arduino 變成 ISP — 對 ATmel ATtiny85 進行編程

已發表: 2017-06-13

短字節:有時,在項目中使用預先構建的 Arduino 板是矯枉過正,或者只是過大。 ATtiny85 是一款價格低廉但功能驚人的微控制器,有助於減少項目的佔用空間。 以下是您如何對 ATtiny 進行編程以在您的項目中使用。

Arduino平台是一個了不起的學習工具,但有時支持的 Arduino 板並不完全適合您需要的地方。 Arduino Uno (最常見的型號)的尺寸約為 65mmx50mm,很容易看出它可能是某些項目中最大的組件。 還有其他像 Nano 這樣的板要小得多(我的 Nano 仿冒品是 43 毫米 x 17 毫米,小 4.5 倍) ,但即便如此,有時它還是太大了。 如果,比如說,你想製造一個可穿戴設備,也許它只是一個閃爍的 LED,讓你的狗在晚上佩戴。 一旦考慮到電池等因素,它就會變得相當大。

提示 ATtiny 線,我們問題的英雄。 ATtiny 的名字很明顯。 您可以在 DIP-8 封裝(雙列直插式封裝 - 8 針)中找到它,大約 9 平方毫米。 就其同名的本質而言,閣樓是微不足道的,但不僅僅是它的物理尺寸。 本文使用的 ATtiny85 只有 8KB 的程序閃存、512 字節的 RAM 和 512 字節的 EEPROM (程序存儲之外的永久存儲)

現在的問題是對這些小傢伙之一進行編程。 網上有一些關於這方面的教程,但我發現它們有些不完整或缺乏說明。

ISP - 在系統程序員

In System Programmer (ISP) 並不像聽起來那麼花哨。 通常,用於 ATmel 芯片的 ISP 由帶有六針連接器 USB 電纜的設備組成。 ISP 引腳在 Arduino 上非常容易發現,它們通常位於 USB 連接器的對面。 ATmel 芯片旨在通過 ISP 引腳進行編程,但 Arduino 平台已在板上實現了 USB 到串行適配器,從而無需 ISP 設備。 儘管如此,他們仍然在許多(如果不是大多數)型號上保留了 ISP 引腳。

因為我們的 ATtiny 芯片沒有 Arduino 的 USB 轉串口設備,所以需要使用 ISP 對它們進行編程。 ATmel ISP 設備相當昂貴,至少與 Arduino 本身的成本相比,因此我們可以通過將 Arduino 編程為 ISP 來節省金錢和運輸時間。

我們通過打開 Arduino IDE 並從示例草圖中選擇 ArduinoISP 來做到這一點。

打開草圖文件後,您將看到有關代碼預期行為的一些信息。 在此文件中,我們必須快速更改我們的 ISP 以正確與 Arduino IDE 通信。

在第 220 行,我們找到了setup()函數。

 無效設置(){
  SERIAL.begin(波特率);

  pinMode(LED_PMODE,輸出);
  脈衝(LED_PMODE,2);
  pinMode(LED_ERR,輸出);
  脈衝(LED_ERR,2);
  pinMode(LED_HB,輸出);
  脈衝(LED_HB,2);

}

我們需要將BAUDRATE更改為 19200,因此該行顯示為

SERIAL.開始(19200);

根據我的閱讀,Arduino IDE 收到了一個更新,該更新破壞了與此 ArduinoISP 固件的兼容性。 Arduino 和 IDE 嘗試以不同的波特率進行通信,這導致無法將 Arduino 用作 ISP,儘管固件正確閃爍。

閣樓圖書館

Arduino IDE 支持各種不同的微控制器和板,但遺憾的是,不包括 ATtiny 系列。 這意味著我們必須自己爭取對他們的支持。

對我有用的方法是將以下 URL 添加到 Arduino IDE 首選項下的 Additional Boards Manager URL,

https://raw.githubusercontent.com/damellis/attiny/ide-1.6.x-boards-manager/package_damellis_attiny_index.json

重啟IDE,在Tools -> Board -> Boards Manager下打開Boards Manager,然後搜索ATtiny包並安裝。

完成後,您就可以開始構建電路以對 ATtiny 進行編程。

建立你的 ISP

您可以通過多種方式構建您的 ISP。 您可以在無焊麵包板上構建它,這樣您就可以重新利用這些部件,或者您可以像我一樣通過將它們焊接在一起來製作一個半永久性的解決方案。 如果您仔細地將它們焊接在一起,那麼如果您願意,您可以將 Arduino 重新用於另一個項目。

查看 ArduinoISP 草圖的前三十多行,我們可以找到以下有關將 Arduino 設置為 ISP 的信息。

引腳 10 重置引腳
目標微控制器
引腳 11 SPI 主輸出
從屬輸入
引腳 12 SPI主控輸入
奴隸出局
引腳 13 SPI 串行時鐘

或者,您可以將 LED 連接到以下引腳以指示狀態

  • Pin 9 – Heartbeat – 表示 ISP 正在運行
  • 引腳 8 – 錯誤 – 表示發生了錯誤
  • 引腳 7 – 編程 – 指示與目標的主動通信

請記住,這些 LED 將需要電阻器。

在這裡,我們可以看到 ATtiny85 的引腳以及我們需要回到 Arduino 的適當連接。 這是一張相當粗糙的圖,但為了方便起見,我在 ATtiny85 上標記了引腳。 然而,應該注意的是,這些引腳沒有像圖中那樣在 1、2、3..8 處尋址,它們在 Arduino IDE 中被指定,因為它們在對角線文本中被標記。

這是不同連接的更詳細的圖表。 所有的 LED 都是可選的,但它們對於故障排除很有用,除了 ArduinoISP 草圖文件中推薦的三個狀態 LED 之外,還有一個簡單地從 5V 連接到地(當然,使用電阻器) ,並且然後有一個連接到第二個引腳(IDE 中的引腳 3) ,用於通過眨眼測試測試閣樓。 請注意將復位引腳連接到地的電容器,這是 Arduino 用作 ISP 所必需的。

這是我為 ATtiny 微控制器構建的 Arduino ISP。 你可以看到我在編程時使用了 DIP-8 插座來固定閣樓。 我還在右側留出足夠的空間來安裝一個 DIP-28 插座,用於對 ATmega 芯片(如 ATmega328P)進行編程。 升級將非常簡單,只需要像我們與 ATtiny 一樣連接 Atmega 芯片的必要引腳。

一旦你組裝好你的 Arduino ISP,你肯定會想嘗試一下。 請務必選擇適當的設置以通過連接的 Arduino 進行編程,而不是對 Arduino 本身進行編程。

對於板子,我們選擇 ATiny 25/45/85 選項,然後在處理器選擇中選擇 ATtiny85,最後,我們從程序員那裡選擇 Arduino 作為 ISP。 這告訴 IDE 它需要了解的有關目標系統的所有信息,包括它將如何與目標系統通信。 現在我們已經準備好調出 Blink 草圖(或者如果你是鐵桿,你可以自己輸入)並嘗試一下,只要確保將用於閃爍 LED 的引腳切換到你在你的電路,如果您使用我提供的原理圖,那是引腳 3。 最後,我們通過單擊 Sketch -> Upload Using Programmer 來編譯和上傳草圖。

 無效設置(){
  pinMode(3,輸出);
}

無效循環(){
  數字寫入(3,高);
  延遲(1000);
  數字寫入(3,低);
  延遲(1000);
}

總的來說,焊接在一起的我的 Arduino ISP 可能要花費大約三四美元。 ATtiny 芯片也非常便宜,通常每塊只有 1 美元左右。 如果您打算將 ATtiny 芯片放入項目中,我建議您購買 DIP-8 插座,因為您可能想要更新一些代碼或重新調整芯片的用途。 將 IC 焊接到位是可行的,但您很容易損壞 IC,尤其是在反复暴露的情況下,如果您多次更新代碼就會出現這種情況。

有沒有其他人做過這樣的事情? 你想看更多 Arduino 的東西嗎? 請在下面的評論中告訴我們。

另請閱讀:Raspberry Pi 或 Arduino——哪個板最適合初學者?