2015年1月13日 星期二

Arduino當ISP燒入Sketch code

在開發案子的時候,為了要能夠省電而在電路上做了一個電晶體開關電路,在工作結束後讓Arduino以I/O切斷電晶體開關,讓整個電源電路關閉,也直接讓Arduino斷電。

但是卻意外發現原來Arduino bootloader的boot時間需要3~7秒,這點讓在操作產品時的使用者體驗是非常難以接受的,因此上網找了如何直接將sketch code燒入到Atmega 328。
我的環境架設為:
1. Arduino Nano *1 當ISP
2. 空白的Atmega * 1 當Target
3. mac pro-book retina OX X
4. Arduino IDE 1.0.6


如果有用過一塊Arduino當ISP燒過Arduino bootloader的人,一定知道線該怎麼接,因此我把流程分為兩塊,一將Arduino設定為ISP工具,二燒入sketch code到target。


將Arduino nano設定為ISP programmer
1. 將Arduino Nano與PC連接。
2. 開啟Arduino IDE->file->Example->ArduinoISP。
3. tool->board->Arduino Nano w/ Atmega328。
4. tool->Serial Port->(選擇Arduino Nano的port)。
5. tool->Programmer-> AVR ISP。
6. upload ArduinoISP程式到Arduino Nano板子上。

將sketch code燒入到空白的Atmega328
1. 修改arduino的preferences.txt(路徑為Users/[User Name]/Library/Arduino/preferences.txt)檔中的upload.using=bootload變為upload.using=arduinoisp或是修改hareware/boards.txt(Users/[User name]/Applications/Arduino/Contents/Resources/Java/hardware/arduino/boards.txt)中新增一個borad name並在該board name中加入[board name].upload.using=Arduino as ISP,選擇第二個的好處是不用每次在bootloader與arduinoisp間切換,而是若要直接燒入code的時候選擇你定義的板子。
2. 接線方式為(Programmer -> Target) VDD->VDD, D10->RST, D11->D11, D12->D12, D13->D13, GND->GND
3. tool->board->你定義的board。
4. tool->Serial Port->(選擇Arduino Nano的port)。
5. tool->Programmer-> Arduino as ISP。
6. upload,就可接將code燒入到你的target中。

後續,我用mac燒入的時候遇到avrdude: stk500_getsync(): not in sync: resp=0x15的錯誤訊息,這個錯誤訊息的改善方式是要在Arduino ISP端的Reset與GND間加上一個10uF電容即可改善。
另外若是在燒入時出現verification的問題,則需重新連接Arduino與PC,並且重新開啟Arduino IDE即可。

當sketch code直接燒入atmega 328後,可以省掉5~7秒的等待時間,並且可以多出約2kbyte的rom。