Arduinoを自作するPart3 ファームウェアとブートローダを書き込む How to make your own Arduino UNO

ArduinoUNOを自作するPart3 ファームウェアとブートローダを書き込む How to make your own Arduino UNO

前回はハードウェアが完成しました。



今回はArduinoUNOに載っている二つのマイコン「USBシリアル通信担当のATmega16U2」と「ArduinoUNOのコアであるATmega328P」にファームウェアとブートローダを書き込んでいきます。


下準備

ArduinoUNOのボード上には2つのマイコンが載っていますが、それぞれに独立したICSPという端子が準備されています。

Arduinoボードには2つのマイコンそれぞれのICSP端子が備わっています
左上は「ATmega16U2」右は「ATmega328P」のICSP端子


このICSPに専用のAVRライタを接続することでファームウェアやブートローダ、スケッチをマイコンに直接書き込むことが出来ます。


ということで書き込み機を買いました。

USBTinyISPの互換機?です。
USBTinyの互換機を用意しました
公式でもっとしっかりとしたAVRライタは売っていますが、Arduinoを量産するとかでない限り必要はないと思ったので互換機で済ませました。

実際に使ってみたんですが、付属のケーブルのプラグに突起があってATmega16U2側のICSP端子に刺そうとすると、すぐ横のソケットと干渉して刺さりませんでした。

なのでカッターなどを使って削る必要がありました。
書き込み等に不便はなかったです。




ファームウェアとブートローダを書き込む

簡単にしか説明しませんが書き込み手順です


まずUSBTinyをパソコンで認識できるようにします。(環境はWin10)

USBTinyをパソコンに接続。
恐らくドライバが見つからないと思います。

ここ↓でUSBTinyのドライバを落としてインストールすればパソコンにUSBTinyとして認識されるようになります。


続いてAtmel Studioをインストール。

結構容量が大きい…

書き込みの設定


ATmel Studioを起動して「Tools」から「External Tools…」をクリック。

ここで書き込みの設定を行います。

まずはATmega16U2の書き込み設定から。

Titleは分かりやすく。

「Command」の入力欄には"avrdude.exe"のパスを入力します。
F:\ProgramFiles\Arduino\hardware\tools\avr\bin\avrdude.exe

自分の場合ArduinoIDEをFドライブにインストールしているのでF:になっています。

「Arguments」には書き込み設定を入力します。
-c usbtiny -C "F:\ProgramFiles\Arduino\hardware\tools\avr\etc\avrdude.conf" -p m16u2 -v -v -v -U flash:w:"F:\ProgramFiles\Arduino\hardware\arduino\avr\firmwares\atmegaxxu2\Arduino-COMBINED-dfu-usbserial-atmega16u2-Uno-Rev3.hex":i -U lfuse:w:0xFF:m -U hfuse:w:0xD9:m -U efuse:w:0xF4:m -U lock:w:0x0F:m

環境によって「avrdude.confのパス」「書き込むファームウェア(.hex)のパス」、そして使用するAVRライタの種類によっては「usbtiny」を書き換える必要あり。
「m16u2」は書き込み先のマイコンの種類です。

このコマンドの肝はヒューズ設定です。
ヒューズ設定無しでファームウェアのみ書き込んでもATmega16U2は正常に動作しません。

「Initial directory」には"avrdude.conf"の入っているフォルダのパスを入力。

F:\ProgramFiles\Arduino\hardware\tools\avr\etc

これらを入力し終わったら「Apply」で適用して「OK」をクリック。


ATmega16U2にファームウェアを書き込む

では早速書き込みをしてみます。

ATmega16U2のICSP端子にAVRライタのケーブルを接続。
挿し込む向きなどはライタによって違うでしょうから注意が必要です。
ATmega16U2のICSP端子にAVRライタのケーブルを接続
AVRライタをパソコンに接続してAtmel Studioを起動。

「Tools」から先ほど設定したものが選べるようになっているのでクリック。

OKをクリック。

するとATmega16U2のファームウェア書き込みが始まります。
十数秒で書き込みは終わります。
これでATmega16U2のUSBシリアル通信用のファームウェア書き込みは終了です。

ATmega328Pにブートローダを書き込む

同じくUSBTinyISPを使ってATmega328Pにブートローダを書き込みます。

ATmega16U2の時と基本的にやることは同じです。

Atmel Studioの「External Tools…」から設定ウインドウを開きます。

「Command」「Initial directory」はATmega16U2と入力内容は同じです。

「Arguments」のみ変わります。

-c usbtiny -C "F:\ProgramFiles\Arduino\hardware\tools\avr\etc\avrdude.conf" -p m328p -v -v -v -U flash:w:"F:\ProgramFiles\Arduino\hardware\arduino\avr\bootloaders\optiboot\optiboot_atmega328.hex":i -U lfuse:w:0xFF:m -U hfuse:w:0xDE:m -U efuse:w:0xFD:m -U lock:w:0x0F:m

「m328p」はATmega328Pのことです。
HEXファイルはATmega328P用のものを指定してあげる必要があります。
ヒューズ設定もATmega16U2とは違います。

あとは適用してUSBTinyISPをATmega328PのICSP端子に接続。
ATmega328PのICSP端子にAVRライタのケーブルを接続
ATmega16U2の時と同じ手順で書き込んであげればOKです。

ArduinoUNO互換機の完成!!

早速完成したArduinoUNO互換機をパソコンと接続し、ArduinoIDEを起動。

ツールから確認してみると、しっかりとArduinoUnoとして認識されていることが確認できます。



まずはLチカを試してみます。


ちゃんとLEDが1秒間隔で点滅していることが確認できます。


シリアル通信の動作確認もしましたがちゃんと動いているようです。

まとめ

5台作って5台とも問題なく使えています。
5台作ったArduinoUNO互換機は全てちゃんと動作します
ArduinoUNO互換機の自作を終えた感想は”簡単だった”です。

なにしろオープンソースプロジェクトですから基板の設計図から何から公開されているところが大きいです。

ユーザーは基板も設計せずに発注するだけでいいし、必要な電子部品も買って用意するだけ。

表面実装部品のリフローのみ敷居が高く感じるかもしれませんが意外と簡単にできました。


でも一番いいなと感じたところがあって、それは”自分だけのArduinoが手に入る”というところだと思います。

今回はシルク印刷以外に何も手を加えなかったですが、使用されている電子部品をグレードアップしてみたり、設計に手を加えて機能を追加してみたり。

それこそ設計図を参考に全く違うデザインのArduinoを作ってみたり。
何でもできてしまえます。


中国の基板製造屋のクオリティと安さも凄い。

今回発注した基板(30枚)とステンシル、送料抜いたら19$(約2000円)ですからね?
ありえない

基板を発注してみたい、表面実装部品のリフローに挑戦してみたい。
なんて人はArduinoの自作に挑戦してみてはいかが?

めちゃくちゃ楽しめました
おしまいおしまい

(もしかしたらArduinoMEGA2560の自作も挑戦するかも)



0 件のコメント :

コメントを投稿