搜尋此網誌

2014/03/22

利用ArduinoISP燒錄ATTINY85

17-1  利用ArduinoISP燒錄ATTINY85

by 梅克2工作室

在此介紹Arduino燒錄ATtiny晶片將作品小型化的作法,本節以ATtiny85 (85/45/25)晶片為例,同樣的方法對ATtiny84(84/44/24)、ATtiny2313這些系列晶片都適用。

一、 材料


表 17‑1 零件清單與規格表
零件名稱 規格型號 數量
Arduino微電腦控制板 可以是Uno、Leonardo或OZONE板,本節以Uno板為例,後面會提及Leonardo。 1
麵包板 1
AVR晶片 ATtiny85 1
電容 10uF 1
LED 紅色 1
電阻 330Ω 1

二、 安裝 arduino-tiny

(一) 下載 arduino-tiny:網址為http://arduino-tiny.googlecode.com/files/arduino-tiny-0100-0012.zip
(二) 將arduino-tiny壓縮檔內的tiny資料夾複製到Arduino IDE程式資料夾的hardware資料夾下。
(三) 重新啟動 Arduino IDE。
(四) 點選Tools→Board選單,應該可以看到如圖17‑1多出很多ATtiny板子可供選擇的畫面。


圖17‑1 ATtiny85板的選單
 

三、 把 Arduino 變成燒錄器

欲使用Arduino板來燒錄ATmega328、ATtiny等AVR晶片,首先須將Arduino板變成燒錄器(In-System Programmer,ISP),方法是將Arduino IDE範例中的ArduinoISP程式檔燒錄至Arduino板中,操作步驟如下:
(一) 啟動 Arduino IDE,打開 File→Examples→ArduinoISP 這支程式。
clip_image004
圖17‑2 開啟ArduinoISP 程式
(二) 在開啟的ArduinoISP程式中,往下捲動程式,尋找燒錄過程中負責定義RESET的腳位,並將其內容改為10,如下所示。
image
因Uno板的SS(slave select周邊選擇線)即定義為10,故使用Uno板的使用者可忽略此操作,若是Leonardo、OZONE板則需要進行此動作(因Leonardo板的SS原定義為17,為了配合底下的接線改為10)。
(三) 點選Tools→Board選擇使用的Arduino板子,例如Uno。
(四) 點選Tools→Serail Port選擇串列埠,例如Com7。
(五) 晶片燒錄方式請選擇Tools→Programmer→AVRISP mkII。
(六) 按clip_image008圖示上載燒錄ArduinoISP程式。

四、 連接 Arduino 與 ATtiny85

接著要連接 Arduino 與 ATtiny85,首先來看ATtiny85晶片的外觀與腳位,圖17‑3所示為ATtiny85兩種不裝的外觀,其中有一凹陷點的為接腳 1 的位置(即RESET腳),圖17‑4為ATtiny85 的腳位圖,除了電源與RESET外,共有5個I/O(D0~D4)可使用。
clip_image010 clip_image012
       (a)DIP包裝      (b)SOP包裝
圖17‑3 ATtiny85外觀

image
圖17‑4 ATtiny85接腳圖

燒錄的方式採用SPI,請依照圖17‑6連接 Arduino的ICSP(in-circuit serial programming,線上串列燒錄)與 ATtiny85,除了電源接腳外,需依圖17‑5的SPI腳位接妥,MOSI接MOSI、MISO接MISO、SCK接SCK,還有Arduino的D10腳(SS)接至ATtiny85的RESET。另外,為了測試燒錄結果是否正確,請在ATtiny IC第5腳接限流電阻與LED方便驗證;還有,若是使用Arduino Uno板,為了避免開啟串列埠時會觸發Uno板的自動重開機(auto reset)功能,請在RESET與GND間放一個10uF電容(Leonardo、OZONE板不用接此電容)。一般都是燒錄好ArduinoISP程式才接10uF電容防止自動重開機,未燒錄前不可接。
image
             (a)Uno板                                                    (b)Leonardo板
圖17‑5 Arduino板的ICSP腳位接應
image
圖17‑6 Arduino UNO燒錄ATtiny85的配線圖

對於Leonardo、或其相容板(OZONE)的使用者,其實接法都差不多,如圖17‑7所示,差異只在不需接防止自動重開機的電容,還有後續燒錄方式的選擇。
image
圖17‑7 Leonardo板、OZONE板燒錄ATtiny85的配線圖

