要約
8051ベースのマイクロコントローラを使用する際には、外部クロックリファレンスを選ぶのに注意が必要です。コントローラのシリアルインタフェースのタイミング要件が満たされなくてはならないからです。通常、8051シリアルポートは、もう一つのプロセッサまたはホストプロセッサにシリアル通信リンクを提供するためにRS-232トランスミッタ/レシーバとともに使われます。RS-232仕様は、このプロトコルを使って他のすべてのデバイスへの通信を保証するような特定のタイミング要件を持ちます。8051ベースのプロセッサは外部タイミングリファレンス(水晶またはクロック)と内部プログラマブル分周器チェーンの組合せを使ってシリアルポートタイミングを生成します。このアプリケーションノートはEconOscillatorを使ってどのように外部クロック要件が満たされるのかについて説明し、8051内部シリアルポート制御レジスタをプログラミングする際の計算の手助けとなります。
はじめに
EconOscillatorは基本周波数を提供する内部発振器を備えており、内部分周器チェーンを使用して基本周波数を所望の速度まで落とします。各部品番号が4つの基本周波数(60MHz、66.67MHz、80MHz、または100MHz)を分周して、基本周波数の2052分の1まで速度を調整することができます。EconOscillatorは、システムの要求条件に応じてマイクロプロセッサ、FPGA、およびCPLD回路を含む任意のタイプのクロック付ロジック用に使用することができます。
8051マイクロプロセッサとRS-232シリアル通信
クロックを選択する時は、クロック速度と、動作寿命を通じてのクロック精度という2つの要因に注意して下さい。8051マイクロプロセッサシステムにおいては、RS-232シリアル通信の使用がしばしばシステムクロック速度を決定します。例えば、12MHzクロック(オリジナルの8051の最大クロック速度)を使用する非同期モード1シリアル通信を想定して下さい。表1に、標準ボーレートを確立するために必要なタイマー1オートリロード値を示します。
表1. オリジナルの8051マイクロプロセッサ用に12MHzクリスタルを使用する場合のボーレートおよびボーレート誤差
Timer 1 Auto Reload Value | Actual Baud Rate (Desired Baud Rate) |
Baud Rate Error |
255 | 31250 (28800) | 8.5% |
254 | 15625 (14400) | 8.5% |
253 | 10417 (9600) | 8.4% |
249 / 250 | 4464 / 5208 (4800) | 7% / 8.5% |
243 | 2404 (2400) | 0.16% |
表1の実際のボーレートは、次式を使用して計算されました(ダラスセミコンダクタの「High-Speed Microcontroller User's Guide (高速マイクロコントローラのユーザーズガイド)」から転載)。
表の数字は以下のタイマー1条件を基にしています。
- タイマー当たりの増分を12クロックサイクルに設定(DS87C520はタイマー1のカウントを4または12クロックサイクル毎に増分可能です)
- オートリロードモードはイネーブル
- ボーレートダブラ(SMOD=0)はディセーブル
表2. RS-232シリアル通信用に選択されたクリスタル周波数を使用して生成されたボーレート
Timer 1 Auto-Reload Value | Baud Rate with Focc = 11.059MHz |
Baud Rate with Focc = 22.118MHz |
255 | 28.799.5 | 57598.9 |
254 | 14399.7 | 28799.5 |
253 | 9599.8 | 19199.6 |
250 | 4799.91 | 9599.83 |
244 | 2399.95 | 4799.91 |
232 | 1199.98 | 2399.95 |
208 | 599.98 | 1199.98 |
160 | 299.99 | 599.99 |
64 | 149.99 | 299.99 |
注:
ボーレートを指定されたレートの3%以内に要求することでクロックの精度を確保することができます。仮にRS-232通信向けに理想的なクロックレートが選択されても、クロックが3%以上変化すれば一貫した通信に支障をきたす可能性があります。
8051マイクロプロセッサのクロックとしてのEconOscillator DS1077の使用
DS1077は様々な基本周波数で提供されており、内部発振器は133 MHz 、125 MHz 、120 MHz 、100 MHz 、および66.667MHzとなっています。内部分周器チェーンを使用して、これらを8051アプリケーションに十分なだけ遅くする場合、理論的にはどの製品を使用しても構いません。しかし8051のシリアルポートを使用する場合は、マイクロプロセッサのニーズに合せて基本部品を選んで下さい。これは必要なボーレートとマイクロプロセッサのボーレート生成式に依ります。
この例の8051マイクロプロセッサの場合、発振器周波数としては11.059MHzと22.118MHzが適しています。ボーレート生成の許容誤差は約3%です。66.667MHzの基本製品(DS1077-66)を使用すると、基本周波数を6分周して11.111MHzまで下げることができます。これだと理想の周波数11.059MHzとの誤差が0.47%と小さくなります。設定周波数からの偏差が1.25%というワーストケースの場合でも、誤差は許容範囲に収まります。即ち、DS1077-66は所望の周波数11.059MHzからの最大誤差1. 72%を許容することになり、最大28.8kbpsまでの通信には十分です。
DS87C520 (最大クロック速度33MHz)のような許容クロック速度の高い8051を使用する場合は、クロック速度を3分周するだけで22.222MHzを得ることができます。この時の最大誤差は、いずれの22.118MHzボーレートにおいても通信可能な範囲です。また、クロック速度が速いと、他のアプリケーションのニーズに対しても高レベルのプロセッサ性能を提供することができます。
8051設計にDS1077を使用することの大きな利点は柔軟性です。オリジナルの8051または相当品のマイクロプロセッサ(最大クロック速度12MHz)を使用して始めた設計の場合でも、単に発振器を再設定してマイクロプロセッサを置き換えるだけでアップグレードすることができます。設計によっては、DS1077をソケット内で再設定することもできます。8051マイクロプロセッサの40ピンDIPバージョンを使用している場合、マキシムおよび多くの他社が100%コンパチブルのいくつかの置換え用チップを製造しています。中でも最も速いのはマキシムのDS89C430であり、オリジナルの8051より50倍アップの高性能を提供し、ウォッチドッグタイマおよび電源管理等、オリジナルの8051にはないリソースも備えています。DS87C520のように最大11倍の性能を提供するチップもあります。(マキシムは更に制御アプリケーション用にPWMおよびADCを備えた8051のバージョンも作っていますが、これらは40ピンDIPパッケージでは提供されていません。)
ハードウェアのセットアップ
DS1077を使用するためには、本製品のEEPROMレジスタを設定するための方法を確立する必要があります。一旦、DS1077を設定したら、図1の回路図を参照して、DS1077を8051マイクロプロセッサと適正に動作させるための配線を行います。DS1077の出力はXTAL1に行き、XTAL2は接続されていないことに注意して下さい。XTAL2は通常、8051のクリスタル発振器出力です。このピンに何かを接続するとマイクロプロセッサの負荷となりますし、XTAL1で補助クロックデバイスをマイクロプロセッサと並列に接続できる時は必要ありません。(但しこれは、補助デバイスと8051の複合負荷がDS1077の出力電流仕様を超えないと仮定した場合です。)
図1. 8051マイクロプロセッサのクロックとしてDS1077発振器を使用する場合のハードウェアセットアップ
この記事に関して
製品
ソフトマイクロコントローラモジュール
ソフトマイクロプロセッサチップ
ソフトマイクロコントローラモジュール
デュアルCAN高速マイクロプロセッサ
高速マイクロコントローラ
ソフトマイクロコントローラモジュール
高速/低電力マイクロコントローラ
EPROM/ROM高速マイクロコントローラ
セキュアマイクロプロセッサチップ
IPセキュリティマイクロコントローラ
ソフトマイクロコントローラモジュール
超高速フラッシュマイクロコントローラ
セキュアマイクロコントローラモジュール
128kソフトマイクロコントローラモジュール
ネットワークマイクロコントローラ
高速/低電力マイクロコントローラ
リアルタイムクロック付き、EPROMマイクロコントローラ
128kソフトマイクロプロセッサチップ
高速セキュアマイクロコントローラ
超高速フラッシュマイクロコントローラ
製品カテゴリ
{{modalTitle}}
{{modalDescription}}
{{dropdownTitle}}
- {{defaultSelectedText}} {{#each projectNames}}
- {{name}} {{/each}} {{#if newProjectText}}
-
{{newProjectText}}
{{/if}}
{{newProjectTitle}}
{{projectNameErrorText}}