29章:無線式アース抵抗レコーダ実用タイプの検討

    作成2014.10.25

     無線式アース抵抗レコーダ実用タイプの検討をします!!

  1. 無線式アース抵抗レコーダ回路図
      無線式アース抵抗レコーダ回路図を以下に示します。

     無線によるデータ収集を想定しているため、ToCoStick(トコスティック)が1個、ZigBeeワイヤレスモジュール TWE−Liteが1個必要となります。
     ベースプロジェクトは「App_TweLite」を使用します。

      EEPROMの詳細仕様は下記を参照します。
    [29-1.pdf]をダウンロードする。

    品名単価個数小計購入先
    HC-SR04 超音波距離センサーモジュール4751475アマゾン
    ZigBeeワイヤレスモジュール TWE−Lite Dip−WA (半完成品セミキット)162011620秋月電子通商
    USBアダプター TWE−Lite R(トワイ・ライター)189011890秋月電子通商
    高精度IC温度センサLM61BIZ(4個入)50150秋月電子通商
    においセンサ TGS24503001300秋月電子通商
    トランジスター2SC1815Y(60V150mA)(10個入テーピング品)8216秋月電子通商
    赤色LED 3mm OSDR3133A 500mcd 30度100個入3.513.5秋月電子通商
    カーボン抵抗(炭素皮膜抵抗) 1/4W10kΩ (100本入)111秋月電子通商
    シリアルIスケアC EEPROM 24FC256−I/P40140秋月電子通商
    ICソケット ( 8P) (10個入)10110秋月電子通商


  2. 無線式アース抵抗レコーダ外観
     無線式アース抵抗レコーダ外観を以下に示します。(とりあえず仮配線で評価します。)



  3. 無線式アース抵抗レコーダプログラムのダウンロード
     完成プログラムは「40-29.zip」ファイルをダウンロードしてください。
    [40-29.zip]をダウンロードする。

     解凍するとフォルダー内に
    App_TweLitegフォルダー
    Win-PingPongフォルダー
    App_TweLite_Master_JN5164_TOCOSTICK_1_6_5.bin(24章と同じでToCoStick(トコスティック)用)
    があります。

    ToCoStick(トコスティック)用がApp_TweLite_Master_JN5164_TOCOSTICK_1_6_5.bin
    ZigBeeワイヤレスモジュール TWE−Lite用が\App_TweLite\Master\Build\App_TweLite_Master_JN5164_1_6_5.bin
    Windowsパソコン用が\Win-PingPong\Win-PingPong.exe です。


  4. 基本操作方法
    (1)\App_TweLite\Master\Build\App_TweLite_Master_JN5164_1_6_5.binを無線マイコンTWE-Lite DIP(トワイライト・ディップ)に書込みます。
    (2)App_TweLite_Master_JN5164_TOCOSTICK_1_6_5.binをToCoStick(トコスティック)に書き込みます。(方法は7章:ToCoNet(トコネット)のソフトウエア開発環境(SDK) とPingPongの実行プログラムの書込みを参照願います。
    (3)ToCoStick(トコスティック)をパソコンに接続します。
    (4)「Win-PingPong.exe」をダブルクリックで起動します。
    (5)画面の左側を「COM8」にセットして、「Conect」ボタンを押します。

    (6)ToCoStick(トコスティック)の設定変更
    *ToCoStick(トコスティック)の定期パケット送信はじゃまですので設定変更(インタラクティブ)モードで禁止します。詳細の説明は
    http://tocos-wireless.com/jp/products/TWE-Lite-DIP/TWE-Lite-DIP-step3-interactive.html
    設定変更(インタラクティブ)モードを参照します。
    o: set Option Bits (0x00000020)を (0x00000022)に変更します。

    上の状態でS(保存)を送信すると設定変更完了です。

    (7)TWE-Lite R(トワイ・ライター)を接続したまま、無線式アース抵抗レコーダの電源をいれます。
    (8)ToCoStick(トコスティック)のリセットボタンは押せないにで、うまく動作しない場合はさし直しが必要となります。
    (9)正常動作すると以下の画面になります。

    (9)コマンド0x81の状態通知が10分間隔で受信されます。
    (10)気象観測レコーダN01とNo2の電波も受信するため以下の画面となります。

    (11)左側が受信データで以下のようになります。
    (12)データフォーマットの b: 未使用が"AA"の時、アース抵抗レコーダのデータであると判断して処理を変えます。
    (13)気象観測レコーダNo1とNo2とアース抵抗レコーダのデータを受信していることが確認できます。
    Connected.
    :78812A019C8100557000004D000000AA810100000000004B00000000010295020304050BA608090A0B0C0D0E92
    測定No=1
    温度(℃)=22.0
    抵抗(kΩ)=6.594
    時間(カウント)=2982
    臭い(カウント)=2057
    :78812A013C810035F2004569000CE81D830365193310104B00012A012E01E200EA00000000065221CB3F19DCF8
    測定No=12E
    湿度(%)=48.2
    温度1(℃)=23.4
    風力=0
    雨量=0
    照度(Lux)=3389.7
    気圧(hPa)=1020.7
    温度2(℃)=23.4
    :78812A014B810040BD00516D000CEE1F8103631731105D4B0102D102DC024A00E70000000006356B214071E216
    測定No=2DC
    湿度(%)=58.6
    温度1(℃)=23.1
    風力=0
    雨量=0
    照度(Lux)=1753.9
    気圧(hPa)=1026.1
    温度2(℃)=26.7
    :78812A019C8100557000164D000000AA810100000000004B000000000202990F740F930BC033BA0A0B0C0D0E6A
    測定No=2
    温度(℃)=22.5
    抵抗(kΩ)=3.326
    時間(カウント)=3008
    臭い(カウント)=13242
    :78812A013F810035F2005B69000CE91D8303651833101C4B00012A012F020400DC000000000652C6C93F59DDD9
    測定No=12F
    湿度(%)=51.6
    温度1(℃)=22.0
    風力=0
    雨量=0
    照度(Lux)=3389.7
    気圧(hPa)=1020.6
    温度2(℃)=24.0
    :78812A0154810040BD00676F000CED1F8103631731101C4B0102D102DD022600EF000000000631B01C407AE10E
    測定No=2DD
    湿度(%)=55.0
    温度1(℃)=23.9
    風力=0
    雨量=0
    照度(Lux)=1633.1
    気圧(hPa)=1025.8
    温度2(℃)=26.2
    :78812A019C81005570002C4D000000AA810100000000004B000000000302990F740F930BEC33E10A0B0C0D0E00
    測定No=3
    温度(℃)=22.5
    抵抗(kΩ)=3.326
    時間(カウント)=3052
    臭い(カウント)=13281
    :78812A013F810035F2007169000CE81E83036518330FDC4B00012A013001F300E00000000006521FBE3FB7DD65
    測定No=130
    湿度(%)=49.9
    温度1(℃)=22.4
    風力=0
    雨量=0
    照度(Lux)=3389.7
    気圧(hPa)=1019.9
    温度2(℃)=24.2
    :78812A019C8100557000424D000000AA810100000000004B000000000402940F770FA00BF133EB0A0B0C0D0ECF
    測定No=4
    温度(℃)=21.9
    抵抗(kΩ)=3.334
    時間(カウント)=3057
    臭い(カウント)=13291
    :78812A013F810035F2000769000CE81E83036518330FDC4B00012A013101E800DF00000000065190B83F34DEF2
    測定No=131
    湿度(%)=48.8
    温度1(℃)=22.3
    風力=0
    雨量=0
    照度(Lux)=3294.4
    気圧(hPa)=1019.5
    温度2(℃)=24.5
    :78812A014E810040BD001373000CED208103631731101C4B0102D102DF023100E60000000006335A134071E2C4
    測定No=2DF
    湿度(%)=56.1
    温度1(℃)=23.0
    風力=0
    雨量=0
    照度(Lux)=1691.7
    気圧(hPa)=1025.2
    温度2(℃)=26.7
    :78812A019C8100557000584D000000AA810100000000004B000000000502980F790FAA0BF033F40A0B0C0D0EA0
    測定No=5
    温度(℃)=22.4
    抵抗(kΩ)=3.341
    時間(カウント)=3056
    臭い(カウント)=13300
    :78812A013F810035F2001D69000CE71F83036518330F984B00012A013201E700E500000000065207B73F74E061
    測定No=132
    湿度(%)=48.7
    温度1(℃)=22.9
    風力=0
    雨量=0
    照度(Lux)=3389.7
    気圧(hPa)=1019.4
    温度2(℃)=25.7
    :78812A0154810040BD002975000CED20810363173110194B0102D102E0021600EE0000000006351F16403EE323
    測定No=2E0
    湿度(%)=53.4
    温度1(℃)=23.8
    風力=0
    雨量=0
    照度(Lux)=1753.9
    気圧(hPa)=1025.4
    温度2(℃)=27.2
    :78812A019C81005570006E4D000000AA810100000000004B000000000602980F770FA90BF133F80A0B0C0D0E87
    測定No=6
    温度(℃)=22.4
    抵抗(kΩ)=3.342
    時間(カウント)=3057
    臭い(カウント)=13304
    :78812A013F810035F2003369000CE71F83036518330F984B00012A013301E700EA000000000652B1B13FBBDF5B
    測定No=133
    湿度(%)=48.7
    温度1(℃)=23.4
    風力=0
    雨量=0
    照度(Lux)=3389.7
    気圧(hPa)=1019.1
    温度2(℃)=25.3
    :78812A0154810040BD003F77000CED2081036317310FD94B0102D102E1024D00E5000000000635F41340ABE6DB
    測定No=2E1
    湿度(%)=58.9
    温度1(℃)=22.9
    風力=0
    雨量=0
    照度(Lux)=1753.9
    気圧(hPa)=1025.2
    温度2(℃)=29.0
    :78812A019C8100557000044D000000AA810100000000004B000000000702980F760FAB0BBC33FE0A0B0C0D0E1E
    測定No=7
    温度(℃)=22.4
    抵抗(kΩ)=3.344
    時間(カウント)=3004
    臭い(カウント)=13310
    :78812A013C810035F2004969000CE71F83036518330F984B00012A013401E900EA00000000065206B13F12E197
    測定No=134
    湿度(%)=48.9
    温度1(℃)=23.4
    風力=0
    雨量=0
    照度(Lux)=3389.7
    気圧(hPa)=1019.1
    温度2(℃)=26.0
    :78812A0154810040BD005579000CED2081036317310FD54B0102D102E201FC00FA0000000006357513400DE71F
    測定No=2E2
    湿度(%)=50.8
    温度1(℃)=25.0
    風力=0
    雨量=0
    照度(Lux)=1753.9
    気圧(hPa)=1025.2
    温度2(℃)=29.2
    :78812A019C81005570001A4D000000AA810100000000004B000000000802950F770F9F0BF234030A0B0C0D0ED9
    測定No=8
    温度(℃)=22.0
    抵抗(kΩ)=3.333
    時間(カウント)=3058
    臭い(カウント)=13315
    :78812A0142810035F2005F69000CE71F83036418330F8A4B00012A013501C000F000000000064B146D3FC8E034
    測定No=135
    湿度(%)=44.8
    温度1(℃)=24.0
    風力=0
    雨量=0
    照度(Lux)=2807.1
    気圧(hPa)=1014.8
    温度2(℃)=25.8
    :78812A0154810040BD006B7B000CED2081036317310F884B0102D102E301D20100000500000633B20D4072E7D7
    測定No=2E3
    湿度(%)=46.6
    温度1(℃)=25.6
    風力=5
    雨量=0
    照度(Lux)=1691.7
    気圧(hPa)=1024.9
    温度2(℃)=29.4
    :78812A019C8100557000304D000000AA810100000000004B000000000902930F780FA30BF0340C0A0B0C0D0EB8
    測定No=9
    温度(℃)=21.8
    抵抗(kΩ)=3.336
    時間(カウント)=3056
    臭い(カウント)=13324
    :78812A015A810040BD00177F000CED21810363173110084B0102D102E501BE010A000100000630190340FBE4CB
    測定No=2E5
    湿度(%)=44.6
    温度1(℃)=26.6
    風力=1
    雨量=0
    照度(Lux)=1605.1
    気圧(hPa)=1024.2
    温度2(℃)=28.1
    :78812A019F81005570005C4D000000AA810100000000004B000000000B02910F750FA50BF034160A0B0C0D0E80
    測定No=B
    温度(℃)=21.5
    抵抗(kΩ)=3.340
    時間(カウント)=3056
    臭い(カウント)=13334


    (14)右側がデバッグ用で以下のようになります。
    (15)以下のデータからは(1)温度測定、(2)アース抵抗(3)音速(4)臭いの順に測定を開始していますが完了は(1)温度測定、(2)音速(3)アース抵抗(4)臭いの順になっていることが理解できます。(タイマー処理のため、開始順と終了順は一致しません。)
    Connected.
    !INF TOCOS TWELITE DIP APP V1-06-5, SID=0x81005570, LID=0x78
    !INF Default config (no save info)...
    !INF DIO --> 11000001000000000001
    Ohm-TEST= gOhm_S1 gOhm_S2 R2
    HC-SR04 -TEST
    TimerReadCount=2982
    TGS2450-TEST
    Ohm-TEST= 3956 3987 3325
    TGS2450-TEST= 13242
    Ohm-TEST= gOhm_S1 gOhm_S2 R2
    HC-SR04 -TEST
    TimerReadCount=3008
    TGS2450-TEST
    Ohm-TEST= 3956 3987 3325
    TGS2450-TEST= 13281
    Ohm-TEST= gOhm_S1 gOhm_S2 R2
    HC-SR04 -TEST
    TimerReadCount=3052
    TGS2450-TEST
    Ohm-TEST= 3959 4000 3334
    TGS2450-TEST= 13291
    Ohm-TEST= gOhm_S1 gOhm_S2 R2
    HC-SR04 -TEST
    TimerReadCount=3057
    TGS2450-TEST
    Ohm-TEST= 3961 4010 3340
    TGS2450-TEST= 13300
    Ohm-TEST= gOhm_S1 gOhm_S2 R2
    HC-SR04 -TEST
    TimerReadCount=3056
    TGS2450-TEST
    Ohm-TEST= 3959 4009 3341
    TGS2450-TEST= 13304
    Ohm-TEST= gOhm_S1 gOhm_S2 R2
    HC-SR04 -TEST
    TimerReadCount=3057
    TGS2450-TEST
    Ohm-TEST= 3958 4011 3344
    TGS2450-TEST= 13310
    Ohm-TEST= gOhm_S1 gOhm_S2 R2
    HC-SR04 -TEST
    TimerReadCount=3004
    TGS2450-TEST
    Ohm-TEST= 3959 3999 3333
    TGS2450-TEST= 13315
    Ohm-TEST= gOhm_S1 gOhm_S2 R2
    HC-SR04 -TEST
    TimerReadCount=3058
    TGS2450-TEST
    Ohm-TEST= 3960 4003 3335
    TGS2450-TEST= 13324
    Ohm-TEST= gOhm_S1 gOhm_S2 R2
    HC-SR04 -TEST
    TimerReadCount=3056
    TGS2450-TEST
    Ohm-TEST= 3969 3999 3324
    TGS2450-TEST= 13328
    Ohm-TEST= gOhm_S1 gOhm_S2 R2
    HC-SR04 -TEST
    TimerReadCount=3056
    TGS2450-TEST
    Ohm-TEST= 3961 4011 3341
    TGS2450-TEST= 13336
     
    (16)記録データの収集は以下の手順で行います。
    (17)F7識別コードに「11」を入力します。
    (18)「F7機能」ボタンを押すと記録データの収集を開始して以下の画面となります。

     
    (19)(NoOld)から(NoNew-2)までの測定データを受信して、タブ区切りテキストファイルとして保存します。
    *実行後は(NoOld)=(NoNew-1)が設定されます。
    *データ収集の基本操作となります。(異常がなければ、この操作だけでデータ収集ができます。)

    (20)収集データ例
     以下に「F7機能」ボタン実行後に保存されたファイル内容を示します。
    *NoOld(16進)が0は電源投入直後で無視する必要があります。
    *NoOld(16進)が1は、抵抗(kΩ)と臭い(カウント)の測定完了が記録時に間に合わないため、異常値となります。
    *NoOld(16進)が2以降のデータを使用します。

    周期(16進)	NoOld(16進)	NoNew(16進)	温度(℃)	抵抗(kΩ)	時間(カウント)	臭い(カウント)
    4B00	0	B	22.0	6.594	2982	2057
    4B00	1	B	22.0	6.594	2982	2057
    4B00	2	B	22.5	3.326	3008	13242
    4B00	3	B	22.5	3.326	3008	13242
    4B00	4	B	22.5	3.326	3052	13281
    4B00	5	B	22.5	3.326	3052	13281
    4B00	6	B	21.9	3.334	3057	13291
    4B00	7	B	21.9	3.334	3057	13291
    4B00	8	B	22.4	3.341	3056	13300
    4B00	9	B	22.4	3.341	3056	13300
    		
    :78812A019C8100557000732D000000AA810100000000004B000000000B0295020304050BA608090A0B0C0D0E35
    :78812A019F81005570007331000000AA810100000000004B000000000B0295020304050BA608090A0B0C0D0E2E
    :78812A019F81005570007335000000AA810100000000004B000001000B02990F740F930BC033BA0A0B0C0D0E18
    :78812A019C81005570007339000000AA810100000000004B000001000B02990F740F930BC033BA0A0B0C0D0E17
    :78812A019C8100557000733D000000AA810100000000004B000002000B02990F740F930BEC33E10A0B0C0D0EBF
    :78812A019C81005570007341000000AA810100000000004B000002000B02990F740F930BEC33E10A0B0C0D0EBB
    :78812A019C81005570007345000000AA810100000000004B000003000B02940F770FA00BF133EB0A0B0C0D0E9C
    :78812A019C81005570007349000000AA810100000000004B000003000B02940F770FA00BF133EB0A0B0C0D0E98
    :78812A019C8100557000734D000000AA810100000000004B000004000B02980F790FAA0BF033F40A0B0C0D0E7B
    :78812A019C81005570007351000000AA810100000000004B000004000B02980F790FAA0BF033F40A0B0C0D0E77
    :78812A019C81005570007355000000AA810100000000004B000005000B02980F770FA90BF133F80A0B0C0D0E70
    :78812A019C81005570007359000000AA810100000000004B000005000B02980F770FA90BF133F80A0B0C0D0E6C
    :78812A019C8100557000735D000000AA810100000000004B000006000B02980F760FAB0BBC33FE0A0B0C0D0E95
    :78812A019C81005570007361000000AA810100000000004B000006000B02980F760FAB0BBC33FE0A0B0C0D0E91
    :78812A019C81005570007365000000AA810100000000004B000007000B02950F770F9F0BF234030A0B0C0D0E5E
    :78812A019C81005570007369000000AA810100000000004B000007000B02950F770F9F0BF234030A0B0C0D0E5A
    :78812A019C810055700073E1000000AA810100000000004B000006000B02950F770F9F0BF234030A0B0C0D0EE3
    :78812A019C810055700073E5000000AA810100000000004B000007000B02950F770F9F0BF234030A0B0C0D0EDE
    :78812A019C810055700073E9000000AA810100000000004B000007000B02950F770F9F0BF234030A0B0C0D0EDA
    :78812A019C810055700073ED000000AA810100000000004B000008000B02930F780FA30BF0340C0A0B0C0D0ECB
    :78812A019C810055700073F1000000AA810100000000004B000008000B02930F780FA30BF0340C0A0B0C0D0EC7
    :78812A019C810055700073F5000000AA810100000000004B000009000B02930F810F9F0BF034100A0B0C0D0EB9
    :78812A019C810055700073F9000000AA810100000000004B000009000B02930F810F9F0BF034100A0B0C0D0EB5
    :78812A019C810055700073FD000000AA810100000000004B00000A000B02910F750FA50BF034160A0B0C0D0EB2
    :78812A019C81005570007401000000AA810100000000004B00000A000B02910F750FA50BF034160A0B0C0D0EAD
    


  5. 「F3機能」ボタンによる特殊操作
    (1)Send Datacテキストボックスにコマンドを入力し、「F3機能」ボタンを押すとコマンドが実行されます。

    (2)測定サイクル時間の変更
    *「0001AA114B00CCCCDDDD」→サイクル時間を10分に設定します。
    *トータル文字数は変更できません。
    *0001→特に意味はありません。
    *AA→測定サイクル時間の変更と判定します。
    *11→アース抵抗レコーダと判定します。
    *4B00→16進数で1/32s刻みの整数です。(設定時間)となります。
    *CCCCDDDD→特に意味はありません。

    (3)読出し開始データNo変更
    *「0001CC110001CCCCDDDD」→レコーダ_No1の読出し開始データNo(=NoOld)を0001に設定します。
    *トータル文字数は変更できません。
    *0001→特に意味はありません。
    *CC→読出し開始データNo変更と判定します。
    *11→アース抵抗レコーダと判定します。
    *0001→読出し開始データNo(=NoOld)を0001に設定します。
    *CCCCDDDD→特に意味はありません

    (4)カウンタリセット
    *「0001DD11BBBBCCCCDDDD」→レコーダ_No1のカウンタリセット(リセット時と同条件)
    *トータル文字数は変更できません。
    *0001→特に意味はありません。
    *DD→カウンタリセットと判定します。
    *11→アース抵抗レコーダと判定します。
    *BBBBCCCCDDDD→特に意味はありません

    (5)測定No(=NoNew)の変更
    *「0001EE11000ACCCCDDDD」→レコーダ_No1の測定データNo(=NoNew)を000Aに設定します。
    *トータル文字数は変更できません。
    *0001→特に意味はありません。
    *EE→測定No(=NoNew)の変更と判定します。
    *11→アース抵抗レコーダと判定します。
    *000A→測定No(=NoNew)を000Aに設定します。
    *CCCCDDDD→特に意味はありません
    *この機能は停電トラブル等の非常用で通常使用しません。

    (6)カウンタを遅延
    *「0001FA11BBBBCCCCDDDD」→レコーダ_No1のカウンタを測定終了後に設定して、測定開始を遅延します。
    *トータル文字数は変更できません。
    *0001→特に意味はありません。
    *FA→カウンタを遅延と判定します。
    *11→アース抵抗レコーダと判定します。
    *BBBBCCCCDDDD→特に意味はありません
    *この機能は測定開始タイミング調整に使用します。

    (7)カウンタを進める
    *「0001FB11BBBBCCCCDDDD」→レコーダ_No1のカウンタを測定直前に設定して、測定開始を早めます。
    *トータル文字数は変更できません。
    *0001→特に意味はありません。
    *FB→カウンタを進めると判定します。
    *11→アース抵抗レコーダと判定します。
    *BBBBCCCCDDDD→特に意味はありません
    *この機能は測定開始タイミング調整に使用します。

     以上の機能を使用すると、測定タイミングの調整や測定データの受信調整が容易にできます。(コマンド入力はコピー・ペーストを使用します。)


  6. App_TweLiteプログラムの変更箇所
    (1)App_TweLiteプログラムの変更のポイント
    *ToCoStick(トコスティック)のプログラムは気象観測レコーダとアース抵抗レコーダ共通としました。
    *ToCoStick(トコスティック)のプログラムがApp_TweLiteで、ZigBeeワイヤレスモジュール TWE−LiteのプログラムがSamp_PingPongとした場合のプログラム修正方法がわかりませんでした。
    *App_TweLiteはAD変換機能が実装済みであるが、標準のAD変換機能は割込み制御を使用しているため、アース抵抗測定、臭い測定のようにタイミングが重要な測定では、信頼性のある結果がえられませんでした。
    *App_TweLiteの標準AD変換機能を有効にしたまま、待ちループ方式のAD変換を行うとエラーが発生しました。
    *このためApp_TweLiteのAD変換割込みを禁止しました。
    *アース抵抗測定、臭い測定は測定に時間がかかるため、タイマー制御による並列処理としましたが、出力のタイミングズレが発生します。

    (2)AD変換割込みの禁止
     adc.cファイルで以下の修正をしました。
    void vADC_Init(tsObjData_ADC *pData, tsSnsObj *pSnsObj, bool_t bInitAPR)
    vAHI_ApConfigure(E_AHI_AP_REGULATOR_ENABLE,		
    	E_AHI_AP_INT_DISABLE,//***変更2で割込み禁止	
    	 //E_AHI_AP_INT_ENABLE,	
    	 E_AHI_AP_SAMPLE_2,	
    	 E_AHI_AP_CLOCKDIV_500KHZ,	
    	 E_AHI_AP_INTREF);	
    
    (3)AD変換レンジ設定の変更
     adc.cファイルで以下の修正をしました。
    u8rng = E_AHI_AP_INPUT_RANGE_2;//***変更2で追加
    
    (4)EEPROMと全体シーケンス変更(//***変更1)
    //***変更1
    int gbCond=0;
    uint16 EPROM_A=0x0000;
    uint8 gMyData[256];
    int W_24FC256(uint16 EPROM_A,uint8 *(pu8Dest),int Ns,int Nd);
    int R_24FC256(uint16 EPROM_A,uint8 *(pu8Dest),int Ns,int Nd);
    
    bool_t MyBusWait(void);
    void START_WRITE_ACK(void);
    void WRITE_ACK(void);
    void STOP_WRITE_ACK(void);
    void STOP_READ_NACK(void);
    void STOP_READ_ACK(void);
    void READ_ACK(void);
    void START_READ_ACK(void);
    void STOP_WRITE_NACK(void);
    
    uint16 gMySTime=19200;//19200;//320
    uint16 gCTnew=0;//書込みデータNo
    uint16 gCTold=0;//読出しデータNo
    uint16 gNc=0x03FF;//サイクル記録データ数マスク(4*16*16=1024)
    int gCRst_F=0;//カウンタリセットフラグ
    uint8 gPC=0;//パケットカウンタ
    int gPkt01;//読出しデータNo補正
    int CondF =0;
    
    // ボタンに変化あり			
    if (!bCond && sAppData.sIOData_now.u32BtmChanged) {			
    	//bCond = TRUE;//***変更1		
    }			
    // ADC に変化あり			
    if (!bCond && !IS_APPCONF_OPT_NO_ADC_BASED_TRANSMIT() && sAppData.bUpdatedAdc) {			
    	//bCond = TRUE;//***変更1		
    }			
    // ON PRESS TRANSMIT			
    if (!bCond && IS_APPCONF_OPT_ON_PRESS_TRANSMIT()) {			
    	// どれかボタンが押されているときは送信を続ける		
    	if (sAppData.sIOData_now.u32BtmBitmap && sAppData.sIOData_now.u32BtmBitmap != 0xFFFFFFFF) {		
    		//bCond = TRUE;//***変更1	
    			
    	if ((!sAppData.sIOData_now.u32BtmBitmap) && (u32TickCount_ms - u32TxLastDiClear <  ON_PRESS_TRANSMIT_KEEP_TX_ms)) {		
    		// ボタンが離されてから 1000ms 未満	
    		//bCond = TRUE;//***変更1	
    	}		
    }			
    if (!bCond			
    		&& sAppData.u8Mode == E_IO_MODE_CHILD_CONT_TX	
    		&& ((sAppData.u32CtTimer0 & sAppData.u8FpsBitMask) == sAppData.u8FpsBitMask))  {	
    	// 打って打って打ちまくれ!のモード		
    	//bCond = TRUE;//***変更1		
    	//bRegular = TRUE;//***変更1		
    }
    
    // レギュラー送信  // TODO レギュラー送信しないオプション			
    //if (!bCond && (sAppData.u16CtRndCt == 0))			
    //***変更1			
    if (sAppData.u16CtRndCt == 0 || sAppData.u16CtRndCt > gMySTime)			
    {			
    	sAppData.u16CtRndCt = gMySTime;		
    	if (!IS_APPCONF_OPT_REGULAR_PACKET_NO_TRANSMIT() && gbCond == 0)		
    	{		
    		bCond = TRUE;	
    		bRegular = TRUE;	
    	}		
    }						
    
    // ADC値を処理する。			
    //***変更1			
    //bool_t bUpdated = bUpdateAdcValues();			
    bool_t bUpdated;			
    bUpdated = bUpdateAdcValues();			
    			
    if ((sAppData.u8IOFixState & 2) == 0) {			
    	sAppData.bUpdatedAdc = 0;		
    			
    	// 確定情報		
    	sAppData.u8IOFixState |= 0x2;		
    } else {			
    	if (!IS_APPCONF_OPT_NO_ADC_BASED_TRANSMIT()) {		
    		//sAppData.bUpdatedAdc |= bUpdated;//***変更1	
    	}		
    }
    
    //***変更1 以下にデータを追加	
    S_BE_WORD(gMySTime); // 測定周期	
    S_BE_WORD(gCTold-gPkt01); // データNo	
    S_BE_WORD(gCTnew); // データNo	
    for(i=0;i< 15;i++){S_OCTET(gMyData[i]);}//測定データ
    
    //***変更1 以下にコマンド条件を記載
    if(PWMDuty[0] > 0xAA00){vPortSetLo(PORT_OUT1);}//OFF設定		
    if(PWMDuty[0]==0xAA11)		
    {			
    	vfPrintf(&sSerStream, "gMySTime%4X\r\n",gMySTime);	
    	gMySTime=PWMDuty[1];//サイクル時間変更	
    	vfPrintf(&sSerStream, "gMySTime%4X\r\n",gMySTime);	
    	gbCond=0;	
    }		
    if(PWMDuty[0]==0xBB11)		
    {			
    	gbCond=1;//データ送信開始	
    	vfPrintf(&sSerStream, "gbCond=1\r\n");	
    }		
    		
    if(PWMDuty[0]==0xCC11)		
    {			
    	vfPrintf(&sSerStream, "gCTold%4X\r\n",gCTold);	
    	gCTold=PWMDuty[1];//読出しデータNo	
    	vfPrintf(&sSerStream, "gCTold%4X\r\n",gCTold);	
    	gbCond=0;	
    }		
    		
    if(PWMDuty[0]==0xDD11)		
    {			
    	vfPrintf(&sSerStream, "gCTnew=0;gCTold=0;\r\n");	
    	gCTnew=0;	
    	gCTold=0;	
    	sAppData.u16CtRndCt=gMySTime;	
    	gbCond=0;	
    		
    }		
    		
    if(PWMDuty[0]==0xEE11)		
    {			
    	vfPrintf(&sSerStream, "gCTnew%4X\r\n",gCTnew);	
    	gCTnew=PWMDuty[1];//測定データNo	
    	vfPrintf(&sSerStream, "gCTnew%4X\r\n",gCTnew);	
    	gbCond=0;	
    }		
    		
    if(PWMDuty[0]==0xFA11)		
    {			
    	vfPrintf(&sSerStream, "gCTold%4X\r\n",sAppData.u16CtRndCt);	
    	sAppData.u16CtRndCt=gMySTime;//時間カウンタを遅延	
    	vfPrintf(&sSerStream, "gCTold%4X\r\n",sAppData.u16CtRndCt);	
    	gbCond=0;	
    }		
    		
    if(PWMDuty[0]==0xFB11)		
    {			
    	vfPrintf(&sSerStream, "gCTold%4X\r\n",sAppData.u16CtRndCt);	
    	sAppData.u16CtRndCt=6;//時間カウンタを進める	
    	vfPrintf(&sSerStream, "gCTold%4X\r\n",sAppData.u16CtRndCt);	
    	gbCond=0;	
    }					
    
    //***変更1							
    int W_24FC256(uint16 EPROM_A,uint8 *(pu8Dest),int Ns,int Nd)							
    {							
    	int i;						
    	uint8 AH =(uint8) (EPROM_A /256) & 0xFF;						
    	uint8 AL = (uint8) EPROM_A & 0xFF;						
    							
    	vPortSetLo(PORT_OUT1);//OFF設定						
    							
    	vAHI_InterruptSetPriority(0xFFFF,0);//全割り込みを禁止						
    							
    	vAHI_SiMasterWriteSlaveAddr(0x50, FALSE);						
    	START_WRITE_ACK();						
    	while(bAHI_SiMasterPollTransferInProgress()); /* busy wait */							
    							
    	vAHI_SiMasterWriteData8(AH);						
    	WRITE_ACK();						
    	while(bAHI_SiMasterPollTransferInProgress()); /* busy wait */							
    							
    	vAHI_SiMasterWriteData8(AL);						
    	WRITE_ACK();						
    	while(bAHI_SiMasterPollTransferInProgress());/* busy wait */						
    							
    	for(i=0;i< Nd;i++)						
    	{						
    		vAHI_SiMasterWriteData8(pu8Dest[Ns+i]);					
    		WRITE_ACK();					
    		while(bAHI_SiMasterPollTransferInProgress()); /* busy wait */						
    	}						
    							
    	STOP_WRITE_NACK();						
    	while(bAHI_SiMasterPollTransferInProgress()); /* busy wait */						
    							
    	vAHI_InterruptSetPriority(0xFFFF,8);//全割り込みをレベル8で解除						
    							
    	return 0;						
    }							
    							
    //***変更1							
    int R_24FC256(uint16 EPROM_A,uint8 *(pu8Dest),int Ns,int Nd)							
    {							
    	int i;						
    	uint8 AH =(uint8) (EPROM_A /256) & 0xFF;						
    	uint8 AL = (uint8) EPROM_A & 0xFF;						
    							
    	vPortSetLo(PORT_OUT1);//OFF設定						
    							
    	vAHI_InterruptSetPriority(0xFFFF,0);//全割り込みを禁止						
    							
    	vAHI_SiMasterWriteSlaveAddr(0x50, FALSE);						
    	START_WRITE_ACK();						
    	while(bAHI_SiMasterPollTransferInProgress()); /* busy wait */						
    							
    							
    	vAHI_SiMasterWriteData8(AH);						
    	WRITE_ACK();						
    	if(!MyBusWait()){return 1;}						
    							
    	vAHI_SiMasterWriteData8(AL);						
    	WRITE_ACK();						
    							
    	if(!MyBusWait()){return 1;}						
    							
    	vAHI_SiMasterWriteSlaveAddr(0x50, TRUE);						
    	START_WRITE_ACK();						
    							
    	if(!MyBusWait()){return 1;}						
    							
    	for(i=0;i<Nd;i++)						
    	{						
    		READ_ACK();					
    		if(!MyBusWait()){return 1;}					
    							
    		pu8Dest[Ns+i]=u8AHI_SiMasterReadData8();					
    	}						
    	STOP_READ_NACK();						
    	while(bAHI_SiMasterPollTransferInProgress()); /* busy wait */						
    							
    	vAHI_InterruptSetPriority(0xFFFF,8);//全割り込みをレベル8で解除						
    							
    	return 0;						
    }							
    							
    							
    							
    //***変更1							
    void START_WRITE_ACK(void)							
    {							
    	vAHI_SiMasterSetCmdReg(E_AHI_SI_START_BIT,						
    					 E_AHI_SI_NO_STOP_BIT,		
    					 E_AHI_SI_NO_SLAVE_READ,		
    					 E_AHI_SI_SLAVE_WRITE,		
    					 E_AHI_SI_SEND_ACK,		
    					 E_AHI_SI_NO_IRQ_ACK);		
    }							
    							
    void START_READ_ACK(void)							
    {							
    	vAHI_SiMasterSetCmdReg(E_AHI_SI_START_BIT,						
    					 E_AHI_SI_NO_STOP_BIT,		
    					 E_AHI_SI_SLAVE_READ,		
    					 E_AHI_SI_NO_SLAVE_WRITE,		
    					 E_AHI_SI_SEND_ACK,		
    					 E_AHI_SI_NO_IRQ_ACK);		
    }							
    							
    void WRITE_ACK(void)							
    {							
    	vAHI_SiMasterSetCmdReg(E_AHI_SI_NO_START_BIT,						
    					 E_AHI_SI_NO_STOP_BIT,		
    					 E_AHI_SI_NO_SLAVE_READ,		
    					 E_AHI_SI_SLAVE_WRITE,		
    					 E_AHI_SI_SEND_ACK,		
    					 E_AHI_SI_NO_IRQ_ACK);		
    }							
    							
    void STOP_WRITE_ACK(void)							
    {							
    	vAHI_SiMasterSetCmdReg(E_AHI_SI_NO_START_BIT,						
    					 E_AHI_SI_STOP_BIT,		
    					 E_AHI_SI_NO_SLAVE_READ,		
    					 E_AHI_SI_SLAVE_WRITE,		
    					 E_AHI_SI_SEND_ACK,		
    					 E_AHI_SI_NO_IRQ_ACK);		
    }							
    							
    void STOP_WRITE_NACK(void)							
    {							
    	vAHI_SiMasterSetCmdReg(E_AHI_SI_NO_START_BIT,						
    					 E_AHI_SI_STOP_BIT,		
    					 E_AHI_SI_NO_SLAVE_READ,		
    					 E_AHI_SI_SLAVE_WRITE,		
    					 E_AHI_SI_SEND_NACK,		
    					 E_AHI_SI_NO_IRQ_ACK);		
    }							
    							
    void STOP_READ_NACK(void)							
    {							
    	vAHI_SiMasterSetCmdReg(E_AHI_SI_NO_START_BIT,						
    					 E_AHI_SI_STOP_BIT,		
    					 E_AHI_SI_SLAVE_READ,		
    					 E_AHI_SI_NO_SLAVE_WRITE,		
    					 E_AHI_SI_SEND_NACK,		
    					 E_AHI_SI_NO_IRQ_ACK);		
    }							
    							
    void STOP_READ_ACK(void)							
    {							
    	vAHI_SiMasterSetCmdReg(E_AHI_SI_NO_START_BIT,						
    					 E_AHI_SI_STOP_BIT,		
    					 E_AHI_SI_SLAVE_READ,		
    					 E_AHI_SI_NO_SLAVE_WRITE,		
    					 E_AHI_SI_SEND_ACK,		
    					 E_AHI_SI_NO_IRQ_ACK);		
    							
    }							
    							
    							
    void READ_ACK(void)							
    {							
    	vAHI_SiMasterSetCmdReg(E_AHI_SI_NO_START_BIT,						
    				 E_AHI_SI_NO_STOP_BIT,			
    				 E_AHI_SI_SLAVE_READ,			
    				 E_AHI_SI_NO_SLAVE_WRITE,			
    				 E_AHI_SI_SEND_ACK,			
    				 E_AHI_SI_NO_IRQ_ACK);			
    }							
    							
    							
    bool_t MyBusWait(void)							
    {							
    							
    	while(bAHI_SiMasterPollTransferInProgress()); /* busy wait */						
    							
    	//vfPrintf(&sSerStream, "%d %d ", bAHI_SiMasterPollArbitrationLost(),bAHI_SiMasterCheckRxNack());						
    							
    	if (bAHI_SiMasterPollArbitrationLost() | bAHI_SiMasterCheckRxNack())	{					
    							
    		/* release bus & abort */					
    		vAHI_SiMasterSetCmdReg(E_AHI_SI_NO_START_BIT,					
    						 E_AHI_SI_STOP_BIT,	
    						 E_AHI_SI_NO_SLAVE_READ,	
    						 E_AHI_SI_SLAVE_WRITE,	
    						 E_AHI_SI_SEND_ACK,	
    						 E_AHI_SI_NO_IRQ_ACK);	
    		return(FALSE);					
    	}						
    							
    	return(TRUE);						
    							
    }										
    
    (5)温度測定
    if(sAppData.u16CtRndCt == 8 )		
    {		
    	//****変更2温度測定	
    	vAHI_AdcEnable(E_AHI_ADC_SINGLE_SHOT,E_AHI_AP_INPUT_RANGE_1,E_AHI_ADC_SRC_ADC_1);	
    	vAHI_AdcStartSample();//測定開始	
    	while(bAHI_AdcPoll());//AD変換待ち	
    	uint16 ADC=u16AHI_AdcRead();//結果読み込み	
    		
    	gMyData[0]=ADC >> 8;	
    	gMyData[1]=ADC;	
    }					
    

    (6)アース抵抗測定
    //***変更3アース抵抗
    void fOhm(void);
    uint8 gOhm_F=0;//抵抗測定フラグ
    uint16 gOhm_C=0;//TickTimerカウンタ
    uint16 gOhm_N=5;//総和回数
    uint16 gOhm_NC=0;//総和カウンタ
    uint32 gOhm_S1;//ADC総和1
    uint32 gOhm_S2;//ADC総和
    
    if(sAppData.u16CtRndCt == 7 )		
    {		
    	//変更3	
    	vfPrintf(&sSerStream,"Ohm-TEST=\tgOhm_S1\tgOhm_S2\tR2\r\n");//TEST表示	
    	gOhm_F=1;//フラグON	
    }		
    
    //***変更3アース抵抗	
    int i;	
    for(i = 0;i < 16;i++){gMyData[i]=i;}	
    vPortSetLo(PORT_OUT3);//OFF設定	
    vPortSetLo(PORT_OUT4);//OFF設定	
    
    
    case E_AHI_DEVICE_TICK_TIMER: //比較的頻繁な処理			
    	//***変更3 アース抵抗		
    	if(gOhm_F == 1)		
    	{		
    		fOhm();//***変更3 アース抵抗	
    	}		
    
    //***変更3アース抵抗				
    void fOhm(void)				
    {				
    	gOhm_C++;			
    	if(gOhm_C == 1)			
    	{			
    		vPortSetLo(PORT_OUT3);//OFF設定		
    		vPortSetHi(PORT_OUT4);//ON設定		
    	}			
    	if(gOhm_C == 20)			
    	{			
    		vAHI_AdcEnable(E_AHI_ADC_SINGLE_SHOT,E_AHI_AP_INPUT_RANGE_2,E_AHI_ADC_SRC_ADC_2);		
    		vAHI_AdcStartSample();//測定開始		
    		while(bAHI_AdcPoll());//AD変換待ち		
    		gOhm_S1=gOhm_S1+ u16AHI_AdcRead();//結果読み込み		
    		//vAHI_AdcDisable();		
    	}			
    				
    	if(gOhm_C == 40)			
    	{			
    		vPortSetHi(PORT_OUT3);//ON設定		
    		vPortSetLo(PORT_OUT4);//OFF設定		
    	}			
    				
    	if(gOhm_C ==60)			
    	{			
    		vAHI_AdcEnable(E_AHI_ADC_SINGLE_SHOT,E_AHI_AP_INPUT_RANGE_2,E_AHI_ADC_SRC_ADC_2);		
    		vAHI_AdcStartSample();//測定開始		
    		while(bAHI_AdcPoll());//AD変換待ち		
    		gOhm_S2=gOhm_S2+ u16AHI_AdcRead();//結果読み込み		
    		//vAHI_AdcDisable();		
    	}			
    				
    				
    	if(gOhm_C > 80)			
    	{			
    		gOhm_C=0;		
    		gOhm_NC++;		
    		//vfPrintf(&sSerStream,"Ohm-TEST=\t%d\t%d\r\n",gOhm_S1,gOhm_S2);//TEST表示		
    		if(gOhm_NC > gOhm_N)		
    		{		
    			gOhm_NC=0;	
    			uint32 R2=3300*gOhm_S2/gOhm_S1;	
    			vfPrintf(&sSerStream,"Ohm-TEST=\t%d\t%d\t%d\r\n",gOhm_S1,gOhm_S2,R2);//TEST表示	
    			gMyData[2]=gOhm_S1 >> 8;	
    			gMyData[3]=gOhm_S1;	
    			gMyData[4]=gOhm_S2 >> 8;	
    			gMyData[5]=gOhm_S2;	
    			gOhm_S1=0;	
    			gOhm_S2=0;	
    			gOhm_F=0;//これを有効にすると1回で終了!!	
    		}		
    	}			
    }				
    
    (7)音速測定
    //***変更4 音速
    void HC_SR04(void);
    
    if(sAppData.u16CtRndCt == 6 )		
    {		
    	//変更4	
    	vfPrintf(&sSerStream,"HC-SR04 -TEST\r\n");//TEST表示	
    	HC_SR04();	
    }		
    
    //***変更4 音速		
    void HC_SR04(void)		
    {		
    	//vfPrintf(&sSerStream,"HC-SR04-TEST\r\n");//TEST表示	
    	vPortAsInput(PORT_INPUT1);//入力設定	
    	vPortAsOutput(PORT_INPUT2);//出力設定	
    		
    	vPortSetLo(PORT_INPUT2);//トリガOFF	
    	vAHI_TimerEnable(E_AHI_TIMER_4,3,FALSE,FALSE,FALSE);//プレスケール1/8設定	
    	vAHI_TimerStartSingleShot(E_AHI_TIMER_4,0x0000,0x0000);//タイマー4スタート	
    	while(u16AHI_TimerReadCount(E_AHI_TIMER_4) < 20);//10μsディレイ	
    		
    	vPortSetHi(PORT_INPUT2);//トリガON	
    	vAHI_TimerStop (E_AHI_TIMER_4);//タイマー4ストップ	
    	vAHI_TimerStartRepeat(E_AHI_TIMER_4,0x0000,0x0000);//タイマー4スタート	
    	while(u16AHI_TimerReadCount(E_AHI_TIMER_4) != 20);//10μsディレイ	
    		
    	vPortSetLo(PORT_INPUT2);//トリガOFF	
    	vAHI_TimerStop (E_AHI_TIMER_4);//タイマー4ストップ	
    	vAHI_TimerStartRepeat(E_AHI_TIMER_4,0x0000,0x0000);//タイマー4スタート	
    	while(bPortRead(PORT_INPUT1) &&  u16AHI_TimerReadCount(E_AHI_TIMER_4) != 0xffff);//エコーON	
    		
    	vAHI_TimerStop (E_AHI_TIMER_4);//タイマー4ストップ	
    	vAHI_TimerStartRepeat(E_AHI_TIMER_4,0x0000,0x0000);//タイマー4スタート	
    	while(!bPortRead(PORT_INPUT1) &&  u16AHI_TimerReadCount(E_AHI_TIMER_4) != 0xffff);//エコーOFF	
    		
    	uint16 TimerReadCount=u16AHI_TimerReadCount(E_AHI_TIMER_4);	
    	vfPrintf(&sSerStream,"TimerReadCount=%d\r\n",TimerReadCount);//結果出力	
    	vAHI_TimerStop (E_AHI_TIMER_4);//タイマー4ストップ	
    		
    	gMyData[6]=TimerReadCount >> 8;	
    	gMyData[7]=TimerReadCount;	
    		
    	vPortAsInput(PORT_INPUT2);//入力設定	
    }		
    
    (8)臭い測定
    //***変更5
    void MyDelay(long Tu);
    uint16 TTC=0;//TickTimerカウンタ
    uint8 gTGS_F=0;//TGS2450フラグ
    uint16 gTGS_N=20;//総和回数
    uint16 gTGS_NC=0;//総和カウンタ
    uint32 gADC;//ADC総和
    void TGS2450();
    
    if(sAppData.u16CtRndCt == 5 )		
    {		
    	//変更5	
    	vfPrintf(&sSerStream,"TGS2450-TEST\r\n");//TEST表示	
    	gTGS_F=1;//フラグON	
    }
    
    //****変更5
    vPortSetLo(PORT_OUT1);//OFF設定
    vPortSetLo(PORT_OUT2);//OFF設定
    
    //***変更5				
    if(gTGS_F == 1)				
    {				
    	TTC++;			
    	if(TTC > 62)			
    	{			
    		TTC=0;		
    		gTGS_NC++;		
    		TGS2450();		
    		if(gTGS_NC > gTGS_N)		
    		{		
    			gTGS_NC=0;	
    			vfPrintf(&sSerStream,"TGS2450-TEST=\t%d\r\n",gADC);//TEST表示	
    			gMyData[8]=gADC >> 8;	
    			gMyData[9]=gADC;	
    			gADC=0;	
    			gTGS_F=0;//これを有効にすると1回で終了!!	
    		}		
    	}			
    }				
    		
    
    //***変更5 臭い		
    void MyDelay(long Tu)		
    {		
    	vAHI_TimerEnable(E_AHI_TIMER_4,4,FALSE,FALSE,FALSE);//プレスケール1/16設定	
    	vAHI_TimerStartSingleShot(E_AHI_TIMER_4,0x0000,0x0000);//タイマー4スタート	
    	while(u16AHI_TimerReadCount(E_AHI_TIMER_4) < Tu);//Tuμsディレイ	
    	vAHI_TimerStop (E_AHI_TIMER_4);//タイマー4ストップ	
    	vAHI_TimerDisable (E_AHI_TIMER_4);//タイマー開放	
    		
    }		
    //***変更5 臭い		
    void TGS2450()		
    {		
    	vPortSetHi(PORT_OUT1);//ON設定	
    	MyDelay(3000);	
    	vPortSetHi(PORT_OUT2);//ON設定	
    	MyDelay(5000);	
    	vAHI_AdcEnable(E_AHI_ADC_SINGLE_SHOT,E_AHI_AP_INPUT_RANGE_2,E_AHI_ADC_SRC_ADC_2);	
    	vAHI_AdcStartSample();//測定開始	
    	//MyDelay(1000);	
    	while(bAHI_AdcPoll());//AD変換待ち	
    	gADC=gADC + u16AHI_AdcRead();//結果読み込み	
    	//MyDelay(1000);	
    	vPortSetLo(PORT_OUT1);//OFF設定	
    	vPortSetLo(PORT_OUT2);//OFF設定	
    }				
    


  7. 結果の検討
    (1)アース抵抗測定は家庭菜園の状態監視に役立つような気がします。
    (2)音速、臭い測定は活用できるか?は不明です。
    (3)アース抵抗測定と臭い測定のApp_TweLiteへの組み込みは思いのほかてこずりました。
    (4)AD変換の割込み制御はタイミングが重要な測定に適用すると、測定値の信頼性がないことがわかりました。
    (5)これに対して待ちループ制御はタイミングズレが無く測定値の信頼性がありますが、CPUが占有されるため、複数の並列処理に悪影響が生じる。
    (6)今回は、AD変換の割込み制御を禁止し、待ちループ制御としました。
    (7)無線のパケット通信の基本部分に関しては、理解できませんでした!!
    (8)今後回路の万能基板化を行い、適用評価を行う予定です。
    (9)実際の観測では、風雨にさらされるため腐食による断線の対策等が必要となります。




30章:無線式気象観測レコーダの常夜灯機能追加に行く。

トップページに戻る。