jl7gmnのblog

yahooブログから移行してきました。アマチュア無線を中心としたブログです。

PIC

MPLAB MCC PIC18F45K20 EUSART確認その1

とにかくシリアル通信の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+のアカウント変更で対応出来ました。)
つづく


PIC18F14K50-EEPROM

PIC18F14K50を使ったDDS-VFOの心臓部であるAD9834小型DDSモジュールが届きました。早速使用開始のための半田付け工作開始です。久々のハードですが、ユニットで信号線類と電源、アナログ、デジタルグランドの配線だけで済みました。超簡単!でしたHi!
イメージ 1
イメージ 2
イメージ 3
イメージ 4





イメージ 5






DDS-VFOのプログラムは、先の参考ブログのCコードを丸ごと打ち込みしました。久々のコードタイピングで、肩が凝りましたが、何とかコンパイルできるまでにはなっています。コンパイラーはXC8ですので、C18コンパイラーとは以下、若干のコードの変更が必要でした。

long eeprom_read_long(unsigned int adr) 中の以下のEEPROMへの読み込みコマンドと書き込みコマンドです。1行だけサンプル記します。
C18コンパイラーの場合
d= (unsigned long)Read_b_eep(EEPROM +adr*4);

XC8コンパイラーの場合
d= (unsigned long)eeprom_read(EEPROM +adr*4);

