2020年6月7日日曜日

ボードの定義によって割り当てが異なるデジタルピンの番号とマイコンのピンの関係は、variantファイルを見ると分かる


背景

nordicのnRF51822というICのプログラムを作っていると、利用するボード情報によってArduinoで呼び出すデジタルピンが違うという場面に遭遇しました。
結果としてvariant.cppというファイルを見るとピン配置が分かりました。
備忘録として、具体的なファイルの場所と読み方を共有します。

例として比較するもの

arduino-nrf5のredBearLabBleNanoとbbcmicrobitを比較します。

どちらもnordicのnRF51822というICが使われていて、このICにはRAMが32KB版と16KB版があり、前者が32KB RAM、後者が16KB RAMという違いがあります。

目的: P0ピンを制御する


nRF51822のP0ピンを呼び出す方法を調べます。
利用したモジュールはnRF51822を搭載したMDBT40というモジュールです。

データシート(PDF)のピンアウト画像で言うとP0はここです。


Variantファイルの見方

Variantファイルはcppファイルヘッダファイルがあり、前者にマイコンのピンを格納する配列が定義され、後者でその配列を参照するマクロ(A0など)が定義されます。

variant.cppの一部



variant.hの一部


cppファイルを見ればコメントでマクロの情報が書かれていることが多いので、cppファイルだけ見れば必要な情報を知れると思います。

BleNanoの場合はA0もしくは8でP1を呼べる

BleNanoのvariant.cppを見てみると、A0もしくは8でP1を呼べることが分かります。


ということで、ボード情報としてBleNanoを利用する場合は、このようなプログラムを書けばP1ピンを制御できます。
#define PIN_P1 8

void setup() {
pinMode(PIN_P1, OUTPUT);
}

microbitの場合はA2もしくは2でP1を呼べる

micribotのvariant.cppを見てみると、A2もしくは2でP1を呼べることが分かります。


ということで、ボード情報としてmicrobitを利用する場合は、このようなプログラムを書けばP1ピンを制御できます。
#define PIN_P1 2

void setup() {
pinMode(PIN_P1, OUTPUT);
}

まとめ

ボード情報を変えると信号が出てこなくなって戸惑いましたが、variant.cppを確認すればマイコンのピンがデジタルピンの南蛮として割り当てられているか把握できると分かりました。

0 件のコメント :