| Arduino教學 | ATtiny | 如何燒錄程式到ATtiny85 | Attiny85 USB 上傳|

前篇文章提到如果想要上傳 Arduino 程式碼到 ATtiny85 的晶片內的話,最直覺的方法就是透過『Arduino ISP』達成(將 Uno 硬體改成燒錄用韌體),但畢竟想要更新功能時,都需要將此燒錄工具連接上目標板,稍嫌不方便,那是否有更方便的方法更新軟體呢? 有!答案就是先預載 Bootloader 程式在晶片內,透過這樣的機制,就可以透過 Serial 連接或 USB 介面,直接將程式碼『傳到』晶片內更新,這篇就來分享如何透過 ATtiny85 USB 介面上傳程式的方法。

1. ATtiny85 USB發展板

先來提一下如果想要透過 USB 介面上傳 Code,JIMI哥建議可以直接買市面上已經設計好的硬體板來是用,原因有幾個:

  1. USB 介面非常重視設計上的規範,包含走線間距、組抗等等參數,換句話說,如果自己用麵包板或洞洞板平台,搭配 USB 周邊線路與連接器焊接的話,第一個會遇到的問題就是傳輸速度與品質,也或者會…通訊不穩,這部分對我們初學者來說要盡量避開這樣不確定的問題。(不然會 Debug 到哭)
  2. 價格因素:ATtiny85 USB 開發板的價格非常低廉,有時還會比單顆 DIP IC 更便宜,當然各家板廠的品質不一,不過如果以我們預計要使用的程式傳輸功能來說,應該都可勝任。(因為傳輸 Code 還是可以降速的)

目前在拍賣可以買到的 USB ATtiny85 發展板,大多是將 DigiStump 公司的產品- Digispark 進行修改,對應腳位相容,最早這個產品是在 Kickstarter 所集資的,特色是支援 Arduino IDE 軟體開發,提供了 6KB 左右的 Flash Memory可以儲存,最關鍵就是利用 ATtiny85 的 PB3、PB4 腳位周邊電路,搭配一個特別的 Bootloader,『模擬』出 USB 的通訊介面,並可直接使用 USB 介面更新軟體程式碼,有興趣的朋友可以到下列網址瞭解 digispark 的產品細節:https://digistump.com/wiki/digispark/tutorials/digispark,網址內同時提供該發展板的電路圖可以參考。(圖片源自https://s3.amazonaws.com/digispark/DigisparkSchematicFinal.pdf)

Attiny85 USB
Attiny85 USB

回到我們的主題,如果我們想要透過 USB 介面上傳 Arduino 程式,得完成幾個動作:

  • 安裝 Digispark 硬體擴充庫到 Arduino IDE 內
  • 下載專屬 Bootloader (Hex檔)
  • 安裝 ATtiny85 發展板 Windows 驅動程式
  • 透過燒錄器工具,燒錄 Bootloader 到 ATtiny USB 發展板

簡單一句話,目標就是要把 Bootloader 成功燒錄到目標板上,並安裝好對應的硬體擴充庫與驅動程式,後續就只需一條USB傳輸線,即可上傳程式碼。

2. 安裝Digispark硬體擴充庫

安裝 Digispark 的硬體擴充庫與之前的方法類似:

Step1: 打開 Arduino IDE,選擇『檔案』=>『偏好設定』,並在設定內加入 https://raw.githubusercontent.com/ArminJo/DigistumpArduino/master/package_digistump_index.json,按下確定。

Step2: 打開 『工具』=>『開發板』=>『開發板管理員』,搜尋 digispark 關鍵字,找到 digistump AVR Boards 進行套件安裝。

Step3: 點選 『工具』=>『開發板』=>『Digistump AVR Boards』,選擇 Digispark,確認安裝成功。

3. Bootloader與驅動程式下載安裝