五、 燒錄 ATtiny(Leonardo板的使用者請先看第六點)

接著我們就可以用Arduino來燒錄ATtiny85了,也就是透過Arduino將程式上傳到ATtiny85上,步驟如下。
(一) 點 File→Examples→01. Basics→Blink,打開LED閃爍程式。
(二) 把Blink.ino原本程式中的led變數從13改成0。
(三) 點選工具列Tools→Board 選擇 "ATtiny85 @ 1 MHz (internal oscillator; BOD disabled)"
(四) 選擇通訊埠,點選Tools→Serial Port,例如COM7。
(五) 燒錄器(Programmer)請選擇Arduino as ISP。Leonardo或OZONE的使用者請進行第六點操作後選擇Arduino as ISP (Leonardo)。
image
圖17‑8 燒錄器請選擇Arduino as ISP

(六) 點選File→Upload Using Programmer,或者按Ctrl+Shift+U上載燒錄程式。
(七) 過幾秒鐘後,狀態列上就會顯示 Done uploading 的訊息,如圖17‑9所示;訊息欄中可能會看到底下兩行訊息,不過別擔心,程式是有正確上傳的,此時應可看到LED正常的閃滅動作,圖17‑10(a)所示。
image
圖17‑9 燒錄後的訊息

(八) 測試成功後,即可拆下與Arduino的連線,此時獨立接上電源就是小型化的應用了,如圖17‑10(b)所示。
clip_image010[5]    clip_image012[5]
(a)ArduinoISP燒錄器接線圖  (b)燒錄後獨立運作圖
圖17‑10 測試實體圖
 

六、 Leonardo板燒錄器的變更

利用Arduino進行ArduispISP,預設燒錄的通訊協定是採用stk500v1,此協定不適用在Leonardo二合一的ATmega32u4晶片上,故使用ATmega32u4為核心的Arduino板需新增一個通訊協定為arduino的燒錄器才行,操作步驟如下:
(一) 建立新類型燒錄器:建立的方式有二種:

  1. 打開Arduino IDE程式路徑(例如C:\arduino-1.0.5\)的「hardware\arduino」資料夾,並使用「Notepad++」或附屬應用程式中的「記事本」開啟programmers.txt檔案,於檔案的最後加上圖17‑11的四行並存檔。
註: 由於CR與LF的換行問題使得一些檔案由「記事本」開啟後,所有行都連成一行,不容易編輯,若有此情況,建議下載「Notepad++」取代「記事本」操作。或者按ctrl-A全選記事本中的文字,然後按ctrl-X剪下後貼到新開啟的Word文件中,再按ctrl-A全選Word中的文字,ctrl-X剪下後貼回記事本即可。
  1. 在Arduino IDE的「hardware\」資料夾,建立一個名稱為leofix的資料夾,然後在leofix資料夾下建立一個檔名為programmers.txt的文字檔,並以「記事本」編輯,內容輸入底下四行。
image
圖17‑11 Leonardo燒錄器的參數設定
圖17‑11中各行參數的用途說明如下:
  1. 指定燒錄器(Programmer)中顯示的名稱,名稱可任意指定,主要能方便辨識即可。
  2. 指定通訊方式為串列(serial)。
  3. 設定通訊協定方式為arduino(Uno板的協定為stk500v1)。
  4. 設定通訊的傳輸鮑率為19200bps。
(二) 重新啟動Arduino IDE,此時點選Tools→Programmer,選單中應可看到剛剛新增的燒錄器Arduino as ISP (Leonardo),如圖17‑12所示。
clip_image014
圖17‑12 選擇Leonardo的ArduinoISP燒錄器

2 則留言:

上海老酒銷售專員 嘉晟 提到...

請問要如何用ATtiny85擷取MLX90614紅外線感測器的數據,試了很多方法都沒辦法,ATtiny85 可以使用i2c通訊嗎

梅克2工作室 提到...

這是MLX90614的相關教學, 有函式庫!!

查一下ATtiny85的datasheet, 它有SDA, SCL, 理論上是沒問題的, 試一下!!
http://www.atmel.com/images/atmel-2586-avr-8-bit-microcontroller-attiny25-attiny45-attiny85_datasheet.pdf