« 8ピンPIC 12F675でLチカできたので、備忘のため手順をメモします | メイン | AruduinoのサンプルスケッチをLCD1602(5V用)に表示 »

2020年3月20日 (金)

PIC 16F88によるLED点滅を備忘のため記録します

(注意)PCを入れ替えによりMPLABを最新版(V5.45)XC8(V2.31)で再セットアップしたところ、下記説明のプログラムでコンパイルエラーを起こすようになりました。(2021年01月22日)

PCを入れ替え新たにセットアップしたXC8(V2.31)をアンインストールのうえ、Microchip社のアーカイブのダウンロードサイト(検索サイトで "XC8 Ver1 archive"で検索し「MPLAB Ecosystem Downloads Archive Microchip Technology」を探す)からXC8(V1.45)をダウンロードし、セットアップするとコンパイルでエラーがなくなりました。(この対策方法は、ネット検索で見つけました。)(2021年01月23日)

MPLAB(V5.45)付属のIPEでは、PICへの書き込みが出来ませんでしたので、アンインストールのうえ、MPLAB X (V5.15)にしました。(2021年01月25日現在)

■ 2020年03月20日 作成

 2020年03月22日 修正

 2020年03月25日 修正#pragma config MCLRE = ON → OFFへの変更)

 2020年06月23日 画像の追加

   2021年01月21日 1.新規プロジェクト作成の誤字訂正(12F675→16F88)

          MPLAB IDEv5.45の場合を追加

   2021年01月25日 IDE / MPLAB訂正 コンパイラバージョン追記 MPLAB IDEv5.45の場合削除

   2021年05月22日 MPLABXIPEの「Adbanced Mode→Password」の修正とボルトに関する補記の追加

 2024年02月22日 ■手順 3.configの設定 誤記(Windows → Window)訂正

■参考にされる場合は、自己責任でお願いします。

■作成時の環境

 OS / Windows10

 IDE / MPLAB X V5.15

 コンパイラ / XC-8 v1.45

 PICkit 3

 

■準備品

 ブレッドボード

 LED

 抵抗 330Ω(前後)

■手順

 1.新規プロジェクト作成

  IMPLABXIDEを起動 メニュー File → NewProject  Next 

  Device  PIC 16F88を選択 → Next → PICkit3 →Next → ●xc8(v・・)[・・・] → Next → 

  ProjectName[例:16F88_led] → Finish

  これで16F885_ledという新規プロジェクトが出来ます。

 2.新規プロジェクトにプログラムを記述する場所を作成します。

  ・メニュー Windows → Projects → Projects[タブ] → 16F88_led「+」 クリック → Source Files上で右クリック → New→ C SorceFliles  → File Name [newfiles]  → Finish

 3.configの設定

  下記の部分を張り付ける。

  ・メニュー Window → Terget Memory Views → Configration Bits → 

   設定画面(何もせず) → 「Generate Source Code to Output」ボタンをクリック

       すると設定が自動作成されるので内容(見えていない上の部分を含むすべて)をコピー

       しプログラムの設定エリア張り付ける。

   当該ウィンドウ右上角のアイコンをクリックして閉じる。

         但し、このままではLED点滅が不安定となるので#pragma config MCLRE = ON 

   を OFFに変更すること。 

 4.クロックの設定

  クロックを以下のとおり記述

  #define _XTAL_FREQ 4000000 //delay関数を使う為の設定 クロックは4MHz

   5.動作のプログラム

void main(void){
OSCCON = 0x70;  //0x70の指定で  delay_ms(1000);のとき1秒待機
PORTA = 0x00;   // PORTAを初期化
PORTB = 0x00;   // PORTBを初期化
TRISA = 0x00;   // PORTAの出力設定
TRISB = 0x00;   // PORTBの出力設定  
while(1) {       // 無限ループ
RA0 = 1;
__delay_ms(1000);  // 1秒の待ち時間 
RA0 = 0;
__delay_ms(1000);  // 1秒の待ち時間
   }
   return ;
}

////////////////////////////////////////////////////////////

全体のプログラムは以下のとおり

////////////////////////////////////////////////////////////////

 
 
