intelhexutil (0.1.0) | 2011-12-28 15:55 |
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進) |
-20 | 0.6976 | 652.3674886 | 28C |
-19 | 0.70007 | 654.6773333 | 28E |
-18 | 0.70254 | 656.9871781 | 290 |
-17 | 0.70501 | 659.2970228 | 293 |
-16 | 0.70748 | 661.6068676 | 295 |
-15 | 0.70995 | 663.9167123 | 297 |
-14 | 0.71242 | 666.2265571 | 29A |
-13 | 0.71489 | 668.5364018 | 29C |
-12 | 0.71736 | 670.8462466 | 29E |
-11 | 0.71983 | 673.1560913 | 2A1 |
-10 | 0.7223 | 675.4659361 | 2A3 |
-9 | 0.72477 | 677.7757808 | 2A5 |
-8 | 0.72724 | 680.0856256 | 2A8 |
-7 | 0.72971 | 682.3954703 | 2AA |
-6 | 0.73218 | 684.7053151 | 2AC |
-5 | 0.73465 | 687.0151598 | 2AF |
-4 | 0.73712 | 689.3250046 | 2B1 |
-3 | 0.73959 | 691.6348493 | 2B3 |
-2 | 0.74206 | 693.9446941 | 2B5 |
-1 | 0.74453 | 696.2545388 | 2B8 |
0 | 0.747 | 698.5643836 | 2BA |
1 | 0.74947 | 700.8742283 | 2BC |
2 | 0.75194 | 703.1840731 | 2BF |
3 | 0.75441 | 705.4939178 | 2C1 |
4 | 0.75688 | 707.8037626 | 2C3 |
5 | 0.75935 | 710.1136073 | 2C6 |
6 | 0.76182 | 712.4234521 | 2C8 |
7 | 0.76429 | 714.7332968 | 2CA |
8 | 0.76676 | 717.0431416 | 2CD |
9 | 0.76923 | 719.3529863 | 2CF |
10 | 0.7717 | 721.6628311 | 2D1 |
11 | 0.77417 | 723.9726758 | 2D3 |
12 | 0.77664 | 726.2825205 | 2D6 |
13 | 0.77911 | 728.5923653 | 2D8 |
14 | 0.78158 | 730.90221 | 2DA |
15 | 0.78405 | 733.2120548 | 2DD |
16 | 0.78652 | 735.5218995 | 2DF |
17 | 0.78899 | 737.8317443 | 2E1 |
18 | 0.79146 | 740.141589 | 2E4 |
19 | 0.79393 | 742.4514338 | 2E6 |
20 | 0.7964 | 744.7612785 | 2E8 |
21 | 0.79887 | 747.0711233 | 2EB |
22 | 0.80134 | 749.380968 | 2ED |
23 | 0.80381 | 751.6908128 | 2EF |
24 | 0.80628 | 754.0006575 | 2F2 |
25 | 0.80875 | 756.3105023 | 2F4 |
26 | 0.81122 | 758.620347 | 2F6 |
27 | 0.81369 | 760.9301918 | 2F8 |
28 | 0.81616 | 763.2400365 | 2FB |
29 | 0.81863 | 765.5498813 | 2FD |
30 | 0.8211 | 767.859726 | 2FF |
31 | 0.82357 | 770.1695708 | 302 |
32 | 0.82604 | 772.4794155 | 304 |
33 | 0.82851 | 774.7892603 | 306 |
34 | 0.83098 | 777.099105 | 309 |
35 | 0.83345 | 779.4089498 | 30B |
36 | 0.83592 | 781.7187945 | 30D |
37 | 0.83839 | 784.0286393 | 310 |
38 | 0.84086 | 786.338484 | 312 |
39 | 0.84333 | 788.6483288 | 314 |
40 | 0.8458 | 790.9581735 | 316 |
41 | 0.84827 | 793.2680183 | 319 |
42 | 0.85074 | 795.577863 | 31B |
43 | 0.85321 | 797.8877078 | 31D |
44 | 0.85568 | 800.1975525 | 320 |
45 | 0.85815 | 802.5073973 | 322 |
46 | 0.86062 | 804.817242 | 324 |
47 | 0.86309 | 807.1270868 | 327 |
48 | 0.86556 | 809.4369315 | 329 |
49 | 0.86803 | 811.7467763 | 32B |
50 | 0.8705 | 814.056621 | 32E |
51 | 0.87297 | 816.3664658 | 330 |
52 | 0.87544 | 818.6763105 | 332 |
53 | 0.87791 | 820.9861553 | 334 |
54 | 0.88038 | 823.296337 | 337 |
55 | 0.88285 | 825.6058447 | 339 |
56 | 0.88532 | 827.9156895 | 33B |
57 | 0.88779 | 830.2255342 | 33E |
58 | 0.89026 | 832.535379 | 340 |
59 | 0.89273 | 834.8452237 | 342 |
60 | 0.8952 | 837.1550685 | 345 |
61 | 0.89767 | 839.4649132 | 347 |
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節は、これに関するより多くの詳細を含みます。
テストテスト
このプロジェクトのSourceForge.JPプロジェクトWikiページへようこそ。
SourceForge.JPでは、各プロジェクトごとにWikiシステムが利用できます。 このページも含め、あなたのプロジェクトに合わせて自由に書き換えてください。 デフォルトでは、このプロジェクトに参加しているユーザだけでなく、全てのSourceForge.JPのユーザがこのWikiスペースへの編集権を持っています。プロジェクトでの利用法に合わせて、適切に権限を設定しましょう!
このWikiシステムは現在継続的に開発中です。Wiki本体に関して、問題点や要望などがありましたら、 チケットを利用して報告お願い致します。 その前に、「Wikiってなに?」という方は、Wikipedia の「ウィキ」のページを参考にしてください。
文法などのドキュメントは、サイドバーに標準で入っているリンクか、SourceForge.JP プロジェクト内の 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.
intelhexutil (0.1.0) | 2011-12-28 15:55 |
Ver0xdeで、子機モード時にCH1,CH2入力の割り込みを受け付けなくなる。 | 2014-09-09 09:39 |
Ver0xdeで、子機モード時にCH1,CH2入力の割り込みを受け付けなくなる。完全に動作が止まってしまう現象が発生している。 (詳... | blackzoro |
変調波出力モード時に1回目の占有帯域と2回目とでの周波数が1kHzくらい低く出る。 | 2013-12-24 13:52 |
以前から占有帯域幅の測定などを目的にファームウェアに追加しているモードで、変調波の連続出力モードで、3秒間変調波を出力... | (無) |
ワイヤレス中継機ユニットVer0x16にて、7回の再送ブロックの4ブロック目でウォッチドックがかかる。 | 2012-04-17 14:39 |
現在、ワイヤレス中継機ユニットVer0x16において、パケット7個を1ブロックとして、最大7ブロックの再送を行うプログラムで、... | (無) |
WAIT_EORX();関数の意味? | 2011-04-01 15:06 |
WAIT_EORX();関数の意味? この関数についての質問を投稿します。 | (無) |
cc1100_cmd_calibrate();実行後にディレー時間は必要か? | 2011-03-30 15:23 |
cc1100_cmd_calibrate();実行後にディレー時間は必要か? この問題を投稿。 | (無) |