2025.1.16
前へ

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


PICBASICコンパイラ

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
まるでインタプリタ。でもコンパイラです。超カンタン超シンプルです。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

[第199回]



●PIC16F1827(12)4xPLL(2)

納得がいかないこととか辻褄が合わないことがおきるとそれがクリアできるまで気持ちが落ち着きません。
これはあれだ。
きっとDataSheetが間違っているんだ。
うん。
そういうことにしよう。
そうしてしまえば気は晴れるのではと一時は思うのですが。
やっぱり自分の心はそうは簡単にごまかせないのですよねえ。
なんだか小骨が喉にひっかかっているようで実に嫌な気分です。
それでまたプログラムとDataSheetを見比べながら考え始めます。
短い冬の日はじきに暮れてしまいます。
なんとも因果な性分であります。
早朝から深夜まで繰り返し眺めていますと。
突然あの至福の時がやってきます。
わかったぞ!
そういうことだったんだ!
今回もそういうことでした。
ま。
しかし。
自分の至らなさを棚に上げておいて何なのですけれど。
ちょっと言わせてもらえば。
Microchipさまももう少し分かりやすく書いていただけませんでしょうかねえ。

下はPIC16F1827のオシレータ回路の説明です。

[出典]Microchip Technology Inc.PIC16F1827DataSheet

問題解決のカギとなったのはFIGURE5−1のブロック図でした。

今回は簡便な内蔵クロック発振モードを使います。
このモードを選択するとクリスタルを外付けしなくてもそれなりの精度のクロックが簡単に得られます。
内蔵発振モードでは最高16MHzのクロックが得られますが今回はそれをさらに4xPLL回路で4倍にしたいと思います。
上図の通りその場合には内蔵発振クロックは8MHzを選択することになります。
内蔵8MHzを4xPLL回路に通す選択スイッチは図によればFOSC<2:0>=100です。
FOSCはCONFIGで設定します。
下がCONFIG1のビット説明です。

[出典]Microchip Technology Inc.PIC16F1827DataSheet


[出典]Microchip Technology Inc.PIC16F1827DataSheet

FOSC<2:0>はCONFIG1のbit2−0です。
FOSC<2:0>=100は上から4番目にあります。
INTOSCです。
ところで内蔵発振モードの8MHzはどこで設定するのでしょうか?
下はその設定を行なうレジスタ(OSCCON)です。

[出典]Microchip Technology Inc.PIC16F1827DataSheet

そのbit6−3(IRCF<3:0>)で設定するようです。
8MHzは下から2番目にあります。
IRCF<3:0>=1110です。
それともうひとつSystem Clock Select bitsも設定が必要なようです。
ここで判断ミスをしてしまったのが4xPLLが働かなかった原因でした。
そら判断ミスをしてしまいますよお。
1x=Internal oscillator blockを選択しました。
ねえ。
そう思いますでしょう。
下が初めに書いたテストプログラムです。
;;;pic p16f1827 test
;25/1/3 1/4
;
        #include<p16f1827.inc>
;cpuclock=32MHz(4xPLL),internal OSC
;
        __CONFIG _CONFIG1,_FOSC_INTOSC & _WDTE_OFF
        __CONFIG _CONFIG2,_PLLEN_ON
;
w=0
f=1
c=0
z=2
;
cntr0=20
cntr2=21
testcntr=22
testcntr2=23
;
        org 0
        goto start
;
        org 5
start
        banksel ANSELA;BANK3
        clrf ANSELA
        clrf ANSELB
;
        banksel TRISA;BANK1
        clrf TRISA
      clrf TRISB
        movlw 0f3
        movwf OSCCON
;
        banksel LATA;BANK2
;
testloop
        movf testcntr,w
        movwf LATA
testloop2
        call t1ms
        decfsz testcntr2
        goto testloop2
        decf testcntr
        goto testloop   
;
;1msec timer
t1ms
        movlw 0a;=10    
        movwf cntr2
t1ms2
        call tm100micros
        decfsz cntr2
        goto t1ms2
        return
;
tm100micros
        movlw 64;=100
        movwf cntr0
tm100micros2;1micros
        nop
        nop
        nop
        movlw 0ff;1/8
        xorwf LATB;1/8
        decfsz cntr0;1/8
        goto tm100micros2;2/8
        return          
;
        end
;

このプログラムだと4xPLLは利きません。
CPUクロックは8MHzになります。
プログラムの中ほど
movlw 0f3
movwf OSCCON
と書いています。
これでは駄目だったのです。

下がそこを書き直したプログラムです。
;;;pic p16f1827 test
;25/1/3 1/4 1/6
;
        #include<p16f1827.inc>
;cpuclock=32MHz(4xPLL),internal OSC
;
        __CONFIG _CONFIG1,_FOSC_INTOSC & _WDTE_OFF
        __CONFIG _CONFIG2,_PLLEN_ON
;
w=0
f=1
c=0
z=2
;
cntr0=20
cntr2=21
testcntr=22
testcntr2=23
;
        org 0
        goto start
;
        org 5
start
        banksel ANSELA;BANK3
        clrf ANSELA
        clrf ANSELB
;
        banksel TRISA;BANK1
        clrf TRISA
    clrf TRISB
        movlw 0f0
        movwf OSCCON
;
        banksel LATA;BANK2
;
testloop
        movf testcntr,w
        movwf LATA
testloop2
        call t1ms
        decfsz testcntr2
        goto testloop2
        decf testcntr
        goto testloop   
;
;1msec timer
t1ms
        movlw 0a;=10    
        movwf cntr2
t1ms2
        call tm100micros
        decfsz cntr2
        goto t1ms2
        return
;
tm100micros
        movlw 64;=100
        movwf cntr0
tm100micros2;1micros
        nop
        nop
        nop
        movlw 0ff;1/8
        xorwf LATB;1/8
        decfsz cntr0;1/8
        goto tm100micros2;2/8
        return          
;
        end
;

movlw 0f0
movwf OSCCON
に変更しました。
SCS<1:0>=00 Clock determined by FOSC<2:0> in Configuration Word 1
です。
なんとまあわかりにくいこと。
最初の図をよくよく見ますと。
図の右のほうClock ControlのところにFOSC<2:0>とSCS<1:0>があります。
しかし。
それで理解せよって、ちょっと無理があるのじゃありませんか。

それはともかく。
そのようにプログラムを直したところ。

やっと1μsの出力パルスが得られました。
ちょっとなんだかなあという感がありますが。

ともあれ。
やっと。
一件落着です。
やれやれ。
疲れること。

PICBASICコンパイラ[第199回]
2025.1.16 upload

前へ

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