2024.12.21
前へ

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


PICBASICコンパイラ

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

[第185回]



●PIC18F26K22

今回も今まで作業してきたことの延長になります。
昨年色々試してみるつもりでサンプルとして購入したけれどさわらないままになっていたPICが他にもありました。
それが今回説明のPIC18F26K22です。
28pinのPICです。
ピン数が多いのでI/Oが多いことも勿論使える範囲が広がるのですがそのほかにもプログラムメモリサイズが大きい(64KBytes)ことも魅力的です。
下はPIC18F2X/4XK22のDataSheetです。

[出典]Microchip Technology Inc.PIC18F2X/4XK22 DataSheet

メモリサイズやピン数などの違いによっていくつか同類のPICがあるようです。

[出典]Microchip Technology Inc.PIC18F2X/4XK22 DataSheet

たまたま当時秋月で入手可能で比較的安価なものとしてPIC18F26K22を購入しました。
特にそれ以外に選択した理由はありません。

あれ?
VppはあるのにPGCとPGDがない?

[出典]Microchip Technology Inc.PIC18F2X/4XK22 DataSheet

こちらには記載されていました。

[出典]Microchip Technology Inc.PIC18F2X/4XK22 Flash Memory Programming Specificaqtion

確認したところ消去やプログラムの書き込み/読み出しは今まで試してきたPIC18F13K50用のPIC WRITERプログラムと同じでいけるようです。
そういうことならば。
前回と同じようにテストプログラムを作成して試してみるほかはありませんでしょう。
下が作成したPIC18F26K22のアセンブラソースプログラムです。
;;;pic p18f25k22 test
;from 45k20test.asm
;24/12/19
;
        #include<p18f25k22.inc>
;cpuclock=48MHz(4xPLL),CRYSTAL=12MHz
;
        CONFIG FOSC=HSMP,PLL_EN=ON,PBADEN=OFF
;
w=0
f=1
c=0
z=2
;
cntr0=0c
cntr2=0d
testcntr=3c
testcntr2=3d
;
        org 00
        goto start
;
        org 18
start

        clrf TRISB
        clrf TRISC
testloop
        movf testcntr,w
        movwf PORTB
        movwf PORTC
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 0f0;=240
        movwf cntr0
tm100micros2
        nop
        nop
        decfsz cntr0
        goto tm100micros2
        return          
;
tm15micros
        movlw 24;=36
        movwf cntr0
        goto tm100micros2
;
        end
;

前回のPIC18F45K20用プログラムのCONFIGの記述を変更しました。
[第183回]にも書いたことなのですが。
どうしてPICごとにCONFIGの記述のルールが異なっていたりするのでしょうか。
なんだかPICごとにそれぞれ別の開発者が勝手にルールを作っているような感じです。
今回記述したCONFIGのCLOCKに関するところはP18F25K22.incにあります。
普段使っているMPLABはちょっと古いバージョンなので確認したところP18F26K22.incはありませんでした。
なのでP18F25K22.incで代用しました。
下がP18F25K22.incの該当部分です。
;   Oscillator Selection bits:
;     FOSC = LP            LP oscillator
;     FOSC = XT            XT oscillator
;     FOSC = HSHP          HS oscillator (high power > 16 MHz)
;     FOSC = HSMP          HS oscillator (medium power 4-16 MHz)
;     FOSC = ECHP          EC oscillator, CLKOUT function on OSC2 (high power, >16 MHz)
;     FOSC = ECHPIO6       EC oscillator, port function on RA6 (high power, >16 MHz)
;     FOSC = RC            External RC, CLKOUT on OSC2
;     FOSC = RCIO6         External RC oscillator, port function on RA6
;     FOSC = INTIO67       Internal oscillator block, port function on RA6 and RA7
;     FOSC = INTIO7        Internal oscillator block, CLKOUT function on RA6, port function on RA7
;     FOSC = ECMP          EC oscillator, CLKOUT on OSC2 (medium power, 4-16 MHz)
;     FOSC = ECMPIO6       EC oscillator (medium power, 4-16 MHz)
;     FOSC = ECLP          EC oscillator, CLKOUT on OSC2 (low power, < 4 MHz)
;     FOSC = ECLPIO6       EC oscillator  (low power, < 4 MHz)
;
;   4X PLL Enable:
;     PLL_EN = OFF         Oscillator used directly
;     PLL_EN = ON          Oscillator multiplied by 4

