2014年2月8日 星期六

製作自己的 Arduino

製作自己的 Arduino

要說 Arduino的好玩之處,就是不可不說它可讓你重無到有。亦即是說,你可自己做一塊Arduino塊子。在網上其實已有很多文章講述如何製作 Arduino,我也是從網上收集了一些資訊後,融為己用。因此以下內容的大部份圖和照片均是本人親拍和繪劃,並無抄襲。祇有兩幅示意圖是從網上引用,並且註明出處,敬請注意。

要制作一塊最簡單的Arduino 板,材料如下:
Atmega Microprocessor x 1pc
16MHz 晶振 x 1pc
22pf 陶瓷電容 x 2pcs
10k電阻 x 1pc
104pf 陶瓷電容 x 1pc
微開關 x 1pc
圈圈板 / 麵包板 x 1pc
接線仔或杜邦線多條
排針和排座多條
Programmer x 1pc
ICSP cable x 1pc
USB Module (Optional) x 1pc

這裡所說的Programmer是指燒錄器,Atmega Microprocessor這顆處理器是需要將Arduino Boot Loader燒進去才能使它成為真正的 Arduino,那麼如果沒有燒Boot Loader Microprocessor又何分別呢?其分別就是有 Boot Loader的,可以利用 USB Module,直接用Arduino IDE program編譯後 upload Microprocessor裡。沒有 Boot Loader的,每次要把 program編譯後,必需利用 programmer才可 uploadMicroprocessor裡。

關於燒錄器,你可以用一塊Arduino UNO又或者 AVR Programmer 又或者自制 Parallel Programmer…由於我的電腦沒有 Parallel Port而我又有塊 UNO 板,所以我假設是用 Arduino UNO 做為 Programmer,亦因為要用 Arduino UNO 做為 Programmer 所以要另加 電解電容100uf 16v用來防止不小心寫到這塊 UNO板,如果想清楚看到 Arduino UNO Programmer的燒錄過程中的狀態你可能需要 黃色、紅色、綠色 LED 各一,另加一隻 220歐的電阻。

事前工作


在開始製作自己的 Arduino 板之前,我們是有一些事前工作要預備好的,包括製作 Arduino ISP 即:仿AVR Programmer,與 Arduino ICSP Cable。這條 Cable是用來將 Arduino ISP 連接到我們製作後的 Arduino板子的。

製作 Arduino ISP

好了,如果你所有材料齊全的話,可以開始先製作自己的 Arduino UNO Programmer (Arduino ISP)

步驟:
1. 連好 UNO板到電腦。
2. 打開 Arduino IDE
3. 檢查 Serial Port及板子。
3. File -> Examples -> ArduinoISP
4. 按下Upload
5. 完成。

怎樣?簡單了吧!這樣就成了 AVR Programmer了。好的,先將 UNO從電腦拔出,將 100uf電解電容的負極插到 GND,正極插到 Reset接口。再將 UNO接上電腦,試試是否無法從 IDEprogram上傳到這塊 UNO板!?若是,這代表當我們將此 UNO板用作 programmer時不會把任何東西燒進去,即安全也。然後,為了使我們能看見燒錄過程中的狀態,所以我弄了一塊狀態燈的圈圈板子,其電路如下:



實物 ArduinoISP 狀態燈板子:


由於我那顆 100uf電容腳斷掉,所以焊接在圈圈板:



製作 Arduino ICSP cable

這樣整個 ArduinoISP programmer大致上已經完成,現在我們要弄一條 ICSP cable,製作材料很簡單:6芯杜邦線(F-F) 膠紙。製作方法很簡單,像 3x2排法即可,要留意的是該6芯杜邦線中,最好祇有一條紅色和一條白色,並且把紅色安排於插頭的左上角,白色安排於插頭的右上角。排好線後,用膠紙把它們綑起來。另外,於 cable 的另一端除了紅色安排於插頭的左上角外,白色要獨立一條分出來就像下圖:



有關 ICSP pin assignment 請參閱下圖 (此圖出自effluviaofascatteredmind.blogspot.com ):



我的 ICSP Cable:


開始製作自己的 Arduino

我將製作Arduino板子的過程分為三個部份,包括:Microprocessor基本連接、ICSP接腳引出、Serial接腳引出(包括 Auto Reset)

Microprocessor基本連接
有關Microprocessor的腳位功能,請自行在網上參閱相關文章。在這裡,我假設是用 Atmega8L-8PUAtmega328P-PU及是直插式Dip 28封裝的。因為這兩款的腳位是一樣和都是我親自做過的。好了,Microprocessor基本連接請參閱下圖連接:


有關 Atmega8 pinout可參閱下圖(此圖出自 www.arduino.cc)



ICSP接腳引出
ICSP接腳是用於ArduinoISP Boot Loaderprograme code上載至 Microprocessor的。ICSP接頭與 Microprocessor的連接可參閱下圖:




Serial接腳引出
Serial接腳是用於連接 USB Module的。USB Module 是一個將 USB 轉成串列埠的一個模組,用以 Arduino與電腦之間的通訊。由於我們是自製Arduino板子,所以要留下接腳,用以將來加個PL2303CH340CP2102FTDI…等的USB Module…再網上流存,FTDI的最穩,但亦最貴。根據本人實測,PL2303CP2102也不錯,可選有 DTR腳引出的那種(如要作成 Auto Reset)。將 VCC接上板的VCCGND接上板的 GNDTX接上板的 RXRX接上板的 TX

圖為我平常用的 USB Module PL2303HX,因為它原本是沒有 DTR 接線,所以我要自行將 DTR引出。尤幸打開Module後,發現該板有引出位置可供接線…