有朋友不知道 Bootloader 是什麼嗎?JIMI哥稍為解釋一下,Bootloader 本質上就是就一種程式,通常會被預先燒錄在 MCU 內,它的作用在傳統的定義上就是『在當硬體啟動時,引導系統進入開機程序』,不過各種 Bootloader在不同的平台上功能都略有不同,我們預計要使用的這個 ATtiny Bootloader,各位可以把它當成是『將 ATtiny MCU 模擬成USB的裝置,並支援 USB介面上傳程式碼的功能』,應該會更好理解。只要我們先將這個程式預先燒錄在 ATtiny85 內,之後就可以準備一條USB線上傳,不用再準備一台燒錄器。

* 下載 micronucleus Bootloader

這個特別的 Bootloader 是由 micronucleus 團隊所寫的,完整的 Github 網址如下 https://github.com/micronucleus/micronucleus, 目前最新的韌體是v2.04版,雖然說已經是2019年版本,但JIMI哥自己試用了一陣子,穩定也沒啥問題,所以各位朋友可以直接下載對應版本的HEX燒錄檔(就是已經compile轉檔過),檔案名稱為 t85_default.hex,下載連結為 https://raw.githubusercontent.com/micronucleus/micronucleus/master/firmware/releases/t85_default.hex,存放在電腦後,接著來下載 windows 的驅動程式。

* 安裝Windows驅動程式

剛剛提到這個 Bootloader 會將 ATtiny 硬體板,模擬成一個USB裝置,為了能順利在電腦平台執行,當然就得幫這個『特殊的USB裝置』安裝專屬的驅動程式,micronucleus 的 Github 網站內,也提供專屬的 windows 驅動程式安裝檔,安裝的步驟如下:

Step1進入 micronucleus 的 Github 網站,首先打包與下載完整的資料夾至電腦。

Step2:解開壓縮檔後,找到 windows_driver_installer 資料夾內的 zagid_2.1.2.exe,並點擊執行。

Step3:按下 『Device』=>『Load Preset Device』,並選擇目錄下面的 micronucleus.cfg 設定檔。

Step4:確定 driver 設定為 libusb-win32(v1.2.6.0) 後,選擇 Install Driver,順利完成安裝。

4. 燒錄Bootloader到ATtiny85

這個步驟就是將我們下載的 Bootloader Hex檔(燒錄用檔案)透過實體燒錄器燒錄到 ATtiny85 MCU,想要執行燒錄動作就要有燒錄器硬體與燒錄軟體,上篇我們已經將 Uno硬體『改裝』變成燒錄器,那燒錄軟體就可以用 Atmel 所提供的『Avrdude』這個工具來執行,Avrdude 是一套文字命令型的燒錄工具,如果先前已經安裝過 ArduinoIDE,這套工具就會被預設內建在 Arduino 的目錄底下,以 window 平台為例,avrdude.exe 這個檔案是放在 C:\Program Files (x86)\Arduino\hardware\tools\avr\bin 的目錄下,但這個工具的命令列參數真的有點複雜,我們這邊直接教大家怎麼燒錄就好,完整燒錄步驟如下:

Step1: 連接 Uno 燒錄器線路到 ATtiny85 開發板,腳位連接方式與先前文章類似,完整接線如下:(小提醒:uno 要當燒錄器的話,除了換成燒錄器韌體外,RESET腳位需要一個10uF的電容)

Step2:將先前下載的 t85_default.hex 與 燒錄用的設定檔 avrdude.confC:\Program Files (x86)\Arduino\hardware\tools\avr\etc\avrdude.conf ) 兩個檔案放入 C:\Program Files (x86)\Arduino\hardware\tools\avr\bin 的目錄下

