| Arduino教學 | ATtiny | 如何燒錄程式到ATtiny85 | Uno 燒錄|

如果我們今天的想到的專案題目是比較小的,僅需要兩三隻腳位時,是否有比 Uno成本更低又符合需求的選擇?答案當然是有的,這時候就可以考慮一下 ATtiny85 這顆 MCU,一樣可以採用 Arduino IDE 的內建語法進行開發,本文就來分享如何將寫好的程式碼燒錄到 ATtiny85 內。

1. ATtiny85 介紹

ATtiny85 是一顆 Microchip 8bit 的 MCU,腳位有 8 支(扣掉電源與 GND,最多使用到 6 支 GPIO),相當符合腳位需求不多且有成本考量時的專案,JIMI哥會推薦它的原因,也就是當外掛第三方寫的硬體函示庫後,我們就可以繼續沿用Arduino 的習慣與環境進行開發,將所寫的程式無痛的移植到 ATtiny MCU。

目前市面上可以找到關於這顆 IC 的方案大概就是兩種:一種就是純 IC 晶片(通常就是 DIP8 的封裝),另一種將 ATtiny85 搭配 USB 等周邊電路的小型發展板,兩者價差不大,主要差別在於搭配 USB 的發展板,可以額外提供 USB 介面傳輸程式碼機制,本文就先來學習基本的燒錄功能(適用只有單一 IC 時的開發情境),下篇在分享有 USB 介面時如何進行開發。

2. 燒錄前置設定

要透過 Arduino IDE 將編寫的程式碼直接燒錄到 ATtiny MCU 內,有 3 個準備工作要完成:

  1. 準備 程式燒錄工具( ISP Tools )
  2. 安裝 第三方的硬體板擴充庫
  3. 連接 ATtiny85 IC 所需周邊電路

接下來 JMI哥 就依序教大家各個步驟該怎麼完成。

I. 準備實體燒錄工具

要燒錄程式到 ATtiny85 MCU,有很多現有的燒錄器可以實現,像是官方的 Atmel ICE Debugger 等,不過以我們所開發的專案通常不是那麼複雜,就可以將手邊的『Arduino Uno』這塊開發板『改裝』成實體燒錄器,其實就是將『燒錄器功能』的韌體上傳到 Uno 開發板,Uno 就會變成所謂的 Debugger 燒錄器,上傳的步驟如下:

Step1: 開啟 Arduino IDE,連接 Uno 板到電腦,選擇對應的硬體與連接 COM。

Step2:開啟『檔案』=>『範例』=>『Arduino ISP』=>『Arduino ISP』

Step3:按下上傳,完成燒錄軟體上傳。

Step4:為了可以透過 Arduino IDE 控制燒錄器動作,將一個10uF電容,正極插入 Uno RESET 腳位,負極一端插入GND。(如沒有這個動作,將無法進行燒錄)

II. 安裝 ATtiny85 開發板擴充套件

Arduino IDE 一個很大的優勢就是可以安裝許多不同硬體核心的擴充套件,如果我們只是想要透過燒錄器直接燒錄軟體的話,可以安裝由 Spence Konde (aka Dr. Azzy ) 作者所維護的ATtiny Core 這個套件( https://github.com/SpenceKonde/ATTinyCore ),這個套件支援相當多的ATtiny系列MCU,這篇所使用的tiny85也是其中一種,而安裝此套件的步驟也很簡單,方法如下:

Step1: 打開 Arduino IDE,選擇『檔案』=>『偏好設定』

Step2: 記得將顯示輸出的『上傳』勾上,並在額外的開發板管理員網址中,增加 http://drazzy.com/package_drazzy.com_index.json 清單,之後按下確認。

Step3:選擇『工具』『開發板』『開發板管理員』; 搜尋 attiny 關鍵字,找到ATtinyCore 套件,點選安裝。

Step4:安裝完成後,確認『工具』=>『開發板』將多出『ATTinyCore』的選項。

III. ATtiny85 周邊線路連接

第3個步驟就是連接 MCU 周邊的必須線路,並新增一個 LED 供後續測試用,uno與 tiny85 的連接對應關係如下:

Uno ATtiny85
D13 Pin 7
D12 Pin 6
D11 Pin 5
D10 Pin 1
5V Pin 8
GND Pin 4

Uno D13~ D10 與 Tiny85 之間的線路,可以看成燒錄器與目標板的連接,其餘則是電源與測試用接線,完整的連接方式如下:( 記得不要忘記 Uno RESET 與 GND 的 10uF 電容)

3. 程式上傳

> 程式碼與IO腳位定義

在開始進行燒錄動作前,我們先簡單來寫個 LED 閃爍的動作,完整程式碼如下:

void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(4, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(4, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);                       // wait for a second
  digitalWrite(4, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);                       // wait for a second
}

上面這段程式碼會將 Tiny85 電路圖所連接 LED,進行 1 秒的間隔閃爍,相信應該會有朋友好奇為什麼 JIMI哥 會知道是『D4』的腳位控制 LED?其實像這種非官方所發展的硬體擴充庫,通常都得查詢作者的開發網頁才有辦法正確知道對應的腳位(換句話說,也可以知道他實現多少的功能在這套擴充庫內),ATtinyCore 針對 Tiny85 的腳位定義網址如下:  https://github.com/SpenceKonde/ATTinyCore/blob/master/avr/extras/ATtiny_x5.md, JIMI哥擷取 PinOut 的圖片如下:

想要知道在 Arduino IDE 內 IO 號碼的定義就查詢對應的顏色即可,同時也可以知道該腳位作者同時有實現什麼功能在上面(如A0-A3 類比輸入等)。

> 開始進行燒錄

現在開始就可以透過 Arduino IDE 執行程式上傳動作,方法與之前 Uno類似,但增加一些選項需設定,下面為完整流程:

Step1:在『工具』=>『開發板』=>『ATtinyCore』,選擇『ATtiny25/45/85(no bootloader)』,點擊完後對應的選單將會列出。

Step2: 在新增的細部選單中,選擇適合參數進行調整,如無其他需求,將Chip選擇 ATtiny85 即可。

Step3:在『工具』=>『燒錄器』中,選擇『Arduino as ISP (ATtinyCore)』。(重要步驟,因為要透過uno燒錄程式)

Step4: 確認 Uno 的序列埠正確連上後,按下上傳按鈕,待完成燒錄動作後,拔開 Uno 連接到Tiny85的燒錄線路 D13~D10,LED 將開始進行閃爍。(5V GND 可以不用拔,不然會沒電 😀 )

4. 結語

ATtiny85 的市場定位就是腳位需求少,做簡單應用控制的場合,本篇主要就是讓各位朋友學習如何 將 Arduino 的程式直接透過『燒錄器』的方式上傳到 Tiny85 目標板,使用方法簡單,當然缺點就是每次要上傳程式時,就得需要一個燒錄器裝置隨身帶著,所以 JIMI哥 下次要來聊聊,當我們如果開發是選用帶 USB 介面的tiny85 板時,如何透過 VUSB bootloader 的架構,直接上傳程式碼!!~~ 今天的分享內容就到這邊,如果大家在測試實驗上遇到什麼問題,歡迎在下面留言給我~!!

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

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

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

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

發佈留言

Close Menu