Nov11’s diary(自宅での開発環境作り )

3Dプリンタと切削加工機で工作した事をアップして行きます

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の接続図〕

f:id:Nov11:20170124155420j:plain

〔PICkit3とPIC16F1455の接続写真〕

f:id:Nov11:20170124155445j:plain

〔PIC16F1455の設定〕

f:id:Nov11:20170124155521j:plain

f:id:Nov11:20170124155540j:plain

f:id:Nov11:20170124155602j:plain

f:id:Nov11:20170124155622j:plain

f:id:Nov11:20170124155646j:plain

f:id:Nov11:20170124155717j:plain

f:id:Nov11:20170124155735j:plain

f:id:Nov11:20170124155751j:plain

 

〔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の制御シーケンスを乗せれば、ロボットアームに組み込む事が出来そうです

なお、ブログの内容を参照して実行した結果に責任は負いかねますので、ご了承下さい