我買了一顆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),所以還需要底下的元件:
- LED
- 220 ohm電阻
底下是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閃爍。
參考資料:
- Arduino官方文件,Using an Arduino as an AVR ISP (In-System Programmer),From Arduino to a Microcontroller on a Breadboard。
- Open Electronics的Arduino ISP (In System Programming) and stand-alone circuits,提到如何修改boards.txt新增板子。
- Flashgamer的Using your Arduino as an ISP,碰到晶片型號不同的問題(328-P與328P-PU)、碰到stk500_recv(): programmer is not responding的問題。
- Cooper Maa的把 Arduino 當成一個 AVR ISP(In-System Programmer) 使用(1)、把 Arduino 當成一個 AVR ISP(In-System Programmer) 使用(2)、使用 Arduino 燒錄 ATtiny。
- High-Low Tech的Programming an ATtiny w/ Arduino 1.0。
- GROBO: DIY Arduino - 將Bootloader寫進ATMega晶片!(3)。
- Boarduino, Solderless Breadboard Arduino Clone。
- AVRDUDE。
您好,我想詢問站長,是否有把arduino的晶片改成ATmega88P呢!?
ReplyDelete我有在網路上找過資料,但是照著步驟後出現
avrdude: Expected signature for ATMEGA88 is 1E 93 0A
Double check chip, or use -F to override this check.
沒有,我只試過ATmega328P-PU與ATtiny85-20PU。
Delete你說的按照步驟是什麼步驟?
該錯誤訊息的意思是:每個AVR晶片都有個signature,型號不同signature也會不同,
ATmega88是0x1e 0x93 0x0a
ATmega88P是0x1e 0x93 0x0f
你可從arduino目錄\hardware\tools\avr\etc\avrdude.conf查看,
看起來,應該是你使用avrdude時,指定的是ATmega88,但實際上的晶片卻是ATmega88P,所以出現此錯誤。
http://www.morethantechnical.com/2012/04/04/bootloading-an-atmega88-for-arduino-w-code/
Delete我照這個網頁的步驟操作
是不是因為沒有更改到下面這個!?
I ended up using:
EFUSE = 0x00
LFUSE = 0xe2
HFUSE = 0xdf
在網頁裡也有說,$(ARDUINO)/hardware/arduino/boards.txt裡必須加入新板子的一些設定,也就是該微控制器型號專屬的設定,該網頁裡寫著:
Deleteatmega88.name=ATmega88
atmega88.upload.protocol=arduino
atmega88.upload.maximum_size=7168
atmega88.upload.speed=19200
atmega88.bootloader.low_fuses=0xe2
atmega88.bootloader.high_fuses=0xdf
atmega88.bootloader.extended_fuses=0x00
atmega88.bootloader.path=atmega88
atmega88.bootloader.file=ATmegaBOOT_88_m88.hex
atmega88.bootloader.unlock_bits=0x3F
atmega88.bootloader.lock_bits=0x0F
atmega88.build.mcu=atmega88
atmega88.build.f_cpu=8000000L
atmega88.build.core=arduino
atmega88.build.variant=standard
這些當然要加入,因為必須為atmega88加入適當的設定。而且,沒有上面這些東西,Tools -> Board 裡就看不到ATmega88了吧?
我的這個步驟已經有加進去了
Delete所以我的BOARD的部分,也有看的到ATmega88的選項
我再看了一次該網頁,
Delete他是將atmega88插在麵包板裡,接線後提供ISP燒錄器介面,根據內文,用的應該是AVR ISP MKII http://www.atmel.com/tools/AVRISPMKII.aspx。以上的硬體接線的部份,至於bootloader軟體的部份,作者也修改並準備好適用於atmega88的bootloader了。他用的是專屬的ISP燒錄器,我是使用Arduino Uno板來進行燒錄工作,不太一樣。
bootloader燒錄到atmega88裡之後,為了讓它相容於Arduino的軟體開發環境,所以需要
atmega88.name=ATmega88
atmega88.upload.protocol=arduino
atmega88.upload.maximum_size=7168
...
等等這些設定,讓Arduino知道並支援atmega88,然後從電腦連接USB線、接到http://arduino.cc/en/Main/USBSerial、再接到atmega88,然後就可以跟平常一樣,燒錄sketch到atmega88裡。
是喔,我以為用uno當成isp就可以燒錄了
ReplyDelete謝謝板大還花費您的時間看文章了
結果我後來有看mcu的fuse更改,
到時有空再來測試,可以的話,再和板大說
「我以為用uno當成isp就可以燒錄了」...應該是可行的,但那篇文章沒有介紹。
Delete請問如何清除 328上的東西
ReplyDelete我買的時候賣家已經有燒Bootloeder了
我想洗掉
嗯,可以用ISP線上燒錄器燒錄空程式碼,bootloader就會不見了。
Deleteavrdude: Yikes! Invalid device signature.
DeleteDouble check connections and try again, or use -F to override
this check.
請問出現這個要怎麼解決@@
電路都沒接錯
燒空白程式碼出現這個
Atmel的微控制器晶片都有個識別碼(device signature),譬如ATmega328是0x1E 0x95 0x14,ATmega328P是0x1E 0x95 0x0F。
Delete錯誤訊息告訴我們,avrdude收到指令想要燒錄某顆晶片,可是電路裡的實際晶片卻是另外一顆,不符合,所以停止燒錄。
在請教大大一下
Delete我換了一顆新的328PU一燒就成功了
但另一顆328PU要如何救他><
還是被我搞壞了??
有ISP線上燒錄器就可以再燒一次吧,不行嗎?
Delete除非之前燒錯fuse設定,那就有可能救不回來了(或很難救)。
謝謝大大
Delete線路全部重插
就沒出現avrdude: Yikes! Invalid device signature.的問題了
另外我在網路上找了3組程式碼各一個.c與.h檔共6個
想燒到同一個328再接按鈕控制要用哪組程式碼輸出
這樣可行嗎 有什麼需要注意的嗎
不好意思又要麻煩大大@@
線路全部重插就沒出現Invalid device signature,嗯,怎麼會,真奇怪。
Delete呃,應該可以。將三份程式碼的setup與loop改名,另寫一份程式讀取按鈕狀態,執行相對應的setup與loop。需將全部程式編譯後連結成一塊,...etc...etc...
只是空想而已,沒做過。
我又來請教大大了
ReplyDelete如果有數個檔案是一個接一個燒進IC就好嗎
會不會把之前燒的的蓋掉啊= =
只會留下最後一個。
Delete葉大
ReplyDelete請問有辦法用UNO燒.hex檔到MCU嗎
將Arduino Uno當做一台ISP線上燒錄器,燒錄bootloader或sketch到麵包板上的ATmega328P-PU晶片
Deletehttp://yehnan.blogspot.tw/2013/02/arduino-unoispbootloadersketchatmega328.html
參考一下吧。
葉大你好
ReplyDelete我是用ATmega328P的晶片,使用8Mhz的內部震盪器
我已經把程式燒進去了,但在最後出現下列這段:
--------------------
avrdude: verifying ...
avrdude: verification error, first mismatch at byte 0x010a
0x68 != 0x60
avrdude: verification error; content mismatch
avrdude: Send: Q [51] [20]
avrdude: Recv: . [14]
avrdude: Recv: . [10]
avrdude done. Thank you.
-----------------------
不僅如此,我用Blink指定在pin13但她都在pin0閃
請問如何解決??
謝謝
錯誤訊息我沒看過。
Delete你是使用Arduino IDE進行燒錄吧,照理說震盪頻率不同的話,必須修改fuse的設定值,應該也要修改f_cpu的設定。但我沒試過orz。
如果上述地方有問題的話,那麼後續在哪個腳位閃爍,也就不能當真了。
我建議您先使用外部的16 MHz crystal石英晶體吧。
謝謝你的回覆
Delete我的確是用Arduino IDE 版本是1.0.5版
我是用這個http://arduino.cc/en/Tutorial/ArduinoToBreadboard去試作的
至於16 MHz crystal石英晶體因為我手邊沒有,所以我才用他的內部震盪器看看結果怪怪的 T.T
總之謝啦~~
請問有辦法將現成的hex檔
ReplyDelete直接燒錄ATMEGA8-16U裡嗎?
使用燒錄程式avrdude,自己下指令與參數進行燒錄。
Delete你好
ReplyDelete請問為什麼我在燒錄bootloader的時候
會顯示avrdude: stk500_getsync(): not in sync: resp=0x00錯誤
謝謝
這個錯誤訊息可代表很多種意義,主要是因為燒錄工具與開發板微控制器晶片裡的bootloader無法溝通所導致。
Delete請確認板子與序列埠的設定是否正確,驅動程式是否安裝成功,試著重新啟動Arduino,試著插拔USB連接線,試著使用別的USB埠,試試看使用額外的USB集線器,也有可能是擴充板與腳位0與1(RX、TX)起衝突;也可試試加入重置鈕,在atmega328p的腳位1連接一個按壓式開關、開關的另一腳接地,在燒錄時,試試看在各個時間點按下重置鈕。
請問Arduino Uno的 ATmega328P-PU可當ISP燒錄器,
ReplyDeleteArduino Nano的ATmega328是不是也可以當ISP燒錄器?
照理說應該可以。
Delete但我沒有Nano板子。
我試過Nano真的可以,
Delete用小盒子裝起來再拉線出來,
這樣燒錄會方便多了.
因為2560跟Uno都太大塊了!
Great. 多謝回報。
Delete請問一下
Delete燒完後的Mega328可以不接arduino的板子使用嗎??
請參考
Delete在麵包板上建構Arduino(ATmega328P加USB轉TTL Serial轉接卡)
http://yehnan.blogspot.tw/2013/09/arduino_9.html
arduino Mega328燒完程式之後
Delete可以把Mega328單獨拔出來用嗎??
還是一定要接arduino才能有功能
(抱歉 新手 很多問題需要請大大幫忙)
可以。但你就沒有Arduino Uno板子上的其他功能,譬如USB轉TTL Serial,穩壓器,等等。
Delete還請參考拙作
Arduino輕鬆入門:範例分析與實作設計
http://yehnan.blogspot.tw/2014/02/arduino_21.html
葉大大 你好
ReplyDelete我是個剛碰這類東西的新手,最近想說要來動手做個東西,想要做可以燒錄89S51的電路
不知道ARDUINO AS ISP 可不可以燒?? 我自己試著接接看都不能順利燒錄,我是用AVRDUDE指令測試的,avrdude.conf檔我也有加上這個網站(http://www.avrfreaks.net/forum/writing-at89s52-through-usbasp)上說的東西
另外網路上有看過 可以用 ATMEGA8 這顆晶片來燒程式做成ISP(但我手頭上買的時候買成ATMEGA328P)
而這個網站(http://www.fischl.de/usbasp/)上也有附CODE 和.hex檔
不知道有沒有什麼方法可以將裡面的code compiler 程可以for ATMEGA328P
希望大大可以提點一下 感謝!!
不可以。
Delete89S51是8051(MCS-51)架構,Arduino的單晶片是AVR架構(ATmega168、ATmega328)。ARDUINO AS ISP只能燒AVR架構。
http://www.avrfreaks.net/forum/writing-at89s52-through-usbasp使用的燒錄器是USBasp。
照理說,ATmega328P是ATmega88的更高階版本,所以應該重新編譯即可。
不過燒錄是低階動作,http://www.fischl.de/usbasp/裡的程式碼可能會含有專屬於ATmega88的腳位定義、時序、特別的設定,雖然理論上應可行,但實際上可能會碰到許多需要修改的地方。
請問石英震盪器如果不接會有什麼問題嗎?
ReplyDelete還有我看到有的電路把VCC和GND並聯一顆0.1uf的電容,請問作用是什麼?
不接應會使用晶片內部的震盪器,我記得atmega328p內建的是8MHz吧,但還要設定正確的fuse。
Delete該電容有助於穩定電源。
原文章:開啟File-Examples-01.Basics-Blink,將sketch裡頭設定的腳位13改為2,然後執行File - Upload Using Programmer,便能將sketch透過Arduino Uno板(扮演ISP線上燒錄器)燒錄到麵包板的ATmega328P-PU晶片裡,成功的話,就能看到LED閃爍。
ReplyDelete疑問之處:然後執行File - Upload Using Programmer. 是否應為:然後執行Sketch - Upload Using Programmer
謝謝!
因為Arduino IDE改版,所以變了。
Delete您好
ReplyDelete我依照您的方法將bootloader燒入ATMEGA328P-AU裡
並用UNO的板子將Blink的範例sketch燒進我的板子上
看起來sketch有運作成功
但是奇怪的是我只能燒一次sketch
接下來要燒就會出現錯誤訊息
avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x55
然後就要重燒bootloader才能在燒一次sketch
請問您有遇過這種情形嗎
你說的說,是用本篇介紹的「UNO板子當做ISP線上燒錄器」來燒嗎?
Delete若如此,燒錄sketch的話會蓋掉bootloader。
當你燒完bootloader後,請改用一般的燒錄方式來燒路sketch。
感謝您的回覆
Delete剛剛發現原來是reset沒接到
所以造成燒code時沒有反應
將reset接上UNO後就能正常燒code了~~
您好,
ReplyDelete我使用ISP線上燒錄器燒錄程式後,
發現RX腳位好像有點問題,
MCU會接收不到資料,可是TX是沒有問題的。
請問您有發生過類似問題嗎?
沒有。
Delete大大救命啊
Delete我按你的'方法出現
avrdude: Yikes! Invalid device signature.
Double check connections and try again, or use -F to override
this check.
版上與新ic 同型號
請問如何解決
你確定IC型號相同?Atmel的微控制器晶片都有個識別碼(device signature),譬如ATmega328是0x1E 0x95 0x14,ATmega328P是0x1E 0x95 0x0F。
Delete兩者雖然照理說一樣,僅差在picoPower技術而已(較省電)。
錯誤訊息告訴我們,avrdude收到指令想要燒錄某顆晶片,可是電路裡的實際晶片卻是另外一顆,不符合,所以停止燒錄。
若你的是ATmega328,有個解決辦法,請見http://www.instructables.com/id/Bootload-an-ATmega328/step6/ATmega328-PU-workaround/,但不保證沒有後遺症。
This comment has been removed by the author.
ReplyDelete葉大您好
ReplyDelete有幸拜讀了這篇文章後,有個不成熟的問題想請教:
請問能用Arduino去燒錄89s52嗎?
(目前有些小型應用在考量要採用PIC or Atmel,但基於未來希望能進軍MSP430 or STM32系列的32bit mcu所以希望能從atmel開始學習)
沒試過。
Delete不過網路找一找,還是有人做出來了。
http://www.instructables.com/id/ARDUINO-AS-A-8051-PROGRAMMER/
https://tiktakx.wordpress.com/2012/03/21/using-an-arduino-to-program-at89s52/
http://www.wdong.org/wordpress/blog/2012/07/04/programming-at89s52-with-arduino/
請教一下,如果燒錄完之後的atmega328,的接法,驅動LED,是跟你blog一樣接法嗎?
ReplyDelete現在有一個問題是Arduino是如何提供3.3跟5V?
這篇部落格最後,有燒錄LED閃爍的sketch,驅動atmega328實體腳位4(對應到Arduino數位腳位2)的LED。
DeleteArduino板子上有3.3V與5V的腳位插孔。
請教一下atmega168可以適用嗎?
ReplyDelete應該可以,但我沒真正試過。
Delete在這一篇的「設定Tools - Board選為Uno。」的地方,已經註明了「如果要燒錄別的型號的晶片,就要選別的選項,甚至要動手修改boards.txt自己新增。」
我想設為「Arduino Diecimila or Duemilanove w/ ATmega168」應該就可以。
再強調一次,我沒真正試過。
Arduino:1.6.5 (Windows 8.1), 板子:"Arduino Duemilanove or Diecimila, ATmega168"
ReplyDelete草稿碼使用了 4,420 bytes (30%) 的程式存儲空間。最大值為 14,336 bytes。
全域變數使用了 319 bytes (31%) 動態記憶體,剩餘 705 bytes 的局部變數。最大值為 1,024 bytes 。
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x63
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x63
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x63
avrdude: stk500_recv(): programmer is not responding
上傳到板子時發生問題。可行建議請見http://www.arduino.cc/en/Guide/Troubleshooting#upload。
avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x63
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0x63
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x63
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x63
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0x63
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x63
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x63
發生這樣的錯誤@@
此錯誤的原因很多,請參閱
Deletehttp://yehnan.blogspot.tw/2014/10/arduinostk500getsync-not-in-sync.html
我試了,成功了,我試用新版的IDE,但有一個疑問是,我每燒錄一次都要重新燒錄給我那個ISP板子一次ISP Code嗎?
ReplyDelete什麼意思?
Delete你是說ArduinoISP嗎?燒錄一次即可。
意思就是 因為你說我燒入一次sketch,會覆蓋Arduino ISP板,那這樣之後要再燒其他程式碼,還要再稍一次ISP Code嗎?
Delete看不懂。
Delete> Arduino ISP板
> ISP Code
這些是什麼?
打錯 是會覆蓋掉ArduinoISP code ,所以假設我要再從我的那塊板子燒到另一個晶片,就要再稍一次example裡面的 ArduinoISP Code嗎?
DeleteArduinoISP也是Arduino的sketch。你不燒錄另一份sketch,就不會覆蓋掉。
Delete懂了,感謝您!
Deletehttp://programmermagazine.github.io/201405/htm/article1.html 我是用這個網站XD!
ReplyDeleteThis comment has been removed by the author.
ReplyDeleteThis comment has been removed by the author.
ReplyDelete您好,
ReplyDelete目前計畫自製Arduino UNO開發平台,請問新買之ATmega328P-PU與Atmega16U2是否需先燒入bootload
感謝幫忙!!!
單獨買ATmega328P-PU與Atmega16U2的話,裡頭照理說應該沒東西,需自己燒錄,除非賣家特別說明。
Delete您好,
Delete以ATmega328P-PU而言,可用您書中之CH12所授之方法(或是本文之內容)燒入bootload;請教Atmega16U2該如何燒入bootload,並且該到何處取得欲燒入之file...
感謝幫忙!!!
請參考
Deletehttp://yehnan.blogspot.tw/2013/08/arduino-unousb.html
您好,
Delete請問該文之燒入bootload to Atmega16U2的方法,也適用於將被燒入之Atmega16U2是空白的(新買的)情況下嗎...
(文中之例子,在燒入"Arduino-keyboard-0.3.hex" 前,應該已存在 "Arduino-usbserial-atmega16u2-Uno-Rev3.hex"。)
另外請教,在燒入Atmega16U2之bootload前,ATmega328P-PU是否需先燒入bootload...
感謝幫忙!!!
嗯,我回答的有錯。
Delete根據官網http://www.atmel.com/devices/ATMEGA16U2.aspx的文件http://www.atmel.com/Images/doc7618.pdf
16U2出廠時應已內建bootloader,與電腦的USB埠連接並溝通,便可使用Atmel的Flip軟體進行燒錄。
Arduino Uno板子上的16U2,預設會燒錄Arduino-usbserial-atmega16u2-Uno-Rev3.hex,作為電腦USB埠與328P之間的溝通管道(轉換USB與序列介面)。
如果要燒錄16U2的bootloader,應該要有另外的燒錄器;我沒試過。
> 在燒入Atmega16U2之bootload前,ATmega328P-PU是否需先燒入bootload
兩者無關吧。
您好,
Delete若是我買的Atmega16U2已內建bootloader的話,是否就可使用您文中教授的方法,使用Atmel Flip燒入 "Arduino-usbserial-atmega16u2-Uno-Rev3.hex"
感謝幫忙!!!
對。
Delete瞭解,感謝指導。
ReplyDelete我用QPF32轉DIP28 我bootloader跑出結果成功 但我上傳程式沒有反應 為什麼?
ReplyDelete是因為我的轉接座 插錯嗎?
ReplyDelete資訊不足,無法回答。
Delete可以將這個燒在89S51晶片嗎?
ReplyDelete應該不行。
ReplyDelete請問葉大,是否可以將328P的內容讀出後再轉燒製另一顆328P?
ReplyDelete可以。使用avrdude的話,指令大概如下:
Delete$(AVRDUDE) $(PROGRAMMER) -p $(DEVICE) -U flash:r:flashdump.hex:i
感謝回答,再請教您,可以在Arduino UNO R3直接作讀取嗎? 若可以直接讀取,在讀取之後改如何將讀出的HEX燒到空IC中??
Delete再次感謝
可以。
Delete空IC? 裡頭沒有bootloader的話,要用燒錄器。
同樣用avrdude指令進行燒錄。
請教葉大,我們可以將Arduino Uno當成USBAsp使用嗎,若可以的話該怎麼去設定,
Delete指令這樣下是否正確?
avrdude -q -c USBAsp -p atmega328p -U flash:r:flashdump.hex:i
感謝
這篇不就是把Uno當做ISP燒錄器嗎?
Delete指令我不熟,請照這篇的作法,觀看Arduino IDE下avrdude指令時,設定了哪些參數。
請問燒錄之後clock還是一樣嗎?
ReplyDelete我燒錄之後的delay1000不是一秒,是我電路接錯了嗎
> clock
Delete沒改,當然一樣。
> 接錯了嗎?
不知道。
我使用您教的第2種方法
ReplyDelete燒錄完後,LED會閃爍,但是閃爍建隔不是一秒,請問是正確的嗎
不正確。
Delete震盪器的頻率錯了?
16.000M沒錯
Delete不過我用的是石英震盪子不是石英震盪器會有差別嗎?
> 石英震盪子不是石英震盪器
Delete請問這兩者有何差別?
你的零件,跟這一篇都相同嗎?ATmega328P?電容?
你用哪一版Arduino IDE?
程式裡,有無更改設定頻率?
閃爍間隔不是一秒,那是幾秒?
版本是1.6.11
Delete我用ATMEGA328P-PU 電容:22pf
程式部分都沒變動,只有把腳位13改成2!
我等等換成石英震盪器試試看~
你說的是Resonator與Oscillator之分吧,
Delete要用Oscillator才對。
我是用震盪器
Deletecheck很多次了
只有把pin13改pin2
delay維持1000
實際delay大概12秒
嗯,fuse設定大概是使用atmega328p內部的時脈頻率1MHz吧,
Delete若果真如此,需要修改fuse設定才行。
到http://www.engbedded.com/fusecalc
取得正確的fuse設定值,
使用avrdude燒錄,修改fuse。
好~
Delete謝謝你~
我也遇到一樣的狀況....只是我用28PINS的atmega328P-PU燒錄一切正常....使用TQFP32的atmega328P-AU就變成時脈很慢(應該就是設定到內部時脈)
Delete請教一下,能在Arduino IDE中設定燒錄的FUSE值嗎?
ReplyDelete如果是更改avrdude.conf?
謝謝
呃,應該可以。設定值在boards.txt裡。
Delete不過隔了Arduino IDE,不知道它執行avrdude時,會下什麼參數。
建議還是自己執行avrdude。
想請問:
ReplyDelete"燒錄sketch會蓋掉先前的bootloader",這樣的作法跟兩者都存在有什麼差異?
有bootloader的話,就能用一般的燒錄方式燒錄sketch,不需要特別的燒錄器。
Delete請問"有bootloader的話,就能用一般的燒錄方式燒錄sketch,不需要特別的燒錄器。"
ReplyDelete那後續要用甚麼工具,對哪些腳位才能進行sketch燒錄呢?
※因為想挪掉uno ISP燒錄的方式
把bootloader放進atmega微控制器晶片後,
Delete再加上【usb轉序列埠】的產品,就等同於一般的arduino板子。
請參看
http://yehnan.blogspot.tw/2013/09/arduino_9.html
This comment has been removed by the author.
ReplyDelete葉大您好:
Delete請問一下bootloader及sketch是兩者必須都燒進去空白的atmega328P-PU才能脫離Arduino板獨立工作嗎?!
還是如果空白的atmega328P-PU燒sketch也可以獨立工作呢?!
因為葉大這篇上面有寫說"燒錄sketch會蓋掉先前的bootloader"
那這樣也就是表示空白的atmega328P-PU直接燒sketch也可以脫離Arduino板獨立工作嗎??。
謝謝
> bootloader及sketch是兩者必須都燒進去空白的atmega328P-PU才能脫離Arduino板獨立工作嗎?!
Delete> 還是如果空白的atmega328P-PU燒sketch也可以獨立工作呢?!
什麼叫【獨立工作】?
> 因為葉大這篇上面有寫說"燒錄sketch會蓋掉先前的bootloader"
> 那這樣也就是表是空白的atmega328P-PU直接燒sketch也可以工作嗎??。
yes.
獨立工作就是把燒好的atmega328P-PU當成一般IC,焊在洞洞板上執行程式,而不是在Arduino板工作這樣。
ReplyDelete> bootloader及sketch是兩者必須都燒進去空白的atmega328P-PU才能脫離Arduino板獨立工作嗎?!
Delete燒完sketch後,就可以獨立工作。
> 還是如果空白的atmega328P-PU燒sketch也可以獨立工作呢?!
yes.
嗯嗯,那我了解了,因為剛接觸所以搞不太懂這兩種是擇一燒入,還是兩種都要燒入才可以這樣。
Delete謝謝葉大,那有其他異常問題在來請教您了。
出現
Deleteavrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x9d
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x9d
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x9d
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x9d
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0x9d
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x9d
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x9d
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0x9d
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x9d
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x9d
Problem uploading to board. See http://www.arduino.cc/en/Guide/Troubleshooting#upload for suggestions.
如何解決?
請參考
Deletehttp://yehnan.blogspot.tw/2014/10/arduinostk500getsync-not-in-sync.html
葉大請教目前用uno燒錄bootloader進Atmega644PA晶片順利也成功,後續透過USB-TTL方式也可順利上傳sketch至644晶片內,有需要再額外設定fuse的問題嗎?
ReplyDelete因為目前卡在同一組code在uno可正確執行(pin3發射),但在atmega644pa晶片上(改pin9發射),會有點狀況(接收端不動作)。
> 有需要再額外設定fuse的問題嗎?
Delete既然都可上傳且執行了,應該沒有。但我也沒玩過644,不確定。
> 改pin9發射
呃,為什麼是9?
請參看 https://github.com/z3t0/Arduino-IRremote 做修改。
感謝提醒,已解決....原來接腳錯誤,是14pin
Delete你好
ReplyDelete我在燒錄bootloader實也會發生
avrdude: Device signature = 0xff00ff
avrdude: Expected signature for ATmega328P is 1E 95 0F
Double check chip, or use -F to override this check.
但是我參考https://forum.arduino.cc/index.php?topic=420070.0
14樓的方法卻可以
不清楚甚麼原因
恩,不清楚。
Delete你好我在大陸買了6軸機器人是nano mega328p主板前陣子不知道什麼原因bootloader是乎被破壞掉對方有給我一個bootloader.hex檔請問我要如何將這個bootloader.hex燒到主板
ReplyDelete首先需要一台燒錄器,例如本篇的作法,或是買一台,例如http://yehnan.blogspot.tw/2013/09/avr-ispadafruit-usbtinyisp.html
Delete然後,到Arduino目錄底下,找出你那塊主板所使用的bootloader檔案,換成你得到的新檔,然後燒錄。
This comment has been removed by the author.
ReplyDelete應該就是fuse的設定吧。
Delete請問一下
ReplyDelete我將程式以燒錄器上傳至atmega328p成功以後
想要觀察他的序列埠狀態該如何觀察?
直接點取好像仍然是原先arduino
假定你是按照這篇的作法。上傳至atmega328p成功以後,
Delete但你的atmega328p與一般的uno板,還差一個重要元件「usb轉序列埠」,
你的電腦的usb埠 接 usb線 接到 usb轉序列埠 接到 atmega328p的TX/RX。
請參考
http://yehnan.blogspot.tw/2013/09/arduino_9.html
您好 我在露天看usb ttl的模組
Delete想問一下cp2102可以用嗎? 還是一定要用FTDI
可用。
Delete老師好,與您請教
ReplyDelete我目前是使用一個 Arduino Uno R3 當作燒錄器,對空白的 ATmega328P 進行燒錄
我疑惑的點在於,若 ATmega328P 裡面不燒 Arduino 的 Bootloader,選擇直接將程式碼燒錄至空白的 ATmega328P ,除了無法使用 USB to Uart 的方式進行程式碼的燒寫之外,與有燒寫 Bootloader 的 ATmega328P 有什麼不同之處嗎?
我原本以為沒有燒寫 Bootloader 的話,就無法使用 digitalWrite 等等的 Arduino 函式,但我後來想到這些函式的定義在編譯程式碼的過程中就會被 include 進來,所以沒這問題
那我就疑惑了,好像除了不能用 Uart 燒寫程式碼以外,沒什麼不同之處
PS: 或許我可以查看看 Arduino 的 Bootloader 裡面做了哪些暫存器設置,這樣就能知道有/無 Bootloader 的 ATmega328P 有哪些預設值被改變 !?