2012年11月2日 星期五

USBasp 以 Progisp 軟體燒錄 Arduino (ATmega168、ATmega328) bootloader 設定教學

前一篇我們帶著大家利用  AVR Studio  設定  AVRISP   mkII  進行 Fuse 等細節燒錄,
但上一篇教學是針對 Arduino   ATmega  2560 這顆單晶片。

若手邊只有 USBasp,而且要燒錄的對象只是 ATmega 168、ATmega 328,
那麼只需要上網搜尋一個輕量級的軟體: Progisp  ,即可燒錄。

由於該軟體相當容易搜尋,因此就不在此提供連結。




當軟體準備開啟前請先將 USBasp 插上 Arduino 的 ICSP 腳位,
並將 USBasp 與 Arduino 上的 USB 線連接至電腦。




接著將 Progisp 開啟,開啟畫面如下,
請先選擇晶片,接著按一下 USBasp 的 icon





接著我們針對常用的幾個 icon 進行介紹,紅色方框中的部份是我們會用到的常用選項,
圖片如下


1 . 一鍵清除晶片
2.  全自動(清除、上傳、驗證,一鍵完成)
3.  Fuse 等細部設定
4.  更多命令功能 ( Earse  flash、Upload  flash ....etc. )


當我們要上傳程式之前,請先按下 Earse 作晶片清除,接著按 Auto,就完成了全部的工作。
好,節目到此結束,我們下週見。


哎呀,當然不是這樣就沒啦!
的確這兩個步驟就可以做完全部的工作,只要一開始的晶片選擇有選對,
就是這麼輕鬆簡單。



我們再來介紹一下選項 3 和選項 4 的兩個功能


選項 3 點開後的圖示如下

若你有閱讀過我們前一篇使用 AVR  Studio 燒錄的文章,
那這邊應該有些 Fuse 的名字很熟悉,例如 SPIEN(SPI  Enable)。





以電腦的概念而言,1代表開,0代表關,但為什麼 SPIEN 是 0 呢?
因為在 AVR 的 Fuse  設定中,0就代表開,1就是關閉。
所以千萬別被 Fuse 這堆 1, 0 嚇到了。

這邊的 Fuse 設定,我們都不需要去更改設定,只需要看看 SPIEN有沒有被設定為 1 就行了。





那麼到底晶片的 Fuse 設定,應該是什麼樣的規定才是正確的?
有沒有一個表格可以查詢?
這問題我想應該很多初學者也很困擾,但別擔心,網頁上就能找到讓你搞懂 Fuse 的網站!

Embedded AVR Fuse Calculator:http://www.engbedded.com/fusecalc



進入網站後,可以看見中間有個選擇晶片的選項



我以 ATmega 328 晶片為例,選擇後會跳出以下畫面,
共計有三個大項目:

1. Feature  configuation

2. Manual fuse bits configuration

3. Current setting




這個網站所提供的 Fuse 與其他細節設定值,可以直接套用至燒錄器中的選項設定中,
因此萬一拿到一片新的 AVR  晶片不曉得要怎麼調整,可到這個網站來查詢一下。



選項4的按鈕 command 則是把一些功能選單隱藏起來,讓畫面更乾淨




綜合以上介紹後,對於 Progisp 是不是比較熟悉了?

其實若沒有特殊需求,需要特別設定,
在一開始打開 Progisp ,選擇好晶片,直接按下 Earse 和  Auto  就可以了。

不過 ATmega  2560 在這個燒錄器有個很妙的情況,
燒錄可以成功燒錄,但是在 Arduino  IDE 卻無法上傳 Sketch。

正常燒錄成功的 Arduino ,應該是可以透過 USB 或 ICSP 腳位(利用燒錄器)上傳程式,
不過 ATmega 2560 卻失敗了。



因此筆者在此強烈建議:

ATmega  168 、ATmega  328  可用 USBasp 燒錄,簡單又便宜,

ATmega 2560 則用 AVRISP  mkII ,可增加成功燒錄的機率。



燒錄器與 Arduion  Bootloader  系列文章,就在此告一個段落,
希望很快有新的研究可以分享給各位!

Have fun !


