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


超ローコストPICWRITERの製作

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

[第271回]



●PIC16F716(3)BOR(ブラウンアウトリセット)

前回のテストで書くつもりでいてうっかりして書かずに終ってしまったことがあります。
PIC16F716は電池での動作も可能なPICのはずです。
ここで「はず」と書いたのは実は前回のテストでは乾電池2個直列(3V)では動作しなかったからです。
前回のテストは+5Vで行ないました。
ちょいと納得できない気持ちではありました。
どこがWide operatingだちゅうねん。

[出典]Microchip Technology Inc.PIC16F716 DataSheet

確かに3Vはぎりといえばぎりですけれど。
今朝になりましてから突然にひらめきました。
確かConfigの説明のどこかにBORつうのがあったような。
やっぱり!

[出典]Microchip Technology Inc.PIC16F716 Memory Programming Specification

BOR(Brown Out Reset)はVddが既定の電圧以下になったときにリセットをかける機能です。
bit7(BORV)を見ましたらdefaultではその電圧は4Vになってました。
これでは3Vで起動できるわけがありません。
ここを’0’(2.5V)にしてもよいのですけれど電池でこの機能は要りませんでしょう。
bit6のBORENをOFFにするほうが確実です。
そこでテストプログラムをそのように変更しました。
;;;pic16f716test frompic p16f627 test
;25/4/25 4/27
;
        #include <p16f716.inc>
        __CONFIG _WDT_OFF & _RC_OSC & _BOREN_OFF
;
;
w=0
f=1
c=0
z=2
;
cntr0=20
cntr1=21
cntr2=22
;
        org 0
        goto start
;
        org 5
start
        bsf STATUS,5 ;bank 1
        movlw 7;a0-a3 is digital
        movwf ADCON1
        clrf TRISA
        clrf TRISB
        bcf STATUS,5 ;bank0
;
testloop
        movf cntr2,w
        movwf PORTA
testloop2
        call t1
        movf cntr1,w
        movwf PORTB
        decfsz cntr1
        goto testloop2
        decf cntr2
        goto testloop   
;
t1
        nop;1
        decfsz cntr0;1
        goto t1;2
        return
;
        end
;

上から5行目、__CONFIGに_BOREN_OFFを追加しました。

3Vで動作するようになりました!


そういえば。
以前にほかのPICでも同じことを経験したことを思い出しました。
Datasheetでは低電圧でも動作すると書いてあるのに3Vでは動作しないPICがあったことを思い出しました。
確認してみたところPIC16F883とPIC16F887でした。

[出典]Microchip Technology Inc.PIC16F882/883/884/886/887 DataSheet

やっぱりBORがありました。
犯人はお前だったのか!
PIC16F883のテストプログラムは[第263回]にあります。
PIC16F887のテストは[第268回]で行ないましたがPIC16F883のときと同じテストプログラムを使いました。
そのときのテストプログラムを下のように変更しました。
;pic16f883test
;25/04/16 4/18 4/19 4/21 4/27
;
; internal 4MHz
        #include <p16f883.inc>
        __CONFIG _CONFIG1,_WDT_OFF & _MCLRE_ON & _LVP_OFF & _BOR_OFF
        __CONFIG _CONFIG2,_WRT_OFF
;
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 65;=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
;

上から6行目、__CONFIGに_BOR_OFFを追加しました。
そのように変更したプログラムであらためて動作テストをしたところPIC16F883もPIC16F887も3V(単三乾電池2本直列)で動作するようになりました。

超ローコストPICWRITERの製作[第271回]
2025.4.27 upload

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