ArduinoIDEで自作ArduinoUNOにファームウェアを書き込む(Atmega16U2,328P)

注意!この記事は電子工作初心者がArduino互換機を制作する過程でひと悶着あったことを綴る記事です。今回出来なかったヒューズの書込みのやり方や詳しい設定の知識をお持ちの方はコメントを頂けると大変助かります。
また参考にしたサイト等で、ブートローダとファームウェアの言葉が入り混じっているためArduinoにおける言葉の区別がわかりませんでした。幼稚な文になりますがご了承ください。

用意するのは

* mac (Arduino IDEが動作すればOK)
* ライター側Arduino互換機(ArduinoIDEでUNOと認識されればOK)
* 自作した何も書き込まれてないArduino互換機

自分が使用したもの

* MacBookAir2018 (macOS BigSur v11.2.3)
* Arduino IDE (mac版 v1.8.13)
* Arduino互換機 KS0486 [Keyestudio PLUS](https://www.amazon.co.jp/dp/B085RHTBJT) (UNO) [wiki](https://wiki.keyestudio.com/KS0486_Keyestudio_PLUS_Development_Board_(Black_And_Eco-friendly))
今回使用したKeyestudioPLUSのArduino互換機は[こちら](https://qiita.com/NNNGriziMan/items/5ba56d3fbdae8df8723e)で紹介したようにType-CtoType-Cでは認識されないたmac側に変換ドックをつけるか,別のArduinoまた互換機を使用してください。

# 書込み装置(ISP書込み機の制作)
■ファイル->■スケッチ例->■11.ArduinoISPを選択
ライターにしたいArduinoUNOを接続しスケッチを書込む,　これで書き込んだArduinoUNOはブートローダ書込み用の簡易ライターとして使用できるようになります。
![スクリーンショット 2021-04-13 15.15.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363815/17884d3c-fd8e-fbcf-2177-de54067f6c01.png)


# ライター側と書込みたいターゲットArduinoのICSPとの配線
書込みターゲットのマイコン付近にあるICSPへ配線接続をしていきます。
配線の接続順番は
https://ht-deko.com/arduino/bootloader.html
こちらのArduino UNO を使った書込装置を参考に接続しています。
自分は右側のように上にライター、下にターゲットマイコンのように接続しました。上のサイトで紹介されているのは左側ですが結果的に同じPinに配線されているので問題ないと思います。
![スクリーンショット 2021-05-05 14.01.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363815/be1532b4-59ed-7397-3992-909719043040.png)

# Atmega328Pへブートローダを書込む
本来はavrdude-GUIなどを使用し下記を書き込み使用できるようになります。

* ヒューズ設定
* ブートローダの書込み

今回はArduinoIDEを用いた「おそらく」既に上記設定が設定済みの公式が用意してくれているファームウェアを使い書込みを行います。

1. ライター側Arduinoをmacと接続し■書込装置->■Arduino as ISPに設定します。
![スクリーンショット 2021-04-13 15.22.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363815/d46e06ce-6637-fb8d-6b7e-b2582076b6a4.png)

2. ボード選択からターゲットボードへ書込みをしたいブートローダのボードを選択。
 ■ボード->■ArduinoUNO
 * UNO互換機にUNOのブートローダを書き込みたい場合はArduino UNOを選択
 * Mega2560互換機にMega2560のブートローダを書き込みたい場合はArduino Mega or Mega2560を選択
 * Micro互換機にMicroのブートローダを書き込みたい場合はArduino Microを選択
この辺は各自の自作互換ボード(ターゲットボード)に合わせて適宜変更してください。
![スクリーンショット 2021-04-13 15.36.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363815/e9946c13-f15e-351a-f3ad-1ea9cecc715c.png)

3. 書込装置にArduino as ISPが選択されているのを確認し,ブートローダを書き込むを実行するとうまく書き込めると思います。
 シリアルポートは作成した簡易ライターArduinoを接続し選択してください。
![スクリーンショット 2021-04-13 15.30.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363815/fd5cead4-b563-ceae-7880-ec8d7ac09bf1.png)

これでAtmega328PにはUNOのブートローダが書き込まれているはずです!
もしUSBシリアル変換ICなどを使用している人はこれでArduinoUNOと認識されるようになったのではないでしょうか？
ただ私はヒューズの書込みがよくわかっておらずヒューズ設定を正確にするまでは低速動作の可能性が高いためその辺りの確認は各々でお願いします。

# Atmega16U2へシリアル変換ブートローダの書込み(もどき)
今回これが一番わからない!
大変申し訳無いですがAtmega16U2に関しては正確な情報を見つけれませんでした。
多分ピンをショートさせDFUモードでファームウェアを書き込む方法だと思いますが,早く自作Arduino互換機を動かしたかったため確実な情報を調べておりません。

そのためかなり邪道な方法でシリアル変換のブートローダを書き込みます。
まず探したのが既にシリアル変換として書込みがされているAtmega16U2のブートローダファイルです。
Amazonで過去に購入したArduinoUNO互換機の説明欄にありました。[ELEGOO ArduinoUNO互換機 R3](https://www.amazon.co.jp/dp/B06Y5TBNQX)
ELEGOO様本当にありがとうございます。
![スクリーンショット 2021-04-10 13.45.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363815/8052d487-1ea3-431a-a334-6aa90f8fc9a5.png)
ありがたく頂戴させていただきまして、
[Arduino IDE で Studuino を 使えるようにするまで (メモ)](https://qiita.com/NNNGriziMan/items/43fd5cd454ce1176bc69)の記事と同じように

展開後フォルダの中にあるcustomフォルダごと
```
open /Applications/Arduino.app/Contents/Java/hardware 
```

にコピー,Macのターミナルで 一発で開けると思います。

![スクリーンショット 2021-04-11 13.14.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363815/ed70a2db-d491-3c77-25ad-adf3e3af6e4c.png)

ArduinoIDEを一旦終了し再起動させるとボード情報に```custom-avr```の項目が増えていることが確認できると思います。
![スクリーンショット 2021-04-13 16.20.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363815/beccd008-77c4-498b-cdd6-01a7277b0d46.png)
##ターゲットボードのAtmega16U2のICSPへ配線
Atmega328PのICSPと向きが違うだけなので特に迷うことはないと思います。
![スクリーンショット 2021-05-05 14.13.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363815/ee42cc84-110e-3904-08e6-867432cd2afb.png)



いよいよ書込みです。UNOのブートローダを書込んだときのように書込みます。


* ボードにUNO 16U2 Restore Firmwareを選択 
* シリアルポートに接続しているライターを選択
* 書込装置にArduino as ISPを選択

確認できたらブートローダを書込みを実行
![スクリーンショット 2021-04-13 16.21.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363815/cfc94d99-509b-e8d7-b8f1-eaa7763684ba.png)
書込みが完了したら全ての作業が終了です!お疲れさまでした!

# Lチカしてみる
早速自作ArduinoUNO互換機でLチカしていきましょう!
すべての作業(ブートローダの書込み)が完了した自作ArduinoUNO互換機をmacに接続します
1.ボードをArduinoUNOに設定して
![スクリーンショット 2021-04-13 16.41.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363815/37531907-4739-f287-6b7e-fced515ddc45.png)
2.シリアルポート設定でArduinoUNOと認識されていることを確認
![スクリーンショット 2021-04-13 16.41.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363815/8235b44c-aa2d-32ea-002b-a5365d87b19e.png)
3.書込装置をAVRISP mkIIへもどし,スケッチで■ファイル->■スケッチ例->■01.Basics->■Blinkを選択
![スクリーンショット 2021-04-13 16.41.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363815/b6bb9952-e868-7505-55f6-1b1c727d8a0b.png)
![スクリーンショット 2021-04-13 17.01.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363815/eaf50ad2-15e1-91ed-1e24-995cccdda027.png)
書き込むと無事L3のオレンジライトがLチカ動作しました~!うれし~(静止画で申し訳ない)
![IMG_1761-min.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363815/b2b16cde-6310-70a8-2fad-2421afb85ed9.jpeg)

1年前にArduinoを触り始めマイコンと言われるものを初めて知りましたが昔の人はすごいですね.
AtmelStudioだったりと組み込みのプログラムや電子回路やら正直わからないことだらけで何なら最近の記事などがないので動かなかったりとかなり四苦八苦してます.
完全に趣味でやってますが色々作れるといいなぁと思いゆっくり楽しんでいきます~
ヒューズ設定などは時間が取れた際にゆっくり追記していきたいと思います。お疲れさまでした。