PIC手習い



の〜んびり〜
手軽にマイコンを使用する手段として「PIC(ピック)マイコン」は、価格も\100-前後からあり、比較的入手し易い部品の為、広く用いられております。
ところが、初めてマイコンを扱う人にとっては
「何から始めれば良いの?」との話をよく聞くことがありますので、以下簡単に説明致します。
PICの原理や応用に関しては、いろいろなホームページで詳細に記載されておりますので、それらを参照願います。
私はPIC使いの達人ではありませんので、導入部だけを説明した「PIC手習い」と致しました。


先ずは−−−−−コストをかけずに簡単に始める為に!



PICとは?
ワンチップ・マイクロコンピューターの1種で、Microchip(マイクロチップ)社と云うアメリカのメーカー製です。小型の8ピンタイプの物から多ピンの物まで各種のシリーズがあり、「ADコンバータ」「コンパレータ」「I2C」「USART」や「DSP」など各種の機能を持ったICが揃っております。
PICに関しては、いろいろなホームページでも説明されておりますので、詳細に関してはそれらを参照下さい。Microchip社のホームページはこちらです。
http://microchip.com


準備する物
☆パソコン
Windows XP,Windows Vista及びWindows7などのWindows系で動作しているものであればなんでもOKです。但し、PICライターの仕様に合せて「RS232シリアルポート」や「USBポート」が必要です。
☆開発用ソフト
MPLAB IDEというMicrochip社が無料で提供している総合開発環境ソフトがあります。ホームページからダウンロードできます。
☆PICライター
PICにプログラムを書き込む為の道具です。Microchip社や秋月電子通商などから各種販売されております。また自作の記事もいくつか紹介されております。当然ながら、パソコンとPICライターを接続するデータケーブルが必要です。詳細はこれらライターの仕様書を参照下さい。
簡単なものであれば、\3,000〜\7,000程度で購入できます。
☆データシート
PIC ICのデータシートが、Microchip社のホームページからダウンロードできます。但し、殆んどが英文資料ですが、一部「PIC16F8x」及び「PIC16F87x」は、日本語のデータ資料が用意されておりますので、いずれかも併せてダウンロードしておく方が分かり易いです。
PIC ICによって、少しずつ仕様が違うので、必ず使用予定ICのデータシートを準備してください。
☆PIC IC
「習うより慣れろ」で、PIC IC(通常はデバイスと云いますので以降はデバイスと記載します))を取りあえず1ケ用意下さい。本ホームページでは
「PIC12F675」を例に致しました。このデバイスは8ピンながら「10ビットADコンバーター」「コンパレーター」「EEPROM」等を有した優れもので、プログラムROMはフラッシュですから、10万回までプログラム書換可能です。


それでは−−−−−手始めに「スイッチを押すとLEDが点灯する」簡単な実験機を作成してみましょう。



MPLAB IDE

インストール
Microchip社のホームページ上では、現時点の最新バージョンが「v.8.56」となっておりました。先ず、ここからダウンロードします。
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en019469&redirects=mplab
このページ下方の「MPLAB IDE v.8.56 Full Release Zipped Installation」と記載された箇所をクリックすると「MPLAB_8.56zip」の圧縮ファイルがダウンロードできます。
ダウンロード後、解凍してできるファイルのうち「Install_MPLAB_8_56.exe」をクリックすると、インストールが始まるので、コメントに従ってインストールを続けて下さい。
初期設定では、
「C\Program Files\Microchip」フォルダーが作成され、デスクトップ上にも「MPLAB IDE v8.56」のアイコンができます。


初めての
MPLAB IDE

初めは「プロジェクト設定」を行ないます。MPLAB IDEのメニューから「Project → Wizard」で「サブウインドウ」が開きます。
以降は各ステップ順に操作を行ないます。
「Step One」ではPIC デバイス名をDevice欄に、これから使用する「PIC12F675」を選択表示します。
「Step Two」では使用言語を選択します。「Active Toolsuite」欄には「Microchip MPASM toolsuite」を選択表示します。(ここは初期値でこの様になっているはずです。)
「Step Three」では、適当なプロジェクト名をつけます。「TEST01」としますが、フォルダは「Cドライブ上」に設けてください。
「Step Four」では、既存のファイルを追加することができますが、今回は何もせずにそのまま「次へ」で「完了」して下さい。
「TEST01.mcw」「Output」と表示されたサブフォルダが表示されます。「TEST01.mcw」は6つのフォルダが含まれており、「Output」は空になっています。
MPLAB IDEのメニューから「File → New」で新しいサブウインドウ「Untitled」が開きます。ここに以下の「TEST01.ASM」をコピーして、貼り付けて下さい。
「File → Save as」「TEST01.ASM」とタイプして保存します。すると「Untitled → TEST01.ASM」と成ります。
「Project→Add Files to Project」とすると、この「TEST01.ASM」がプロジェクトに追加され、TEST01.mcwウインドウ内のSource Files内に表示されます。これでプログラム完了です。
マイコンに書き込むデータを作る為「Project → Build All」と操作すると、アセンブル完了です。この結果できあがる「TEST01.hex」をPICライターを使用してPICデバイスに書き込みます。これで、プログラム通りにPICマイコンが動作します。


