搜尋此網誌

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燒錄器

AMA多功能實驗板簡介

AMA多功能實驗板是進行AMA先進微控制器應用認證時使用的板子,內含15項實習單元,不只有基礎課程會用到的元件電路,包含LED、Keypad、七段顯示器,也有進階的光感測器、溫度感測,以及EEPROM等電路,適合學校微控制器(微電腦)課程使用。其外觀圖如下:


Layout圖如下:


各區塊的電路介紹如下:

1. 直流馬達驅動電路

由MINI USB(JP1)提供+5V,經H型橋式驅動IC(HT6751)來驅動連接USB-A(JP2)的直流馬達(風扇)。


2. 伺服馬達電路(RC Servo)

可藉由PWM波形控制4個RC伺服機,控制線可接至JP24,Servo0~Servo3可插四顆RC Servo;使用時必須接上JP1的USB接頭供電。

3. Relay繼電器電路

JP6的IN腳接1時動作,C(1)為共同端點,A(3)為NO(常開),B(2)為NC(常閉)接腳。






4. 七段顯示器電路

為共陰七段顯示器,再由JP8以高電位選擇欲顯示的位數(com1~com4分別對應千、百、十、個位數)

  1. 單一位數顯示時:例如只顯示個位數,則將com4接高電位,接著在JP7輸入高電位資料即可顯示。
  2. 四位元多工顯示:JP7為資料線,JP8為掃描線,利用視覺暫留即可顯示四位數



5. 蜂鳴器

在JP9輸入波形即可發出聲音,實驗板使用的是有源蜂鳴器。








6. TC77 溫度感測電路

由JP10以SPI介面讀入信號,即可讀取溫度值;TC77的有效位元為13位元,溫度解析度為0.0625°C。





7. EEPROM電路

由 JP12 以 I2C 界面存取EEPROM的資料內容。






8. LED電路

由 JP13 控制LED的亮滅;電路採共陽結構,故JP13相對腳位上送低電位時亮,送高電位時滅,此電路方塊可送來顯示感測器狀態、跑馬燈,或廣告燈等。








2014/03/12

test code

這裏放code

Arduino code Test

/*
  Blink
  LED滅0.5秒亮0.5秒,週而復始

  This example code is in the public domain.
*/
 
// Pin 10 接一個 LED 至Arduino 板
// 指定一個變數名稱為led
int led = 10;

// 此 setup 程序只有在微控制器按 reset 時執行一次
void setup() {                
  // 初始化指定的數位腳位為輸出模式
  pinMode(led, OUTPUT);     
}

// 此 loop 程序會一直重覆執行
void loop() {
  digitalWrite(led, HIGH);    // LED滅 (led輸出高準位,由於LED為低態動作的接法,故led輸出高準位時LED滅)
  delay(500);             // 等待500 ms
  digitalWrite(led, LOW);     // LED亮 (led輸出低準位)
  delay(500);                 // 等待500 ms
}