// PIC16F88 Configuration Bit Settings
// 'C' source line config statements
#include <xc.h>
// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.
// CONFIG1
#pragma config FOSC = EXTRCCLK  // Oscillator Selection bits (EXTRC oscillator; CLKO function on RA6/OSC2/CLKO)
#pragma config WDTE = ON        // Watchdog Timer Enable bit (WDT enabled)
#pragma config PWRTE = OFF      // Power-up Timer Enable bit (PWRT disabled)
#pragma config MCLRE = OFF  //ON→OFF 20200325 不安定のため変更    // RA5/MCLR/VPP Pin Function Select bit (RA5/MCLR/VPP pin function is MCLR)
#pragma config BOREN = ON       // Brown-out Reset Enable bit (BOR enabled)
#pragma config LVP = ON         // Low-Voltage Programming Enable bit (RB3/PGM pin has PGM function, Low-Voltage Programming enabled)
#pragma config CPD = OFF        // Data EE Memory Code Protection bit (Code protection off)
#pragma config WRT = OFF        // Flash Program Memory Write Enable bits (Write protection off)
#pragma config CCPMX = RB0      // CCP1 Pin Selection bit (CCP1 function on RB0)
#pragma config CP = OFF         // Flash Program Memory Code Protection bit (Code protection off)
// CONFIG2
#pragma config FCMEN = ON       // Fail-Safe Clock Monitor Enable bit (Fail-Safe Clock Monitor enabled)
#pragma config IESO = ON        // Internal External Switchover bit (Internal External Switchover mode enabled)
//ここまでWindows→PIC Memory views→configlation Bitsで出力した内容の貼り付け分2020.3.20
#define _XTAL_FREQ 4000000 //delay関数を使う為の設定 クロックは4MHz
void main(void){
OSCCON = 0x70;     // 0x70を指定するとDelay_ms(1000);で1秒待機
PORTA = 0x00;   // PORTAを初期化
PORTB = 0x00;   // PORTBを初期化
TRISA = 0x00;   // PORTAの出力設定
TRISB = 0x00;   // PORTBの出力設定 
//TRISB = 0xFF;   // PORTBの入力設定
while(1) {       // 無限ループ
RA0 = 1;
__delay_ms(1000);  // 1秒の待ち時間 
RA0 = 0;
__delay_ms(1000);  // 1秒の待ち時間
   }
   return ;
}
 

////////////////////////////////////////////////////

   この内容で、コンパイルすると、

   C:\Users\コンピュータ名\MPLABXProjects\16F88_led.X\dist\default\production

   にHEXファイルが出来上がります。

  6.PICkit3へのセット

   PICkit3に16F88をセットします。

   (18ピン用のセッティングが出来ていること)

  7.MPLABXIPEによるプログラムの書き込み

        MPLABXIPEを起動する。

   Device → PIC16F88 → Apply → Tool → 接続されたPICkit3が表示されている → メニュ-→Settings →Adbanced Mode→ Password("microchip"画面下にも記載済) → Logon → 左側ウインドウのPower → Power Target circuit Tool の左側□にチェックする → 左側ウインドウのOperate  → sourceのBrowseでHexファイルを選択 → Programをクリック → ok

        これでPICに書き込まれるはずです。

なお、使用マシン環境の為か、"volts"に関するエラーメッセージが出ますので、IPEの左側ウインドウの Power → VDD: のボルト表示を5から4.8に変更すると書き込みすることが出来ましたので、このことも補記します。

  8.配線

   16F88のピン配置

    右側真ん中のVDDピンはプラス(4~5V)

    左側真ん中のVSSピンはGNDへ

    右上から二番目のピンに抵抗を介してLEDの長いほうの線のプラスを接続し、

    短いほうの線のマイナス側をGNDに接続します。  

  9.画像を添付

    

Dsc_1202

                                     以上

コメント

失礼致しました。Amazonで日本のラズベリーパイを販売している林遠です。
ブログを拝見しました。弊社のラズベリーパイレビューブログ記事を書きしてくれませんか。
こちらは無料でサンプルを提供します。
連絡メールはjp02@vertue.cnです。
御返事お待ちしております。どうぞよろしくお願いします。

林遠 様

ゆきゆき電子工作ブログ管理者です。
ご連絡ありがとうございます。
さて、ご依頼の記事の件につきまして、大変申しわけございませんが多忙につきお応えすることはできません。
ご了承のほどお願いいたします。

コメントを投稿