ATMega328PUを単体8Mhzで動作させる(グダグダ解説版)
こんにちは かなで です。
まず、本記事はグダグダ解説する記事です。結論だけ教えろという方はこちらへどうぞ
超初心者向けの前置きをするととてつもなくきりがないので、Arduino齧ったことがある人向けの記事になります。
ATMega328PUを単体で動かそうと思ったとき、普通は16MHzで動かしますよね?
水晶発振子付けますよね?
でも遊びでとりあえず動かす場合ではなく、実際に何かを作って、電池で動かしたいと思ったとき、電圧は小さい方がいいし、長持ちした方がいいと思いますよね?
そんなわけで、今回は、ATMega328PUを8Mhzで動かす方法と書き込み時の注意点について記事にしています。
早速ですが、こちらをご覧ください。
Arudino Uno | 外部 16MHz | ブートローダを書き込む | ブートローダー | Arduino as ISP | ATmega328 on a breadboard (8 MHz internal clock) | なし | 無関係 | ブートローダ書き込めず | × |
Arudino Uno | 外部 16MHz | ブートローダを書き込む | ブートローダー | Arduino as ISP | Arudino Uno | なし | 無関係 | ブートローダ書き込めず | × |
Arudino Uno | 外部 16MHz | 書込装置を使って書き込む | プログラム | Arduino as ISP | ATmega328 on a breadboard (8 MHz internal clock) | なし | Blink | プログラム書き込めず | × |
Arudino Uno | 外部 16MHz | 書込装置を使って書き込む | プログラム | Arduino as ISP | Arudino Uno | なし | Blink | プログラム書き込めず | × |
ATmega328 on a breadboard (8 MHz internal clock) | 内部 8MHz | ブートローダを書き込む | ブートローダー | Arduino as ISP | ATmega328 on a breadboard (8 MHz internal clock) | なし | 無関係 | 書込み成功 | ○ |
ATmega328 on a breadboard (8 MHz internal clock) | 内部 8MHz | ブートローダを書き込む | ブートローダー | Arduino as ISP | Arudino Uno | なし | 無関係 | ブートローダ書き込めず ※失敗に見えるだけ | △ |
ATmega328 on a breadboard (8 MHz internal clock) | 内部 8MHz | 書込装置を使って書き込む | プログラム | Arduino as ISP | ATmega328 on a breadboard (8 MHz internal clock) | なし | Blink | 書込み成功 LED点灯(1秒)→LED消灯(1秒) | ○ |
ATmega328 on a breadboard (8 MHz internal clock) | 内部 8MHz | 書込装置を使って書き込む | プログラム | Arduino as ISP | Arudino Uno | なし | Blink | 書込み成功 LED点灯(2秒)→LED消灯(2秒) | × |
Arudino Uno | 外部 16MHz | ブートローダを書き込む | ブートローダー | Arduino as ISP | ATmega328 on a breadboard (8 MHz internal clock) | 16MHz | 無関係 | 書込み成功 | ○ |
Arudino Uno | 外部 16MHz | ブートローダを書き込む | ブートローダー | Arduino as ISP | Arudino Uno | 16MHz | 無関係 | 書込み成功 | ○ |
ATmega328 on a breadboard (8 MHz internal clock) | 内部 8MHz | ブートローダを書き込む | ブートローダー | Arduino as ISP | ATmega328 on a breadboard (8 MHz internal clock) | 16MHz | 無関係 | 書込み成功 | ○ |
ATmega328 on a breadboard (8 MHz internal clock) | 内部 8MHz | ブートローダを書き込む | ブートローダー | Arduino as ISP | Arudino Uno | 16MHz | 無関係 | 書込み成功 | ○ |
Arudino Uno | 外部 16MHz | 書込装置を使って書き込む | プログラム | Arduino as ISP | Arudino Uno | 16MHz | Blink | 書込み成功 LED点灯(1秒)→LED消灯(1秒) | ○ |
ATmega328 on a breadboard (8 MHz internal clock) | 内部 8MHz | 書込装置を使って書き込む | プログラム | Arduino as ISP | ATmega328 on a breadboard (8 MHz internal clock) | 16MHz | Blink | 書込み成功 LED点灯(1秒)→LED消灯(1秒) | ○ |
Arudino Uno | 外部 16MHz | 書込装置を使って書き込む | プログラム | Arduino as ISP | ATmega328 on a breadboard (8 MHz internal clock) | 16MHz | Blink | 書込み成功 LED点灯(0.5秒)→LED消灯(0.5秒) | × |
ATmega328 on a breadboard (8 MHz internal clock) | 内部 8MHz | 書込装置を使って書き込む | プログラム | Arduino as ISP | Arudino Uno | 16MHz | Blink | 書込み成功 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秒消灯を繰り返すものです。(ここ重要)
最後に「動作」は、まぁ結果どうなったかを書いてます。
面白い?のが、設定によっては、失敗に見えて成功してたり、点滅の速さが変わったりするところです。これは、外部クロックがないことで、設定変更後に結果が見えなかったり、クロック速度が誤っていることで、倍速になったりゆっくりになったり…というものだったりします。
これで、グダグダ解説版は終了です。
次に、簡潔まとめ版を記事にします。
最後までお読みいただきありがとうございました。
気になることがあったら、コメント頂けると嬉しいです。
自主学習も兼ねて記事にするかもしれません。