PICを使用して開発する事にした(8BitMCUのPIC16Fを使用する)
STMicroelectronicsさまのレーザー測距センサ(VL53L0X)をPIC32MX170F256Bを使用して、距離測定が出来るようになったのは良かったのだが、ロボットアームの全長が30cm以上あるので、ケーブル長が40cm以上になってしまう
この長さをI2Cでやり取りするのは難しそうなので、UARTでロースピードで伝送する方式にする事にしようと考えたのだが、PIC32MX170F256BやPICFJGA002は、28ピンもありサイズが大きいので、サイズの小さい8bitMCUのPIC16F1455を使用する事にした
PIC16F1455を選択した理由は、14ピンで、コンパクトな上に、EUARTやI2C(MSSP)通信の他にA/DやD/A変換等の機能が盛り沢山な上に価格も160円(秋月)とコスパがとても良い、またコードコンフィグレータ(MCC)が使用できるので、プログラムを作成も簡単に出来てしまいそうなので、採用する事にした
PICを使用して開発する事にした(32BitMCUのPIC32MX系を使用する)で、xc8のコンパイル環境をインストールしていたので、PIC16F1455の資料を以下のサイトからダウンロードして、動作テストを行う事にした
PIC16F1455のマニュアル
http://ww1.microchip.com/downloads/en/DeviceDoc/40001639B.pdf
MPLAB X Code Configurator ユーザガイド
http://ww1.microchip.com/downloads/jp/DeviceDoc/40001725B_JP.pdf
んで、PIC16F1455のマニュアルから、PICkit3とPIC16F1455を接続して、MPLAB X Code Configuratorユーザガイドを見ながら設定とプログラムを作成を行った
それにしても、8Bit系のPIC16やPIC18のコンパイラやコードコンフィグレータ(MCC)の日本語マニュアルがあるのとても嬉しいですね(16/32Bit系のマニュアルは見つけられなかったです...)
そのおかげで、悩む事無くサクッと簡単にプログラムを作成出来ました!!
また、PIC16Fは、コールバック関数を登録できるので、プログラム修正しなくて良いのがいいですね
作成したプログラムは、テラターム経由で、PIC16F1455のD/A変換でLEDの明るさを変えながら、タイマー割り込みを使用して、LEDを点滅させるものです
テラタームやFTDI等の設定やプログラムの書き込みは、「PICを使用して開発する事にした&三日坊主にならずに済んだ!」を参考にしてください
〔PICkit3とPIC16F1455の接続図〕
〔PICkit3とPIC16F1455の接続写真〕
〔PIC16F1455の設定〕
〔PIC16F1455のプログラム〕
//------------------------------------------------------------------
//------------------------------------------------------------------
// TMR1 CallBack Function
void LedToggle( void ) {
// この関数が500mSec間隔でコールされる
IO_LED_Toggle();
}
void main(void)
{
uint8_t ucChar;
uint8_t ucLevel = 0;
// initialize the device
SYSTEM_Initialize();
// Interrupt Enable
INTERRUPT_GlobalInterruptEnable();
INTERRUPT_PeripheralInterruptEnable();
// TMR1 CallBack Function Entry
TMR1_SetInterruptHandler( LedToggle );
// DAC Output
DAC_SetOutput( ucLevel );
while (1)
{
// Add your application code
ucChar = EUSART_Read();
if ( ucChar == 'u' ) {
if ( ucLevel < 0x1f ) {
ucLevel++;
}
}
if ( ucChar == 'd' ) {
if ( ucLevel > 0 ) {
ucLevel--;
}
}
// DAC Output
DAC_SetOutput( ucLevel );
// Echo Back
EUSART_Write( ucChar );
}
}
//------------------------------------------------------------------
//------------------------------------------------------------------
プログラムを書込んだ後に、LEDが0.5秒毎に点滅し、コンソールから'u'を入力すると、もう一つのLEDが明るくなり、'd'を入力すると暗くなる事が確認できれば、動作テスト完了となる
これで、I2C通信を確認して、VL53L0Xの制御シーケンスを乗せれば、ロボットアームに組み込む事が出来そうです
なお、ブログの内容を参照して実行した結果に責任は負いかねますので、ご了承下さい