2011年3月27日 温度誤差による水晶発振子、CC1101のキャリア信号のずれを補正するための、CC1101温度センサーを使用したずれ補正機能の説明

本プロジェクト”低電力無線通信用モジュールCC1101ドライバ”を作成している間、動作させる環境の温度によって、予定しているキャリア周波数から±3kHz程度のずれが生じる 現象が出ることがわかりました。

現在調査を行っていますが、調査の中で原因として考えられるものは

・水晶発振子の温度誤差による発振周波数のずれ ・コンデンサの許容誤差によるずれ ・CC1101自体の温度誤差によるずれ

これらの原因が考えられることがわかりました。 ±3kHz以上のずれが生じる場合、電波法の範囲を超えてしまう可能性が高いことから、この問題の解決策を考えたところ、CC1101に搭載されている温度センサー機能を 使用して、電波送信時に設置環境の温度をセンサーから取得し、ATmega88のADC値からキャリア周波数のずれを予測し、キャリア周波数を設定するレジスタの値を補正して、 データ出力を行うようにしました。

void cc1101_carrier_wave_setup(void)関数

こちらのキャリア周波数を設定する関数機能内で、取得した温度値で周波数レジスタ設定値を修正しています。

cc1101の温度センサーは0℃の時に出力するアナログ電圧は0.747です。

これをATmega88のADC機能で読み取った際のHEX値は約0x2BAとなります。

(計算方法) 0.747 /(1.095/1024) = 698.564 = (16進数)0x2BA

となります

温度cc1101出力電圧ADC値(10進)ADC値(16進)
-200.6976652.367488628C
-190.70007654.677333328E
-180.70254656.9871781290
-170.70501659.2970228293
-160.70748661.6068676295
-150.70995663.9167123297
-140.71242666.226557129A
-130.71489668.536401829C
-120.71736670.846246629E
-110.71983673.15609132A1
-100.7223675.46593612A3
-90.72477677.77578082A5
-80.72724680.08562562A8
-70.72971682.39547032AA
-60.73218684.70531512AC
-50.73465687.01515982AF
-40.73712689.32500462B1
-30.73959691.63484932B3
-20.74206693.94469412B5
-10.74453696.25453882B8
00.747698.56438362BA
10.74947700.87422832BC
20.75194703.18407312BF
30.75441705.49391782C1
40.75688707.80376262C3
50.75935710.11360732C6
60.76182712.42345212C8
70.76429714.73329682CA
80.76676717.04314162CD
90.76923719.35298632CF
100.7717721.66283112D1
110.77417723.97267582D3
120.77664726.28252052D6
130.77911728.59236532D8
140.78158730.902212DA
150.78405733.21205482DD
160.78652735.52189952DF
170.78899737.83174432E1
180.79146740.1415892E4
190.79393742.45143382E6
200.7964744.76127852E8
210.79887747.07112332EB
220.80134749.3809682ED
230.80381751.69081282EF
240.80628754.00065752F2
250.80875756.31050232F4
260.81122758.6203472F6
270.81369760.93019182F8
280.81616763.24003652FB
290.81863765.54988132FD
300.8211767.8597262FF
310.82357770.1695708302
320.82604772.4794155304
330.82851774.7892603306
340.83098777.099105309
350.83345779.408949830B
360.83592781.718794530D
370.83839784.0286393310
380.84086786.338484312
390.84333788.6483288314
400.8458790.9581735316
410.84827793.2680183319
420.85074795.57786331B
430.85321797.887707831D
440.85568800.1975525320
450.85815802.5073973322
460.86062804.817242324
470.86309807.1270868327
480.86556809.4369315329
490.86803811.746776332B
500.8705814.05662132E
510.87297816.3664658330
520.87544818.6763105332
530.87791820.9861553334
540.88038823.296337337
550.88285825.6058447339
560.88532827.915689533B
570.88779830.225534233E
580.89026832.535379340
590.89273834.8452237342
600.8952837.1550685345
610.89767839.4649132347

cc1101.pdf page 54

The CC1101 contains two 64 byte FIFOs, one for received data and one for data to be transmitted.

CC1101は、2つの64バイトのFIFO(データのための受信データと1が送られるもの)を含みます。

The SPI interface is used to read from the RX FIFO and write to the TX FIFO.

SPIインターフェースは、RX FIFOから読んで、TX FIFOに書くのに用いられます。

