ATmega328PB を使ってみるテスト
秋月電子で ATmega328PB を売ってたので試してみた
ATmega328PB とは?
Arduino Uno でおなじみの ATmega328P の後継となるマイコンです。
実のところ ATmega328P は少し前から Not Recommended for new designs
となっていて、
代わりに ATmega328PB を使ってくださいということになっています。
発売自体も 2015 年ころなので、今まで秋月であつかっていなかったのが不思議なくらいです。
変更点は以下の通りです
- GPIO、SPI、I2C、UART、Timer の数が増えた
- DIP 版がない
水晶発振器用のフルスイングオシレータが廃止されたので、クリスタルが使えないとかいう話もありますが、 後ほどテストしてみます。
Arduino で使う
ATmega328P と上位コンパチなので、ATmega328P 用に作られたコードはそのまま動きます。 (chip signature が違うのでそのままでは書き込めないけど…) 今回は、MiniCore を使います。
いつものように追加のボードマネージャの URL に
https://mcudude.github.io/MiniCore/package_MCUdude_MiniCore_index.json
を設定して、MiniCore をインストールします。
書き込み機
これまたいつものように、Arduino Uno R3 を使って Arduino as ISP
で書き込みます。
Uno との接続は以下の通りです。
ちなみに写真に写っているのは、生 328p 書き込み用シールドです。
Aruino Uno R3 | ATmega328pb |
---|---|
10 | 29 (RESET) |
11 | 15 (MOSI0) |
12 | 16 (MISO0) |
13 | 17 (SCK0) |
5V | 4 & 18 (VCC & AVCC) |
GND | 5 & 21 |
この画面では確認のためブートローダを書き込んでいますが、
以下 USART 経由で書き込みしないので、No Bootloader
にします。
L チカ(内部クロック)
まずはいつものように Blink を書き込みます。
せっかくなので、LED_BUILDIN
を ATmega328pb の追加 GPIO である PIN_PE0
に置き換えます。
あっけなく動きましたね。
L チカ(外部クロック)
「外部クリスタルが使えない?いや、動いてるよ」と情報が混乱しいるので、外部に 16MHz の水晶を接続してテストします。 いわゆる HC-49S タイプのもので、いつも ATmega328p や ATmega32U4 で使っているものです。 クロックの設定を変えたときは「ブートローダを書き込む」を実行して FUSE bit の設定を書き換える必要があります。
うまく書き込めないし動かない… 内部クロックに戻せるので、中途半端にはうごいてるっぽいけど。
次に、20MHz のセラロックを接続してみます。
動くけど、Delay(1000)
が4秒くらいかかるので、発振周波数が正しくないっぽい…
追記(2024-03-13)
別のクリスタルを持ってきたら動いた。 HC-49S タイプのクリスタルは負荷容量 20pF 程度が必要だが、これを使うと 328PB の許容最大容量を超えるのでダメっぽい。
負荷容量 8pF 程度のクリスタル(と 10pF のコンデンサ)を接続したらちゃんと動いた。
まとめ
- MiniCore で簡単に Arduino としてつかえる
- 内部クロックであれば、特に気にせずにつかえる
- 外部クロックはちゃんとした回路を設計しないとむりぽい
アマチュア工作的には、変換基板の分だけ高くなるので、どうしても 328p じゃないとダメということがなければ AVR DD に移行した方が良いかと思います。 安いし、速いし、DIP もあるし。
もっとも自分的には CH32V203 を一個 50円で確保しているので、出番ないと思うな…