Step3:將 Arduino Uno (已換成燒錄器韌體)透過 USB 連接上電腦,確認連接 PORT 編號。(JIMI哥的電腦是COM5,如果不知道如何查尋 COM 編號或將Uno轉換成燒錄器,可以參考這篇 如何透過 Uno 上傳 ATtiny85

Step4:打開 Powershell,切換到 C:\Program Files (x86)\Arduino\hardware\tools\avr\bin 下,打入下面指令(命令中的COMx要改成我們電腦內的COM號碼)

./avrdude -C avrdude.conf -v -p attiny85 -c stk500v1 -P COM5 -b 19200 -U flash:w:t85_default.hex:i -U lfuse:w:0xe1:m -U hfuse:w:0xdd:m -U efuse:w:0xfe:m

之後看到一連串的燒錄提示訊息後就燒錄完成。

備註:  2021.4.28 在此特別感謝網友 Zoyam_Chuang 留言指出燒錄指令先前內容的筆誤(./arvdude…),目前在指令部分已修正成正確的版本(./avrdude…)😅。

5. 開始透過USB介面上傳

一切步驟就續後,此時將燒好 Bootloader 的 ATtiny 開發板透過 USB 連上電腦後,驅動程式將會自動安裝,待完成安裝後,再度開啟 ArduinoIDE,開啟上排視窗的『工具』,確認下列選項設定正確。(Clock一定要選16.5Mhz,不然USB會無法連上)

我們一樣透過簡單的 LED 閃爍程式來測試上傳功能,因為這個發展板是透過 PB3(P3)、PB4(P4) 腳位與 USB 連接,如果沒有特殊需求的話,可以先避開兩支腳位,至於 digispark 在 ArduinoIDE 怎麼定義IO腳位號碼呢?各位可以參考下面的網址:http://digistump.com/wiki/digispark/tutorials/basics,原則就是發展板上的 P0 就是 D0,P1 就是D1,因為這塊發展板 P1 已經內建LED,所以我們這次改用 P1 腳位進行 LED GPIO控制即可:

而LED程式碼如下:

void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(1, OUTPUT);
}
// the loop function runs over and over again forever
void loop() {
  digitalWrite(1, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);                       // wait for a second
  digitalWrite(1, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);                       // wait for a second
}

一切確定OK後,這裡有個特殊機制需要注意!!!

程式要上傳前,請先不要將開發板USB連接上電腦!!所以此時先直接按下 IDE 左上方的『上傳』按鈕,待程式 compile 完成後,下方的訊息列就會提示 在60秒內插上 USB 裝置,此時再將 ATtinyUSB 開發板插入,LED的程式碼就會開始上傳~

程式上傳完成後應該就可以看到LED開始閃爍!

小提醒:如果沒有看到提示訊息的話,可以再次確認一下 Arduino IDE『檔案』=>『偏好設定』內的『顯示詳細輸出』上傳要打開。

6. 結語

這次分享 ATtiny 發展板如何透過 USB介面更新程式,雖然第一次燒錄 Bootloader 的過程步驟有點繁瑣,不過只要順利燒錄後,之後就可以透過 USB 上傳程式,其實還是挺方便的,JIMI哥 個人是建議朋友如果要採用ATtiny85 這個 Solution 時,就選購有 USB 介面的吧!隨插即用,省去燒錄器麻煩,甚至購買已經預燒Bootloader 的發展板,畢竟省時且快速開發才是我們用 Arduino 的最大原因!~ 😉 今天的內容就到這邊,如果在實驗上有遇到任何問題,歡迎在下面留言給我~

↓↓↓↓↓↓賣場連結↓↓↓↓↓↓

歡迎大家有需要的話,可以多多支持一下我們的蝦皮賣場喔! 😀 

吉米家官方店-創客機器人材料專賣 https://shopee.tw/jimirobot.tw

Follow JIMI哥 Twitter : https://twitter.com/jimirobot  <–得到最新文章通知

This Post Has 2 Comments

  1. P3 P4兩支腳位不能接紅黃兩色LED,否則USB會抓不到而無法燒錄

    1. 因為有很大機會影響USB傳輸通訊😁

發佈留言

Close Menu