テスト回路
●電源はDC5Vを使用します。(デバイスは、2.0V〜5.5Vの範囲で動作します)
●SW1はプッシュスイッチを使用します。
●LED1は適当な物を使用してください。またR1は電流制限抵抗ですから使用するLEDに合わせて適切な値で使用下さい。
  但し、PICの端子出力は最大25mAですから、絶対にこの値以上に電流を流さないで下さい。デバイスが破損します。
●C1は動作安定化の為のバイパスコンデンサです。無くても特に問題は生じませんが、使用する事を推奨致します。
●TP1は、CLKOUT確認用です。適当なテストピンをご使用下さい。


ソースファイル


(アッセンブラ用)
;以下プログラムに直接関係の無いコメントなどを記載する場合は、必ず最初にセミコロンをつけます。

;====================================================

; PIC12F675 テストプログラム TEST1.ASM
; Copylight 2009, NES Corp./S.Endo
; Target=PIC12F675, 内部Clock 4MHz(固定), Machine Cycle=1uS
;====================================================
; PIC12F675のピン配置情報(8Pin)
;*********************************************************
; Pin 1 Vdd(+ 電源)
;   2 GP5/T1CKI/OSC1/CLKIN
;   3 GP4/AN3/T1G/OSC2/CLKOUT
;   4 GP3/MCLR/Vpp
;   5 GP2/AN2/T0CKI/INT/COUT
;   6 GP1/AN1/CIN-/Vref/ICSPCLK
;   7 GP0/AN0/CIN+/ICSPDAT
;   8 Vss(- 電源)

;
*注意! 1つのピンが幾つかの機能を兼用している。従って何に使用するか指定が必要です。
;****************************************************************************************************
; 以下はお決まりの記述です。
; ラベル(以下の例ではINITやMAIN)は行頭から記述し、それ以外は必ずスペースまたはTABを入れて記述します。

 
LIST P=12F675     ; アッセンブル時にリストファイルを作ります
 
#INCLUDE <P12F675.INC> ; 12F675用定義ファイルを読み込みます
;
以下のCONFIGで動作の為の基本設定を指定します
 
__CONFIG _CP_OFF & _CPD_OFF & _BODEN_OFF & _MCLRE_OFF & _WDT_OFF & _PWRTE_ON & _INTRC_OSC_CLKOUT
;
     S   S S    S S    S S     S S    S S     S S(S=スペースを表す)
; CONFIGの前には、必ずアンダーバーを2つ(__)つける。その後は&で続ける。各項の間にはスペースを入れる。
;****************************************************************************************************
;各文の意味は以下の通りです。
;_CP_OFF=コードプロテクトを行わない。コードプロテクトすると、プログラムの再書込みができなくなってしまう。
;_CPD_OFF=内部EEPROMデータプロテクトを行わない。
;_BORDEN_OFF=ブラウンアウトリセットを行わない。電源電圧4Vでリセットを発生する機能をOFFにした。
;_MCLRE_OFF=MCLR機能(外部リセット)をオフにする。従って4番ピン=GP3(汎用ポート)として使用する。
;WDT_OFF=ウォッチドックタイマーをオフにする。
;PWRTE_ON=パワーアップタイマーをオンにする。
;INTRC_OSC_CLKOUT=内部クロックを使用し、外部クロック出力する。従って3番ピン=CLKOUT(Fosc/4)

;****************************************************************************************************
;=================================================
;
変数定義(今回は、未定義)
;=================================================
;
;=================================================
; 今回のポート定義
;=================================================
;  ポート名 I/O FUNCTION
;  GP0   I 入力, ACT=L とする(NORMAL=H)
;  GP1   O 予備出力
;  GP2   O 予備出力
;  GP3   O 予備出力
;  GP4   O クロック出力 CLKOUT
;  GP5   O LED1出力, ACT=H とする(NORMAL=L)