単純にコマンドがRead_b_eep を eeprom_read に変えるだけでOKでした。
同様にEEPROMの書き込みコマンドも
単純にコマンドがWrite_b_eep を eeprom_writeに変えるだけでOKです。
もう一つ、Busy_eep();はコマンド書き換え時に削除します。
void eeprom_write_long(unsigned int adr ,long data)
{
      unsigned char i; 
  for( i=0 ; i <4 ; i++){
           eeprom_write(EEPROM + adrs*4 + i ,(unsigned char((data >>(i*8)) & 0x000000ff);
    //Busy_eep();     ←はコメントアウト化か削除します
}

もう一つは、割り込み処理です。これはC18コンパイラーより大夫簡単になります。
C18コンパイラーの場合
---------------------------------------------
#pragma interrupt isr
#pragma code isrcode = 0x8
void isr_direct(void)
{
   _asm
   goto isr
   _endasm
}
#pragma code
void isr(void)
{
...
}
---------------------------------------------
XC8コンパイラーの場合 
上記のコードのvoid isr(void)の前の黄色コードを全部削除し 赤のvoid isr(void)を次の白のコードに書き換えるだけでOKとなります。
---------------------------------------------
void interrupt isr(void)
{
...
}
---------------------------------------------
後はLCDライブラリ(lcd.c,lcd.h)のコマンドが異なるため、自分で用意したライブラリのコマンドに合わせて書き換えることが必要になります。
注意したいのは、プログラム上でも lcd_write() というファンクションを使っているため、LCDのライブラリとコマンドがダブル場合があり得ます。この場合は、下記のvoid lcd_write() を書き換えたほうが紛らわしくなくなると思います。
例えば void disp_write() などとすればLCDのライブラリとは全く異なるようになりますので、完全にダブル事はなくなります。Hi!

void lcd_write(){
    INTCONbits.GIE = 0;
    //lcd_gotopos(0,0); ←ここはオリジナルのLCDコマンド
    LCD_posyx(0,0);  ←ここが書き換えた私の用意したライブラリのコマンド
    if(mode){     
        sprintf(tmp,"IF ");
        //lcd_putstr(tmp); ←ここはオリジナルのLCDコマンド
        LCD_str(tmp);  ←ここが書き換えた私の用意したライブラリのコマンド
        long2comma(offset);       
    }else{
        sprintf(tmp,"VFO");
        //cd_putstr(tmp); ←ここはオリジナルのLCDコマンド
        LCD_str(tmp);  ←ここが書き換えた私の用意したライブラリのコマンド
        long2comma(freq);
    }
    sprintf(tmp,"Hz");
    //lcd_putstr(tmp); ←ここはオリジナルのLCDコマンド
    LCD_str(tmp);   ←ここが書き換えた私の用意したライブラリのコマンド
    if(!mode){
        //lcd_gotopos(0,1); ←ここはオリジナルのLCDコマンド
        LCD_posyx(1,0);  ←ここが書き換えた私の用意したライブラリのコマンド
        if(((freq + offset)> 0) && ((freq + offset)< MAX_FREQ))
            sprintf(tmp,"DDS");
        else
            sprintf(tmp,"ERR");
        //lcd_putstr(tmp); ←ここはオリジナルのLCDコマンド
        LCD_str(tmp);  ←ここが書き換えた私の用意したライブラリのコマンド
        long2comma(freq + offset);
        sprintf(tmp,"Hz");
        //lcd_putstr(tmp); ←ここはオリジナルのLCDコマンド
        LCD_str(tmp);  ←ここが書き換えた私の用意したライブラリのコマンド
    }
    INTCONbits.GIE = 1;
}
もう一つ、LCDのライブラリコマンドのxy座標表示が逆です。私のライブラリは(y,x)の座標指定になります。
自分の使うLCDライブラリで確認する必要があります。
実際の書き換え例)
lcd_gotopos(1,0); ←オリジナルは lcd_gotopos(x座標,y座標)
LCD_posyx(0,1);  ←用意したライブラリ LCD_posyx(y座標,x座標)
以上が主な書き換え部分でした。それから、勿論オリジナルのインクルードするLCDライブラリを私の用意したライブラリに書き換えも必要です。Hi!
#include "lcd.h"  →   #include "L_LCD.h"

以上で、コンパイルは問題なく通ります。しかし、コンパイルが通らないエラーが続出することがありました。これでだいぶ私も時間を取られてしまいました。特にインストールしたMPLAB X IDE v3.30の状態でのコンパイルは注意が必要です。コードが問題なくても、必ずエラーが出ます。何かといいますと、XC8のコンパイラの設定が初期状態では、エラーが出るレベルになっていたということです。気づかなければいやになってPICのプログラムはうまく動かないと思い込んでしまう可能性もあり得ます。
かというと、customize でのXC8のコンパイラーOption categoriesの Preprocessing and message のWarning level 初期値では-3 となっているのです。
これを Warning level 0 にする必要があります。
イメージ 7
前置きがながくなってしまいましたが、本題のEEPROMの書き込みです。読み込み書き込みもコードを書き換えてコンパイルもうまく通り実際の動作をEE Data Memoryで確認してみましたが、EEPROM自体への読み書きができてませんでした。ネットで確認しても、EEPROMの書き込みコマンドも問題ないし、XC8のコンパイラーのユーザーズガイドでも特に問題はありません。何で、うまく動作しないのだろうと思っていました。これも、ネットで調べると、同様な例があり、Macでの対応でしたが、方法としてP18系マイコン用のペリフェラルライブラリをインストールするという解決法でした。やってみましたが、XC8がないだの、インストールができない等と、もうお手上げ状態でした。


がそのあとの文面を読み進んでみて、ペリフェラライブラリを使用する設定があるというので一応見てみました。(結果、ライブラリはインストールされていたため、新たにはインストールしなくても良かったようです。)今度はXC8のLinker の設定項目中のPeripheral Library の項目にチェックを入れるということでした。
イメージ 8

結果これだけで、EEPROMの読み書きができるようになりました。本当に全機能が使えるように最初からは、なっていないということです。使いたいものがあれば、その時に設定で使用できるようにするということになります。以上が本当に時間のかかってしまったEEPROM 奮闘記になります。
他、面白いことにライブラリにチェックがなくても、EEPROMへの初期値の設定だけは(下記)プログラム上で、問題なくできるということがありました。
__EEPROM_DATA (0xC0,0xCF,0x6A,0x00,0x20,0xA1,0x07,0x00);
イメージ 6





DDSのプログラム上では、EEPROMからデータを読み込みその周波数とオフセット周波数をAD9834に送るルーチンで出来ているため、書き込みしておいたデータ周波数を読み込む部分で、デバッグをしていました。ペリフェラルライブラリの使用設定がされてない中では、eeprom_readも堂々巡りだったわけです。
あとプログラム上での、周波数の設定カーソルのルーチンなどうまくない感じなので
時間があれば、少し見てみようと思います。
とにかく動くようになるとPICはとても面白いマイコンでもっと何かやりたいと欲が出てくる楽しい趣味だとつくづく思います。貴重な情報を公開してくださっている先人の方々の苦労には感謝する次第です。Hi!
つづく

PIC18F14K50とLCD(SC1602BBWB-XA-LB-G)

ANALOG DEVICES Co.のAD9834のDDS用ICをつかったVFOを作りたくなりました。突然といっても、Windows10でMPLAB X IDEをインストールしたため、何か一つプログラムを組んでつくってみようと思ったのが事のきっかけです。参考となったホームページは、下記になります。

[AD9834を使った実験用DDS-VFOの制作]
このホームページでは、MPLAB Version8.90にCコンパイラはフリーのC18でのサンプルコードでした。いろいろなデバイスで対応できる方なので、無線をやっているものとしては、とても参考になります。特にメインのコードを全部載せてくれているのがありがたいです。(LCDドライバ(lcd.c ,lcd.h )は残念ながら載せていません。)

私のインストールした MPLAB X IDEは、バージョンが最新のv3.30でCコンパイラーはXC8になります。コードの若干の手直しが必要ですが、ほぼ特別なファンクション(EEPROMコード)とLCDのライブラリでのファンクション名が異なるのを除いては、ほぼまるまるコードは使えそうです。??

まずは、最初にPIC18F14K50にLCD(SC1602BBWB-XA-LG-G)を繋ぐことから始めました。久々なので、前のLCD動作したサンプルコードを思い出し参考にしてみました。今回のVFOの参考としたホームページの回路図での配線をそのままPIC18F14K50とLCDに行います。このことが、LCD表示のドライバのプログラムを手直しすることになってしまいました。こだわりではないですが、汎用のLCDドライバでは、動作しなかったためです。前もブログに載せて対応できたドライバも使えません。
ことは、「連続でのポート以外は使えないLCDドライバがほとんど」ということです。私の今回参考とした回路図では、たまたま、不連続なポートでの動作サンプルだったのです。
通常はLCD側のポートD4,D5,D6,D7に対してPIC側も連続のポートRC4,RC5,RC6,RC7などとして使うので、WEBで出回っている一般のLCDドライバは動作します。
PIC側のポートが今回は、RC7,RC6,RC3,RC4の不連続なしかもバラバラな接続ではまったく動作しません。動作しない問題となるLCDドライバでのメイン下記のコード部分です。他は問題ありません。

void LCD_out(char c){
    LCD_DB = (c>>4) | (LCD_DB & 0xF0);
    LCD_EN = 1;   // Enable Hi
    NOP();        // NOP
    LCD_EN = 0;       // Enable Low
}
以前はこの部分を下記のように書き換えて任意のポートで問題ありませんでした。
void LCD_out(char c){
    LCD_DB4 = ((c) & 0x01);
    LCD_DB5 = ((c >> 1 ) & 0x01);
    LCD_DB6 = ((c >> 2 ) & 0x01);
    LCD_DB7 = ((c >> 3 ) & 0x01);
    LCD_STROBE;
}

PIC18F14K50での連続ポート使用の際は下記で動作します。
void LCD_out(char c){
    LCD_DB = (c & 0xF0) | (LCD_DB & 0x0F);
  LCD_EN = 1;   // Enable Hi
    //Delay1TCY();    // NOP
    NOP();                // NOP
    LCD_EN = 0;       // Enable Low
}

任意ポート対応にするには、下記の LCD_DB = (c & 0xF0) | (LCD_DB & 0x0F);を下記のように書き換える必要があります。

void LCD_out(char c){
    //LCD_DB = (c & 0xF0) | (LCD_DB & 0x0F);
    if((c & 0x80) != 0){
        LCD_DB7 = 1 ;
    }else{
        LCD_DB7 = 0 ;
    }
    if((c & 0x40) != 0){
        LCD_DB6 = 1 ;
    }else{
        LCD_DB6 = 0 ;
    }
    if((c & 0x20) != 0){
        LCD_DB5 = 1;
    }else{
        LCD_DB5 =0;
    }
    if((c & 0x10) != 0){
        LCD_DB4 = 1;
    }else{
        LCD_DB4 = 0;
    } 
    LCD_EN = 1;    // Enable Hi
    //Delay1TCY();       // NOP
    NOP();               // NOP
    LCD_EN = 0;    // Enable Low
}
上記にlcd.cを書き換えて、同郡内のどんな接続順番でもLCDが表示可能になりました。案外とこれが便利で使い道(パターン作成都合とか、あまりポート使用とか)があると思います。

※参考書籍
電子工作のためのPIC16F1ファミリ活用ガイドブック
後閑哲也著;技術評論社

つづく

Windows10でPICkit3を使う方法まとめ

久々のPIC関連の記事になります。Windows10で以前購入したPICkit3とサンプル基板を使おうと思い、最新のMPLAB X IDE v3.30とMPLAB IPE v3.30とMPLAB driver switchar および、PICkit3 v3.10を一通りダウンロードした。難なくPICkit3もサンプル基板も以前のプログラムを読み込むだけで動くものだと思っていましたが、あにはからんや、はしるどころかデバイスとしてもPICkit3は認識はするものの通信ができない状態でした。インターネット情報では、Windows10ではMPLAB X IDE v3.30は書き込みができないの情報の多いこと多いこと、その中でもこれぞと思えるやり方を説明してあるものがありましたので、実際にやってみたところ、うまく動くようになりました。その記録を防備録として残すものです。私のWindows10がインストールしてあるPCは以下の通りです。
イメージ 1
参考にしたURLです。
特に情報として、異なっていたことは、PICkit3のボタンを押しながらUSBを繋ぐ等は必要ありませんでした。
以下Windows10でMPLAB X IDE v3.30でPICkit3を使えるようになった手順のまとめです。
[1]インストールしておいた中のPICkit3v3.10のProgrammerを起動します。
これは、なぜだかうまく動作(通信)します。MPLAB X IDE v3.30も動けばいいのにと思ってしまいます。
イメージ 2
起動画面
イメージ 3
[2]PCのUSB(2.0)ポートにPICkit3を繋いでおきます。
Tool->Download Pickit Operating Systemを選択実行します。
イメージ 9
[3]OS読み込み設定(すでにダウンロードされているOSのhexファイルを設定)
イメージ 4
[4]PICkit3のOS読み込み中
イメージ 10
[5]OSインストール後
イメージ 11
[6]ReadでLesson基板のデータを読み込みできるかチェックしました。
イメージ 12
[7]Verifyしてみました。動作は問題ありません。
イメージ 13
[8]MPLABモードにします。
イメージ 14
[9]メッセージがでます。      
 イメージ 5
 イメージ 6
[10]閉じるときには、エラーメッセージがPICkit2の表示ででます?
 イメージ 7
[11]次にMPLAB IPE v3.30を起動して、Connectボタンを押します。
イメージ 15
[12]firmware等が読み込まれます。  
イメージ 16
[13]完了後にPICkit3のデータの通信確認でRead とVerifyをしてみました。
イメージ 17
[14]動作問題ないようなので、プログラムを閉じて、MPLAB X IDE v3.30を起動します。すでにLesson1のLED点滅プログラム(オリジナルは1個点灯から一部ブリンクに改良しました。)が読み込まれています。
イメージ 18
[15]PICkit3の電源を設定します。(必須)
イメージ 8
[16]後はプログラムをコンパイルです。(インクルードファイル等はあらかじめパスを設定しておきます。

以上でWindows10上でMPLAB IDE v3.30がPICkit3でうまくプログラムをコンパイルでき、書き込みも問題なく動作しました。途中の画像が繰り返して実行したりしていますので、必ずしも同じ画像とは限りませんので、見た人が実際に行って、ハードを壊すトラブルを起こしても責任は負いません。問題ない内容ですが、一応断っておきます。
なお、Windows Vistaでは、うまくいきませんでした。

LinuxでPICその1

やはり、PCのOSをLinuxにしたので、Windowsで使用していたPICプログラム環境を移すことにしました。

最初は各アプリと各コンパイラのインストールを行います。
ダウンロード先は下記から行います。

http://www.microchip.com/pagehandler/en-us/family/mplabx/home.html

アプリケーション:MPLABX(v2.05)
MPLABXの最新はv2.25ですが、あえて安定と思われる2.05をインストールしました。(いつでもアンインストールして最新にできます)
コンパイラ:XC8,XC16,XC32

ダウンロード完了しました。Linux上のダウンロードフォルダに保存されていますので、コマンドプロンプトよりインストールをしてゆきます。私の場合は、すでにインストールしてあるアプリのターミナルのByobu Terminalを使いコマンド入力しました。

MPLABXのインストール開始です。
~$ chmod u+x MPLABX-v2.05-linux-installer.run
~$ sudo ./MPLABX-v2.05-linux-installer.run

XC8,XC16,XC32コンパイラーのインストール開始です。
ダウンロードしたバージョンの番号でインストールです。
【XC8コンパイラv1.33】----------------------------------------------------------
~$ chmod +x xc8-v1.33-full-install-linux-installer.run
~$ sudo ./xc8-v1.33-full-install-linux-installer.run
【XC16コンパイラv1.23】---------------------------------------------------------
~$ chmod +x xc16-v1.23-full-install-linux-installer.run
~$ sudo ./xc16-v1.33-full-install-linux-installer.run
【XC32コンパイラv1.33】--------------------------------------------------------
~$ chmod +x xc32-v1.33-full-install-linux-installer.run
~$ sudo ./xc32-v1.33-full-install-linux-installer.run
----------------------------------------------------------------------------------------
各コンパイラのインストールメッセージをみてインストール設定して完了です。
(私の場合は、ネットワークでの設定は使いませんので、そのまま次へで進めています。)

すべてのインストールが完了しましたので、Dashホームからアプリケーションの検索をクリックします。インストール済みのなかのプログラムをみるため さらに***個の結果を見ますをクリックして、目的のMPLABXを起動します。
イメージ 1
メニューに上記のアイコンができます。クリックして起動します。私はPICkit 3を使用しますので、USB端子に差し込みます。必ず起動後に以下のPICkit3をつなぎ認識させます。
(注意ですが、USBタイプのRS-232C等、USB他のケーブルは全部外しておきます。私の場合はRS-232C-USBケーブルが付いているとPICkit3を認識しませんでしたので!)

あとは、MPLABXの設定です。以下の設定でコンパイラがMPLABX上で動くようになります。
1.TOOL->OPTIONでEmbeddedをクリックし各コンパイラ(XC8,XC16,XC32)をADD(追加)します。使うコンパイラだけでもOKです。

イメージ 2

2.Project Propertiesを設定します。
カテゴリにはXC8のコンパイラがあるようにします。
FamillyはAll Famillies、Deviceは自分の使うPICの型式を、Hardware Toolは私の場合はPICkit3なので、PICkit3に設定します。イメージ 3

Categories:中の XC8のある方のconf:でPICkit3をクリックし Option categoriesはPowerを選びます。これで電圧がPICkit3に供給されるようになります。

イメージ 4
上記設定で下記のWindowsXpで作成していたPICkit 3 PIC18F45K20 Lesson 1 - Hello_LEDプロジェクトがLinux上でコンパイル、実行可能となりました。

//******************************************************************************
//Software License Agreement                                        
//                                                                   
//The software supplied herewith by Microchip Technology            
//Incorporated (the "Company") is intended and supplied to you, the 
//Company? customer, for use solely and exclusively on Microchip   
//products. The software is owned by the Company and/or its supplier,
//and is protected under applicable copyright laws. All rights are  
//reserved. Any use in violation of the foregoing restrictions may  
//subject the user to criminal sanctions under applicable laws, as  
//well as to civil liability for the breach of the terms and        
//conditions of this license.                                       
//                                                                   
//THIS SOFTWARE IS PROVIDED IN AN "AS IS" CONDITION. NO WARRANTIES, 
//WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED 
//TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A      
//PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. THE COMPANY SHALL NOT, 
//IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL OR        
//CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.      
// *******************************************************************
// PICkit 3 PIC18F45K20 Lesson 1 - Hello_LED
//
// This lesson lights LEDs 0-7 in sequence, one at a time.
//
// *******************************************************************
// *    See included documentation for Lesson instructions           *
// *******************************************************************

/** C O N F I G U R A T I O N   B I T S ******************************/
#pragma config FOSC = INTIO67, FCMEN = OFF, IESO = OFF      // CONFIG1H
#pragma config PWRT = OFF, BOREN = SBORDIS, BORV = 30     // CONFIG2L
#pragma config WDTEN = OFF, WDTPS = 32768                            // CONFIG2H
#pragma config MCLRE = OFF, LPT1OSC = OFF, PBADEN = ON, CCP2MX = PORTC//CONFIG3H
#pragma config STVREN = ON, LVP = OFF, XINST = OFF                // CONFIG4L
#pragma config CP0 = OFF, CP1 = OFF, CP2 = OFF, CP3 = OFF    // CONFIG5L
#pragma config CPB = OFF, CPD = OFF                                  // CONFIG5H
#pragma config WRT0 = OFF, WRT1 = OFF, WRT2 = OFF, WRT3 = OFF        // CONFIG6L
#pragma config WRTB = OFF, WRTC = OFF, WRTD = OFF               // CONFIG6H
#pragma config EBTR0 = OFF, EBTR1 = OFF, EBTR2 = OFF, EBTR3 = OFF    // CONFIG7L
#pragma config EBTRB = OFF                                           // CONFIG7H

/** I N C L U D E S **************************************************/
#include "p18f45k20.h"
#include "plib/delays.h"
/** V A R I A B L E S *************************************************/
/** D E C L A R A T I O N S *******************************************/
void Delay1KTCYx(unsigned char);

void main (void)
{
   // LED_Number = 0;            // initialize
    TRISD = 0b00000000;         // PORTD bits 7:0 are all outputs (0)
    while (1)
    {
        LATD = 0b01010101;
        Delay1KTCYx(250);
        LATD = 0b10101010;
        Delay1KTCYx(250);
      }
}
--------------------------------------------------------------------------------------------------------
このプログラムは偶数と奇数番目のLEDが交互に点灯、点滅します。
また、インクルードファイルのdelays.hは通常のインクルードファイル上にはありませんので、インクルードファイルのあるplibフォルダ階層のplib/をつけて、 #include "plib/delays.h" とすることでエラーが消えてエラーなしのコンパイルが可能となります。

以上でPICを開発する環境が出来上がりました。実はやりたいことがあるので、今回のLinux上でのPIC開発環境を構築しました。何かは、秘密です。大したことじゃありません。それよりも、随分PICのプログラミングをしていなかったので、操作感覚がまだ戻っていません。まずは、Lessonのプログラムを思い出しながら動かしてハードウェアとソフトウェアに慣れなければという感じです。つづく

アクセスカウンター
  • 今日:
  • 昨日:
  • 累計:

QRコード
QRコード
  • ライブドアブログ