Kanade Labo

かなで研究所

ATMega328PUを単体8Mhzで動作させる(グダグダ解説版)

こんにちは かなで です。

まず、本記事はグダグダ解説する記事です。結論だけ教えろという方はこちらへどうぞ

超初心者向けの前置きをするととてつもなくきりがないので、Arduino齧ったことがある人向けの記事になります。

ATMega328PUを単体で動かそうと思ったとき、普通は16MHzで動かしますよね?

水晶発振子付けますよね?

でも遊びでとりあえず動かす場合ではなく、実際に何かを作って、電池で動かしたいと思ったとき、電圧は小さい方がいいし、長持ちした方がいいと思いますよね?

そんなわけで、今回は、ATMega328PUを8Mhzで動かす方法と書き込み時の注意点について記事にしています。

早速ですが、こちらをご覧ください。

クリックで大きくなります

Arudino Uno外部
16MHz
ブートローダを書き込むブートローダーArduino as ISPATmega328 on a breadboard
(8 MHz internal clock)
なし無関係ブートローダ書き込めず×
Arudino Uno外部
16MHz
ブートローダを書き込むブートローダーArduino as ISPArudino Unoなし無関係ブートローダ書き込めず×
Arudino Uno外部
16MHz
書込装置を使って書き込むプログラムArduino as ISPATmega328 on a breadboard
(8 MHz internal clock)
なしBlinkプログラム書き込めず×
Arudino Uno外部
16MHz
書込装置を使って書き込むプログラムArduino as ISPArudino UnoなしBlinkプログラム書き込めず×
ATmega328 on a breadboard
(8 MHz internal clock)
内部
8MHz
ブートローダを書き込むブートローダーArduino as ISPATmega328 on a breadboard
(8 MHz internal clock)
なし無関係書込み成功
ATmega328 on a breadboard
(8 MHz internal clock)
内部
8MHz
ブートローダを書き込むブートローダーArduino as ISPArudino Unoなし無関係ブートローダ書き込めず
※失敗に見えるだけ
ATmega328 on a breadboard
(8 MHz internal clock)
内部
8MHz
書込装置を使って書き込むプログラムArduino as ISPATmega328 on a breadboard
(8 MHz internal clock)
なしBlink書込み成功
LED点灯(1秒)→LED消灯(1秒)
ATmega328 on a breadboard
(8 MHz internal clock)
内部
8MHz
書込装置を使って書き込むプログラムArduino as ISPArudino UnoなしBlink書込み成功
LED点灯(2秒)→LED消灯(2秒)
×
Arudino Uno外部
16MHz
ブートローダを書き込むブートローダーArduino as ISPATmega328 on a breadboard
(8 MHz internal clock)
16MHz無関係書込み成功
Arudino Uno外部
16MHz
ブートローダを書き込むブートローダーArduino as ISPArudino Uno16MHz無関係書込み成功
ATmega328 on a breadboard
(8 MHz internal clock)
内部
8MHz
ブートローダを書き込むブートローダーArduino as ISPATmega328 on a breadboard
(8 MHz internal clock)
16MHz無関係書込み成功
ATmega328 on a breadboard
(8 MHz internal clock)
内部
8MHz
ブートローダを書き込むブートローダーArduino as ISPArudino Uno16MHz無関係書込み成功
Arudino Uno外部
16MHz
書込装置を使って書き込むプログラムArduino as ISPArudino Uno16MHzBlink書込み成功
LED点灯(1秒)→LED消灯(1秒)
ATmega328 on a breadboard
(8 MHz internal clock)
内部
8MHz
書込装置を使って書き込むプログラムArduino as ISPATmega328 on a breadboard
(8 MHz internal clock)
16MHzBlink書込み成功
LED点灯(1秒)→LED消灯(1秒)
Arudino Uno外部
16MHz
書込装置を使って書き込むプログラムArduino as ISPATmega328 on a breadboard
(8 MHz internal clock)
16MHzBlink書込み成功
LED点灯(0.5秒)→LED消灯(0.5秒)
×
ATmega328 on a breadboard
(8 MHz internal clock)
内部
8MHz
書込装置を使って書き込むプログラムArduino as ISPArudino Uno16MHzBlink書込み成功
LED点灯(2秒)→LED消灯(2秒)
×

色々と設定を変えて、どのように書き込めたかを検証した結果が上記になります。

と、いきなり言われても かなで独特の言い回しが多くて、意味が分からないと思いますので、一つずつ解説していきます。

