2015年2月16日 星期一

Arduino 動手做 - 把Nano的bootloader刷成optiboot來解決看門狗(Watch Dog)錯誤

在開發一些專案時,特別是有一些不穩定因素可能造成機器陷入無窮盡等待時
我們會希望arduino可以自己重開機(reset),此時看門狗(Watch Dog Timer)就是個好幫手
但當我把專案從Uno移至Nano時情況並不順利
每當Nano遇到看門狗作用而使機器reset時,D13-LED就閃個不停而不能成功重置
經過一番搜尋,原因都導向是Nano的boot loader問題



所以解決方法就是將Nano的boot loader刷成optiboot

optiboot的專案網站提供完整了韌體檔案
https://code.google.com/p/optiboot/

但實際試過了之後發現並沒有辦法成功上傳
不知原因為何,但這讓我試了整夜都無法成功更新韌體


但幸好我找到這個部落格提供了另一個方法

Installing the Optiboot Loader on an Arudino Nano to Fix the Watch Dog Timer (WDT) Issue



這位前輩發現了一件事
就是在arduino IDE 1.06中,optiboot早已為內建韌體,且一些板子譬如uno的設定就是使用optiboot的版本,但Nano的設定卻沒有啟用optiboot

這個設定檔位於arduino根目錄\hardware\arduino\boards.txt


可以比較一下UNO和NANO的設定差異

所以最簡單的方式就是直接修改這個檔案讓Arduino IDE直接對Nano啟用optiboot
再用Arduino IDE直接燒錄韌體進去Nano

但為了避免把這檔案弄得一團糟

所以改用新增板子資訊的方式將optiboot的板子設定匯入boards.txt



於是先下載optiboot版本的boards.txt


然後找到本機上的arduino根目錄\hardware\arduino\boards.txt
使用wordpad開啟

再將optiboot版本的boards.txt同樣方法開啟並把所有板子資訊都複製貼上附加到本機上的boards.txt內容

接著重新啟動arduino IDE 1.06,應該就會在板子清單多了很多OPTIBOOT的板子



所以只要在燒錄Nano的韌體時選取[optiboot] arduino duemilanove or nano with atmega 328
就可以將你的Nano燒錄成optiboot 的boot loader

WDT的錯誤就迎刃而解啦!!

但有個要注意的事情是!!!  已燒錄成optiboot 的Nano在上傳程式碼時請把板子選成Arduino UNO


===========================
附加:  利用arduino UNO燒錄Nano韌體的方法

1. 將UNO接上電腦,在arduino IDE範例中開啟ArduinoISP的程式碼並上傳

2. 將UNO連接至Nano 的ICSP的6個pin





此圖的NANO USB方向朝右



uno d10   - nano reset
uno d11   - nano MOSI
uno d12   - nano MISO
uno d13   - nano SCK
uno 5v     - nano Vcc
uno GND- nano GND

3.將arduino IDE的工具/板子設定成你要燒錄的設定檔
譬如本篇文章用的就是[optiboot] arduino duemilanove or nano with atmega 328


4.將arduino IDE工具/燒錄器設定改為ARDUINO as ISP

5.執行arduino IDE工具/燒錄bootloader,待執行完畢則燒錄完成!

沒有留言:

張貼留言