10 則留言:

  1. 不好意思,想請問一下
    如果透過AVRISP使用Progisp
    對atmega8進行燒錄
    需要事先燒錄bootloader後再燒錄想使用的程式嗎?

    回覆刪除
    回覆
    1. 若您僅以 AVRISP 對 atmega8 進行燒錄,可不需預先燒錄 bootloader ,此法還可作為節省部份晶片上的空間。

      刪除
  2. 看您有無需要再利用 Arduino IDE 上傳程式, 如果燒完程式馬上要上電路應用, 沒有燒 bootloader 也是OK的!!

    回覆刪除
  3. 請問一下 最後一段話的意思是說
    可以使用Progisp這個軟體可以對2560燒錄Bootloader 但即使成功後也無法使用Arduino IDE進行Upload嗎?
    還是我誤會了?
    我現在用Mega2560做為ISP 透過Arduino IDE對自己做的電路辦(2560晶片)燒錄Bootloader 但一直失敗
    用USBasp 透過Arduino IDE 也一樣失敗
    看到您這篇 想說試試看您的方法 還是您建議直接用AVRISP?
    因為目前手上沒有AVRISP 如果只能用AVRISP的話就要在購買了....

    回覆刪除
  4. 需要使用 Arduino IDE 進行 Upload ,就一定需要將板子上的 Bootload 燒錄進去。有 Bootload 存在,你的 Arduino 板子才能初始化,你的系統也才能經由 USB 找到目標並 Upload 程式。

    若你沒有燒錄 Bootload ,我的經驗只能透過 AVRISP Uplpad 程式到板子上。但你僅有 Arduino能當作 ISP 燒錄 Bootloader,就要請您參閱官網方式 try 看看了:http://arduino.cc/en/Tutorial/ArduinoISP

    回覆刪除
  5. 那我試了另一種方法 我將mega2560拆下已經有Bootloader的晶片
    焊到我的電路上面 那我現在因該可以直接使用arduino IDE燒錄程式囉?
    方法是否為
    用mega板當isp 將mega板的50~53腳位接到相對應我版子上的SPI腳位 並提供電源
    這樣便可以燒錄了?
    (我目前有兩塊MEGA板)

    回覆刪除
    回覆
    1. 先回答您第一個問題:您將 mega 2560 上具有 Bootloader 的晶片拆下,與另一片 mega 2560 互換 mcu ,這個部份應該可以讓您正常使用 arduino IDE 燒錄程式了。

      第二個問題要確認您的 mega 2560 誰是 master (負責燒錄),誰是 slave (負責被燒錄),確認完 SPI 腳位、供電後,就可以燒錄了,您試試看

      刪除
    2. 我也是這麼認為的 但是失敗了....
      我照著步驟做 他只會把程式燒進master端 slave端沒反應
      步驟如下
      使用一塊MEGA2560(可正常燒錄的)當做master
      電路板上的MEGA2560晶片為slave(已有bootloader)
      並將master燒錄example裡的arduino ISP code
      將master的53(RESET)接slave的53(RESET)
      52(SCK)接slave的52(SCK)
      51(MOSI)接slave的51(MOSI)
      50(MISO)接slave的50(MISO)
      電源由USB供應給master後再接給slave
      arduino IDE 的Tools->board選擇arduino mega2560 or Mega ADK
      Tools->programmer選擇arduino as ISP
      COM PORT是選擇master的PORT(照理說因該是可以不選對吧?)
      (P.S.附上我晶片的電路圖https://www.facebook.com/photo.php?fbid=778303228857343&set=pb.100000330182745.-2207520000.1403516787.&type=3&theater)

      另外 我以同樣步驟燒錄另一塊arduino mega2560
      不論是有bootloader或沒有bootloader的晶片
      都是出現錯誤"avrdude: stk500_getsync(): not in sync: resp=0x00"
      請教可能是哪裡出了問題呢?

      刪除
    3. 您好,

      您的第一個實驗問題,我尚未實際操作過,因此無法給您比較詳細的解答,但基本操作方式應該與 Arduino UNO 當作 ISP 燒錄器,燒錄第二片 Arduino UNO 相似,建議您在搜尋相關網誌教學,或許有更進一步的操作說明。

      另外:avrdude: stk500_getsync(): not in sync: resp=0x00 這個問題多半是 USB Driver 失效,或是無法抓取到 Arduino 設備,試著把硬體管理員中所找到的 Arduino 驅動先行移除,並重新插拔 USB 線試試看。

      若問題依舊存在,請指定 Arduino 資料夾中的 Driver 資料夾,並選用 Mega2560 driver 。

      刪除
  6. 作者已經移除這則留言。

    回覆刪除