PIC16F18326/18346の実験まとめ
PICキットでも差し替えて使用可能なメモリ大容量(14ピン/20ピン)PICです。
価格もそれほど高価では無いので、XC8での大きなプログラミングに対応できそうです。
と言うより、当局の様な素人が非効率的なCプログラムをバンバン書いても大丈夫だぁ~
と言うのが本音です・・・ (^_^;)
従来のPIC16F1823/1829との差異詳細について調べて行きます。
とは言っても、マニュアルが英文のため、何かと不明点が多いので・・・
分かった範囲内で追加記録していきます
記載内容については参考程度に見て下さいね、一切の動作保証はしません


参考文献
①PIC16F18326/18346マニュアル MicroChip


履歴一覧

 システムクロック関連について
 タイマ0(Timer0)について
PIC16F18326/18346 補足事項

PIC16F1823/1829よりも内蔵モジュール類が高機能化されている様です。
同じF1シリーズな型番ですが、型番桁数も増え、別物と考えてもおかしくない位です。
もちろん詳細についてはマニュアルを参照してください

1.PIC16F18326システムクロック設定関連
   このシステムクロック関連モジュールは大きく変更となっています。
   この修正点を把握しないとPICは起動すらしてくれません・・・
   内部発振は8MHZから16MHZとなり、2xPLLが新設、これで32MHZシステムクロックとできます。
   4xPLLも健在で、従来どうりX’TAL発振で8MHZとして、4xPLLで32MHZにできます。

(1)コンフィグレーションワード
   長年親しんできた?「FOSC」が廃止され、「CSWEN」、「RSTOSC」、「FEXTOSC」が新設

 CSWEN:クロックスイッチイネーブルビット
   1=NOSC(ニューOSC)とNDIVビットはユーザソフトで変更出来る
   0=NOSCとNDIV(ニューデバイダ)ビットはユーザソフトで変更できない

 RSTOSC:COSCビット(カレントOSC)の電源投入時のデフォルト値
  111=FEXTOSC設定ビットそのままの外部OSCで動作
  110=HFINTOSC(1MHZ)で動作
  101=予約済み
  100=LFINTOSCで動作
  011=SOSC(32.768KHZ)で動作
  010=予約
  001=FEXTOSC設定ビット+4xPLLの外部OSCで動作
  000=HFINTOSC(32MHZ)で動作 

 FEXTOSC:外部発振器モード選択ビット
  111=ECH 8MHZ以上の外部クロック
  110=ECM 100KHZ~8MHZの外部クロック
  101=ECL 100KHZ以下の外部クロック
  100=OFF 
  011=
  010=HS 8MHZ以上の水晶発振器
  001=XT 100KHZ~8MHZの水晶発振器
  000=LP 32.768KHZに最適化された水晶発振器

(2)SFR(抜粋)
   「OSCCON1」、「OSCCON2」、「OSCCON3」、「OSCSTAT1」、
   「OSCEN」、「OSCFRQ」等のSFRが新設されています・・・ (^_^;)
 
 OSCCON1:発振器制御レジスタ1
          新たな発振器と分周器のクロックソースを設定します
          各ビットの意味はマニュアルP87、TABLE6-1を参照
          (参照マニュアル DS40001839A)

  bit7 未使用 read as ’0’
  bit6-4 NOSC:ニューOSC動作要求ビット 表6-1を参照
  bit3-0 NDIV:ニューデバイダ動作要求ビット 表6-2を参照


 OSCCON2:発振器制御レジスタ2
          現在の発振器と分周器で読み出し専用
          各ビットの意味はマニュアルP87、TABLE6-2を参照
          (参照マニュアル DS40001839A)
  bit7 未使用 read as ’0’
  bit6-4 COSC:カレントOSC動作要求ビット 表6-1を参照
  bit3-0 CDIV:カレントデバイダ動作要求ビット 表6-2を参照


表6-1 NOSC/NOSC クロックソース設定ビット
 NOSC/COSC  クロック ソース
  111        EXTOSC(注1)
  110        HFINTOSC(1MHZ)(注2)
  101        Reserved
  100        LFINTOSC
  011        SOSC
  010        Reserved
  001        EXTOSC with 4xPLL
  000        HFINTOSC with 2xPLL

 注1)EXTOSCはコンフィグレーションビット「FEXTOSC」で構成されます
 注2)HFINTOSCは