実は普段私はMPLABもPICKIT2互換プログラマもWindows98SEで使っています。
ええ今だにWindows98SEは健在です。
さすがにこれでインターネットアクセスなどをするのはきついのでそういう作業はWindows7を使っています(これも今だに、です)。
Windows10もさわってはみたのですが、使い難いったらありません。
Windows10マシンはもうずっとほこりをかぶっています。
医者の不養生みたいなものですかねえ。
それで。
上で引用したのは古いMPLABバージョンについてきたP18F25K22.incなのですが。
Windows7用にもMPLABをダウンロードしています。
こちらは旧MPLABの最終バージョンかも。
v8.92です。
何ですか。
MPLAB Xですか。
それもダウンロードしましたけれど。
ンなものは使う気になりませんです。
Windows98SEのMPLABはv8.40です。
さすがにv8.40では古くて対象外だったPICがv8.92では対象内になっているものがあります。
それでそういうPICに対してはWindows7のほうを使います。
今回確認してみたところWindows7のほうのMPASM SuiteにはP18F25K22.incだけではなくてP18F26K22.incもありました。
しかし今回のテストプログラムとしてはわざわざインクルードファイルを変更してWindows7で作業するまでのことはないと思いましたからそこは無視することにしました。
しかし。
たまたまWindows7のほうのP18F25K22.incを開いてみましたら。
P18F26K22.incではありません。
P18F25K22.incです。
PLLの記述が違っているじゃありませんか!

;   Oscillator Selection bits:
;     FOSC = LP            LP oscillator
;     FOSC = XT            XT oscillator
;     FOSC = HSHP          HS oscillator (high power > 16 MHz)
;     FOSC = HSMP          HS oscillator (medium power 4-16 MHz)
;     FOSC = ECHP          EC oscillator, CLKOUT function on OSC2 (high power, >16 MHz)
;     FOSC = ECHPIO6       EC oscillator (high power, >16 MHz)
;     FOSC = RC            External RC oscillator, CLKOUT function on OSC2
;     FOSC = RCIO6         External RC oscillator
;     FOSC = INTIO67       Internal oscillator block
;     FOSC = INTIO7        Internal oscillator block, CLKOUT function on OSC2
;     FOSC = ECMP          EC oscillator, CLKOUT function on OSC2 (medium power, 500 kHz-16 MHz)
;     FOSC = ECMPIO6       EC oscillator (medium power, 500 kHz-16 MHz)
;     FOSC = ECLP          EC oscillator, CLKOUT function on OSC2 (low power, <500 kHz)
;     FOSC = ECLPIO6       EC oscillator (low power, <500 kHz)
;
;   4X PLL Enable:
;     PLLCFG = OFF         Oscillator used directly
;     PLLCFG = ON          Oscillator multiplied by 4
;

ほんと、なんとかなりませんかねえ。
確認してみましたら。
Windows98SEにダウンロードしたP18F25K22.incファイルの日付は09/09/29ですがWindows7にダウンロードしたほうは13/03/10になっていました。
ま。
それは余談だったのですが。
作成したASMファイルをMPLABでQuick Buildしたところ。
ぬぁんと。
エラーになってしまいました。

え?
header fileがmismatch???
HSMPがない???
昔ならばこれでパニクッて何日か泥沼でもがいたことでありましょう。
まま。
そこは私もそれなりに経験を積みましたものですから。
パニックをおこすところまではいきませんでした。
ここはコーヒーなどを飲んで落ち着いて、と。
なんだ。
そういうことだったか。
ASMソースファイルを前回作成したPIC18F45K20をもとにしてちょいとCONFIGのところを書き換えただけだったのでついうっかりしてMPLABの設定をそのときのままにしていました。
それがエラーの原因でした。

「Configure」タブを開いてPIC18F25K22を選択する必要がありました。
PIC名をそのように指定したところBUILD SUCCEEDEDになりました。
やれやれです。

PICBASICコンパイラ[第185回]
2024.12.21 upload

前へ

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