NOBのArduino日記!

NOBのArduino日記!

趣味は車・バイク・自転車・ラジコン・電子工作です。

ATmega328P-PUのArduino化!(ブートローダーの書き込み)

イメージ 10
 
 先日の記事「あちゃんでいいのの作り方」で「ATmega328P-PU」にブートローダーを自力書き込みしたものを使ってArduinoUNO化しました。
 今回はブートローダー書き込み方法をまとめ(プチ量産し)てみました!

1. ATmega328P-PUとは?

高性能、低消費電力AVR®8ビットマイクロコントローラです
 
※以下補足です

 -  131の強力な命令 - ほとんどのシングルクロックサイクル実行
 -  32×8汎用ワーキングレジスタ
 - 完全に静的な操作
 -  20MHzで最大20MIPSのスループット
 - オンチップ2サイクル乗算器
•高耐久性の不揮発性メモリセグメント
 -  4/8/16/32Kバイトのインシステム自己プログラミング可能なフラッシュプログラムメモリ
 -  256/512/512 / 1KバイトEEPROM
 -  512 / 1K / 1K / 2Kバイト内部SRAM
 - 書込み/消去サイクル:10,000回のフラッシュ/ 100,000回のEEPROM
 - データ保持:25℃で85℃/ 100年で20年(1)
 - 独立したロックビットを持つオプションのブートコードセクション
オンチップブートプログラムによるインシステムプログラミング
真の読み取り中書き込み操作
 - ソフトウェアセキュリティのプログラミングロック
 - 別々のプリスケーラとコンペアモードを備えた2つの8ビットタイマ/カウンタ
 - 独立したプリスケーラ、コンペアモード、およびキャプチャを備えた1つの16ビットタイマ/カウンタ
モード
 - 別々の発振器を備えたリアルタイムカウンタ
 -  6つのPWMチャネル
 -  TQFPおよびQFN / MLFパッケージの8チャネル10ビットADC
温度測定
 -  PDIPパッケージの6チャネル10ビットADC
温度測定
 - プログラマブルシリアルUSART
 - マスタ/スレーブSPIシリアルインタフェース
 - バイト指向の2線式シリアルインタフェース(Philips I2
C互換)
独立したオンチップオシレータを備えたプログラマブルウォッチドッグタイマ
 - オンチップアナログコンパレータ
 - ピン変更時の割り込みとウェイクアップ
•特殊マイクロコントローラの特長
 - パワーオンリセットとプログラマブルブラウンアウト検出
 - 内部較正発振器
 - 外部および内部割り込み要因
 -  6つのスリープモード:アイドル、ADCノイズリダクション、パワーセーブ、パワーダウン、スタンバイ、拡張スタンバイ
•I / Oおよびパッケージ
 -  23本のプログラマブルI / Oライン
 -  28ピンPDIP、32ピンTQFP、28パッドQFN / MLF、32パッドQFN / MLF
• 動作電圧
 -  1.8  -  5.5V
• 温度範囲
-40〜85℃
スピードグレード
 -  0-4MHz1.8~5.5V、0~10MHz2.7~5.5V、0~20MHz4.5~5.5V
•1MHz、1.8V、25℃での消費電力
 - アクティブモード:0.2 mA
 - パワーダウンモード:0.1μA
 - 省電力モード:0.75μA(32 kHz RTCを含む)


1.1 ピン配置
  ArduinoUNOブートローダーを書込んだ「ATmega328P-PU」にUSBシリアル変換・DCDCコンバータ(5・3V)・16MHzクリスタル・LED等周辺部品を付けた物がArduinoUNOなので、当然ですがArduinoUNOの入出力ピンと大体一緒です。
 IC単体に8MHz内部発振機能も有るので、専用のブートローダーを書き込めば3.3~5V電源でこのIC単体をArduinoとして機能させる事も出来ちゃいます
 
イメージ 1
図1:「ATmega328P-PU」の外観及びピン配列

