2025.4.18
前へ
次へ
ホームページトップへ戻る


超ローコストPICWRITERの製作

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
「PICBASICコンパイラ」からスピンオフ!!
過去記事を参照することなどを考えて該当する過去記事は「PICBASICコンパイラ」のまま連載回もそのままとします。
以後は前回記事からの流れで[第236回]からとします。
「PICBASICコンパイラ」はなるべく早く連載を再開したいと考えています。
PICはローコスト、高機能で種類も豊富なお手軽マイコンですがプログラムを書き込むためのWRITERが必要です。
それをできるだけ安価に作ってしまおうというプロジェクトです。
最終的には製品化を考えています(組立キット、完成品)。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

[第263回]



●PIC16F883

PIC16F883は28pinのPICです。
PIN数が多いのでI/Oポートもたっぷりありますから入出力端子がたくさん欲しい用途に適しています。
ND80KL/86ボードの7セグ表示/キー入力に使っています。
仕入れの都合でPIC16F883の代わりにPIC16F886を使うこともあります。
PIC16F883とPIC16F886はメモリサイズが違うだけなので同じプログラムで使うことができます。
PIC16F627/628とかPIC18F13K50/14K50などと同じです。


[出典]Microchip Technology Inc. PIC16F883 Data Sheet


[出典]Microchip Technology Inc. PIC16F883 Data Sheet

下はPIC16F883用に作ったテストプログラムです。
;pic16f883test
;25/04/16 4/18
;
; internal 4MHz
        #include <p16f883.inc>
        __CONFIG _CONFIG1,_WDT_OFF & _INTOSCIO & _MCLRE_ON & _LVP_OFF
        __CONFIG _CONFIG2
;
cf=0
zf=2
f=1
w=0
;
cntr0 equ 20
cntr1 equ 21
cntr2 equ 22
;
     org 00
st0
     goto start
;
     org 05
start
        movlw 60;bk3
        movwf STATUS
        clrf ANSEL
        clrf ANSELH
        bcf STATUS,6;bk1
        movlw 64;=4MHz
        movwf OSCCON
        clrf TRISB
        clrf TRISC
     bcf STATUS,5 ;bank0
;
loop
        movf cntr1,w
        movwf PORTB
        call t1ms
        incfsz cntr1
        goto loop
        incf cntr2
        movf cntr2,w
        movwf PORTC
        goto loop
;
t1ms
        movlw 0fa;=250
        movwf cntr0
t1ms2
        nop
        decfsz cntr0,f
        goto t1ms2
        return
;
     end
;

CONFIG1のところで_LVP_OFFを書いておかないとプログラムを起動できません。
PIC16F883に限らずPICは工場出荷時のデフォルトの設定ではLVP(高電圧のVppを与えないで+5Vのままでプログラムの書込みができるモード)がONになっています。
通常はその状態でプログラムの実行ができるはずなのですが今回のPIC16F883のテストではLVPがONのままではプログラムが起動しませんでした。
たとえプログラムが起動したとしてもLVPがONのままだと思わぬトラブルが発生する可能性がありますからここはLVPをOFFにしておいたほうがよいと思います。
LVPをOFFに設定するとVppに高電圧を加えない限りプログラムを書き込んだり消去したりすることはできなくなります。
PIC16F883はI/Oポートをアナログ端子と兼用しています。
デフォルトではアナログ端子が選択されていますから通常のI/Oポートとして使うためにはANSEL、ANSELHをクリアしておく必要があります。
PIC16F883はCPUクロックとして内蔵発振モードを使うことができます。
最高で8MHzまで使うことができますが今回は4MHzを指定しました。
t1msサブルーチンをCALLすると1msecタイマーとなります。
t1msをCALLするごとにCNTR1をインクリメントすると同時にその値をPORTBにそのまま出力します。
CNTR1は256msでオーバーフローして0に戻ります。
そのときにCNTR2がインクリメントされ同時にその値がPORTCに出力されます。
PORTB、PORTCにLED回路を接続するとRC0は256msごとに点滅し、RC1はその倍の約0.5秒ごとにまたRC2は1秒ごとに点滅します。

こちらは今回テストに使った回路です。

これはPIC16F883用ではなくてPIC18F2550を使ったPICBASICコンパイラ用の試作回路です。
PIC18F2550のための回路ですがI/O端子配列などは同じなのでPIC16F883をそのまま実装してテストに使うことができます。
試作回路基板では水晶発振回路を実装していますが今回のテストプログラムではPIC16F883内蔵の内部発振回路を使います。

テスト中の写真です。

[第260回]ではLEDが点滅する様子を動画でお見せしました。
動画をアップロードして気が付きました。
ほんの数秒の短い動画ですが静止画に比べてめちゃめちゃデータサイズが大きくなります。
まあいまどきは動画を見るのは当たり前なのでダウンロードの負荷を気にするようなことはないとは思いますが。
画像用に借りているレンタルサーバーの容量はできるだけ有効に使いたいと思います。
ですので動画ではなくて静止画像でお見せすることにします。

複数枚の画像を見ればLED表示が変わっていることがわかると思います。


超ローコストPICWRITERの製作[第263回]
2025.4.18 upload

前へ
次へ
ホームページトップへ戻る