こんな辺鄙なサイトを見に来てるくらいなので、上記の図のようなものは見たことがあると思います。

この図をイメージしながら聞いてほしいのですが

まず、このArduino本体とは、

こいつのことを指します。

上の図では、ATMega328PUが抜かれてるように見えますが、私がここで説明する方法では、実際はつけたままで使用します。

「書込装置」とは、Arudino IDEの画面上でいう、

「ツール」→「書込装置:~」の部分のことです。

無関係という記載しかないですが、これは「Arduino本体内にあるATMega328PUにスケッチを書込む際は、この書込装置は関係ないよ。なんでもいいよ」という事を表しています。

次に「ボード」の部分ですが、これは

「ツール」→「ボード:~」の部分のことです。

「Arudino Uno」しか使用しません。「Arduino本体内にあるATMega328PUにスケッチを書込む際は、ボードを「Arudino Uno」にしてください。という意味です。

数が多いのでどんどん行きます。

「スケッチ」は

ファイル→スケッチ例→ArudinoISP→ArduinoISPを選びます。

Arduino本体内にあるATMega328PUに書き込むスケッチは、このArudinoISPです。

この設定「ボード:Arudino UNO、スケッチ:ArduinoISP」で、Arduino本体のATMega328PU(マイコンボード)に書き込みます。

これで、Arduino本体は「ATMega328PUに書き込むための装置」に変身します。


次に、この部分の説明。

ここから先は、

こちらに出てくるATMega328PU側の話です。

ブートローダーの状態ですが、これは準備したATMega328PUに書き込まれているブートローダの状態はどういうものか?」を記載しています。

「ボード:Arudino Uno」でブートローダーに書き込んだものなのか、

「ボード:ATmega328 on a breadboard(8MHz internal clock)」でブートローダーに書き込んだものなのか

Arudino Unoであれば、16MHzで動作するはずで、外部クロック(16MHz水晶発振子)が必須で

ATmega328 on a breadboard(8MHz internal clock)であれば、8Mhzで動作するはずで、外部クロックは必要ないです。

※ここで出てくる「ATmega328 on a breadboard(8MHz internal clock)」は標準搭載されていません。
 以下記事を参考に追加してください。

次は、「やること」と「書込領域」です。

まぁこれは、やりたいことですね。「ブートローダに書き込みたいのか、プログラムに書き込みたいのか。」によって操作が変わるので分けています。

ブートローダを書き込みたいときは、「ツール」→「ブートローダを書き込み」で書き込めます。

プログラムを書き込みたいときは、「スケッチ」→「書込装置を使って書き込む」で書き込めます。


ここは、ATMega328PUに書き込む際の、設定を記載しています。

書き込むときは、書込装置は、必ず「Arduino as ISP」を選択しましょう。

「ArduinoISP」や「ArduinoISP.org」、「Arduino as ISP (ATmega32U4」等、似たようなのがありますが、全部違います。必ず「Arduino as ISP」を選んでください。

ボードは、今からどちらで書き込むかですね。

理由は先ほどと一緒です。
Arudino Unoであれば、16MHzで動作するはずで、外部クロック(16MHz水晶発振子)が必須で
ATmega328 on a breadboard(8MHz internal clock)であれば、8Mhzで動作するはずで、外部クロックは必要ないです。

外部クロック接続は、外部クロック(16MHz水晶発振子)を付けているか、つけていない(なし)かの違いです。

言い換えると、書き込むときに、こいつを付けたかつけてないか。です。

最後の「スケッチ」は、書き込むときのスケッチです。

ブートローダに書き込む時は、どんなスケッチを開いていようが関係ないです。

プログラムを書き込む時は、「Blink」通称Lチカのプログラムです。

別に「Blink」を書き込みましょうというわけではなく、検証する際にBlinkを使ったというだけです。

ちなみに中身は変更せずに、1秒点灯→1秒消灯を繰り返すものです。(ここ重要)


最後に「動作」は、まぁ結果どうなったかを書いてます。

面白い?のが、設定によっては、失敗に見えて成功してたり、点滅の速さが変わったりするところです。これは、外部クロックがないことで、設定変更後に結果が見えなかったり、クロック速度が誤っていることで、倍速になったりゆっくりになったり…というものだったりします。

これで、グダグダ解説版は終了です。

次に、簡潔まとめ版を記事にします。

最後までお読みいただきありがとうございました。
気になることがあったら、コメント頂けると嬉しいです。
自主学習も兼ねて記事にするかもしれません。

-Arduino/ATMega328P