先日、私のホームページ(JH7UBCホームページ)を見た方(アマチュア無線家)から質問のメールをいただきました。ホームページに掲載しているPIC16F628A+PIC16F883周波数カウンタの周波数測定部を使いたいと思いMPLAB IDEでアセンブル(Make)しようと思ったが、エラーが出てうまくいかない、原因を教えてほしいというものでした。
そこで、当ブログに掲載している「今更、アセンブラ」シリーズの記事を参考にしてプロジェクトの作成から行っていただいたところ、うまくMakeできたとのことでした。
続いて、PICにプログラムを書き込む段階でまたトラブルを生じたとのこと。PICKit3がPIC(PIC16F628A)を認識しないとのことでした。このトラブルは私もしばしば経験します。PICへの電源供給とUSBケーブルを何度か抜き差しすることにより解決できました。その後、書き込みができたとの報告メールをいただきました。
そういえば、MPLAB IDEとアセンブラを使うのは、ほんとうに久しぶりです。この周波数カウンタを製作したのが2017年でした。MPLABもアセンブラもだいぶ忘れてきました。10年前のノートを見て思い出すことにしました。
手元にあるPIC16F648Aを使って、MPLAB IDE v8.92 MPASM v5.51の環境で、基本的なプログラミングの復習をすることにしました。
PIC16F648Aですが、すでにレガシーPICと言われる古いタイプのPICですですが、内蔵クロックを持っており、一応基本的な機能を持っていますので、PICの勉強には適していると思います。
やはり、最初はLチカ(LED点滅)をやってみましょう。テスト用の回路図です。ライタはPICKit3で、電源はPICKit3から供給し、ICSPでPICをセットしたままプログラミングします。
クロックは、内蔵クロック(デフォルトの4MHz)を使い、RB0に接続したLEDを0.5秒ごとに点滅します。0.5秒タイマーはプログラムで作ります。
アセンブルリストです。
----------------------------------------------------------
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; PIC16F648A LED Blink
; 2024 10 16
; JH7UBC Keiji Hata
; 内部クロック4MHz
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LIST P=PIC16F648A
INCLUDE P16F648A.INC
__CONFIG _INTOSC_OSC_NOCLKOUT & _CP_OFF & _CPD_OFF & _WDTE_OFF & _PWRTE_ON & _BOREN_OFF & _LVP_OFF & _MCLRE_OFF
;レジスタ
CBLOCK 020h
CNT_1ms
CNT_250ms
ENDC
;入出力設定
BSF STATUS,RP0 ;BANK1
CLRF TRISA ;PORTAはすべて出力、ただし、RA5は入力
CLRF TRISB ;PORTBはすべて出力
BCF STATUS,RP0 ;BANK0
MOVLW b'00000111'
MOVWF CMCON ;コンパレータOFF
#DEFINE LED PORTB,0
MAIN
BSF LED ;LED ON
CALL LOOP250mS ;0.5s待つ
CALL LOOP250mS
BCF LED ;LED OFF
CALL LOOP250mS ;0.5s待つ
CALL LOOP250mS
GOTO MAIN
;0.25s待つルーチン
LOOP250mS
MOVLW 0FAh ;0FAh=250
MOVWF CNT_250ms
LOOP2
CALL LOOP1mS
DECFSZ CNT_250ms
GOTO LOOP2
RETURN
;1ms待つルーチン
LOOP1mS
MOVLW 0F9h ;0F9h=249
MOVWF CNT_1ms
LOOP1
NOP
DECFSZ CNT_1ms,F
GOTO LOOP1
RETURN
END
----------------------------------------------------------
タイマールーチンは、「PICで遊ぶ電子工作」というサイトのこちらのページを参考にさせていただきました。
Programmerは、PICKit3を選択し、PICに供給する電源は、MPLABで、Programmer→Srttingでダイヤログを開き、Powerタグをクリックして、下のように設定します。
PICをPICKit3にセットして、パソコンのUSBに接続するとIDEはPICKit3の接続を認識し、PICのID Noも表示されます。PICを認識しなかったり、品種が違う場合はエラーがでます。PICの品種をうまく認識しない場合は、USBを何度か抜き差しすると認識します。それにしても、MPLABとPICKit3の相性は良くありません。どうしてもうまく書き込みができない場合は、PICerFTの利用をお勧めします。
ブレッドボードとICSP接続の様子です。左上の電源監視用の黄色いLEDが点灯し、左下の青いLEDが0.5秒ごとに点滅しました。
※コメント投稿者のブログIDはブログ作成者のみに通知されます