****** 本篇較適合有 Arduino 使用經驗的使用者參考,只要成功跑過範例就可以 :) ******

photo 2

 

前言

不知道用 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 為例,

 ATtiny45-85  

以 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 腳位)。

Screen-shot-2011-06-06-at-1.46.39-PM
(圖片來源: 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 在閃爍囉!

 

筆者也順手作了一個簡易精美(?)電容感應板(電容感應製作可參考這)。

photo 2  

 

 

參考資料

MIT High-Low Tech http://hlt.media.mit.edu/?p=1229

http://tronixstuff.wordpress.com/tag/pwm/

 

 

 

 

 

 

 

 

 

 

 

arrow
arrow
    創作者介紹
    創作者 DK 的頭像
    DK

    DKBLOG

    DK 發表在 痞客邦 留言(1) 人氣()