2. 準備

2.1 回路図
 ブレッドボードを使ってATmega328P-PUにブートローダーを書き込む回路をfritzing図2の通り描いてみました
 因みに回路図上の水晶発振子は16MHz・2つ有るセラミックコンデンサーは18pF(22pFでも可)・抵抗は10kΩを使用しました。
イメージ 2
図2:ブートローダー書き込み回路図
 
2.2 実際の回路
 図2回路図を元に実際に作った回路が図3です。
イメージ 11
図3:ブートローダー書き込み回路

2.3 ICピンそろった
 買ったばかりのDIP-ICの足は大概拡がっていてそのままではスムーズにブレッドボードに挿せません
 指で曲げて揃えるか「ICピンそろった」の様な専用工具で図4の様に真っ直ぐに矯正しておきます。
 と言う事で図5の通りブートローダー書き込みの準備完了です!
イメージ 3
図4:「ATmega328P-PU」の端子矯正
 
イメージ 4
図5:ブートローダー書き込み量産体制完了!

3. ブートローダー書き込み

3.1 ArduinoISPを開く
 図5の様に準備し、ArduinoUNOとPCをUSBケーブルで接続してArduinoIDEを起動しボードとシリアルポートをArduinoUNOにセットしておきます。
 その状態で図6の様に「ファイル」→「スケッチの例」→「ArduinoISP」→「ArduinoISP」の順にクリックし、ArduinoISPプログラムを開きます。
イメージ 6
図6:ArduinoISP読み込み
 
3.2 ArduinoISPを書き込む
 図6で開いたArduinoISPプログラムをArduinoUNOに書き込みます。
 書き込み方法は、図7の様にArduinoIDE画面左上の「→」アイコンをクリックしてマイコンボード(ArduinoUNO)に書き込みます。
イメージ 7
図7:ArduinoISPの書き込み
 
3.3 ArduinoISPを書き込み装置に指定する
 通常PCからArduinoUNOにプログラムを書き込むにはArduinoIDE「AVRISP mkⅡ」と言う書き込み装置を使用します。
 ArduinoISPを書き込んだArduinoUNO自体をArduino as ISP」と言う書き込み装置として利用する事が出来ます。
ArduinoUNOを書込装置とする事で「ATmega328P-PU」等のマイコンICに直接ブートローダーやプログラム等を書き込む事が出来る様になります。
 と言う事で図8の様に「ツール」→「書込装置」→「Arduino as ISP」を選択します。
※書込装置を「AVRISP mkⅡ」に戻せばArduinoUNOは元通り使えます。
イメージ 8
図8:書込装置を「Arduino as ISP」に設定
 
3.4 ArduinoISPでブートローダーを書き込む
 最後に「ATmega328P-PU」にArduinoUNOブートローダーを書き込みます。
 ブートローダーを書き込む前に「ツール」→「ボード:”Arduino/Genuino UNO」と成っている事を確認しておきます。※この欄で設定されているブートローダーが書き込まれます。
 良ければ図9の様に「ツール」→「ブートローダーを書き込む」をクリックし「ブートローダーの書き込みが完了しました。」と表示されればOKです!
イメージ 9
図9:「ATmega328P-PU」にブートローダーの書き込み

4. 完成!

 無意味に沢山買って来た「ATmega328P-PU」9個に図4~9の操作を繰り返して量産完了です!
イメージ 5
図10:ArduinoUNO(相当)が9個完成!

5. まとめ

 ブートローダー書き込み済み「ATmega328P-PU」は¥360/個位で、空の「ATmega328P-PU」は¥250/個位なので一個書き込むと110円もお得です!
 今回は準備も含めて3時間ほどで9個書き込んだので時給330円1,100円もの節約になりました!
 
イメージ 1 イメージ 3
励みになりますのでよければクリック下さい(^o^)/

↩【NOBのArduino日記!】目次に戻る