****** 本篇較適合有 Arduino 使用經驗的使用者參考,只要成功跑過範例就可以 :) ******
前言
不知道用 Arduino Uno 做快速雛形製作的同好們,會否常常為了驅動或測試一個小電路、感應器或什麼的卻要勞師動眾使用 Arduino 板、麵包版、一堆跳線的有點麻煩又嫌手忙腳亂?要帶著 prototype 出去 DEMO 時用跳線偶爾會脫落、不穩定?要將 prototype 塞進其他裝置內時會否覺得空間不夠用?筆者也曾經使用較小的 Arduino Pro Mini、Arduino Nano、Arduino FIO 等,但其實仍然稍嫌麻煩,且那小小的一片可是又要花近一千元去購買(買著買著到最後就會像筆者一樣驚覺身上有 17 片各種 Arduino)。
常有上述困擾的人或許早有自己的解決方案,筆者是最近突然想將整個 Arduino 專案縮小,又不想花太多 effort 移轉到別的平台,於是找到了 ArduinoISP 配 ATtiny45 的方式。用 ATtiny 這個小控制器的好處是,prototyping 時可以在一般 Arduino 上工作,直到寫完 sketch 並確認了電路 layout 及想用的 input output 之後,將同一份 Arduino sketch 上傳到 Attiny,再將線重新拉到 Attiny 的 pin 上就移轉成功了!對於開發、快速縮小化來說是非常有效率的。
ATtiny45 共有八隻腳,扣掉 VCC、GND、RESET 共有五個腳位可供 IO 使用,根據 DATASHEET 這五個 PIN 其實很好用,包含三個 Analog Input 和兩個 PWM Output,個人覺得要用來 DEMO 一些小互動而言非常夠用。
ATtiny的工作電壓從 2.7-5.5V 皆可,因此從 Arduino 傳 sketch 進去 ATtiny45 就由 Arduino 上的 5V 供電即可。當 ATtiny45 獨立運作下,直接餵給他一般手機電池或自行車燈電池的電也能正常運作 (約3.7V)。
ATtiny45 和 ATtiny85 工作時脈、CPU、輸入輸出腳位(IO)基本上都相同,最大的差異根據製造商 Atmel 網站上所述應該在於 flash 記憶體的差別(前者為4KB後者為8KB),基本上不要太過複雜的驅動,在一般需求的 sketch 都夠用(Arduino 比較早期使用 ATmega168 有16KB flash)。
總結以上,在開始一個 ATtiny45/85 微型專案時,需要注意他跟 Arduino 比較起來有以下限制:
限制一:有限的輸入輸出,兩組 Digital ouput(PWM) 與三組 Analog input。
限制二:記憶體,ATtiny45 只有 4096 bytes 的 flash memory,85 則是 8192 bytes。
限制三:僅支援部分 Arduino 函式 (Arduino v0.X),包含以下:
pinMode()
digitalWrite()
digitalRead()
analogRead()
analogWrite()
shiftOut()
pulseIn()
millis()
micros()
delay()
delayMicroseconds()
Arduino 1.0 後之版本支援以下函式:
pinMode()
digitalWrite()
digitalRead()
analogRead()
analogWrite()
shiftOut()
pulseIn()
millis()
micros()
delay()
delayMicroseconds()
SoftwareSerial
開始用 ATtiny 開發小專案囉!
首先你需要確認手邊有:
- 一片 Arduino Uno 或 Duemilanove (板子上的控制器需是 ATmega328,舊版的 ATmega168 不適用)
- 一顆 ATtiny45 或 ATtiny85
- 一顆 10 uF 電容
- 麵包板
- 跳線
讓 Arduino 能認識 ATtiny44/45/84/85
- 請下載此外掛 (Arduino 1.0 前版本用 | 1.0 後版本用) 2013.05.17 updated: (arduino-tiny library 支援 Attiny24/25/44/45/84/85 and more)
- 找到 Arduino 安裝路徑,將壓縮檔內的東西複製到 Arduino/hardware 資料夾中 (若沒有則自己新建一個)
- 重新打開 Arduino 程式
以 ATtiny45 為例,
以 ATtiny 微控制器上有凹槽 (或一個小洞) 朝上來看,依逆時針有八個針腳,第一為 Reset、第二為 Pin3、第八為 VCC+,依此類推。
讓 Arduino 板變身為可以 program ATtiny 的角色
我們要用 Arduino 板子 program ATtiny45 或 ATtiny85,首先我們需要將 Arduino 轉職成為 “in-system programmer” (ISP):
- 執行 Arduino 程式
- 從選單中的範例 (example) 中開啟 ArduinoISP sketch 範例。
- 選擇正確的 board 和 serial port。
- 上傳 ArduinoISP sketch。
連接 Arduino 板與 ATtiny
我們可以依照下面的圖示去拉 Arduino 與 ATtiny 之間的跳線。我們也需要在 Arduino 板上的 reset 與 ground 間放置一顆 10uF 電容 (長腳為正,插在 reset 腳位)。
(圖片來源: MIT High-low Tech Website)
腳位的連接方式如下:
將ATtiny Pin 2 (7) 接到 Arduino Pin 13
將ATtiny Pin 1 (6) 接到 Arduino Pin 12
將ATtiny Pin 0 (5) 接到 Arduino Pin 11
將ATtiny Reset (1) Pin 接到 Arduino Pin 10
當然,需要幫 ATtiny 供電已讓他運作,
將 ATtiny 的 VCC+ (8) 接到 Arduino Pin 5V
將 ATtiny 的 -GND(4) 接到 Arduino Pin GND
在 ATtiny45/85 上寫程式
接著我們能透過 Arduino 為 ISP 的角色上傳程式到 ATtiny45/85:
- 從選單中打開 Blink sketch 範例,
- 將範例中的 pin numbers 由13 改成 0 (ATtiny 的 pin0,即逆時針第五個腳位)。
- 從工具 (Tools) -> 板子 (Board) 清單中選“ATtiny45 (w/ Arduino as ISP)” 或 “ATtiny85 (w/ Arduino as ISP)” 。
- 點選上傳。
你可能會被警示以下訊息,但不用緊張,你的程式還是成功地被傳入 ATtiny 中了!
avrdude: please define PAGEL and BS2 signals in the configuration file for part ATtiny45
avrdude: please define PAGEL and BS2 signals in the configuration file for part ATtiny45
現在,你可以將 LED 長腳(+) 連接到 ATtiny 的 pin0 (5),短腳(-) 與 ATtiny 共地接回 Arduino 的 GND,就能看到 LED 在閃爍囉!
筆者也順手作了一個簡易精美(?)電容感應板(電容感應製作可參考這)。
參考資料
MIT High-Low Tech http://hlt.media.mit.edu/?p=1229
http://tronixstuff.wordpress.com/tag/pwm/
留言列表