Section 10.5 contains details on the SPI FIFO access.

第10.5節は、SPI FIFOアクセスに関する詳細を含みます。

The FIFO controller will detect overflow in the RX FIFO and underflow in the TX FIFO.

FIFOコントローラは、TX FIFOでRX FIFOとアンダーフローで超過人員を感知します。

When writing to the TX FIFO it is the responsibility of the MCU to avoid TX FIFO overflow.

TX FIFOへの書き込み時に、TX FIFO容量を超えるデータ数超える書き込みはしないように、MCU側で制御してください。

A TX FIFO overflow will result in an error in the TX FIFO content.

TX FIFOの容量を超えたデータ書き込みを行った場合、TX FIFO内容にエラーが発生します。






Likewise, when reading the RX FIFO the MCU must avoid reading the RX FIFO past its empty value since a RX FIFO underflow will result in an error in the data read out of the RX FIFO.

同様に。そのとき、MCUがRX FIFOアンダーフローがデータにおけるエラーに終わる時から、その空の価値を過ぎた所のRX FIFOを読み込んで避けなければならないRX FIFOを読むことは、RX FIFOから読みました。

The chip status byte that is available on the SO pin while transferring the SPI header and contains the fill grade of the RX FIFO if the access is a read operation and the fill grade of the TX FIFO if the access is a write operation.

SPIヘッダを移している間、SOピンで利用可能であるチップステータスバイト、そして、アクセスが書込み操作であるならばアクセスが読込み操作とTX FIFOの一杯等級であるならば、RX FIFOの一杯等級を含みます。

Section 10.1 on page 30 contains more details on this.

30ページの上の第10.1節は、これに関するより多くの詳細を含みます。

テストテスト

このプロジェクトのWiki

このプロジェクトのSourceForge.JPプロジェクトWikiページへようこそ。

SourceForge.JPでは、各プロジェクトごとにWikiシステムが利用できます。 このページも含め、あなたのプロジェクトに合わせて自由に書き換えてください。 デフォルトでは、このプロジェクトに参加しているユーザだけでなく、全てのSourceForge.JPのユーザがこのWikiスペースへの編集権を持っています。プロジェクトでの利用法に合わせて、適切に権限を設定しましょう!

このWikiシステムは現在継続的に開発中です。Wiki本体に関して、問題点や要望などがありましたら、 チケットを利用して報告お願い致します。 その前に、「Wikiってなに?」という方は、Wikipedia の「ウィキ」のページを参考にしてください。

文法などのドキュメントは、サイドバーに標準で入っているリンクか、SourceForge.JP プロジェクト内の Wikiガイド を参照してください。

Welcome to our Project Wiki

SourceForge.JP provides Wiki system to each project. You are able to edit pages as you like, of course you can also edit this page. Not only participating uses in the project, but also all of the SourceForge.JP users are able to edit this Wiki by default. You need to set up the authorization for the project.

You can find grammar and other documents on Sidebar links or Wiki guide (Japanese only) in SourceFroge.JP project.

Latest File Release

intelhexutil (0.1.0)2011-12-28 15:55

Recent Tickets

Ver0xdeで、子機モード時にCH1,CH2入力の割り込みを受け付けなくなる。2014-09-09 09:39
Ver0xdeで、子機モード時にCH1,CH2入力の割り込みを受け付けなくなる。完全に動作が止まってしまう現象が発生している。 (詳...blackzoro
変調波出力モード時に1回目の占有帯域と2回目とでの周波数が1kHzくらい低く出る。2013-12-24 13:52
以前から占有帯域幅の測定などを目的にファームウェアに追加しているモードで、変調波の連続出力モードで、3秒間変調波を出力...(None)
ワイヤレス中継機ユニットVer0x16にて、7回の再送ブロックの4ブロック目でウォッチドックがかかる。2012-04-17 14:39
現在、ワイヤレス中継機ユニットVer0x16において、パケット7個を1ブロックとして、最大7ブロックの再送を行うプログラムで、...(None)
WAIT_EORX();関数の意味?2011-04-01 15:06
WAIT_EORX();関数の意味? この関数についての質問を投稿します。(None)
cc1100_cmd_calibrate();実行後にディレー時間は必要か?2011-03-30 15:23
cc1100_cmd_calibrate();実行後にディレー時間は必要か? この問題を投稿。(None)