另外,我選擇了Support Auto Reset的方法,其方法是DTR接上 104pf陶瓷電容,電容另一隻腳Reset腳。如果是自製板子請於 Reset腳同時另接 10k電阻,電阻另一端接到 VCC。這樣可避免每次upload program 都要按 reset 按鈕。詳細連接,請參閱下圖:




下圖為我的製成品,我特別在 Digital 13 腳再引出到 LED 的正極,其負極接 220Ω電阻,電阻的另一端再接到GND,這樣可方便測試。




燒錄 Boot Loader
燒錄前的連接
在這個環節裡,我們首先要連好 UNO 板子,將 100uf電解電容的負極插到 GND,正極插到 Reset接口。再將狀態燈板子裝好在 UNO板子上。還記得我們那條 ICSP Cable嗎?將白色獨立出來的一邊,插進 UNO板上的ICSP接口,記著紅色要對正 ICSP 接口的 Vcc,然後白色那條插進狀態燈板子預留的 pin10腳位。將ICSP Cable的另一端播進我們的Arduino板子的 ICSP接口,同樣地紅色必須接在 Vcc上。

在Arduino UNO裝上狀態燈板子100uf電解電容後的實物圖:



用 ICSP Cable將 UNO 和我自製的板子連接後的模樣:



開始燒錄 Boot Loader
1. UNO USB cable連上電腦,沒問題的情況下你可見到UNO板上的狀態燈板的綠燈在呼吸(一閃一閃),然後打開 Arduino IDE
2. 檢查Serial Port。在 Tools->Serial Port中,應為你的 UNO端口。
3. 檢查板子。在 Tools->Board中,應為我們自製的 Arduino板子所用的Microprocessor的類型。例如我們是用 Atmega328,那麼選 Arduino UNO好了。如果是 Atmega8,那麼選 Arduino NG or older w/ ATmega8就對了。
4. 檢查Programmer。在 Tools->Programmer中,請選 Arduino as ISP(因為我們是用 UNO來做ArduinoISP)
5. 所有設定沒問題的話,按 Tools->Burn Bootloader,開始燒錄。等5秒後,這時你在 UNO板上的狀態燈板的綠燈會長亮,而黃色的就好快的閃爍,這代表正在燒錄。如果出現紅色燈,則你要檢查一下你的電路和ICSP Cable 各部份的連接是否正確。
6. 燒錄完成後,你可見到UNO板上的狀態燈板的綠燈又在呼吸(一閃一閃)

上載程式到自製的 Arduino板子
燒錄完成後,把之前所有的連線全部拔掉,而那塊 UNO板亦可功成身退了。然後,接上 USB Module到我們的 Arduino板子。將 USB Module連上電腦,如果你的 USB Module需要安裝 Driver,請在此時安裝。USB Module成功連接後,如果是 Windows,在"Device Manager"可找到該COM port的。如果你是用 Linux,請檢查你的 tty是否有 ttyACM ttyUSB0…等等。好了,一切正常的話,你可打開 Arduino IDE
1. Tools->Serial Port中檢查一下連接埠。
2. 檢查板子。在 Tools->Board中,應為我們自製的 Arduino板子所用的Microprocessor的類型。(關於類型請參閱上一個環節: 開始燒錄 Boot Loader的第 3步驟)
3. 按下Upload,上載程式。

下圖為自製的 Arduno裝上 USB Module後的樣子:


如無問題你可發現我們這塊Arduino與一塊 UNO板是無兩樣的,一樣可以自由上載arduino式,接口完全一樣。亦因此我用了另一顆Atmega8做了另一塊 Arduino 板,用來作為 Arduino ISP,把 UNO板留來做其它的事情,雖知道我的板子很便宜呢~~

自製的 ArduinoISP板子:


還可再變型?

細心的朋友可能留意到,我的 Arduino板子其實還預留了擴展空間。就是利用排座將Microprocessor 腳位全部引出,所以我另外弄了個擴展底座。

我的擴展底座:


擴展底座與我的 Arduino板子合體:


我的擴展底座除了將Digital I/O和 Analog I/O引出,使之更適合用於感應器外,當中還加上了外接電源部份。簡單而言,其實加了數顆電容和一顆 L7805作 5v 穩壓之用而已。大家可發揮一下創意,就可以設計出不同功的擴展底座。期待著有更創意的作品…




4 則留言:

  1. 您好 請問一下
    我自製了一塊電路板 晶片是Atmega2560
    我想在裡面燒錄Arduino 的Bootloader
    我用Arduino mega板做為ISP燒錄器
    透過ICSP cable做燒錄
    Tools->Board我選擇了Arduino mega2560 or maga ADK
    其餘步驟跟您都一樣
    但是最後顯示錯誤了
    avrdude: Yikes! Invalid device signature.
    Double check connections and try again, or use -F to override
    this check.
    請問是哪裡做錯了呢?

    回覆刪除
    回覆
    1. 對不起,現在才能回覆你的留言。對於燒錄 bootloader 於 Atmega2560我可沒試過,但對於 Yikes! Invalid device signature,我則曾經試過一顆 Atmega8在燒 bootloader 時出現該 error,但我相信這是個別事件,因為另一顆則沒有問題。

      另外在網上有篇相關文章值得你一看:http://www.instructables.com/id/Bootload-an-ATmega328/?ALLSTEPS

      建議你可試試上述連結提供的方法,再不行才找另一顆 2560試試看。

      刪除
  2. 您好
    在下想用其他的MCU(如:AT90PWM,Arduino沒用這來做開發版)來燒錄Arduino 的Bootloader,不知是否可行?

    回覆刪除
    回覆
    1. AT90PWM 沒玩過,所以不能給你什麼意見…

      刪除