読書とプログラミングを中心とした覚書ブログ

読書とプログラミングについて、日々経験したことを忘れないようにするため、極力ブログに記録を残すように頑張る。

ATmega328へArduinoを書き込む

 公開日   

     

Arduino UNO等のArduinoボードを購入すると、USB端子に直接接続するだけですぐArduinoの開発が始められとてもお手軽です。

しかしながら今回どうしてもコンパクトで省電力な装置を作る必要があり、AVRマイクロコントローラーのATmega328PへブートローダーとArduinoスケッチを書き込む方法を調べました。

どうもArduino IDEのバージョンにより手順が異なっているみたいなので、私の開発環境の場合の手順を整理しておこうと思います。
最初に種明かしをすると、MiniCoreオフィシャルサイトの手順を信じれば問題ないという結論になったので、この一言でこの記事でいいたいことは完結してしまいます。

開発の準備は4ステップ

この手順で使用するArduinoコアはArduinoオフィシャルサイトではなく有志によりメンテナンスされているらしいMiniCoreを使います。

MiniCoreのサイトで解説されているドキュメントに従って順に進めていくことになるのですが、おおまかにArduino開発環境の準備には、全体像として以下4ステップになります。
以降では順に補足をしていきます。

  1. 必要な部品をそろえる
  2. ブレッドボードに部品を搭載してパソコンに接続する
  3. ブートローダーを書き込む
  4. Arduinoスケッチを開発して書き込む

必要な部品をそろえる

マイクロコントローラー(ATmega328P)を使ったArduino開発に必要な最小の部品を以下に列挙。
これ以外にワイヤー、ブレッドボードが必要。

  • ELEGOO UNO R3 ボード ATmega328P ATMEGA16U2 +USBケーブル Arduino用
    Arduinoを書き込み装置にするために使用しますので、どのArduinoボードでも大丈夫だと思われます。
  • ATmega328P
    開発できるマイクロコントローラーはMiniCoreのサイトでリストされてますが、ブレッドボードで使えて、はんだ付けしやすいDIP形状のこのチップにしました。
  • 10kΩ抵抗
    リセットピン(RESET)をプルアップ接続するために用意。
    本番回路を組み立てた後もスケッチの書き換えをすることになるので、常に抵抗を組み込んだほうが無難と思われる。
  • 16MHz 水晶
    今回はタイミングを要求する処理ではなくATmega328Pの内部発振器を使う予定なので水晶とコンデンサーは省略してもよいらしい。
  • 22pFコンデンサー
    水晶とセットでGNDへ接続時に利用。

ブレッドボードに部品を搭載してパソコンに接続する

なぜか大事なパソコンとの接続方法についてはMiniCoreのサイトにはガイドされてません。
ここについては、Arduinoオフィシャルサイトのこちらに書き込み回路について図を使った解説がありますので、こちらの手順で組み立てます。

図中にはATmega168となってますが、ピン配置はATmega168とATmega328で同一です。

あとはArduino UNOの方からUSBケーブルでパソコンに接続して完成。

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

特に悩むこともなく、ArduinoオフィシャルサイトMiniCoreのサイトの解説通りに手を動かすとできました。

まずArduino UNOを書き込み装置にするスケッチをArduino UNOへ書き込みます。

  1. Arduino IDEを開く
  2. [ファイル] – [スケッチ例] – [ArduinoISP] – [ArduinoISP]を開く
  3. (そのまま)マイコンボードに書き込む

つぎに書き込み装置になったArduino UNOを使いAtmega328へブートローダーを書き込みます。

  1. [ツール] – [ボード]をたどって、[Atmega328]を選ぶ
  2. [ツール] – [シリアルポート]をたどって、Arduino UNOが接続されているシリアルポートを選択する
  3. [ツール] – [書き込み装置]をたどって、[Arduino as ISP]を選ぶ
  4. [ツール] – [ブートローダを書き込む]を選ぶ

これで無事ATmega328PはArduinoとして動作するようになりました。

Arduinoプログラムを開発して書き込む

最後にArduino IDEで開発したスケッチをATmega328Pへ書き込む練習をします。

Arduinoオフィシャルサイトの手順では、USBシリアル変換をする別の回路を紹介してますが、書き込み回路をブートローダと共通にしたほうが楽です。
そのためスケッチの書き込みについては、Arduinoオフィシャルサイトの手順ではなく、MiniCoreのサイトで紹介されていた手順にしました。

回路図は変更なし、Arduino IDEで次のいずれかの操作で、「書き込み装置を使って書き込む」モードで書き込みます。

  • [スケッチ] – [書き込み装置を使って書き込む]を選ぶ
  • シフトキーを押しながらアップロードアイコン(右→アイコン)を押す

試しにスケッチ例から適当なスケッチを選んで無事書き込み&動作確認できれば完了。

最後に

以上でブートローダの書き込みから、スケッチの開発に進める手順は終了となります。

Arduinoでの開発はまだ慣れてない部分が多く、たぶん忘れたころに別プロジェクトで同じところで悩むと思われ、その際に思い出すポイントは残せたんじゃないかと思います。

あとは書き込み装置の回路がそこそこ面倒なので、時間のある時にArduino UNOへ刺せるシールドにしておけば十分だと思われます。
もしかすると、誰かが同じことをやっていそうだし、買ったほうが早くて安いかもしれない。

レスポンシブ広告

Message

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

Time limit is exhausted. Please reload CAPTCHA.

  関連記事

「子ども見守りサービス」をDIYで自作する

最近「子ども見守りサービス」が注目されているようです。 どうも私は課金の発生する …

素早くマイクミュートとPCスリープが出来るDIYボタンを作る

2020年はCOVID-19の影響で長期にわたる外出自粛が続きました。9月時点で …

ArduinoのPinChange割り込みライブラリとタイマーライブラリを使う

前回、素早くマイクミュートやPCスリープが行えるボタンを自作することで、とても晴 …

Attiny13Aの工場出荷時の書き込みエラーを対策

Attiny13Aは工場出荷時に低速の動作周波数になってる模様です。 この時Ar …

ATmega328の書き込み装置をArduino UNO用シールドとして作成

前回、AVRマイクロコントローラーのATmega328PへのArduinoブート …

ドア開閉イベントをSlackへお知らせするセンサーを作る

最近Raspberry Piを手に入れてから個人的にマイコンが流行っていて、WE …

Arduinoでロータリーエンコーダーの動作確認

ロータリーエンコーダーは、よくボリューム調整のつまみに使われているようなモジュー …

SlackのIncoming Webhooksが失敗した時の対処

我が家のIoTとしてSlackのIncoming Webhooksを活用したサー …

ATmega328へArduinoを書き込む