今回は従来からArduino UNOなどで非常によく使われているATmega328Pの強化版であるATmega328PBについて紹介してみたいと思います。まずはAtmega328Pとの違いから

 

ATmega328Pとの違い

1.       UART, SPI, I2C2つずつ使える

2.       タイマー(PWM)が使える数が多い

3.       DIPパッケージが存在しない

 

大きな違いはこの3つかなと思います。ATmega328Pと互換性をそこそこ維持しつつも最近のマイコンらしくペリフェラルも強化された完全なATmega328PBの上位互換です。DIPパッケージが無いのも近年の流れとも言えます。(IC類でも最近はDIPがディスコンになったり元から無かったりってことが増えてきています。)

 筆者はPORT出力、PWM出力(タイマー)、ADCUARTSPIを使いましたが、ATmega328Pに搭載されている機能を使う際はほとんど変更なしに同じプログラムが動作しました。ただし、UART,SPI,I2Cについては2つに増えたためレジスタ名に番号が増えて(例:UCSRAUCSR0A)いることには注意してください。

 PORT、ペリフェラルの基本的な使い方は以前の記事(ATmega328Pでの使い方)を参考にしてください。本記事ではATmega328PBを使う際の注意点を紹介します。

 

ATmega328PBの注意点

1.       ATmega328Pでは電源だったピンが一部IOに変更されている

ATnega328PではGND(ピン番号3)Vcc(ピン番号6)だったピンがそれぞれPE0PE1に変更されています。そのため、ATmega328P用に設計した基板でATmega328PBを使う場合はPE0,1の出力設定に注意しなければなりません。間違ってIOを出力にしてPE0HIGH, PE1LOWにした場合マイコンが破損する可能性があります。

2.       Timer3コンペアBOC3B)とTimer4コンペアB(OC4B)が同じピン(PD2)に設定されているため使うときの設定に注意点がある。

ATmega328PBではTimer3つから5つに増えました。しかし、新たに追加されたTimer3Timer4のコンペア(比較)B出力はどちらもPD4ピンを共用する仕様になり少し使用方法が複雑になりました。こちらについてもデータシートに記載があるのでデータシートを見てみます。

https://avr.jp/user/DS/PDF/mega328PB.pdf

データシートの122ページを見てみます。
1

すると、Timer3 コンペアBTimer4コンペアB変調器を通してPD2に繋がっていることがわかります。そして、PORTB7(PB7)の状態が1の時にOR 0の時にANDとなることがわかります。

 言い換えると、普通のPWMピンとして使おうとする場合はTimer34かのどちらかを使ったうえでPB7(PORTB bit7)1にしておく必要があるということです。(筆者はこれで数日潰しました)

 ちなみに、PB70(変調器をAND)にした場合はTimer34かのどちらかしか使わない場合は常にLが出力されます。

また、両方使った場合はPB70(AND)の場合duty比がAND(50%50%の場合は25%が出力)PB71(OR)の場合duty比がOR(25%25%の場合50%)されます。そのため、Timer34を両方有効化して使うことは基本的に無いと思います。

 

以上が筆者がATmega328PBを使っていて引っかかった点および気を付けた点になります。

 

ATmega328PBATmega328Pの正当な進化系でかつ互換性をそこそこ維持した使いやすいマイコンだと思います。ATmega328Pでは足りないけどもっと上のAVRとか32bitマイコンは大規模すぎるって時に有用じゃないかと筆者は思います。