超ローコスト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
前へ
次へ
ホームページトップへ戻る