事實上所謂的Arduino指的其實是它的Bootloader跟Compiler,至於Bootloader的功用簡單來說就是你不用直接去寫AVR的Assemble,用搭配的Compiler寫C/C++就可以透過它的Interface去控制ATMega了,許多做控制板的公司也都早就使用這種概念,主要是簡短一般的開發時間而且方便教學,但需要優化或是要寫複雜的演算法可能就比較不足,電路只要用能剛好驅動ATMega晶片即可(官方網站的麵包板版本就是),要怎麼layout電路就是看個人喜好了,不過官方有個COM Port的標準版本可以參考,就稱它為官方標準版本好了。
首先先取得Arduino的IDE,有Windows、Linux、MAC OS X跟Source Code可以選擇需要的來用:http://arduino.cc/en/Main/Software
接著下面三個方法選擇一種即可,不過只有前兩種我有測試成功,但是第三種按照官方步驟不曉得Parallel Port有問題還是我方法錯誤,使用前兩種方法你必須已經有了有燒錄Arduino Bootloader的ATMega晶片的板子!
先將你有燒錄Arduino Bootloader的晶片的板子接上電腦並打開Arduino IDE,接著選擇 File -> Examples -> ArduinoISP會跳出新的視窗。
然後按下新視窗很像播放鍵的按鈕,然後下方會提示完成編譯。
接著按下Upload將編譯好的程式上傳到Arduino,就算完成接下來第一跟第二個方法,將現有的Arduino當成ISP的前置步驟了。
接著如果你自己製作了官方標準版本可以將要燒錄的ATMega晶片放到上面,可以照著下面接線圖跟已經可以當成Arduino ISP的Arduino接上線,圖片下面那張板子是你剛剛Upload進能將Arduino當成ISP的板子,所以它依然是接著電腦的。
使用此方法要在RTS加一個10uf~100uf的電容與GND串接
上面兩種方法選一種接完線之後,就在Arduino IDE選擇需要的Bootloader版本燒錄吧,建議選擇最新的UNO版本即可!
然後選擇w/Arduino as ISP寫入。
最後完成時會出現完成的訊息,這時就可以開始測試Arduino了!!!
另外如果你沒有Arduino的板子時要怎麼燒進Bootloader呢?一個方法是用AVR的ISP燒錄裝置將.hex檔案燒進ATMega晶片,但這樣一個裝置市面上賣的都超過七八百元,所以官方也有提供用Parallel Port接線DIY的方法,這個方法我有嘗試但是失敗,不過我想可能是我的Parallel Port壞了,因為我的COM Port也一樣有問題,所以沒辦法做太多說明可以直接看這裡:http://www.arduino.cc/en/Hacking/ParallelProgrammer
=============2012/02/07===============
和LCW大大討論AutoReset的結果後去找了文章,有興趣的可以參考官方這篇:http://www.arduino.cc/playground/Learning/AutoResetRetrofit
=============2012/04/15===============
根據同學的實驗確實如果FTDI模組有拉出或是自己拉DTR腳位,接上一個104P的陶瓷電容(沒陶瓷電容會失敗)然後再接上Arduino的Reset腳位就可以Auto Reset成功。
=============2012/04/15===============
根據同學的實驗確實如果FTDI模組有拉出或是自己拉DTR腳位,接上一個104P的陶瓷電容(沒陶瓷電容會失敗)然後再接上Arduino的Reset腳位就可以Auto Reset成功。
你好!
回覆刪除請問如果要以麵包板來做,燒完Arduino Bootloader之後要如何將
程式Upload進去?
如果你單純說有燒Arduino Bootloader的Atmega328的晶片要怎麼把寫好的程式燒進去很簡單,首先你一樣就這個電路http://dl.dropbox.com/u/16634624/BreadboardAVR.png 除去官方版上的黃色跟綠色線還有紅色5V跟黑色接地,接著找一個FTDI模組然後把FTDI的5V還有接地插到同樣那個電路的麵包版上(等於取代原本那個官版Arduino供給給麵包版那兩條),接著再"把FTDI的RxD接到Atmega328的TxD"然後"TxD接到Atmega328的RxD",接著上傳程式的時候看到FTDI模組的燈在發光時按一下麵包版的按鈕手動Reset就會成功了(要多試幾次)
回覆刪除感謝你的答覆,還有個問題想請教的是
回覆刪除如果用IC夾將母板的Atmega328夾出,然後將燒完Bootloader的晶片換進
母板,Upload程式再移至麵包板上可不可行?
是否還缺什麼步驟?
可以,但是這樣很麻煩XD
回覆刪除而且在我會自製這種分離模組之前我有這樣試過,但是有一次拔IC不小心凹斷一隻腳Atmega328就報銷了ORZ
hi~你好!
回覆刪除先感謝你先前的回答XD
我最近就照上面的方法,將設備插在麵包版,原本想說用IC夾去夾
Atmega328再Upload程式,如你所說她真的有夠難夾...
所以就去買了一組 FTDI 回來Upload,但是在傳完Blink的時後
雖會顯示成功但是Pin13就是不動,腳位也都沒錯..
方才又回來這裡看到你最後一段話"接著上傳程式的時候看到FTDI
模組的燈在發光時按一下麵包版的按鈕手動Reset就會成功了(要
多試幾次)" 試過2次,終於成功!!
我好奇的是為什麼在傳的過程中需要手動Reset??
照理說你用你買得Arduino板子去UPLOAD程式不用在手動Reset,除非你是想把程式上傳到放在麵包版且燒有Arduino Bootload的ATMega328才要手動Reset。
回覆刪除你好!
回覆刪除我是將它獨立在麵包版上了,並用FTDI模組跟電腦連結,但是必須在傳的過程
手動Reset。
目前想試著做出自動Reset的功能, GCY大大不知道你是否有研究這方面的
方法可以讓在下參考 感謝!!
之前想研究AutoReset不過一直沒時間,不過你可以看標準板子上多出來的元件(和簡易版相比之下)去著手吧,我也不是電子專門所以這是個人猜測。
回覆刪除你好!
回覆刪除最近有看到auto reset的教學文章,從FTDI模組的DTR腳位,拉一條線出來 接上104P的陶瓷電容 在接到atmega 328p的 Pin1(reset)這樣就會auto reset了
(DTR)>>(104p陶瓷電容)>>atmega 328p Pin1
原來如此,可惜我的FTDI是人家黏好只有給我四個腳位的,應該要單買FTDI晶片來自己弄才對。
回覆刪除不好意思~我想請問各位大大們~我用FTDI模組上傳程式時~都會出現這個錯誤(avrdude: stk500_getsync(): not in sync: resp=0x00),也照妳們的方式接電路~但一樣還是不行~麻煩各位大大們回覆我一下~謝謝!!!
回覆刪除不知道是FTDI驅動的問題???因為我的FTDI模組一插上電腦~就自己會去灌驅動了~我連灌都還沒灌就已經可以用了~只是一直出現那個錯誤~在麻煩大大們回答一下~謝謝!!!
回覆刪除如果你線都確定接正確那你可能沒有Reset,要就手動不然就是你的FTDI模組有DTR腳位接到0.1u的陶瓷電容再接到atmega 328p Pin1讓它auto reset,如果還是不行可能就是你的atmega 328p有問題。
回覆刪除可是~我這顆atmega 328p放在uno板子上~就可以上傳程式~但只要一拆下來放在麵包板用FTDI模組上傳程式~就會出現那個錯誤~另外你說的Reset方法(手動與自動)~我都試過了!!一樣還是不行~所以想請教妳們說~妳們的FTDI模組~有灌驅動嗎?還是一接電腦就自動幫你灌好了?那如果是灌別的驅動~可以給我驅動程式嗎?
回覆刪除麻煩大大們回覆~謝謝!!!
大大們~終於可以了!!!真的是石英震盪器的問題~換成用16MHz的震盪器~就可以燒錄了~我昨天才買FTDI的IC,自己接電路弄~~~昨天跟今天弄了兩天~腦子都快被燒壞了!!!
回覆刪除恭喜!如果要用其他頻率要設定。
回覆刪除謝謝大大喔~如果我有其他問題在詢問您~~~謝謝!!!
回覆刪除請問版主
回覆刪除如果在燒錄過程中遇到這個問題該怎麼辦
(我們用的是ATMega8)
avrdude: stk500_getsync(): not in sync: resp=0x15
HI,能說明一下你用哪種方法呢?
回覆刪除嗯 我們是用arduino版子(Arduino Duemilanove ATMega328) 接ATMega8 然後reset腳 接110歐姆的電阻到 5V
回覆刪除你要照這張圖接
回覆刪除http://dl.dropbox.com/u/16634624/arduinoisp.png
然後bootloader版本選擇Duemilanove看看
版主你好
回覆刪除我們是用這種的接法
http://dl.dropbox.com/u/16634624/BreadboardAVR.png
然後 Board 那裡是選 Arduino Duemilanove or Nano w/ ATMega328
但還是會出現那行錯誤耶
你把晶體振盪器換一個看看,不然直接找陶瓷振盪器替換,我以前DIY Arduino有遇過振盪器故障的問題。
回覆刪除謝謝版主的回覆
回覆刪除嗯 換了也是一樣 真的用不好
我試試看您貼的兩塊版子的方法好了
用兩塊版子的方法成功了
回覆刪除http://dl.dropbox.com/u/16634624/arduinoisp.png
照這樣接如果不行 可以試試在有ISP那塊的 5V跟RESET中間接一個100-110歐姆的電阻
然後要燒ATMega8 Board好像不能選Arduino Duemilanove ATMega328
我用下面那篇文章那個就可以了
http://www.geek-workshop.com/forum.php?mod=viewthread&tid=174
謝謝版主提供的方法!!
原來如此,我都是用ATmega328P-PU實驗的。
回覆刪除作者已經移除這則留言。
回覆刪除我想問一下燒入Bootloader後d13腳的led會不會閃?
回覆刪除您好 請問一下 2560的晶片是否也是一樣的做法呢?
回覆刪除我照您的方法做 結果失敗了....
錯誤代碼avrdude: stk500_getsync(): not in sync: resp=0x00
com port看過是沒問題的
我是用arduino mega2560當做ISP
對我自己做的電路板(上面是2560晶片)做燒錄
我是將mega板的53腳接我電路板的RESET
52腳接我電路板的SCK
51腳接我電路板的MOSI
50腳接我電路板的MISO
電路板上的電源也是從mega板上接過去的
mega板有先燒錄EXAMPLE的ISP範例
Tools->programmer裡也有選Arduino as ISP
Tools->Board裡是選Arduino mega2560(我是希望自己做的板子可以兼容Arduino)
請問步驟是否有誤呢?
請問有辦法將現成的hex檔
回覆刪除直接燒錄ATMEGA8-16U裡嗎?
您好請教一下, Arduino的控制方法是, 使用本身IDE所轉出來的語言去抓ATmega328 ROM內的Bootloader, 之後再翻譯成ATmega晶片看得懂的二進制機器語言進行對IO的操作, 請問這樣的觀念對嗎?
回覆刪除