HOME > 技術談話 > PIC microcontroller > PIC16F1823(試食)
はじめに 新規取り扱い ウォーミングアップ 書けない? 敗者復活 書き込みテスト 開発環境更新
内蔵クロックの選択と調整 シリアル通信とLCD
まとめ
2011/02/02 |
▲ |
秋月電子通商さんで1月から取り扱いを始めたデバイスは以下の通りです。価格は1月末時点の情報です。 |
型番 | PIN | ROM | RAM | EEP | 通販コード | 値段 | 取り扱い開始 | |
PIC16F1823 | 14 | 2K | 128 | 256 | I-04347 | \100 | 2011/01/14 | |
PIC16F1827 | 18 | 4K | 384 | 256 | I-04430 | \120 | 2011/01/14 | |
PIC16F1933 | 28 | 4K | 256 | 256 | I-04431 | \150 | 2011/01/08 | |
PIC16F1936 | 28 | 8K | 512 | 256 | I-04348 | \150 | 2011/01/08 | |
PIC16F1937 | 40 | 8K | 512 | 256 | I-04466 | \170 | 2011/01/08 | |
PIC16F1938 | 28 | 16K | 1024 | 256 | I-04357 | \150 | 2011/01/08 | |
PIC16F1939 | 40 | 16K | 1024 | 256 | I-04346 | \180 | 2011/01/08 |
秋月電子通商さんで取り扱っている他のデバイスと比べると、性能が高く、価格が安いです。 動作電圧が広く、内蔵クロックで最大32MHz動作、メモリも比較的大きい。。何ともいいことずくめ! … この時点では将来を確信していた自分が情けない orz 各デバイスの詳細についてはデータシート、紹介記事を参考にするとして、まずは単純に動かしてみましょう。 今回はワンコイン(送料別)で購入できる PIC16F1823 を利用して小さなプログラムを作ります。 |
2011/02/03 |
▲ |
(1)サンプルプログラム これまでのPIC16系に対して機能だけでなく命令も拡張されています。ということはコンパイル結果も異なるはず。。 そこで単純な命令(代入中心)だけのプログラムを作成し、コンパイルされた結果を確認します。 比較対象はメモリサイズの似ている PIC16F628A を選択しました。 サンプルプログラムはこちら → Test0100.zip 2011/02/02 開発環境は MPLAB IDE V8.40 と HI-TECH C V9.70 を利用しています。 あくまでもコンパイル具合を確認するだけなので、ターゲット上で実行しても無意味です(寡黙)。 そうそう、私がこれまでに作成したプログラム記述と少しだけ流儀を変えていますがご容赦願います。 ・デバイス環境の宣言 pic.h → htc.h ・main関数の型宣言 void → int このあたりはマイブームというか、PIC18系との共存、他のコンパイラの都合が加味されています。 |
(2)コンパイル結果 さて、コンパイル結果は・・・(Test1823.lst/Test628a参照)。。 やはり HI-TECH C Liteモード。無償であるがゆえに最適化が抑止され、差し障りのない命令が挿入されます。 このあたりは無償ゆえの宿命。それでも容量制限、デバイス制限が無いというメリットの方が助かります。 さて、コンパイル結果をざっと見た感じでは PIC16F1823 に変更することで大きく変わるのは、 ・拡張された命令を利用。 ・割り込み前後のレジスタ待避が無い。 ・バンク切り替え方法の変更。 ・間接アクセス手法に新しい展開方法を適用。 ・スタック容量の拡張に対応。 でしょうか。 必要とする ROM 容量の変化は少ないです。これは少々残念。まぁ、元プログラムが同じですし。。 |
(3)少しだけまとめ スタック領域が拡張されたのでプログラミング手法を工夫すると ROM 容量については貢献できます。 例えば、従来マクロ命令を利用してスタックを使わない様、直接展開していた箇所を関数化することで ROM 容量を削減することができます。呼び出しオーバーヘッドは増えますが、そのあたりは源発振の選択でカバーできそうです。 但し、度を超す関数化は他の PIC16 シリーズへの移植が困難になるので注意が必要です。一品物ならともかく、再利用予定のライブラリ等はマクロ機能を活用する方法を勧めます。 アセンブラでプログラミングすれば、拡張された命令を利用し、また無駄な命令を排除することでコンパクトなプログラムを作成することができます。ですが、拡張された命令を利用した場合は後戻りが困難です。ソフトウェアの生産性を考えると、ここはC言語に任せた方が再利用時に有利です。 |
2011/02/03 |
▲ |
(1)あれ? コンパイルできれば次はデバッグと書き込み。 少なくとも秋月電子通商さんの PICプログラマー は未対応だから PICkit2 が頼みの綱。 で…。 できない…選択できない。Debugger も Programmer も。。 クリックすると別ウィンドウで原寸表示します。 |
(2)未対応? PICkit3 が選択できるのに、PICkit2 が選択できないのは、なぜ? 今更の時期ですがデバイスサポート状況を再確認(インストールしたフォルダに htm ファイルがあります)。 … ex C:\Program Files\Microchip\MPLAB IDE\Readmes\Device Support.htm PIC16F1823 っと。。。。。あっ |
Ver | SIM | PICkit2 | PICkit3 | ICD 3 | ASM | Date | ||||
DBG | PRG | DBG | PRG | DBG | PRG | |||||
8.40 | Y | R | R | R | R | R | R | Y | 2009/10/09 |
表記は「G」で対応、「Y」でベータ版、「R」で未対応(もしかしたら間に合うかも…)を示しています。 SIMはシミュレータ、ICD3は…MPLAB ICD3。いわゆる丸缶状(浅田飴風)の開発ツールです。 これが現状。そういえば Select Device のウィンドウでも赤一色だった事を重い出します。 地雷を踏んでしまった?気づくのが遅すぎた orz 左が PIC16F1823、右が PIC16F628A です。 クリックすると別ウィンドウで原寸表示します。 |
PIC16F1823 は赤マークばかり。これってデバイスサポートリストの表記に対応しているようです。 サポートされていない(?)その割にはデバイス選択ができてコンパイルもできるという不思議(汗 ちなみに冒頭の新規取り扱いリストで挙げたデバイス。あまり芳しくありません。特に PICkit2 の扱い orz やはり過去の遺物になってしまうのでしょうか(涙 |
(3)バージョン毎の違い 私が現在使用しているのは MPLAB IDE V8.40。ちょっと古めです。安定したとも言います(汗 現在はそれよりもバージョンアップしているので、もしかしたらサポートが開始されているかもしれません。 期待してもいいのかな? そこで手持ちのダウンロード済みのファイルを調べてみました(全部のバージョンではありません)。 |
PIC16F1823の場合。 |
Ver | SIM | PICkit2 | PICkit3 | ICD 3 | ASM | Date | ||||
DBG | PRG | DBG | PRG | DBG | PRG | |||||
8.36 | Y | R | R | R | R | R | R | Y | 2009/08/18 | |
8.40 | Y | R | R | R | R | R | R | Y | 2009/10/09 | |
8.50 | Y | R | R | Y | Y | Y | Y | Y | 2010/04/12 | |
8.53 | Y | R | R | G | G | G | G | Y | 2010/06/11 | |
8.56 | Y | R | R | G | G | G | G | G | 2010/08/13 | |
8.63 | Y | R | R | G | G | G | G | G | 2010/12/20 |
PICkit3 をお使いのユーザーさん。 MPLAB IDE のバージョンアップで対応できそうです。おめでとうございます。 PICkit2 をお使いのユーザーさん。泣いて下さい。蚊帳の外です。 ちなみに、冒頭の新規取り扱いリストで挙げたデバイス。これについても確認してみました。 |
PIC16F1827 の場合。 |
Ver | SIM | PICkit2 | PICkit3 | ICD 3 | ASM | Date | ||||
DBG | PRG | DBG | PRG | DBG | PRG | |||||
8.36 | Y | R | R | Y | Y | Y | Y | G | 2009/08/18 | |
8.40 | Y | R | R | Y | Y | Y | Y | G | 2009/10/09 | |
8.50 | Y | R | R | G | G | G | G | G | 2010/04/12 |
PIC16F1933の場合。 |
Ver | SIM | PICkit2 | PICkit3 | ICD 3 | ASM | Date | ||||
DBG | PRG | DBG | PRG | DBG | PRG | |||||
8.36 | Y | R | R | Y | Y | Y | Y | G | 2009/08/18 | |
8.40 | Y | R | R | G | G | G | G | G | 2009/10/09 |
PIC16F1936、PIC16F1937の場合。 |
Ver | SIM | PICkit2 | PICkit3 | ICD 3 | ASM | Date | ||||
DBG | PRG | DBG | PRG | DBG | PRG | |||||
8.36 | Y | R | R | G | G | G | G | G | 2009/08/18 |
PIC16F1938の場合。 |
Ver | SIM | PICkit2 | PICkit3 | ICD 3 | ASM | Date | ||||
DBG | PRG | DBG | PRG | DBG | PRG | |||||
8.36 | - | - | - | - | - | - | - | - | 2009/08/18 | |
8.40 | Y | R | R | R | R | R | R | Y | 2009/10/09 | |
8.50 | Y | R | R | R | R | R | R | Y | 2010/04/12 | |
8.53 | Y | R | R | Y | Y | G | G | Y | 2010/06/11 | |
8.56 | Y | R | R | G | G | G | G | G | 2010/08/13 |
PIC16F1939の場合。 |
Ver | SIM | PICkit2 | PICkit3 | ICD 3 | ASM | Date | ||||
DBG | PRG | DBG | PRG | DBG | PRG | |||||
8.36 | - | - | - | - | - | - | - | - | 2009/08/18 | |
8.40 | Y | R | R | R | R | R | R | Y | 2009/10/09 | |
8.50 | Y | R | R | Y | Y | Y | Y | Y | 2010/04/12 | |
8.53 | Y | R | R | G | G | G | G | Y | 2010/06/11 | |
8.56 | Y | R | R | G | G | G | G | G | 2010/08/13 |
PICkit2 は… orz |
2011/02/03 |
▲ |
(1)PICkit2は未対応? 無難なのは PICkit3、ICD3 を購入することですが、せっかく持っている PICkit2 が使えないのは悲しいです。 色々調べたらありました。PICkit2 Programmer アプリケーション。PICkit2 は専用アプリがあるんですよね。 現在持っているバージョンは 2.61.00/1.61.00 ですが、デバイスファイルを差し替えることで対応できそうです。 マイクロチップ社ホームから見て、 Development Tools → MPLAB Emulators & Debuggers → PICkit2 にデバイスファイル(Device File 1.62.3)があります。直接リンクなので切れた時は順番に経由して下さい。 サポートリストを確認したところ冒頭の新規取り扱いリストに挙げたデバイスは対応していました。 タイムスタンプは 2010/06/05。昨年の夏ですね。 |
(2)準備 ダウンロードしたファイルを解凍して得られるのが PK2DeviceFile.dat。これを既存ファイルと入れ替えます。 標準インストールであれば C:\Program Files\Microchip\PICkit 2 v2 に既存ファイルがあると思います。 念のため、既存ファイルはファイル名を変更しておくことを勧めます。 |
(3)起動…失敗? パソコンの環境は準備できました。さて PICkit2 Programmer を起動。。。。 おや、なんで? Device のプルダウンメニューの中にデバイスが見当たらない。今現在、PICkit2 が未接続だから? いや、そもそもプルダウンメニューは自動認識できないデバイスを選択する為の手段? バージョンは 2.61.00/1.62.03 なので新しいデバイスファイルを認識しているはず・・・。なんですけどね(汗 |
(4)敗者復活、再び プログラム、デバイスを接続してから起動すると自動認識できそうな予感はあります。 次回、小さな評価プログラムを作成して接続してみます。少々お待ちを。 それから、開発環境のバージョンアップ。やはり必要ですよね。 色々変わっている様なので MPLAB IDE だけでなく HI-TECH C コンパイラもアップしたいと思います。 まずは開発環境の更新前に PICkit2 の接続を試みます。 |
2011/02/03 |
▲ |
(1)はじめに PICkit2 を利用して PIC16F1823 に書き込みを行います。 開発環境は古いですが、PICkit2 のデバイスファイルのみ最新情報に更新しました。 書き込みテストなので回路、ソフト共にシンプルです。電源投入後、CLKOUT 端子に Fosc/4 の周波数を出力するだけの動作を行います。今回は内蔵クロック 500KHz を利用するので 125KHz の波形が観測できるはずです。 おまけになりますが、内蔵EEPROM への初期データ書き込みも試します。 |
(2)ハードウェア |
今回は書き込みテストと CLKOUT の観測を行うので電源は PICkit2 からの 5V 供給で済ませています。 端子はデジタル入力設定で内蔵プルアップを有効にしています。 PIC16F1823 は全10ポートありますが、総てのポートに対して個別に内蔵プルアップの設定ができるので便利です。 |
(3)ソフトウェア サンプルプログラムです → Write0100.zip 2011/02/05 開発環境は MPLAB IDE V8.40 と HI-TECH C V9.70 を利用しています。 HI-TECH C v9.70 で作成されたプログラムを v9.81 以降のコンパイラで再コンパイルする際の注意点 → 開発環境による修正 2011/03/09 CLKOUT 端子の制御は デバイスコンフィグレーションで指定しています。 内蔵プルアップを有効、デジタル入出力設定、そして無限ループだけ。基本的には中身無しです(笑 今回はオシロスコープで波形観測を行いますが、無い場合は PICkit2 の書き込みテストだけになります。 |
(4)さて、書き込む ハードウェアとソフトウェアが準備できたらブレッドボード上に実装を行い、PICkit2 で書き込みを行います。 あれ? デバイスが選択できない。自動選択も駄目。。地雷再び? 最初の接続では見事失敗。 一旦アプリケーションを終了し PICkit2 を外し、接触確認を行った後、再接続したら…。。認識できました。 ^ ^ v 再現することはできませんでしたが、駄目な場合は再接続(PC - PICkit2 も含む)をお試し下さい。 デバイスの手動選択画面と書き込み完了時の画面例を以下に。クリックすると別ウィンドウで原寸表示します。 |
冒頭の新規取り扱いリストで挙げたデバイスも総て選択できそうです。 そうそう、書き込み関して EEPROM も問題有りません。 手動選択画面では「PIC16LF…」と表示されますが、誤記かな?「(L)」をあえて表記しているデバイスもあるし?? 自動選択が無難かもしれません。自動選択における表示は問題有りません。 |
(5)動かしてみる |
電源供給は PICkit2 から 5.0V を印加し、CLKOUT 端子をオシロスコープで波形観測しました。 実装は「まんま」です。左側に PICkit2 があります。 |
CLKOUT 端子の波形を観測しました。 500KHz の 1/4、125KHz が観測できました。 より詳しい周波数測定については…。。 やはり周波数カウンタでの測定を勧めます。 見た目は綺麗ですが、誤差はあります。 オシロスコープ以外に波形を観測する方法… ・テスター付属の簡易周波数カウンタ機能 ・PICkit2 のロジアナ機能 あたりが使えそうですね(未確認)。 |
(6)少しだけまとめ PICkit3 を大急ぎで購入しようと思いましたが、手持ちの PICkit2 で何とかなりそうです。 デバッグ機能を考慮すると PICkit3 なのですが、いつものお店が在庫切れでして(汗 次回は内蔵クロックを試したいと思います。32MHz の威力。調整機能の効果。どうなるでしょう? と、その前に。。次回は開発環境を更新してから作業を行いたいと思います。私の環境は古すぎるかも orz 注意: 私の環境は古い環境ですが、PICkit2 のアプリケーション機能の更新だけで動作確認できました。 前述のバージョン毎の対応状況から見るとMPLAB IDE は昨年夏(V8.56)以降であれば何とかなりそうです。 新しすぎるバージョンは人柱的な要素もありますが、まぁ避けていても仕方ないので、ここは試食ということで。 そういえば…今回の作業。これって、いわゆる「書き込みアダプタ」なんですね(笑 |
2011/02/05 2011/02/12 「少しだけまとめ」の項に「注意」を追加。 |
▲ |
開発環境の更新完了。まぁアンインストールとインストールするだけですが(汗 一気にバージョンアップした気がします。 せっかくなので、冒頭の「ウォーミングアップ」でやったことを試してみました。 サンプルプログラムはこちら → Test0981.zip 2011/02/05 開発環境は MPLAB IDE V8.63 と HI-TECH C V9.81 を利用しています。 HI-TECH C v9.70 で作成されたプログラムを v9.81 以降のコンパイラで再コンパイルする際の注意点 → 開発環境による修正 2011/03/09 MPLAB IDE V8.63 には HI-TECH C V9.80 が同梱されていますが、セットアップ完了後 V9.81 に更新しました。 サンプルプログラムは同じで、コンパイラの展開具合だけを確認しました。もちろん No Error です(汗 ざっと見た感じでは…。Lite版故の「しがらみ」になりますが、若干変更が加わっています。 例えば、 ・定数 0 の1バイト型変数への代入がスッキリしてきた。 ・定数 1 は今までと同様。 ・定数 2 は…面倒なことになっている(2 に限らないと思います)。 ・volatile変数の裏技が使えない(っぽい)。 という感じです。 必要なプログラム容量は相殺されそうですが、腹八分目程度のプログラム容量に抑えておく方が良いですね。 ぎりぎりまで使うと、何が起きるかわかりません(今後のバージョンアップとの兼ね合い)。 |
2011/02/05 |
▲ |
(1)はじめに 内蔵クロックで最大 32MHz 動作することのできる PIC16F1823。実際どんな感じになるのか? 今回の実験内容は…。普段操作する機会の少ない OSCCON / OSCTUNE レジスタを設定します。 OSCTUNE の設定効果を確かめたかった。という話もあります。 それでは、設定に対する CLKOUT のパルス時間を観測してみましょう。 あっ、CLKOUT は源発振を4分周したパルスになります。お間違えなく。 |
(2)ハードウェア |
書き込みテストで用いたブレッドボードにスイッチを追加しました。 実行スイッチだけプッシュスイッチを利用し、他のスイッチはブレッドボード上のジャンパ線を利用しています。操作はジャンパ線を操作した後でプッシュスイッチを押下します。 スイッチ用のプルアップは内蔵プルアップを利用しています。 |
(3)ソフトウェア サンプルプログラムです → Clock0100.zip 2011/02/08 開発環境は MPLAB IDE V8.63 と HI-TECH C V9.81 を利用しています。 HI-TECH C v9.70 で作成されたプログラムを v9.81 以降のコンパイラで再コンパイルする際の注意点 → 開発環境による修正 2011/03/09 源発振を操作するので、チャタリング除去のための有意味な絶対時間を確保することが困難です。 そこで、設定スイッチ(ジャンパ線)と実行スイッチを用意し、チャタリング除去を回避する方法を採りました。 基本的な制御は「設定スイッチを切り替えた後、実行スイッチをオンしたタイミングでレジスタ設定を行う」です。 この操作(運用上のルールとも言う)を行う事で、 ・設定スイッチ(ジャンパ線)を切り替えている間、その内容は反映されません。 ・実行スイッチがオフからオンに変化したタイミングで設定スイッチの内容(安定しているはず)を反映します。 ・実行スイッチでチャタリングが発生します。が、設定スイッチの内容は変化していないので同じデータを上書き。 という具合で処理が進みます。 今回の制御は、同じ値をレジスタに書き込んだ場合、動作に影響を与えない。というのが大前提です。 |
(4)操作 設定スイッチ(今回はジャンパ線で代用)を切り替えた後、実行スイッチをオンすると設定が反映されます。 設定手法はデバイスのピン配置、ブレッドボードでの配置に依存してしまいますが、ここではデバイスの端子(ポート)を基準に、設定される内容について示します。 ジャンパ線の操作は、オープンで H レベル、GND接続で L レベルになります。 まずは源発振の設定スイッチを以下に。多くの設定項目の中から選抜しています。 |
RC2 | RC1 | RC0 | Clock | HF | MF | LF | Note | |
L | L | L | 31KHz | ○ | 未調整 | |||
L | L | H | 31.25KHz | ○ | ||||
L | H | L | 31.25KHz | ○ | ||||
L | H | H | 250KHz | ○ | ||||
H | L | L | 500KHz | ○ | 工場調整済み | |||
H | L | H | 500KHz | ○ | ||||
H | H | L | 8MHz | ○ | 工場調整済み、PLLにより32MHz可能 | |||
H | H | H | 16MHz | ○ |
続いて、源発振調整値(OSCTUNE)の設定スイッチを以下に。範囲はありますが、飛び飛びで選抜しています。 |
RC5 | RC4 | RC3 | 補正値 | RA2 | Note | ||
L | L | L | 0 : 000000 | L | PLL禁止 | ||
L | L | H | +8 : 001000 | H | PLL許可(8MHz 選択時に 32MHz 動作) | ||
L | H | L | +16 : 010000 | ||||
L | H | H | +24 : 011000 | ||||
H | L | L | -32 : 100000 | ||||
H | L | H | -24 : 101000 | ||||
H | H | L | -16 : 110000 | ||||
H | H | H | -8 : 111000 |
源発振調整値は値の変化が見えないので下位 3 ビットに 0 を代入して底上げしています。 |
(5)動かしてみる |
電源供給は PICkit2 から 5.0V を印加。CLKOUT 端子をオシロスコープでは系観測しました。 前述の「書き込みテスト」に比べるとスイッチ代わりのジャンパ線が幾つもあり…。成長したとも言います。 |
CLKOUT 端子の波形を観測しました。 設定は 8MHz + PLL で 32MHz を設定しました。 この時の調整値は 0 です。 32MHz の1/4、8MHz が観測できました。 数値の端数は…オシロスコープの都合と言うことで。 時間軸の目盛りは 20ns です。 |
設定は 16MHz、PLL設定は無視されます。 この時の調整値は 0 です。 16MHz の1/4、4MHz が観測できました。 時間軸の目盛りは 50ns です。 こちらも数値に端数がありますね。 周波数カウンタ。必要かなぁ(汗 |
(6)観測結果 源発振と源発振調整値の切り替えで得られたパルス幅(オシロスコープ自動計測)は以下の通りです。 お使いのオシロスコープや周波数カウンタにより微妙に異なる値が得られると思いますので…参考値です。 |
源発振 | 24 | 16 | 8 | 0 | -8 | -16 | -24 | -32 | |
31K LF (H:20us) | 124.000 | 124.000 | 124.000 | 124.000 | 124.000 | 124.000 | 124.000 | 124.000 | |
31.25K MF (H:20us) | 125.000 | 126.000 | 127.000 | 128.000 | 129.000 | 130.000 | 130.000 | 132.000 | |
31.25K HF (H:20us) | 125.000 | 126.000 | 127.000 | 127.000 | 129.000 | 130.000 | 130.000 | 132.000 | |
250K MF (H:2us) | 15.600 | 15.700 | 15.800 | 16.000 | 16.100 | 16.200 | 16.400 | 16.500 | |
500K MF (H:1us) | 7.800 | 7.840 | 7.920 | 8.000 | 8.080 | 8.120 | 8.160 | 8.240 | |
500K HF (H:1us) | 7.800 | 7.840 | 7.920 | 8.000 | 8.060 | 8.120 | 8.160 | 8.240 | |
8M HF (H:0.05us) | 0.487 | 0.491 | 0.495 | 0.499 | 0.503 | 0.507 | 0.511 | 0.515 | |
16M HF (H:0.05us) | 0.244 | 0.246 | 0.248 | 0.250 | 0.252 | 0.254 | 0.256 | 0.258 | |
32M HF (H:0.02us) | 0.122 | 0.123 | 0.124 | 0.125 | 0.126 | 0.127 | 0.128 | 0.129 |
数値はパルス幅、単位は us です。源発振を4分周していることに注意して下さい。 パルスの幅をオシロスコープの計測機能を利用して計測しました(256回分の平均化した値が基準)。 表内の数値は見易くするために小数点以下を付与して桁あわせしていますが、オシロスコープによる計測ではパルス全体を画面上に表示しなければならず、その結果として有効桁が切られ、値が丸め込まれてしまいます。 源発振の欄にある括弧内の数値は、パルス幅を確認したときの水平軸メモリの時間幅です。パルス幅が長くなると、それだけ切り捨て、丸め込みが行われてしまうことに注意が必要です。 OSCTUNE による調整は MF/HF に対して有効で、LF には効きません。 観測結果の数字を眺めていても仕方ないので代表的な源発振をグラフ化してみます。 四角マークは実測値、直線は表計算ソフトによる線形近似(自動算出)を利用しています。 |
32MHz HF | 8MHz HF |
500KHz MF | 31KHz LF |
源発振調整値(OSCTUNE)の設定値にパルス幅が比例しています。 500KHz MF では測定機器の性能、仕様に依存するため、値が少し外れます(推測)。 今回は飛び飛びの調整値を利用しましたが、予想していたよりは細かく微調整できそうです。 |
(7)少しだけまとめ いい感じで値を得ることができました。源発振調整値の刻みは、設定されている源発振の 0.1% 位です。 レジスタ設定値は符号付き 6bit なので +3.1% 〜 -3.2% の範囲で微調整ができそうです(PIC16F1823の場合)。 今回の測定結果、グラフを含めて表計算データ(Excel2007)にまとめました → pic_1823_clock_rep.xlsx 内蔵発振子といえども調整を行えばセラミック発振子並の精度に収まる。と皮算用。 実際には周囲温度で誤差が変動するので過信は禁物です。 これまで操作することの無かった源発振調整値(OSCTUNE)。今回の実験で少しだけスッキリしました。 次回は「見える物」を実験してみます。 |
2011/02/10 |
▲ |
PIC16F1823 と LCD を組み合わせて「シリアル通信モニタ」を試作してみました。 |
最大通信速度は 230.4Kbps、連続受信(Min43.4us/byte)してもオーバーランエラーは発生しません。 C言語(Lite版なので助長的なコード)で作成していますが、内蔵クロック 32MHz、割り込み、そして一部アセンブラを利用することで負荷率は低く抑えられています。 根本的な話、230.4Kbps の通信速度誤差を低く抑えるためには 32MHz 駆動でないと駄目かと。 詳細については長くなりそうなので別項(シリアル通信モニタ)にて掲載します。 |
2011/02/26 2011/02/27 別項のリンクを追加 |
▲ |
PIC16F1823 を初めとした PIC16F1xxx系はこれまでのデバイスに比べ沢山の機能が盛り込まれています。 今まで用途別にデバイスを購入していましたが、これらのデバイスが総てお蔵入りするくらいの勢いです。 … これはこれで困りますが(汗 書き込み装置やデバッガを初めとした開発環境との兼ね合いはありますが、ライブラリ等ソフトウェア資産を持つ人にはベターなデバイスです。 今回、試食の最後で「シリアル通信モニタ」を作成しました。 デバイス型番は異なるものの、既存の通信ライブラリ、LCDライブラリは無修正、再コンパイルのみで利用できたのが幸いです。また、スタック領域が拡張されているので割り込み処理の深さを気にせず、自由に機能を配置できることも魅力です。例えば割り込み駆動で大きな(深い)処理をすることも可能です。 難点は「後戻り」。 高速動作、スタック拡張になれてしまうと既存デバイスへの再移植で苦労するかもしれません。アセンブラも一部拡張されているので、その命令を移用した場合は既存デバイスでの動作は不可です。 このあたりは時代の流れでしょうか? 買い置きのデバイスが数種類あるのですが…。コレクションになってしまうのかなぁ。。 |
2011/02/26 |
▲ |
16F1823 1823 16F1827 1827 16F1933 1933 16F1936 1936 16F1937 1937 16F1938
1938 16F1939 1939
内蔵クロック 源発振 調整 シリアル UART 通信 書き込み アダプタ