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