表6-2 NDIV/CDIV クロック分周設定ビット
 NDIV/CDIV  クロックデバイダ
  1111-1010  Reserved
  1001       512
  1000       256
  0111       128
  0110        64
  0101        32
  0100        16
  0011         8
  0010         4
  0001         2
  0000         1



 OSCCON3:発振器制御レジスタ3
   CSWHOLD:クロックスイッチ ホールド ビット
    1=クロックスイッチはホールド(割り込みを伴う)、
       NOSCで選択された発振器がレディ状態になった時
    0=クロックの切り替えが始まる、NOSCで選択された発振器がレディ状態になった時
   SOSCPWR:2次発振器電力モード選択ビット
    1=ハイパワーモード
    0=ローパワーモード
      ※ただしSOSCBE=1の場合、このビットは無視される
   SOSCBE:2次発振器バイパスイネーブルビット
    1=2次発振器のSOSCIは外部クロック入力(STバッファ)として構成されている
       SOSCOピンは使われていない
    0=2次発振器はSOSCOピンとSOSCIピンとで、水晶発振器として構成
   ORDY:発振器レディビット
    1=の場合、OSCCON1=OSCCON2で、
       現在のシステムクロックはNOSCで指定されたクロック
    0=クロックスイッチが進行中
   NOSCR:ニューオシレータ レディビット
    1=クロックスイッチは進行中であり、NOSCで選択された発振器はレディ状態
    0=クロックスイッチは進行中では無いか、NOSCで選択された発振器が未準備

 OSCEN:発振器マニュアルイネーブルレジスタ
   EXTOEN:外部オシレータ手動要求
    1=EXTOSCが明示的に有効、FEXTOSCで指定された動作をする
    0=EXTOSCは別のモジュールで有効にする事が出来る(デフォルト)
   HFOEN:
    1=HFINTOSCが明示的にイネーブルされ、OSCFRQで指定された動作をする
    0=HFINTOSCは他のモジュールによって有効にされる(デフォルト)
   OFOEN:
    1=LFINTOSCが明示的に有効となる
    0=LFINTOSCは他のモジュールによって有効になる(デフォルト)
   SOSCEN:
    1=セカンダリオシレータ(タイマ1)が明示的に有効とされ、
      SOSCBEおよびSOSCPWRで指定された動作をする(デフォルト)
    0=セカンダリオシレータは他のモジュールによって有効となる
   ADOEN:
    1=ADOSCが明示的に有効となる
    0=ADOSCが他のモジュールによって有効とされる(デフォルト)

 OSCFRQ:HFINTOSC周波数選択レジスタ
   HFFRQ〈3:0〉 Nominal Freq.(MHZ)  2xPLL Freq(MHZ)
              (NOSC = 110)       (NOSC = 000)
    0000         1           Reserved
    0001         2           Reserved
    0010        Reserved         Reserved
    0011         4           Reserved
    0100         8             16
    0101        12             24
    0110        16             32
    0111        32           Reserved
    1xxx        32           Reserved


(2)新タイマ0(TIMER0)概要
  TMR0本体は16bit化されている様で、TMR0LとTMR0Hとにイメージされます。(注1)
  それにプリスケーラが15bit、ポストスケーラが4bitとなっています。(注2)
  これにより、高速クロックでも長時間タイマが設定できるようになりました。
  タイマ0クロックソースも各種選択できます。
  8bitモードでのTMR0では、TMR0LとTMR0Hとの比較が可能です。(注3)
  割込み発生条件は2種類あり、ポストスケーラを通過して出力される(注4)

注1)
TMR0本体は16bit構成となった様ですが、下位8bitはTMR0Lとしてアクセス可能
上位8bitは直接アクセスできず、TMR0Hを介して間接的にアクセスします。
TMR0Hに書き込んでもTMR0上位8bitにすぐには書き込まれません。
TMR0Lに書き込むと、TMR0HのデータがTMR0上位8bitに転送されます。
読込の場合も同様で、TMR0Lを読込むと、TMR0上位8bitデータがTMR0Hに転送される。

注2)
プリスケーラとポストスケーラは、下記の条件でクリアされる
 TMR0Lへの書き込み
 T0CON0あるいはT0CON1への書き込み
 任意(POR or /MCLR or WDTR、BOR・・・)のデバイス・リセット時

注3)
実際はTMR0LとTMR0Hとの比較が行われるのではないので注意
TMR0LとTMR0上位8bitとの比較なので、データ転送が行われないと正しく比較できません。

注4)
タイマ0割込みは以下の条件でTMR0IFがセットされる
 8bitのTMR0LとTMR0Hが一致
 16bitのTMR0がFFFFHからロールオーバー
ただし、ポストスケーラビットが1:1にセットされた時に上記条件でTMR0IFがセットされる
ポストスケーラがデバイダとして機能した場合、割込みも条件も分周される

 1)関連SFR(抜粋)

 T0CON0:タイマ0制御レジスタ0
   T0EN:TMR0イネーブルビット
    1=モジュール イネーブル
    0=モジュール ディセーブル
   T0-OUT:TMR0出力ビット(読み込み専用)
   T016BIT:TMR0動作モード設定
    1=TMR0は16bitモード
    0=TMR0は8bitモード
   T0OUTPS:ポストスケーラ(デバイダ)選択ビット
    1111=1:16
    1110=1;15
    1101=1:14
    1100=1:13
    1011=1:12
    1010=1;11
    1001=1:10
    1000=1:9
    0111=1:8
    0110=1:7
    0101=1:6
    0100=1:5
    0011=1:4
    0010=1:3
    0001=1:2
    0000=1:1

 T0CON1:タイマ0制御レジスタ1
   T0CS:TMR0クロックソース選択ビット
    111=CLC1
    110=SOSC
    101=Reserved
    100=LFINTOSC
    011=HFINTOSC
    010=Fosc/4
    001=T0CKIPPS(Invered)
    000=T0CKIPPS(True)
   T0ASYNC:TMR0入力非同期化イネーブルビット
    1=TMR0カウンタ入力はシステムクロックと同期しない
    0=TMR0カウンタ入力はFosc/4と同期する(通常はこれを選択)
   T0CKPS:プリスケーラ選択ビット
    1111=1:32768
    1110=1;16834
    1101=1:8192
    1100=1:4096
    1011=1:2048
    1010=1;1024
    1001=1:512
    1000=1:256
    0111=1:128
    0110=1:64
    0101=1:32
    0100=1:16
    0011=1:8
    0010=1:4
    0001=1:2
    0000=1:1
戻る  実験・製作の記録TOPへ戻る