;================================================
;
以下 プログラム 
;================================================
  ORG    0       ;0番地からスタート
  GOTO   INIT
      ;INITへスキップする
;
INIT ;ポートほか設定 -------------------------------------
  
BCF   STATUS,RP0    ;ここと次の行で合せて
  
BCF   STATUS,RP1    ;BANK0に設定する
  
CLRF   GPIO      ;先ずポートを全てクリアーしておく
  
MOVLW  B'00000111'   ;2ビット表記にした。以下同様
 
MOVWF  CMCON      ;コンパレーターは使用せず、全てDIGITAL端子設定にする
;-----------------------------------------------------------
 
 BSF   STATUS,RP0     ;BANK 1 を設定(このブロックで設定するSFRレジスタがBANK1にあるから)
  
MOVLW  B'00000001'   ;ポートのI/O設定,出力=0,入力=1
 
 MOVWF  TRISIO      ;従ってGP0=INPUT, 他=OUTPUT設定にする
 
 CLRF   ANSEL      ;ADコンバーターは使用せず、全てDIGITAL I/Oに設定する
  
CLRF   OPTION_REG    ;プルアップ設定を有効にする
 
 MOVLW  B'00000001'   ;"0ビット"だけ1にして
  
MOVWF  WPU       ;GP0だけプルアップする
 
 MOVLW  B'10000000'   ;
  
MOVWF  OSCCAL      ;OSCのキャリブレーション センター設定
;-----------------------------------------------------------
  
BCF   STATUS,RP0     ;BANK 0 に戻す
  
CLRF  INTCON      ;全ての割込み禁止
;
;================================================
;
メイン プログラム
;================================================
MAIN  BTFSS  GPIO,0   ;GP0が"L"だったら
   
BSF   GPIO,5    ;GP5をHにする(LEDが点灯)
;------------------------------------------------
   
BTFSC   GPIO,0    ;GP0が"H"だったら
   
BCF    GPIO,5    ;GP5を"L"にする(LEDは消灯)
   
GOTO   MAIN    ;MAINに行く
;------------------------------------------------
   END          ;最後は必ず"END"で終わります
同一内容でダウンロード用ファイルを用意しました。右側のファイル名をクリックして下さい。 TEST01.ASM


実験機の結果
動作と確認 PIC12F675デバイスの7番ピン「GP0」は、通常”H"レベルになっています。これは「GP0=プルアップ設定」しているからです。SW1をONすると「GP0=L」となり、SW1がONになっている間、「LED1=点灯」します。
☆CLKOUT :
PIC12F675デバイスの3番ピンはCLKOUTです。この端子の観測波形は左図の通りです。Fosc(4MHz)/4の出力が出ます。
今回のプログラムは、内部クロックを使用しており、クロックの発振周波数は「OSCCAL」の値によって調整できます。
ちなみに、今回電源電圧5V使用時、OSCCALの値によって、以下の通り発振周波数が変わりました。
最低(00h)=711KHz,中央(80h)=1000KHz,最大(FFh)=1256KHzでした。
尚、TEST01.ASMのCONFIG上で「
_INTRC_OSC_CLKOUT
と記述されている部分を _INTRC_OSC_NOCLKOUTと変更すると、この端子からCLKOUTの出力は出なくなり、3番ピンは汎用ポート「GP4」として使用できます。


MPLAB IDE
使用上の注意!
ASMファイルの行番号表示ON/OFF
「Edit→Properties→'ASM Filetype'」のタグ上で「Line Number」にチェックを入れると「行番号表示」します。
ASMファイルの大文字/小文字について
MPLAB上では、初期値として「大文字記載」に成っております。従って、ASMファイル上の一部で「小文字」を使用していると、「Project → Build All」のアセンブル上でエラーになってしまいます。
そこで「大文字/小文字」の区別をなくすために、以下の通り設定します。
「Project → Build Options → TEST01.ASM」で新規WIndowが開く。「Generate Command Line」「Disable case sensivity」にチェックを入れる。これでASMファイル内の大文字/小文字の区別が無くなり、アセンブル時のエラーが出なくなります。
プロジェクトのディレクトリー
通常「MPLAB IDE」は、「C:\Program Files\Microchip\MPLAB IDE」にインストールされます。PROJECTは「マイドキュメント」「デスクトップ」に作成した場合、エラーが発生する事があるので「Cドライブ内に\PIC」等のフォルダーを作成してご使用してください。


これから−−−−−いま少しマイコンらしい動作をさせる

まだです。