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


超ローコストPICWRITERの製作

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

[第277回]



●PIC16F1938(5)テストプログラム(4)4xPLL

前回はPICの水晶発振のテストで大きく2つの不可解な現象が発生しました。
その1つは水晶発振モードではなぜか4xPLLモードになってしまうらしいという現象です。
前回は訳がわからずなんだかクロック周波数がめちゃめちゃ高くなってしまうことに戸惑ってしまいました。
しかし落ち着いてよくよく考えてみますと20MHzクリスタルでの発振の場合逆算して求めたFoscがその4倍になることからおそらく4xPLL機能が働いているのではないかと推測されます。
しかしそれについてはテストプログラムでは使わない設定にしたはずです。
それなのに何故なのか?という問題です。
それともう1つは水晶発振モードのプログラムなのにクリスタルを外付けしなくても「ある周波数」でまともに動作してしまうという現象です。
それに加えて規定を超える周波数の32MHzクリスタルでもそれなりの発振周波数で動作するらしいという現象もありました。
今回は最初の4xPLLについて解明します。

前回のテストプログラムではCONFIG1で水晶発振モードを指定するとともにOSCCONでは4xPLLモードをOFFにしました。
下は前回のテストプログラムPIC16F1938TEST3.ASMの一部です。
;pic16f1938test from pic16f883test
;25/04/28 5/3
;
; internal 4MHz
        #include <p16f1938.inc>
        __CONFIG _CONFIG1,_WDTE_OFF & _MCLRE_ON & _IESO_OFF & _BOREN_OFF & _FOSC_HS
        __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
        banksel ANSELA
        clrf ANSELA
        clrf ANSELB
        banksel OSCCON
        movlw 68;=4MHz
        movwf OSCCON

以下省略

OSCCONは先に行なった内蔵発振モードのテストプログラムの設定をそのまま使っています。
内蔵発振モードではFosc=4MHzを指定していますがCONFIG1の設定が優先されるのでここはそのままにしています。
同時にbit7=’0’にして4xPLLを使わない設定にしました
OSCCONは[第274回][第275回]でお見せしましたがもう一度下に再掲します。


[出典]Microchip Technology Inc.PIC16F193X DataSheet

実はOSCCONのbit7には例外規定がありました。
そのことについては[第275回]でちらりと書きましたがそこが重要だったのでした。
よくよく読みましたら。
Configuration Word1のPLLENが’1’のときはSPLLENは無視される(ignored)。
と書いてあります。
その場合には常に4xPLLが有効になる。
そういうことだったのでした。
あれ?
でもConfiguration Word1にPLLENなんてあったっけ?
Word2にありました。
ミスプリントのようです。


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

Config2のbit8にPLLENがありました。
Config2のPLLENは全く意識していませんでしたからWRTのみOFFにしたのでした。


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

WRTはWrite Protectです。
う。
Copy Protectと違うのか。
ならここは特に指定しなくてもよかったか。
あ。でも。
LVPをEnableにしたままだったから、やっぱりここは念のために_WRT_OFFにして正解だったかも。
CONFIG2はそれ以外は指定しなかったのでPLLENはデフォルトの’1’になって4xPLLが有効になったのでした。
やっと納得できました。
そういうことならば。
ということで下は前回のプログラムの一部を書き直して作成したテストプログラムPIC16F1938TEST5.ASMです。
CONFIG2に_PLLEN_OFFを追加しました。
;pic16f1938test from pic16f883test
;25/04/28 5/3
;
; internal 4MHz
        #include <p16f1938.inc>
        __CONFIG _CONFIG1,_WDTE_OFF & _MCLRE_ON & _IESO_OFF & _BOREN_OFF & _FOSC_HS
        __CONFIG _CONFIG2,_WRT_OFF & _PLLEN_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
        banksel ANSELA
        clrf ANSELA
        clrf ANSELB
        banksel OSCCON
        movlw 68;=4MHz
        movwf OSCCON
        clrf TRISB
        clrf TRISA
     banksel PORTB
;
loop
        movf cntr1,w
        movwf PORTA
        call t1ms
        incfsz cntr1
        goto loop
        incf cntr2
        movf cntr2,w
        movwf PORTB
        goto loop
;
t1ms
        movlw 0fa;=250
        movwf cntr0
t1ms2
        nop
        decfsz cntr0,f
        goto t1ms2
        return
;
     end
;

このように変更したプログラムを使って動作テストをしたのですが。
ここまで書いてきて再確認が必要になりました。

まだ説明の途中ですが今回は時間がなくなってしまいました。
次回に続きます。

超ローコストPICWRITERの製作[第277回]
2025.5.6 upload

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