とにかくシリアル通信のPICからパソコンへの送りの確認をしたくて、手っ取り早く動くものがないかといつものようにWEBを確認していたら丁度私の要望に合いそうな自動コード作成支援のようなMCCを使った例があった。本場のWEBはMPLABのものがここにある。

私のきっかけとなったのは、ここのブログです。 TNX!

作者の対象のPICはPIC16F1829でしたが、私の場合、特に今回は、PICKIT3のDEBUG用のボードと同じ型のDIP40PINのPIC18F45K20を対象としました。理由は、以前購入していたからです。LESSONボードと同じなので、あとあと何かするにしても、無難だと思い、購入していました。このPICではすでに,LCD表示の部分はある程度使えるようになっているので、MCCでのシリアル通信の送り(TX)の確認用コードが簡単にできるか試すいいサンプルです。結果からして、超簡単でした。実は、手打ちで他のシリアル通信サンプルを打ち込んで9600ボードでのTX部をプログラムしていたんですが、文字化けで全くうまくありませんでした。コードは送れているのですが、この型のPICではサンプルもほとんどなく本当に悩んでいました。当然送出データもLCDにて問題なく表示できて確認できているのですが、PCのアプリ上(Tera Term)では、文字化けです。シリアル通信の設定も問題ないのですがうまくありませんでした。MCCでは、内部OSCの設定チェックと必要なEUSARTの送信を使うチェックと、PinManager Packageでのi/o設定で、しかも選択でokです。

以下 実際の設定は、チェックと選択で済みます。
Resource Management   System Module
イメージ 1  イメージ 2
EUSART設定              Pin Manager
イメージ 3
イメージ 5 









       


PinManager Grid
イメージ 4
ここでの設定は、EUSARTのTXとRXのキーを選択しグリーンにロックします。
また、使用するポート(C、D)を選択します。CポートはLCD表示でoutputをチェックします。Custom nameをLCD_RD0にしました。シリアルの通信でのTXだけなので、特に設定がなくてもいいのですが、繋いであるので、設定した次第です。シリアル通信では、TXが25ピンとRXが26ピンのみでもOKだと思います。
イメージ 6








Dポートは現在LEDが繋いであるので、outputにチェックします。ほかEUSART TXは outputにチェックです。また、RC7はスタート時Highにチェックです。

以上の設定を選択または、チェックし終えたら、Project ResourcesのGenerateタブをチェックします。Output窓に下記のメッセージが出て完了です。
Saving MCC Configuration file: 
  MyConfig.mc3 save completed 
Loading MCC Configuration file 
  MyConfig.mc3 load completed 
あとは、現在のPICの選択で作成されていたテンプレートとMCCで自動作成されたコードが該当場所と連結的に並べられて、置き換えるか、挿入するかの選択をします。特にコメント等は必要ないので、本当の必要なコードの部分のみmain.cに挿入または、入れ替え処理することになります。Replaceはコメントの部分でも全部MCCのコードに置き換えられるので、注意したほうがいいかもしれません。
あと、最初からコメントアウトされている機能がEUSARTではありますので、使うときにコメントを外して使用することになります。
自動では#include の部分が1か所だけ挿入されていますが、ほかの部分も同じように手動で書き込む必要があります。以下
自動挿入は
#include "mcc_generated_files/mcc.h"

以下は手動で同じように書き込みます。
#include "mcc_generated_files/eusart.h"
#include "mcc_generated_files/pin_manager.h"
これは、mccフォルダ内にあるので直接記載しますが、コンパイラーの設定で、パスを指定する場合は、記載は簡単に
#include "mcc.h"
#include "eusart.h"
#include "pin_manager.h"
とシンプルな記載にすることが出来ます。
Customizeから該当するPICのXC8 compilerのinclude directoriesで設定です。
イメージ 7










いづれでもコンパイル時にインクルードファイルがパス設定されていればいいということです。

それ以外、Delay関係を使う場合、LCDを使う場合等、必要に応じて追加記載します。私の場合は、以下LCD表示をつかいましたので、下記2つを追加してます。
#include <delays.h>
#include "L_LCD.h"

あとは、実際のEUSARTのTXのコードですが、実際はプログラムで液晶に表示する調整を組みましたので、長くなりましたが、基本の送出は以下の数行のコードをmain.に記載するだけでした。

1文字の’A'を送る場合 

uint8_t code = 'A';
EUSART_Write(code);

以下はサンプルのコードを私なりにモデファイしました。(アルファベットのAからZの大文字のみPCにシリアル送信し、送出のアルファベットデータをLCDにモニター表示するプログラム)長いコードは,送出データをLCDへ表示する場合の1行から2行目への行替えルーチンを追加した為です。PICの#pragmaでのConfigの長々設定は mcc.cにあります。見かけ上のmain.cは、本当にシンプルになります。Hi!
EUSART_Write()もeusart.c上に記載されています。

// main.c
#include "system.h"     /* System funct/params, like osc/peripheral config */
#include "user.h"         /* User funct/params, such as InitApp */
#include "mcc_generated_files/mcc.h" 
#include "mcc_generated_files/eusart.h"
#include "mcc_generated_files/pin_manager.h"
#include <delays.h>
#include "L_LCD.h"

void main(void)
{
    // Initialize the device
    SYSTEM_Initialize();
  LCD_init();
    LCD_clr();
       
    PORTDbits.RD0 = 1;
    uint8_t code = 'A';
    int i;
    while (1)
    {
        // Add your application code
        for( i = 0; i<= 27 ;i++)
        {
            PORTDbits.RD0 = 1;
            EUSART_Write(code);
            LCD_posyx(0,i-1);
            LCD_dat(code);
            if(i > 16){
                LCD_posyx(1,i-17);
                LCD_dat(code);
            }
            code++;
            Delay1KTCYx(1000);
            PORTDbits.RD0 ^= 1;
            if(code > 'Z') 
            {
               code = 'A'; 
               LCD_clr();
               i = 0;
            }       
        }                
    }
}

上記でアルファベットのモニター表示

パソコンアプリ TeraTerm でのシリアルデータ受信

今回のメインは、周辺機器コード設定支援的なMCCでとても便利だが、その前の準備段階である新規のプロジェクト作成の方が結構手間がかかるのが実状で、どちらかというとテンプレートを対象のPICに設定しコンパイル可能状態にしておく開発ツール設定などがとても重要だと思います。とにかく、Visual c++ の言語と同じく、コードの自動生成がPICでもできるということで、しかもグラフィカルな設定が、今時でとてもGood でした。別件ですが、久々のyoutube の動画投稿で、投稿時点で本名表示だったりとアカウントをニックネームに変えるのに大変手間かかりました。(Google+のアカウント変更で対応出来ました。)
つづく