AN1470
概要
PIC16F150x が内蔵する CLC( 構成可能なロジックセ
ル) と NCO ( 数値制御オシレータ ) を使うと、マンチェ
スタ デコーダを構築できます。PIC16F150x は、低消
費電力XLP技術に対応したエンハンストコアを実装し
たデバイスです。デコーダはファームウェアのサポー
トをほとんど必要としないため、モジュールの初期化
後に必要な
CPU サイクルはごくわずかです。データ
とクロックを内部
SPI モジュールに供給し、最大 500
kbps でデータをキャプチャできます。
はじめに
マンチェスタ エンコードは通信およびデータスト
レージ
アプリケーションで幅広く使われています。広
く採用されている理由は、その単純さと同期が取りや
すいというメリットです。全てのビットで少なくとも
1 回は遷移が保証されているため、受信デバイスはク
ロックとデータを復元できます。この方式は
DC 成分
がゼロのため、誘導性または静電容量性の結合が可能
です。一般的なアプリケーションでは、データ送信に
使うマンチェスタ エンコーダと、受信に使うデコーダ
が必要です。本書では、PIC16F が搭載する NCO と
CLC 周辺機能をマンチェスタ デコーダとして使う方
法を示します。従来のアルゴリズムでは
CPU 時間を
使い過ぎて、アプリケーションの他のニーズに応える
ための
CPU 時間がほとんど残らない事もありました。
以下に示す手法では、
CPU クロックから独立して動作
するモジュールを使うとともに
CPU 使用率がゼロで
あるため、
データのエンコード/デコードがアプリケー
ションの処理を阻害しません。
エンコードの規格に応じて、データはビット期間の前
半または後半に得られます。業界で使われているマン
チェスタ エンコード信号には 2 つの規格があります。
G.E. Thomas 方式マンチェスタ エンコード信号 (
図
1
)
では、
「0 」を Low から High への遷移、「1」を High
から
Low への遷移によって送信します。
図
1:
マンチェスタ
エンコードデータ (G.E. Thomas 方式 )
IEEE 802.3 準拠のマンチェスタ エンコード信号 (
図
2
)
は、
G.E. Thomas 方式とは逆に「0 」を High から Low
への遷移によって送信します。
図
2:
マンチェスタ
エンコードデータ (IEEE 802.3 準拠 )
著者
:
Jatinder Gharoo
Brian Bailey
Microchip Technology Inc.
CLC と NCO を使ったマンチェスタ デコーダ
注意: この日本語版文書は参考資料としてご利用ください。最新情報は必ずオリジ ナルの英語版をご参照願います。
AN1470
構成可能なロジックセル
ここでは
PIC16F150x マイクロコントローラの CLCモ
ジュールを使ったマンチェスタ デコーダの実装につ
いて説明します。構成可能なロジックセル
(CLC) は、
CPU 実行の制約を受けずに動作する、プログラマブル
ロジックを提供します。
CLC を使うと、選択可能な単
一出力ロジック機能を駆動する構成可能なゲートに
よって、他の周辺モジュール、入力ピン、レジスタビッ
トからの信号を多重化できます。
各
CLC モジュールの
出力は、チップ内部で周辺モジュール、他の
CLC モ
ジュール、出力ピンに接続できます。以下の
8 つをは
じめ、各種ロジック機能を構成できます。
• AND-OR
• OR-XOR
• AND
• S-R ラッチ
• セット / リセット付き D フリップフロップ
• リセット付き D フリップフロップ
• リセット付き J-K フリップフロップ
• セット / リセット付き透過ラッチ
図
3
にロジック機能を示します。各ロジック機能は
4
入力
1 出力です。4 つの入力は、前段の 4 つのデータ
ゲート出力です。
CLC コンフィグレーション ツール
CLC は、あらかじめプログラムしておく事も動的に構
成する事もできる、複数の組み合わせおよび順序回路
を収めた周辺機能です。
柔軟性が高くパワフルな反面、
構成と設定は複雑です。マイクロチップ社が提供する
CLC コンフィグレーション ツールを使うと、モジュール
の設定が簡単です。未接続の入力があるゲートは全て
ロジック0として読み出される事に注意してください。
ゲートまたはラッチへロジック「
1」を入力するには、
「0」を反転します。ツールのスクリーンショットは
「補遺
A」
を参照してください。
AN1470
図
3:
CLC 機能
lcxg1 lcxg2 lcxg3 lcxg4 lcxq lcxg1 lcxg2 lcxg3 lcxg4 lcxq lcxg1 lcxg2 lcxg3 lcxg4 lcxq S R Q lcxg1 lcxg2 lcxg3 lcxg4 lcxq D Q lcxg1 lcxg2 lcxg3 lcxg4 lcxq S R J Q lcxg2 lcxg3 lcxg4 lcxq R lcxg1 K D Q lcxg1 lcxg2 lcxg3 lcxg4 lcxq S R D Q lcxg1 lcxg3 lcxq R lcxg4 lcxg2 LCxMODE<2:0>= 000 LCxMODE<2:0>= 010 LCxMODE<2:0>= 001 LCxMODE<2:0>= 011 LCxMODE<2:0>= 100 LCxMODE<2:0>= 110 LCxMODE<2:0>= 101 LCxMODE<2:0>= 111 LE AND - OR OR - XOR4-Input AND S-R Latch
1-Input D Flip-Flop with S and R 2-Input D Flip-Flop with R
1-Input Transparent Latch with S and R J-K Flip-Flop with R
AN1470
数値制御オシレータ
(NCO)
図
4
に示す
NCO モジュールは、16 ビット インクリメ
ント レジスタを使って 20 ビット アキュムレータに加
算し、入力周波数を分周するタイマです。
NCO が最も
効果を発揮するのは、固定デューティ サイクルで周波
数精度と高分解能が必要なアプリケーションです。
NCO には以下の特長があります。
• 16 ビット インクリメント機能
• 固定デューティ サイクル (FDC) モード
• パルス周波数 (PF) モード
• 出力パルス幅制御
• 複数のクロック入力源
• 出力の極性制御
• 割り込み機能
図
4:
NCO のモジュール図
NCO の重要な特長の 1 つとして、アキュムレータが
オーバーフローするごとにパルス出力を生成する機能
があります。出力は指定されたクロック期間アクティ
ブになります。クロック期間が終了すると、出力は非
アクティブ状態に戻ります。
NxEN LC1OUT HFINTOSC NCO1CLK 2 NxCKS<2:0> (1) FOSC 10 00 01 11 Increment Buffer Accumulator 6 Overflow NCOx Clock D Q Q S Q Q Overflow R NCOxOUT 16 20 20 Interrupt eventSet NCOxIF flag
NxPOL NCOx Clock 0 1 NxPFM To CLC, CWG
Ripple Counter Reset NxPWS<2:0> 3 16 NCOx NxOE TRIS Control
Note 1: インクリメント レジスタは、最初に NCOx モジュールを無効化しなくとも値を変更できるように、
ダブルバッファ構成を採用しています。ここでは参考のために示しています。このバッファにはユーザ
はアクセスできません。
AN1470
マンチェスタ
デコーダ
このセクション以降で説明する手法は、
図
1
に示した
G.E. Thomas方式のマンチェスタ エンコードに基づく
ものです。この方法は柔軟であり、
IEEE 802.3 に簡単
に移植できます。最初の遷移に対しては、モジュール
のアイドル状態、マイクロコントローラ
ピンの電源投
入時設定、最初の受信ビット ( エンコード方法に応じ
た遷移
) に基づいて、複数の実装方法があり、検討が
必要です。起動時とアイドル時の状態は、
セクション
「同期」
で説明します。CLC モジュールは非常に柔軟
であり、各モジュールの入出力極性を個別に反転する
事で、多様なシナリオに適用できます。
NCO モジュー
ルのアイドル状態もソフトウェアで制御できます。以
下に説明する方法は、データが各ビット期間の前半で
得られる事を前提としています。
G.E. Thomas 方式でエンコードされた以下のビットス
トリームを例として取り上げます
(
図
5
)。
この信号は、
図
6
に示すようにクロックラインとデー
タラインにデコードされます。
図
5:
エンコードされたビットストリーム
図
6:
データラインとクロックライン
このビットストリームで注目すべき点は2つあります。
ビット値が各ビット期間の前半、ビット中間遷移より
前に存在する事と、各ビット期間の中間で遷移が発生
する事です。このビット中間遷移によって
NCO をト
リガし、3/4 ビット期間を使ってオーバーフローさせ
る事で次のビット値をキャプチャできます
(
図
7
)。こ
の
3/4 ビット期間によって、最大± 1/4 ビット期間の
誤差が許容されます。
図
7:
データキャプチャ
AN1470
この構成からクロックを抽出するには、
OR-XOR コン
フィグレーションのCLCモジュールを使います(
図8
)。
図
8:
クロックの抽出
これは実質的には
CLC OR-XOR をクロック、D をデー
タとするマンチェスタ
デコーダです。D からのデータ
キャプチャにクロック信号の立ち上がりエッジを使え
ば全てのビットがデコードされますが、最初の
1 ビッ
トだけはデコードされません。この問題を解決できる
方法は何通りかあり、
セクション
「同期」
で説明します。
図
9:
マンチェスタ
デコーダ
上記のタイミング図 (
図
9
) は、以下のモジュール図
(
図
10
) の回路でデコードできます。この図では以下
の
5 段を示します。
• 第 1 段 - 受信マンチェスタ信号
• 第 2 段 - NCO がトリガされた時に入力データを
キャプチャする
D フリップフロップ
• 第3段 - NCOの起動タイミングを与えるXORゲート
• 第 4 段 - NCO にクロックを供給し、3/4 ビット期間の
全期間確実にクロッキングされるようにするAND-OR
ゲート
• 第 5 段 - 前ビットのビット中間遷移時に起動し、3/4
ビット期間を生成する
NCO
AN1470
図
10: デコーダ全体のモジュール図
PIC16F1509 への実装
PIC16F1509 への実装方法を説明します。特定のビット
期間を生成する
NCO と、組み合わせロジックを実装
するための
4 つの CLC モジュールを内蔵しています。
以下のセクションでは、このデバイスが内蔵するリ
ソースを用いたこれらのモジュールの実装について説
明します。
第
1 段 - D フリップフロップ (CLC4)
この段はクロック信号の立ち下がりエッジでマンチェ
スタ データをラッチします。この出力はマイクロコン
トローラに供給される復元データです。デコードされた
データはクロックの立ち下りエッジでサンプリングさ
れていますが、クロックの立ち上がりエッジで安定し
て読み出す事ができます。データラインはクロックの
立ち上がりエッジでは決して変化しないためです。
第
2 段 - XOR ゲート (CLC2)
マンチェスタ エンコードでは各ビットの中央での遷
移が保証されているため、
XOR ゲートによって、ビッ
ト中間遷移ごとに第
3 段で使う立ち上がりエッジを確
保できます。これは、デコーダを各ビットの中央で同
期させている事を意味します。
第
3 段 - NCO + AND-OR (CLC1)
PIC16F1509 はデータ値をキャプチャするための 3/4
ビット期間の生成に使う
NCO モジュールを内蔵して
います。
NCO は 3/4 ビット期間が経過した時点でパル
スを出力するために、アクティブ
Low のパルス周波数
モードで使います。パルス幅は特殊機能レジスタで制
御します。このモジュールには指定されたクロック速
度でアキュムレータに一定の値を繰り返し加算するた
めのクロック源も必要です。これは
CLC1 から供給さ
れます。
これら
2 つのモジュールはデコーダ内で最も重要な要
素です。これらは第
2 段から出力される立ち上がり
エッジごとに固定長のパルスを生成します。第
2 段の
出力が
0 に遷移した場合もオーバーフローするまで
NCO がクロッキングを継続するように、NCO の出力
を
AND-OR ゲートに戻します。
デバイスは構成される際に、
3/4 ビット長のパルスを 1
つ出力します。これは、NCO をアクティブ Low 状態
に移行させるために必要です。
NCO はアクティブにな
ると
NCOCLK レジスタで設定された出力パルス幅ク
ロックを待機します
*。クロック源が供給された時点で
アクティブパルスを終了し、カウントを再開します。
* 設計のヒント : NCO をクロック源から切り離してア
クティブ状態に保持すると、NCO のデューティ サイ
クルを制御できます。
CLC4 CLC2 CLC1 Data In D S Q1 R CLK NCO OUT Data Out FOSC Clock OutAN1470
図
11
に、
25 kHz のマンチェスタ データ入力の例を示
します。
25 kHz の場合のビット期間は 40 s です。こ
れは、データをキャプチャし、
NCO クロックを抽出さ
れるクロックの立ち上がりエッジに同期させるため
に、3/4 ビット期間として 30 s を生成する必要があ
る事を意味します。
図
11: ビットタイミング
NCO を構成するには、マイクロチップ社ウェブサイト
に掲載している
PIC16F1509 のデータシートの式 25-1
を参照してください。
式
1:
NCO はパルス周波数モードで使います。このモードで
は、アキュムレータがオーバーフローするたびに、あ
らかじめ設定されたクロック周期数の間出力がアク
ティブになります。
NCO をアクティブ (Low) 状態に保
持するには、これらのクロックを
NCO から切り離す
事を忘れないでください。その後、クロックは次のパ
ルスに加えられます。
16 MHz Internal Clock F
osc * Increment Value
2
20---=
F
overflowNCO Clock Frequency * Increment Value
2
n---=
30us pulse
33.33 kHz
=
16 MHz * Increment Value
2
20---
Increment
Value 2184 0x0888
=
=
=
AN1470
同期
ここまでの説明では、最初のエッジがビット中間遷移
である事を前提としていました。問題は、最初のビッ
ト中間遷移から
3/4 ビット長が経過した時点では、既
にデータの最初のビットを捉え損ねている事です。こ
の問題には複数の解決方法があります。
まず最も簡単なのは、最初のビットが既知であるデー
タを受信する方法です。データを読み出した後で、こ
のビットをマスクするだけで済みます。
もう
1 つは、最初にスタートビットを送信する方法
です。スタートビットは、最初のビットが送信される
1/2 ビット長前に発生させ、残りのデータがビット中
間遷移に同期できるようにする必要があります。エン
コードされたデータラインを既定値の状態に戻すため
に、ストップビットが必要になる場合があります。
図
12
に、デコーダ内の各段の波形タイミングを再度示し
ます。スタートビットとストップビットがあるため、
最初と最後のクロックにはデータが含まれません。ソフ
トウェア フィルタによって取り除く必要があります。こ
れは、状態変化割り込み
( スタートビットでトリガ )
機能を使ってから
SPI または UART に入力する事で実
現できます。または
Bit-Bang を使っても簡単です。
図
12: マンチェスタ デコーダ タイミング チャート
AN1470
ハードウェア
アプリケーション
CLC モジュールには各種入出力があります。
図
13
に、
デコーダを適切に動作させるために、3 つのモジュー
ルをどのように接続するかを示します。
図
13: 外部ピン接続を含むモジュール図
まとめ
本書では
CLC モジュールを使ったマンチェスタ デ
コーダの実装方法を説明しました。選択した実装方法
では、
NCO と 3 つの CLC モジュールを使いました。
シリアルデータとクロックはデータ復元のために
SPI
モジュールまたは
UART に供給するか、必要に応じて
Bit-Bang を使えます。選択した実装方法では、マン
チェスタ
デコードはごくわずかな CPU サイクルしか
使わないため、他のタスクの処理が阻害される事はあ
りません。バイトとバイトの間はデバイスをスリープ
に保持する事で省電力が可能です。
CLCモジュールを効率的に使えるアプリケーションは
他にも数多く存在します。マンチェスタ エンコードお
よ び デ コ ー ド は そ れ ら の 一 例 に 過 ぎ ま せ ん。
PIC16F1509 上のエンハンスト ミッドレンジ 8 ビット
コアは、マイクロチップ社の超低消費電力
XLP 技術を
採用し、幅広いアプリケーションに適しています。
AN1470
参考文献
Wikipedia:
http://en.wikipedia.org/wiki/Manchester_code
AN1470
補遺
A
図
14: CLC 1 (AND-OR)
AN1470
AN1470
本書に記載されているデバイス アプリケーション等に関する 情報は、ユーザの便宜のためにのみ提供されているものであ り、更新によって無効とされる事があります。お客様のアプ リケーションが仕様を満たす事を保証する責任は、お客様に あります。マイクロチップ社は、明示的、暗黙的、書面、口 頭、法定のいずれであるかを問わず、本書に記載されている 情報に関して、状態、品質、性能、商品性、特定目的への適 合性をはじめとする、いかなる類の表明も保証も行いません。 マイクロチップ社は、本書の情報およびその使用に起因する 一切の責任を否認します。生命維持装置あるいは生命安全用 途にマイクロチップ社の製品を使用する事は全て購入者のリ スクとし、また購入者はこれによって発生したあらゆる損害、 クレーム、訴訟、費用に関して、マイクロチップ社は擁護さ れ、免責され、損害を受けない事に同意するものとします。暗 黙的あるいは明示的を問わず、マイクロチップ社が知的財産 権を保有しているライセンスは一切譲渡されません。 商標 マイクロチップ社の名称とロゴ、Microchip ロゴ、dsPIC、 FlashFlex、KEELOQ、KEELOQロゴ、MPLAB、PIC、PICmicro、 PICSTART、PIC32ロゴ、rfPIC、SST、SST ロゴ、 SuperFlash および UNI/O は、米国およびその他の国におけ るマイクロチップ・テクノロジー社の登録商標です。 FilterLab、Hampshire、HI-TECH C、Linear Active Thermistor、 MTP、SEEVAL、Embedded Control Solutions Company は、 米国におけるマイクロチップ・テクノロジー社の登録商標 です。
Silicon Storage Technology は、他の国におけるマイクロ チップ・テクノロジー社の登録商標です。
Analog-for-the-Digital Age、Application Maestro、BodyCom、 chipKIT、chipKIT ロゴ、CodeGuard、dsPICDEM、
dsPICDEM.net、dsPICworks、dsSPEAK、ECAN、
ECONOMONITOR、FanSense、HI-TIDE、In-Circuit Serial Programming、ICSP、Mindi、MiWi、MPASM、MPF、 MPLAB Certified ロゴ、MPLIB、MPLINK、mTouch、 Omniscient Code Generation、PICC、PICC-18、PICDEM、 PICDEM.net、PICkit、PICtail、REAL ICE、rfLAB、Select Mode、SQI、Serial Quad I/O、Total Endurance、TSHARC、 UniWinDriver、WiperLock、ZENA および Z-Scale は、米国 およびその他の国におけるマイクロチップ・テクノロジー社 の商標です。 SQTP は、米国におけるマイクロチップ・テクノロジー社の サービスマークです。 GestIC および ULPP は、マイクロチップ・テクノロジー社 の子会社であるMicrochip Technology Germany II GmbH & Co. & KG 社の他の国における登録商標です。
その他、本書に記載されている商標は各社に帰属します。 © 2013, Microchip Technology Incorporated, All Rights Reserved. ISBN: 978-1-62077-099-3 マイクロチップ社製デバイスのコード保護機能に関して以下の点にご注意ください。 • マイクロチップ社製品は、該当するマイクロチップ社データシートに記載の仕様を満たしています。 • マイクロチップ社では、通常の条件ならびに仕様に従って使用した場合、マイクロチップ社製品のセキュリティ レベルは、 現在市場に流通している同種製品の中でも最も高度であると考えています。 • しかし、コード保護機能を解除するための不正かつ違法な方法が存在する事もまた事実です。弊社の理解では、こうした手法 はマイクロチップ社データシートにある動作仕様書以外の方法でマイクロチップ社製品を使用する事になります。このような 行為は知的所有権の侵害に該当する可能性が非常に高いと言えます。 • マイクロチップ社は、コードの保全性に懸念を抱いているお客様と連携し、対応策に取り組んでいきます。 • マイクロチップ社を含む全ての半導体メーカーで、自社のコードのセキュリティを完全に保証できる企業はありません。コー ド保護機能とは、マイクロチップ社が製品を「解読不能」として保証するものではありません。 コード保護機能は常に進歩しています。マイクロチップ社では、常に製品のコード保護機能の改善に取り組んでいます。マイクロ チップ社のコード保護機能の侵害は、デジタル ミレニアム著作権法に違反します。そのような行為によってソフトウェアまたはそ の他の著作物に不正なアクセスを受けた場合、デジタル ミレニアム著作権法の定めるところにより損害賠償訴訟を起こす権利があ ります。 マイクロチップ社では、ChandlerおよびTempe (アリゾナ州)、 Gresham (オレゴン州)の本部、設計部およびウェハー製造工場そし てカリフォルニア州とインドのデザインセンターがISO/TS-16949: