我買了一顆ATmega328P-PU晶片,裡頭空空的,沒有Arduino的bootloader也沒有任何sketch。但我有一塊Arduino Uno R3板子,它可化身成一台ISP燒錄器;把ATmega328P-PU放上麵包板,再接上一些電子元件與線材後,便可從主機電腦透過Arduino Uno R3板、將bootloader或sketch燒錄到麵包板的ATmega328P-PU晶片裡。
我的板子是Arduino Uno R3,Arduino軟體開發環境是1.0.3 Windows版,燒錄對象是ATmega328P-PU。
本篇介紹的內容,應該也可套用到其他Arduino板子與其他型號的AVR晶片,但我也沒試過,所以此篇內容皆以我的環境為準。(我另一篇是
燒錄到ATtiny85-20PU。)
若不清楚ISP是什麼意思,若想知道ATmega328P-PU的P與PU之意,請參考我寫的:
Arduino與AVR微控制器相關詞彙。
底下是我的板子Arduino Uno R3,其微控制器晶片是ATmega328P-PU,屬於PDIP封裝。(另有SMD版本。)
首先,要讓Uno板變成一台ISP燒錄器。很簡單,請開啟Arduino軟體開發環境,然後選File - Examples -
ArduinoISP,將這支sketch,Upload(上傳、燒錄)進Uno板,如此即可,ArduinoISP這支sketch的功能就是讓Arduino板子變成一台ISP燒錄器。
底下是單獨的ATmega328P-PU晶片。
接下來,我們想要將bootloader燒錄到麵包板的ATmega328P-PU晶片裡,需要一些硬體線路,所需電子元件如下:
- 16 MHz crystal石英晶體
- 10K ohm電阻
- 18~22 pF陶瓷電容,2個
也可以燒錄一般的sketch,之後將會燒錄Blink範例(閃爍LED),所以還需要底下的元件:
底下是ATmega328晶片的腳位功能對照(328與168是一樣的),對照這張圖進行接線。
Arduino板的5V與GND接到麵包板。
ATmega328P-PU的腳位7(VCC)、20(AVCC)接到5V。
ATmega328P-PU的腳位8(GND)、22(GND)接地。
然後是16 MHz石英晶體(不分極性),兩隻腳分別接一個18~22 pF陶瓷電容後,接地。陶瓷電容不分極性。
ATmega328P-PU的腳位9(XTAL1)、10(XTAL2)接到石英晶體的兩隻腳。
然後根據ArduinoISP這支sketch定義的ISP腳位接線,
ATmega328P-PU的腳位1(RESET)接5V。
Arduino Uno板腳位10,接ATmega328P-PU的腳位1(RESET)。
Arduino Uno板腳位11,接ATmega328P-PU的腳位17(MOSI)。
Arduino Uno板腳位12,接ATmega328P-PU的腳位18(MISO)。
Arduino Uno板腳位13,接ATmega328P-PU的腳位19(SCK)。
如此便完成硬體線路了,接下來要燒錄bootloader。
Arduino Uno板以USB線連接主機電腦後,開啟Arduino軟體開發環境,先做一些設定:
- 設定Tools - Board選為Uno。這個設定的意思是「被燒錄的對象」,但我們並不是要燒錄到Uno板子,因為Uno板使用的晶片跟麵包板上的ATmega328P-PU相同,所以選此設定,但選Arduino Duemilanove w/ ATmega328也是可行的,不過會有些差異,譬如說將燒錄不同版本的bootloader,詳情請見Arduino軟體開發環境目錄\hardware\arduino\boards.txt。如果要燒錄別的型號的晶片,就要選別的選項,甚至要動手修改boards.txt自己新增。
- 設定Tools-Serial Port。這是Uno板連接到電腦的序列埠號。
- 設定Tools - Programmer,選為Arduino as ISP。
然後執行
Tools - Burn Bootloader,便可將bootloader透過Arduino Uno板(扮演一台ISP線上燒錄器),燒錄到麵包板上的ATmega328P-PU晶片裡。
會顯示訊息Burning bootloader to I/O Board (this may take a minute)...,會花一點時間,以我的環境來說不到1分鐘。
之後會顯示Done burning bootloader.,代表成功了。只要再加上USB轉TTL序列訊號的電路(譬如SparkFun的
Breakout Board for FT232RL USB to Serial),就幾乎等同於一塊普通的Arduino板子了。
相關參考資料請看Physical Computing at ITP的教學文章
Setting up an Arduino on a breadboard、swf.com.tw的
用麵包板組裝Arduino微電腦實驗板、Dale Wheat的
How to Build an Arduino-compatible Physical Computing Platform on a Solderless Breadboard。
接下來要把一般的sketch燒錄到麵包板上的ATmega328P-PU晶片裡。
有一個作法是,拔除Uno板的晶片,然後修改接線(板子的0 RX接到晶片的2、板子的1 TX接到晶片的3),這麼一來,就能跟平常一樣,Upload(上傳、燒錄)一般的sketch了。這種作法就好像是以麵包板的晶片取代Uno板的晶片。詳情請見Arduino官方網站的
From Arduino to a Microcontroller on a Breadboard。
上述作法,bootloader與sketch共存,就跟平常使用Arduino板子時一樣。
底下介紹的作法,燒錄sketch會蓋掉先前的bootloader。
原先的接線維持不變,Arduino Uno板仍然扮演ISP燒錄器的角色。
讓我們試著燒錄閃爍LED的sketch,先接好硬體線路,麵包板的ATmega328P-PU晶片的腳位4(就是Arduino數位腳位2),接220 ohm電阻後、接LED長腳,LED短腳接地。
開啟File-Examples-01.Basics-Blink,將sketch裡頭設定的腳位13改為2,然後執行
File - Upload Using Programmer,便能將sketch透過Arduino Uno板(扮演ISP線上燒錄器)燒錄到麵包板的ATmega328P-PU晶片裡,成功的話,就能看到LED閃爍。
參考資料: