- ピン番号の非互換について
- I2C ポート
ArduinoのI2Cポートはアナログ入力4(SDA)と5(SCL)だが、MapleはI2Cは2つあり、一つはデジタル5 (SCL)とデジタル9、二つ目はデジタル29 (SCL)とデジタル(SDA) - PWM on D10
ArduinoのPWMはD2,D3,D6,D9,D10,D11で使えるが、MAPLEのD10はPWMが使えない - 外部リファレンス電圧(AREF)
MAPLEのAREFに相当するD14はGPIO(汎用デジタルI/O)なのでAREFの機能は使えない - EEPROM
MAPLEはEEPROMを内蔵していない。サードパーティ製のソフトウェアを使って内蔵フラッシュをEEPROMにエミュレーションすることはできる - ISPプログラミング
MAPLEはではISPプログラミング/デバッグは使えない。JTAGを使ってほしい。
- ソフトウェア言語とライブラリの変更
- 32ビット Integer
MAPLEの標準関数は標準的な16ビット(2バイト)の代わりに、32ビット(4バイト)を返す - 64ビット double
Arduinoの32ビット(単精度)浮動小数点型(float)は64ビットのdoubleになる - pinModeで指定する型
OUTPUT,
OUTPUT_OPEN_DRAIN, INPUT_FLOATING, INPUT_PULLUP,
INPUT_PULLDOWNが使える。PWMが使えるピンではPWM_OPEN_DRAINが、INPUT_ANALOGが使える。 - 5Vトレラント(オリジナルには書かれていない追加事項)
D5-D9,D14,D24-D26,D29-D42 - シリアルポートの書式
Arduino MEGAのようにMAPLEは複数のシリアルポートがある。デフォルトでは Serial オブジェクトには何もマッピングされていないため使えない。Serial1からSerial3を使うこと。 - 16ビットPWM
ArduinoのPWMは8ビットで0(常にOFF)から255(常にON)だったが、MAPLEのPWMは16ビットなので0(常にOFF)から65535(常にON)までの値が使える - 12ビットADC
Arduinoは10ビットADCだったのでanalogRead()は0〜1023までの値を返したが、MAPLEは12ビットなので0〜4095を返す
- スケッチとライブラリのポート(移植)方法
- ハードとピン番号の違いのチェック
前述したハードとピン番号の違いをチェックし、シールドが5Vで動いていた場合は3.3Vに変換したり、デジタル10のPWMを使っていた場合は他のPWMを使うようにすること - ポートされたライブラリのチェック
MAPLEプロジェクトチームはよく使われるライブラリをポートする予定である。(Wire,Ethernet,LCDだが、まだ完了していない) - 内蔵機能の衝突のチェック
タイマー、バス速度を変更するとすべての機能に影響が及ぶ時がある。例えばプリスケーラを変更してPWM1で長いパルスを作るとI2Cのヘッダに影響が出る - 低レベルコードの書きなおし
これが一番難しいが、うまくいけばArduinoのライブラリの抽象化したレジスタとハードウェア仕様を使うことができ、ほとんどの場合、低レベルなコードを書かなくても良くなり、特定の周辺デバイスをうまくラップすることができる。いくつかのヘルプが GCC for Maple に書かれている。 - 必要があれば変数のサイズを考えて再宣言すること
汎用のintはほとんどの場合うまく動く。
- すべての pinMode をチェックすること。
MapleではGPIOのためのたくさんのオプションが用意されている。例えば、アナログ入力する場合やPWMを書きこむ場合は、先に INPUT_ANALOG や PWM をセットすること - PWMを変更すること
PWMは16ビットになったため、16ビットの解像度でデューティーをセットすること - ADC読み込み時の変更
analogRead()はフルピン番号で指定すること(0〜5ではなく、ピン番号で)。そして、返り値は12ビットで読まれることに注意。ADCピンは pinMode で INPUT_ANALOG をセットすること - おそらく全てのUSB-シリアル変換による通信は Serial の代わりに SerialUSB に変更すれば良い。MAPLEは USART に接続されていない USART TX/RX 以外の専用のUSBポートを持っている。
- タイミングチェック
Mapleのクロックサイクルは13.9ナノ秒だが、周辺機器の速度はもっと遅い。
|
|