2013/09/13


TWE-Lite DIPを試す
XBeeモジュールでリモートセンスを考えていましたがTWE-Liteなら簡単に
できるかもしれないと思い実験してみました。
TWEのバージョンは APP V1-01-3 です。
実験の結果については間違いがあるかもしれませんのであしからず・・・。


AD変換の実測です。接続は接続サンプルのとおりりです。
 

TOCOSホームページ上のADCの特性です。


AD変換結果
  TWE-001 Lite S/N 1000D71 VCC 2.88V Hioki 3240
 
  ※AD変換値はぶれの中で最も多く出現する値を採用

 AD変換結果は下記のデータフォーマットと変換式より算出

  変換式  AD1[mV] = (e1 * 4 + ef1) * 4  
 
データフォーマット
 
  1: 送信元の論理デバイスID (0x78 は子機からの通知)
  2: コマンド(0x81: IO状態の通知)
  3: パケット識別子 (アプリケーションIDより生成される)
  4: プロトコルバージョン (0x01 固定)
  5: LQI値、電波強度に応じた値で 0xFF が最大、0x00 が最小
  6: 送信元の個体識別番号
  7: 宛先の論理デバイスID
  8: タイムスタンプ (秒64カウント)
  9: 中継フラグ(中継済みなら1)
  a: 電源電圧[mV]
  b: 未使用
  c: DI の状態ビット。DI1(0x1) DI2(0x2) DI3(0x4) DI4(0x8)。1がLo。
  d: DI の変更状態ビット。DI1(0x1) DI2(0x2) DI3(0x4) DI4(0x8)。1が変更対象。
  e1〜e4: AD1〜AD4の変換値。0〜2000[mV]のAD値を16で割った値を格納。
  ef: AD1〜AD4の補正値(LSBから順に2ビットずつ補正値 LSB側がAD1,MSB側がAD4)
  g: チェックサム

・入力40mV以下は変換誤差が大きい(特性表でも入力min=0.04V)

・入力50mV〜最大入力まで常に補正値が3Bitくらいはふらついている。
 

・特性表から
 リファレンス電圧が1.235Vで10Bitならば1Bit=1.206mVかと思いきや
 変換式をみるとAD変換値e1は1Bit=16mV、補正値ef1は1Bit=4mVとなる。
 補正値が3Bit変動するとすれば変換誤差が12mVもあることになる。
  
※ブレッドボード上の結果であり評価試験ではない事を考慮してね・・

・特性表のADC入力レンジの最大値がVref、2xVrefとなっていて紛らわしいが
 入力電圧を上げていくとAD変換値e1と補正値ef1が7F→FFとなることから
 入力の上限は変換式 AD1mV=(7F*4+3)*4 にあてはめると2044mVとなる
 とすると「2xVref」は満たしていないことになる?
 ちなみにADポートは未使用(VCC接続)の場合対応するe1〜e4値は0xFFとなるとある。

 

・AD変換の分解能はAD変換値が0x7Fまでなので補正値2Bitとあわせて9Bit ?
 9Bitなら1LSB=2.4mV となるし、10Bitを内部で変換して9Bit表現としているの
 でしょうか・・



PWM出力     ← 追記あり 詳細はこちら  2015/3/1

 デューティと入力電圧の関係を調べてみました。電源電圧は2.9V程度です。
 デジタルオシロではないのである程度の誤差があると思いますが・・
 PWM出力の周期はピタッと1mSです。
 親機の入力電圧に応じてデューティーが変化しますが、±8〜10μS程度ぶれます。
 これはAD変換の結果が常に3Bit程度ずれているからと思われます。

 

・100μS 〜 900μSの間は1μS ≒ 1.26mVでほぼ直線的に変化しているものの
 波形から入力電圧を推測するのは現実的ではなさそうです。


・AD変換の入力は2044mVまで入力できるのにPWM出力は1355mVでDuty100%となる

・VCC接続のアナログ入力をGNDにするとPWM出力はLowとなるが
 入力を再度VCC接続してもPWM出力はLowのままでHiに変化しない。
 しかし通知コマンドでは正しく通知されている。
 下記はAD3ポートの入力を VCC→GND→VCC→GND と変化させた例 
 
 
通知コマンドでAD変換値が 00→FF に変化しているのにポート出力が変化しない。
 
仕様なのかバグなのかはわかりませんが、そもそもこんな使い方は想定外なのかも・・。
 ちなみにVCCからGNDレベルに変化させた後、徐々に電圧を上げると
 PWM波形を出力します。

・アナログ入力に1355mV〜2044mVの間の電圧を加えこれを「1」とし、1→GND→1
 と変化させるとPWM出力は Hi→Low→Hi と変化する。
 ただし瞬時にDuty100%のHiとなるのではなく、Duty 0〜100%まで0.5秒程度で
 カウントUPして最終的にDuty100%のHi出力となる。 


アナログ入力はデータポートして使えるか?
 アナログ入力ポートがデジタル入力ポートののように使えれば8Bitのデータ
 ならば一度に送ることができる。
 上記実験の結果から言えば○。(アナログ入力ポートを1.5V程度でコントロール)
 ただしまだアナログ入力ポートとデジタル入力ポートを同時に変化させて
 出力ポートがどうなるか実験していなのでなんとも言えない。
 素直に4Bitごと処理すればいいのだろうけど、こんなことを考えるのは私だけ?




任意データの送受信     ← 追記あり 2014/2/15

 UARTコマンドで無線端末間で任意データの送受信が可能とあるが
 そもそも1秒間隔で通知コマンドが受信され、さらに相手入力ポートが
 オープン状態など入力レベルがふらつくと通知コマンドの洪水となり
 任意データの送信が割り込めない。
 任意データの送受信にはUART通信専用ソフトウエアが必要で親機・子機
 それぞれPCに接続しないといけないのでしょうか??



2013/09/23
間欠モード時のデジタル信号通信の実験

子機を間欠1秒・間欠10秒モードで動かしてみます。(リモコンを想定)
 ※ ここでの間欠モードは子機間欠1秒と間欠10秒を指します。

・子機を間欠モードにすると親機のポートの状態を変化させても子機に伝わらない。
 機能欄に「応答に最大1秒(間欠10秒の時は10秒)かかります」との記載があり子機に
 伝わるかのように取れますが、子機のUARTを見ても通知コマンドは受信していません。
 双方向デジタル信号通信をする時は子機は連続モードにする必要がありそう。
  ※2014/1/22現在TOCOSさんのホームページでは
   「休止中は親機からの信号を受けることができません」となっています。
   休止中(スリープ時)となっていてWAKE UP時は受信できるのかもしれませんが
   現実的でないでしょう・・・。


・子機が間欠モード時、子機のデジタルポートの入力変化はすぐに親機のポートへ
 送信しますが、アナログポートの入力が変化してもすぐには送信しません。
 間欠1秒または10秒ごとのTIMER WAKE UPでその時のAD変換値が親機に送信されます。


・間欠モードの子機から親機へデジタルポートの変化が正しく伝わらない??
 デジタル入力1ポートにタクトSWを接続しスイッチを押して放すと入力は
 Hi→Low→Hi と変化するはずですが、スイッチを放した時の Low→Hi の変化が
 伝わらないことが頻繁に発生します。
 間欠1秒でも間欠10秒でも発生します。
 Lチカ(LEDチカチカ)で表現すると、子機のLEDはスイッチを押している間だけ消灯
 しますが、親機のLEDは子機のスイッチを放しても消えたまま点灯しないことがある
 ということになります。

 下の画像をクリックするとMedia Player で見れます。 上が親機で下が子機です。
 子機のLEDと親機のLEDは同じ様に点滅しないといけませんが親機のLEDの点滅が
 おかしくなっているのがわかります。(子機のLEDは74AC04でドライブしています)
 子機は間欠10秒モードです。 TWEのバージョンは APP V1-01-3 です。

   ファイル容量20MB 35秒
  

 スイッチを押す速さや、押す時間にはあまり関係がないようです。
 デジタル入力1ポートは接続例のとおりSWのみでプルアップ抵抗は未接続で実験を
 行いましたが、10kΩのプルアップをつけると頻度が上がり、0.1μを追加すると頻度が
 下がるような気もします。
 
 タクトSWを変えてみてもあまり変化はないようです。
 
ただ、何度やってもスイッチを押したときの Hi→Low への変化は一度も取りこぼしが
 なかったように思えます。



 ならば、スイッチの替わりにPICの出力を直接入れたらどうなるか試してみました。
 基本的にチャタリングはありません。
 使用したPICは PIC12F675(GP0 7PINを使用)で、1秒ごとにHiとLowを繰り返します。

 PICの出力なのでHiはVCCとほぼ同一電圧です。

 結果は100% NG でした。
 子機のLEDは1秒ごとに点滅をくりかえしますが親機のLEDは消えたらそのまま
 ずっと消えたままなのです。何度やっても100%の再現性があります。
 こちらも下の画像をクリックするとMedia Player で見れます。
 上が親機で下が子機、子機は間欠10秒モードです。

   ファイル容量9.7MB 16秒
 
 親機のLEDが2度ほど点灯しますがこれは後述します。
 


 100%の再現性があるのでUARTのログで状況を確認してみます。


  <もうちょっとだけ詳しいログを見たい方はこちらをクリックしてください>

 親機は2秒ごとに子機から Low(ログ上では"01") の通知コマンドを受信していますが
 Hi(ログ上では"00")の通知コマンドがなく、LEDは消えたままです。
 子機は1秒Hi・1秒Low の繰り返しなので、TIMER WAKE UP の10秒間にDI WAKE UPは
 10回なくてはいけません。ですがログ上では5回しかありません。
 
あるべきはずの Hi の通知コマンドが抜け落ちていることになります。
 本来ならば1秒ごとに Low と Hi の通知コマンドが交互にあるべきですよね・・

 また、2秒ごとに Low を送信していますが、ポートが Low のまま変化がないのなら
 DI WAKEUP は1回きりでよいはずです。
 2秒ごとにLowのDI WAKEUP が発生しているのは、ポートが Low→Hi への変化を認識して
 いるからではないでしょうか?。
 そう考えると、Hiの通知コマンドを送信せずにサボっているとしか思えないのですが・・

 期待するログはこんな感じでしょうか・・
   0:00:00  DI WAKE UP  →   01  ; Low
   0:00:01  DI WAKE UP  →   00  ; Hi
   0:00:02  DI WAKE UP  →   01  ; Low
   0:00:03  DI WAKE UP  →   00  ; Hi
   0:00:04  DI WAKE UP  →   01  ; Low
   0:00:05  DI WAKE UP  →   00  ; Hi
   0:00:06  DI WAKE UP  →   01  ; Low
   0:00:07  DI WAKE UP  →   00  ; Hi
   0:00:08  DI WAKE UP  →   01  ; Low
   0:00:09  DI WAKE UP  →   00  ; Hi
   0:00:10  TIMER WAKE UP →  00  ; Hi

 
 動画で親機のLEDが2度点灯したのは、子機は10秒ごとにWAKE UPして
 ポートの状態を送信します。この時入力ポートがHiだったからです。
 これは、DI WAKEUPで Low→Hi の変化が親機に伝わらなくても、
 子機のTIMER WAKE UPによる通知コマンドでポートの状態が正しく親機に伝わり、
 子機と同じ状態になったためです。
 つまり子機と親機のポートにアンマッチがあっても、子機のTIMER WAKE UPごとに
 修正されるということです。
 間欠1秒モードでは間隔が1秒なので現象が目立たなくなるだけです。


連続モードではこの現象は発生しないのでしょうか??    2013/10/20 追記

 タクトスイッチを連打しているとアレッ!!、ウン!! なんて感じることがたまにあります。
 気のせいかもしれませんが、もしかして同じ現象が出ているのかもしれません・・



2013/09/28
DI WAKE UP について

 Low→Hi のポート変化は通知コマンドは送出しないのが仕様?? ← 仕様です

 PIC出力のHI・Lowの周期を変化させて実験してみましたが、いずれもデジタルポートの
 入力が Low→Hi へ変化する時には通知コマンドは送出されませんでした。

 また「低レイテンシオプション」の説明の中に下記の記載があります。

  
・Hi -> Lo への検出は割り込みにより検出します。
   割り込み検出後は一定期間(約100ms)は割り込み検出を無視します。
  ・Lo -> Hi への検出は、1ms 毎の DI 値判定が5回連続(標準では 4ms を5回)で
   Hi になることで検出されます。

       http://tocos-wireless.com/jp/products
       /TWE-Lite-DIP/TWE-Lite-DIP-step3-interactive.html

 これは、Hi→Low はハード割り込みだけど Low→Hi はソフト処理をしている
 だから Hi を検出してもそれを送出するかどうかはプログラムの処理しだい
 という風にも解釈できるのでしょうか?

 ただ Low→Hi のポート変化は送出しないのが仕様だとすると、
 スイッチを放したときにLEDが点灯するのは、チャタリングがあるため
 たまたまHiが伝わるのでしょうか?

間欠モードでの回避策はあるか

・スイッチを押すときに別なデジタルポートに20ms〜100ms位の短時間で
  Hi・Low を繰り返す信号を入力しておくと、スイッチのHiは伝わらなくても
  別ポートのDI WAKE UPによりスイッチがHiになっていることが伝わる。
  ただし、別ポートのHi・Lowの周期だけタイムラグが発生する。
  CR2032の電池を使用する場合は消費電流にも注意が必要。

・DI が Lo になっている時にパケットを連続送信するオプションでも
  回避できるかもしれませんが間欠モードで有効かの情報はありません。
  また、「DIの全てが Hi に戻った時は、その後1秒間、秒32パケットで送信」
  とあり、スイッチを放してから1秒間は押せない??、DIの全てなの・・と
  実験してみないとわかりません。


TWE-Lite DIPでやってみたかったこと

・長期間乗らない車のバッテリ電圧監視
  バッテリの電圧を0.1V単位で監視するにはTWE内臓のAD変換では△かな・・

・室外の温度測定
  LM35などの温度センサーは10mV/1℃程度なのでTWE内臓のAD変換ではX
 
・アマチュア無線機のPTTスイッチをコードレスにしたい
  ハンドルにTWE子機をつけて、スイッチを押している間だけPTTをONにして
  無線機を送信状態にする。
  ハンドルに付けるので電池はCR2032で間欠モードで使用を想定しますが
  間欠モードではスイッチを放してもPTTがONになりっぱなしの可能性がありX
  ついでに車内からガレージのLED照明をON・OFFする→アバウトでいいので○
 
 やってみたいことは単純なのですが、ささっと簡単にはとはいかないみたいです(^-^;) 


 TOCOSさんのホームページにはQ&Aや、掲示板がないのでぜひ開設を願いたいものです。
 仕様を確認するにも、評価開発キットご購入のお客様で、サポート登録をお済みで・・・
 うんぬんとあり問い合せできません。 
 TOCOSさん見てないだろうけど見てたらよろしくね・・

   ※現在ではサポート契約がなくても問い合わせできるようになっています。



2013/10/08
超簡単!無線マイコン とあるのに簡単やないじゃないのと思いつつ気を取り直して
飛距離(短距離ですが・・)のテストをしてみました。


 その前に気になっていたアンテナのサイズを測ってみました。
 長さは32mmです。

 
 波長[m] = 300 ÷ 周波数[MHz] なので使用周波数が2400MHzとすると
 300/2400=0.125m つまり125mmとなります。
 なので32mmは1/4ホイップアンテナというところでしょうか。
 でも1/4とするには送信アンテナとしてはちと長いような・・ 
 125mm ÷ 4 × 0.96 = 30mm くらいになるのではと思ったりするのですが・・
 まあ、そんなことはおいといて・・

 車のバッテリ電圧監視をするとして電波が飛ぶか実験してみました。
 見取り図は下のようなものです。 2Fに親機、ボンネットの中に子機を入れます。
 親機から子機間は直線で7m位で、ガラス・カーポートの塩ビ?の屋根・ボンネットの
 障害物があります。  車側の子機は連続モードに設定。天候は曇りです。


 子機からはアナログ入力1に1Vの電圧を入力。
 他のアナログ入力はVCCへ接続、デジタル入力はすべてGNDへ接続
 
 2Fの窓枠の上まではほぼ確実に受信できます。たま〜に落ちることもあるようですが・・
 しかし、窓から30cmくらい中に入れると、時々しか受信できなくなります。
 状態の良いときは受信できるのですが不安定です。
 壁が鉄筋の影響もあると思います。
 ちなみに子機は、助手席ダッシュボードの下に置いても、ボンネット内でも電波の
 伝搬に違いはないようです。
 まずは実験成功。あとは時間のある時に子機とPCがなくても電圧が表示できる親機を
 考えてみることにします。 




2013/10/20
連続モード時のデジタル信号通信の実験

子機が間欠モードではデジタル入力ポートにPICマイコンを直結した時に、
Low→Hi の通知コマンドが送出されませんでしたが、連続モードではどうなのか
確認してみました。

 構成は間欠モードの時と同じです。周期400ms Duty50。プルアップなし
 

 連続モードではLow→Hiの通知コマンドもちゃんと送出されています。

 ですが・・・
 下のログにあるように時々通知コマンドが抜けることがあります。
 

 Lチカで表現すると規則正しく点滅しているLEDの点滅がいびつになります。
 現象が出ない時はずっとでませんが、出る時は20秒から30秒に1回くらい
 ずっと出ています。

 現象が出る、出ないは子機の電源を入れるタイミング?・・
 なんて感じたりもするのですが・・ わりと現象が出てしまいます。 トホホ・・

 なぜに400ms周期で実験したかはスイッチを1秒間に3回連打すると1回あたり333ms
 ですが、この1秒間に3回というのは、私の中では1秒間に3回キーを連打すると
 システムリセットとか特殊モードに入る動作をさせるのが好きなんです。
 ですから、これくらいのスピードでどうかなぁ・・なんて単純な発想です。


デジタル信号の遅延時間

連続モードでのデジタル信号の遅延時間を測定してみました。
 
 立下り・立ち上がりとも 30ms〜50ms 位の遅延です。
 アナログオシロの波形を目で追いかけますので誤差はあると思いますが・・
 遅延時間については「JF1VRR(also JR3QZS)の無線日記」さんのブログにも紹介れています。
   blogs.yahoo.co.jp/jf1vrr_station/25168395.html
 この遅延時間はインタラクティブモードのオプションビットで短くできるようです。


電源ON時のデジタル信号の遅延時間

電源をONにした時のデジタル信号の遅延時間を測定してみました。

 方法はPICの信号をLowにすることによってTWEの電源をONにします。
 TWEのデジタル入力ポートはGNDにしておき、親機のデジタル出力ポートがLowになるまでの
 時間を測定します。オシロはPICの信号の立下りCH1でトリガします。
 

 
  
の値
   連続モード時: 120ms〜300ms (450msくらいもたまにある)
   間接モード時: 60ms〜70ms

 連続モード時は120ms〜300ms とかなりばらつきがあります。
 たまぁ〜に450msくらいまで伸びることもあります。
 間欠モード(1秒・10秒)では60ms〜70msで安定しています。

 ここでも一瞬の波形を目で追っかけてますので誤差はあるかと思いますが、
 感覚的にもこれくらいの時間差と思います。 
 TWEの特徴に「瞬速起動」なる文言があったのでちょっと確認してみたまでです。


PICのポートでTWEがドライブできるか?

 PICの1ポートの最大電流は25mA。
 カタログ値?の送信:14.6mA 受信:17.2mAであればいけるかなぁ・・と思ったのですが
 結果はNGでした。 使用したPICは12F675と16F88

 PIC12F675のポートにTWEのVCCを接続した波形です。電源電圧:2.73V 
   

 ついでに、子機連続モード時の電流波形です。
 1Ωの抵抗を電源に直列に挿入しその両端の波形です。電源電圧:2.73V
 



 
2013/10/26
電源ON時のデジタル信号の遅延時間<親機編> 

親機だって間欠モードで使いたい。でもそんなモードはありません。
常に17mAの消費電流、小さいようでも単三アルカリ電池がわずか5日でなくなります。
電源スイッチ付にしても、私はしょっちゅう切り忘れします。
電池に糸目を付けない方ならそんなこと関係ないのでしょうが、
電池駆動の親機にする時はこの消費電力が悩みの種になります。
リモコン専用アプリでも親機の間欠モードはなさそうです。
擬似間欠モードが可能か探ってみます。 
※単三電池は2000mAとして計算

 子機から連続0.03秒モードでLowを連射しておき、親機がONになってから
 デジタルポートの出力がLowになるまでの時間を調べてみました。
 オシロはPICの信号の立下りCH1でトリガします。

 

 波形はだいたいこんな感じ。何回も言いますがオシロはアナログです。
 

 1.TWEの仕様として電源ON時にデジタルポート出力は「Hi」となります。
 2.子機からLowの通知コマンドを受信してデジタルポート出力は「Low」となります。

 3.電源OFFでデジタルポート出力は「Hi」→「Hiインピーダンスピーモード?」へ移行。
  いったんHiになった出力は40ms程度で1Vまで下がり、このあとだらだらと
  GNDレベルまで下がっていきます。
  TWEのVCCに10μFのコンデンサを追加(接続図のa点)すると100msまで伸びます。

  この40msというのはTWE側のコンデンサの容量によるものでしょうか。

 遅延時間は親機の電源がONしてから出力がLowになるまで20ms〜30msで安定しています。

 たとえば1秒の遅れが気にならないなら、100ms間ONで900ms間OFFで受信監視すれば
 これで電池の持ちは10倍の50日となります。 
 このONとOFFの時間を調整すればかなり長持ちさせることができます。
 TWEの出力の変化( Hi → Low → Hi → Hiインピーダンス?)に注意が必要で
 回路の消費電力も考えないといけないし、
 もう少し実験してみてみないとわからないけど、なんとなく使えるかもしれません・・
 
 
ただし、仕様外の使い方なのであくまで自己責任です。

 親機を間欠で使うなんて場面ある??・・
 まあそんなにないかもしれないけど、たとえば自転車発見器。
 1秒や2秒のタイムラグがあっても全然平気!
 自転車であちこち行く人には以外と便利なグッズ。買っても2000円そこそこ。
 わざわざ作る必要なんてないけど、
 そこは自分で作っちゃうことに醍醐味を感じる人ならね・・

 最初の起動はのろまでも、いったん通知コマンドを受信すればそこからはキビキビと動く
 なんて使い方けっこうあるかもしれないし・・
 
親機だって間欠モードあってもいいじゃんって思うけど、どおTOCOSさん。見てないか・・

 子機も必要なシーンに応じてスイッチを押してしる間だけ、間欠0.03秒モードとか
 連続モードとかを使い分けると便利いいかもしれません。



2013/11/03
連続0.03秒モードの動作

連続0.03秒モードの動作について確認できていることです。
 ・モード名のとおり30msに一度通知コマンドが送信されます。
 ・PICのチャタリングのない信号でも親機に正しく伝わります。
 ・間欠モードではこの0.03秒モードのみが親機からの受信もできますが、
  1秒以上遅れる時があります。
 ・子機のログに「TIMER WAKE UP」も「DI WAKE UP」もありません。
 ・消費電流は手持ちのアナログテスターで、連続モードより0.5mAほど少ない
  17.5mA〜18.0mAくらいです。

 繰り返し通知コマンド送信の連続モードのようですが、連続モードよりわずかに
 消費電流が少ないのでやはりスリープしてるんでしょうか・・
 ポートの入力変化は検知しているかどうかはログを見ても量が多すぎて
 よくわかりません。見るだけでいやになります (^-^;;)
 TWEを購入したままの状態であれば30ms以下のポート入力変化には
 反応しないようなので30msごとにポートの状態を送信していれば
 わざわざポートの入力変化を検知する必要はないように思います。
 個人的には「連続スーパーモード」のネーミングのほうがあってると思えるのですけど・・

 連続0.03秒モードは「ポートの状態が一番正確に伝わるモード」かもしれません。




間欠モードのデジタル入力ポートの動きをもう少し探ってみました。

 ※ ここでも間欠モードは子機間欠1秒と間欠10秒を指します。

間欠モードではPICなどのチャタリングのない信号はLow → Hiへの変化が
親機に伝わりませんでした。
そこで下図のようにHiとLowをそれぞれ基準としてパルスを入れてみました。
 
 ・間欠モードでは50μsのパルスでもDI WAKE UPによる通知コマンドが送信されます。
 ・通知コマンドはパルスが入力されるたびに出力の変更の必要がなくても
  必ず送信されます。
 ・DI WAKE UPの最小間隔は75msで75msより短いと通知コマンドは送信されません。
 ・パルスの幅が30msを超えるとDIの変更状態ビット="1"となり出力が変更されます。
 ・Lowを基準にしたパルスではLow→Hiの立ち上がりでDI WAKE UPしているように見えますが
  実は
パルスの立下りでDI WAKE UPしているのです。

 ★間欠モードでは「Hi→Lowへの立下りでのみDI WAKE UPが起きる」ようです。


 
デジタル入力ポートにマイコンを接続する時はチャタリングを入れる!

それならば Low→Hi を伝えるのにはHiにする時、チャタリングのように一発パルスを
入れてスリープから起こせばいいいはずです。
 

 チャタリングがないと伝わらなかったLow → Hiの変化がみごと伝わるようになりました。
 波形は1ms周期の1パルスを入れるだけです。
 子機から親機へのデジタル信号の遅延時間はほぼ45msで安定しています。

 デジタル入力ポートはスイッチの接続を前提にしているような記載がどこかにあったように
 思いますが、スイッチにはチャタリングがあるので正しく伝わったのです。
 しかしチャタリングが少ないスイッチだったりチャタリングの出方によっては
 スイッチでも正しく伝わらないことが起こりえることになります。
 だいたいの仕様はTOCOSさんのホームページに下記記載があります。
  Lo → Hi への検出は標準では4ms毎のDI値判定が5回連続Hi になることで検出されます

 チャタリング付の信号は連続モードでも問題なく動作するようですが、
 チャタリング付の信号でも正しく情報が伝わらない現象は、連続モードでも
 間欠モードでも同様に発生します。なぜそうなるのかはまだわかりませんが・・。

 間欠モードの「TIMER WAKE UP」によるコマンド通知はその時のポートの状態を
 伝えますのでDI WAKE UPを使わないのならチャタリング波形は必要ありません。

 
<注意>
 なお、この実験で使用したPICは、内臓オシレータで時間もプログラムのループで
 発生させた時間です。したがってTWE-Liteの仕様値ではありませんので注意してください。
 また実験には誤りがあるかもしれませんのでご承知おきください。


 間欠モードのポートの動きが少しわかると連続モードではどうなのよ・・と思いますが
 よくわかりません。わかっていることを記載しておきます。

 ・Hi→Lowへのパルスは3ms程度ないと反応しない
 ・パルス幅が30msあればDIの変更状態ビット="1"となり出力の変更が通知されるが
  20msを超えるあたりからDIの変更状態ビット="1"になったり"0"だったりと不安定。
 ・チャタリングのない波形でもLow→Hiは伝わる

 間欠モードのようにきびきびとした動きではなく、だらだらとプログラム処理している
 ような感じを受けます。
 
 連続モードは測定ごとに値が変わり、ログを追っかけるにもログには
 何の要因で通知したかのイベント情報がないので よくわかりません。
 00:通常の通知 01:TIMER WAKE UP 02:DI WAKE UP みたいに追加してくれると
 ありがたいんですけどね。TOCOSさん・・ 見てないか・・・




バッテリー電圧測定中 2013/12/10
TWE-Liteで車のバッテリー電圧を測定中です。  詳細はこちら



ToCoStick こちらへ 買ったばかりなのでまだ中身はないですが・・・ 2013/12/21




任意データの送受信 2014/2/15
(標準モードでの実験です。通信専用アプリではありません)

時々実験しつつも今ひとつうまくいかなかったのですがとりあえず成功!
未だに何がきっかけか分からないけど、たぶんよくある思い込みかも・・。


構成
 親機はToCoStick[V1-04-01]
 子機はTWE-Lite DIP[V1-01-3]x2台(1台はバッテリ電圧監視の間欠1秒モード)
 専用アプリは使わず標準の「超簡単!TWEアプリ」(購入したままの状態)です。


送信データ
 標準モードでのデータ送信なので送れる文字は数字とA〜Fの文字で
 データサイズは最大で80バイト、複数のパケットに分割して送ることで
 最大約 800 バイトまでのデータを送受信することができますと記載されています。

実験で「112233」の文字を送信してみます。
 親機から子機へデータ送信
  先頭=: + 子機論理ID=78 + コマンド=01 + データ本文=112233 + チェックサム=21


 子機から親機へデータ送信
  先頭=: + 親機論理ID=00 + コマンド=01 + データ本文=112233 + チェックサム=99


実際のUART出力はこんな感じです。  ← 子機バージョンにより相違あり 2014/2/22
アニメーションGIFで見る 1.3MB 21秒

・1秒ごとに送られてくる通知コマンドの合間に割り込むように表示されます。
・子機2台程度だと任意データの送信の割り込みに失敗することはほとんどないようです。
 たまには失敗することもあるようですが・・・。

  実際の画面をアニメーションGIFで見れます 1.3MB 21秒  こちら

注意点 
・チェックサムに誤りがあると送信されない。
・子機から親機に送信した時、IDとチェックサムが変わる。
  子機から
:000111223399を送信したのに親機で:780111223321と受信されるのは
  バージョンによるものかも知れませんが、送信方向によって違いがあることを認識して
  いないとプログラム処理する場合に不都合が出るので注意が必要です。
  この件についてはホームに記載はないようです。(見落としの場合はごめんなさい)
・ToCoStickのWindowsアプリ画面の通知コマンド窓には任意データを受信しても
 表示されないので必ずTraTermを起動してテストしてください。

チェックサムについて
 チェックサムをいちいち計算するのは面倒なので適当な値にしておいて
 インターラクティブモードで入力して答えを教えてもらいましょう。便利です。

  
インターラクティブモードのアニメーションGIF 1.2MB 35秒  こちら

任意データの送受信は子機間欠モードでは送信も受信もできません。
連続0.03秒モードの子機がいる場合、親機では受信の取りこぼしが4〜5回に1回程度
あるようです。


子機のバージョンをV1-03-10へアップしてテストしてみました(2014年2月22日追記)
バージョンによる表示の違いがあるようです。


TWE-Lite DIP V1-03-3 でも上記と同じになることを確認しました(2014年3月1日)
参考:2月末に秋月電子で購入したTWE-Lite DIPは第3ロット版のV1-03-3でした。

 ver1.6.5 以降では、チェックサムが省略できるようになりました




遠隔制御 I2C出力を擬似間欠モードで使ってみる 2014/3/5

標準アプリのバージョンV1-03-10でI2C接続のLCD(AQM0802A・ACM1602)へ
文字の出力ができるようになりました。
TOCOSさんのホームページではToCoStickからTWE-Lite DIP子機へ
任意の文字を表示する手順が示されていますが、
TWE-Lite DIPどうしでも子機から親機へも文字出力が可能です。

この機能を使えばTWE-Lite DIP子機の外部マイコンで温度センサーなどのデータを
処理して表示データのみをUARTで子機へ渡せば親機のLCDにデータを表示できます。
おまけに面倒なLCDのコマンド処理も必要なく表示させたいデータを送るだけです。
親機はLCDをつなげばOK、子機も親機もPC不要のスタンドアロン動作ができます。
PICなどのマイコンのアセンブラ程度は自分でなんとかしなくてはいけませんけど・・・


 

  LCDを接続するTWE-Lite DIPはV1-03-10でないと表示できません。
  第3ロット版のV1-03-3では表示しません。
←追記:V1-06-5 は表示できます。
  子機はV1-03-10の必要はなくV1-03-3のままでOKです。


これで10mV/1℃のセンサーなどで0.1℃も測定できるようになります。
しかし問題は子機を連続モードで使用する必要があることです。
単三電池では5日程度しか持ちません。
そこで擬似間欠モードを考えてみます。
擬似間欠モードとは、ある一定時間だけ電源を入れて連続モードで動かす方法です。
たとえば10秒に一度200ms間だけTWE-Lite DIPの電源をONにしてこの間に
データを送れば電池の持ちは飛躍的に長くなります。
温度などの環境モニタなどの使用であれば10秒とか30秒とかに一度データを
送信すれば十分ではないでしょうか。

どの程度のタイミングで動かせばいい?

電源ON時のデジタル信号の遅延時間の実験から
UARTでのデータ受け渡し前後に50ms程度電源をONしていればいいのかなと思い
まずは50msで実験してみたところ問題なく動作することがわかりました。

TWE-Lite DIP電源ON → 50ms Wait → UARTで文字を送る → 50ms Wait → 電源OFF
Wait時間を50ms、UARTの速度を9600BPSとした場合のだいたいのON時間は
 50ms + 50ms + (表示文字数 + 制御文字)x1ms となります。
どの程度までON時間を短縮できるかはまた時間のある時に実験してみます。

実験の回路図です。

拡大する

PIC 12F1822は4秒ごとにSLEEPから復帰
して親機のLCDに"TEST 1" "TEST 2"を
交互に表示します。 
 子機:V1-03-3
 親機:V1-03-10


PIC 12F1822の送信速度を9600BPSに
設定しているのでTWE-Lite DIP子機の
UART速度をインタラクティブモードで
9600BPSにする必要があります。
20PinのUART速度設定をGNDに接続して
ください。
 実験してみたい方はこちらからASMリストまたはHEXファイルをダウンロードしてください。


TWE-Lite DIPのデジタル・アナログ入力は使える?

基本的に連続モードなので使えるはずですが電源ON時間が短いのでよく考える必要があるかも。
ちなみに実験の回路ではだいたい130ms(計算値)くらいの電源ON時間で5回に一回程度は
通知コマンドが送信されているようです。

注意点は電源ON/OFFを繰り返す仕様外の使い方であるため故障しやすくなるかもしれません。


TOCOSさん見てないだろうけどもし見てみてたら改善要望あるよ・・。
・電池電圧が2.6Vくらいになると表示が薄くて見えなくなります。
 LCDの仕様ではMin VDD=2.7V なので知らないと言えばそれまでですが
 手持ちのLCDでは2.6Vでもコントラストを0x2Fくらいにすると十分濃くなります。
 2.7V以下でもまだまだ動くし、せっかく電源電圧の検出機能があるのだから
 電池電圧に合わせてコントラストを調整してもらえるとうれしいなぁ・・ 
・動作電圧の上限が5Vくらいあればうれしいのだけれど・・せめて4Vくらいは





乾電池でどのくらい連続動作ができる? 2014/4/6

乾電池で子機を連続モードで使ったとしたら計算では5日(17mAx24Hx5日=2040mA)に
なりますが実際はどれくらいなのか試してみました。参考になるかは分かりませんが・・ 

TWE-Lite-DIPは子機連続モードでアナログ・デジタル入力には何も接続しません。
電池はMITSUBISHIのLR6MEという家電量販店で安売りしている単三電池です。
賞味期限は2018-06で無負荷時の電圧は1.618Vありました。
TWE-Lite-DIPのVerはV1-03-10です。

 結果は5日と12時間でした。
 通知コマンドが途切れる直前のTWE-Lite-DIPから送られた電圧値は2146mVです。
 動作電圧下限の2.3Vより0.2Vほど低い電圧まで動作したようです。
 
 ところで動作電圧は今までずっと2.3V〜3.6Vと思い込んでいたのですが
 ふとTWE-Liteのページを見るとなんと2.0V〜3.6Vではありませんか!
 どちらが正しいのでしょうかね?

 通知コマンド上の電圧は実測の電圧より若干高めに表示される傾向があるようです。
  開始時:コマンド=3288mV  デジボル=3.19V
  終止時:コマンド=2146mV  デジボル=2.10V

 電圧の高い低いで電波の強さが変化するかは親機と近距離でテストをしたので
 通知コマンド上ではあまり変化がありませんでした。

 

 親機はテストしていませんが子機と同じような結果になるのではないでしょうか??




NaPiOnで動体検知をしてみる 2014/4/8
ねこちゃんがトイレに近づくと離れた場所のブザーが鳴ります。 詳細はこちら 



擬似間欠モードでバッテリー電圧を測定中 2014/4/25
TWE-Lite DIPのAD変換機能で車のバッテリー電圧を測定していましたが
擬似間欠モードに変更して測定中です。詳細はこちら





I2C出力コマンド受信時のVerによるUART出力の違い 2014/5/21

I2C出力コマンド0x88を受信時にTWEのバージョンによってUARTの出力に違いがあるようです。
下の表にまとめてみました。

V1-03以降ではI2C出力コマンドはUARTへ出力されませんが、V1-01-3ではなかった
ステータス応答を送信元へ返しています。
V1-01-3はI2C出力がまだサポートされていない頃のバージョンなので
コマンドがそのままUARTに出力されるのかもしれません。

コマンドがUARTにも出力されているとCSVでEXCELに取り込んでグラフ化したり
いろいろできるのでとても便利がいいのですが・・
また、受信側でLCDにうまく表示されないといった場合にコマンドそのものが
飛んでいるかどうかの切り分けもできるしね・・

ToCoSticなどV1-03以降でI2C出力コマンドの内容をPCで処理したい時は
I2C出力コマンドの内容を任意データの送信という方法で実装するしか
ないかもしれません?




バッテリー電圧をグラフ表示してみました 2014/6/12
I2C出力コマンドを使ってI2C接続のLCDに電圧を表示していますが、
PCでもモニタできるようにHSP3.3を使ってグラフ表示のプログラムを
作ってみました。詳細はこちら




擬似間欠モードで室外の温湿度を測定してみます 2014/7/18
温度は0.1℃、湿度は0.1%まで測定できて親機のI2C接続のLCDで直読します。
ソーラセルで充電しながら電池交換フリーで動くかしら・・
詳細はこちら






無線タグアプリ(Samp_Monitor) 2014/7/27

無線タグアプリ(Samp_Monitor)は電池での長期稼動やTWE-EH(エナジーハーベスト)
での稼動を考えた低消費電力でセンサやスイッチ情報を取得するアプリケーション。

いままで擬似間欠モードで電池での長期稼動を実現してみましたが
無線タグアプリはどんな使い方ができるのできるのでしょうか。
ファームウェアのバージョンは親機・子機とも
v1.3.2 beta[V1-03-1]です。
TWE-EH Solar は未接続での実験です。

Ver 1-03-4
こちらに記載しました


まずは無線タグアプリV1-03-1のファームウェアをロードした親機のUART出力です。
子機の電源はまだ入っていない状態です。
 


親機のUART出力には標準出力形式とSimple Tag V3 形式があります。
Simple Tag V3 形式は標準出力形式に比べて表示情報が少し豊富です。
子機のUART出力はインターラクティブモードでの設定時意外はまったくありません。

親機の電源を入れると標準出力形式では::ts=1 ::ts=2
Simple Tag V3形式では;1; ;2; と両形式とも1秒ごとにカウントアップしていきます。
動作確認にはタイムスタンプ的でよいのですがPCで処理をさせようとすると
少し困ってしまいます。
たとえば5秒に1回センサ情報を取り込めば1時間で4320行(3600+720)にもなり
古いExcelでは15時間くらいで最大の65536行に達してしまいます。

まだまだExcel2000を使い続けていている身としては(^-^;;)フィルターをかけて
必要なデータを選別するのが大変なんです・・。
せっかくPCで処理しやすいようにカンマ区切りをサポートしてくれたのだから
このカウンタ(?)は出力停止できるように時期バージョンで改善を望みたいところです。
(カウンタの深い意味があるのならごめんなさいですが・・・)


アナログセンサ

・無線タグアプリのデフォルトのまま特別な設定は不要
・子機のAI1とAI3のアナログ入力が使用できます。
・アナログ入力電圧の範囲: 0000mV 〜 2467mV
・GNDに接続しても0000mVにはならず0009mV〜0012mVの値を示します。
  入力が2467mVを超えると常に2467mVを示します。VCC接続も2467mVです。
・分解能: 2mV から 3mV と思われます。
  AD変換の結果は2mVまたは3mV単位でアップ。1mVづつではありません。
  なんとなく「2323223」のパターンのようですがこのパターンでないことも・・??
・親機の設定をインタラクティブモードで「Simple Tag V3 形式」に変更すると
  8個めの項目で「AI1, 蓄電デバイスの電圧の3倍 」の値が表示されるように記載
  されていますが実験の結果では6倍の値になっています。
  蓄電デバイスがないからかもしれませんが・・
2014/9/2 追記(TOCOSさんから連絡をいただきました)
 これはTWE-Liteのアナログ入力は2.4Vまでしか入力ができないので
 蓄電デバイスの場合、蓄電電圧の1/2の電圧をアナログ入力とするそうです。
 そうすると蓄電デバイスの電圧の3倍を表示するためには
 AI1の入力値を2倍して3倍する、つまり6倍する必要があります。 

 蓄電デバイスを接続すると「蓄電デバイスの電圧の3倍」
 通常の入力では「入力電圧の6倍」となるわけです。

・標準では5秒に1回親機に送信します。
  上限値は記載がないように思いますが10時間でも設定できました・・



温度センサ LM61 [センサモードm=0x11]

・子機のセンサモード(m)を0x11に設定します。
・子機の AI3にLM61、AI1もアナログ入力として使用できます。
・センサ固有パラメータで温度にバイアスをかけられる。
  1℃上昇させるのには100を設定とあります。 設定の値域は-32767〜32767
  この機能はセンサの補正に使えてとても便利だと思います。
・LM61以外のセンサは? 
  このモードはLM61センサ用に内部で 0℃=600mV 1℃/10mVの計算をしているだけ
  のように思われます。
  なので1℃/10mVの温度センサならセンサ固有パラメータを設定すれば使えます。
  たとえばMCP9700は0℃=500mVなのでパラメータに1000を設定すればOKです。
  LM35DZはパラメータに6000を設定すれば使えないことはないと思いますが
  10℃以下はTWE-LiteのAD変換精度が悪いので実用的ではないでしょう・・
・センサ以外は?
  温度出力値を使わなければ何でもつなげます。
  GNDに接続すると-59.1度、VCCに接続すると186.7℃の値を表示しますが・・・
  AI3のAD出力値のみを使えばよいでしょう。
  センサ固有パラメータのバイアスを有効に使えばAD変換の補正などにも
  利用できるかも・・
・センサ固有パラメータの値域が変??
  プラス方向のバイアス(ゲタ、オフセットとも言う?)はちゃんとかかるのですが
  マイナス方向へはかかりません。CONFIG上ではマイナスもセットできるのですが
  マイナスにしてもプラスにゲタをはかしてしまいます。
  センサ種別と固有パラメータでは設定の値域は-32767〜32767と記載されていますが
  設定コマンド一覧のセンサ固有パラメータの設定には「0以上の10進数で指定」とあり
  ここではマイナスはだめよ・・と言っているようにも思えるけど・・
  バグのたぐいでしょうかね・・  
 ← Ver 1-03-4 で修正されました。


・タグビューア(Windows)がLM61とI2C STH21に対応 ログも取ってくれます。
 
  アナログセンサモードでも温度はそれなりにおかしな値になりますがタグビューアは
  動作します。ログ取りで使うという方法もありかもです。


I2Cセンサ [センサモードm=0x31〜34]

・子機のセンサモード(m)を0x31〜0x34に設定します。
・SHT21 温湿度センサー ・ MPL115A2 気圧センサー ・ LIS3DH 加速度センサー
  ADT7410温度センサーが接続できる。
・いずれのセンサーモードもセンサが接続されていないと子機は何も送信しません。
  センサと2つのアナログ入力が使用できそうですがセンサの接続が必須のようです。 


押しボタン・磁気(リード)スイッチ [センサモードm=0xFE] 

・子機のセンサモード(m)を0xFEに設定します。
・DI1のSWを押すたびに親機のDO1(注1)がトグルします。
  親機のポートの状態が変わるのはこれだけ。
・子機のDI1、DI2、DI3、DI4の情報とAI1、AI3のアナログ入力の値を伝えることができます。
  DI1のSWを押した時にこれらの情報が伝わります。
・DI1のSWで親機の出力をトグルするにはおおむね1秒以上の間隔が必要です。
  短い間隔でSWを押下しても同じSW情報が送信されるだけでトグルはしないようです。
・子機設定コマンドの送信間隔は無視される? 
  設定コマンドの送信間隔の時間が経過してもSWを押さない限り送信しないようです。



(注1)TOCOSホームページでは「親機のDO4」となっていますが実験ではDO1のようです。
  ToCoStickのLEDはDO1なのでDO1で間違いなと思いますが・・ 
  
(現在ホームページはDO1に修正されています)

その他センサ固有パラメータでパケットを送信のタイミングが
1:立ち上がり 0:立ち下りとなっていますがこれは逆のような気もするのですが・・
ほかにもありますが記載ミスでしょうか・・ それとも私の実験不良でしょうか・・


さあ、なんに使いましょうか・・




無線タグアプリ(Samp_Monitor)Ver 1-03-4 2014/9/2

なんとTOCOSさんより直接メールで修正版をいただきました。
質問をした訳でもないのにこんなページでもちゃんと見てくれていたんですね。
ありがとうございます。

さて修正内容は
・LM61を用いた場合の負のバイアスがかからない点を修正
・親機のオプションビットを0x20000にするとパケットを受信したとき以外には表示しない
・EndDevice_Inputの押しボタンモードの送信タイミングの修正
・その他細かい修正

さっそく実験してみました。
・温度センサーLM61に「-200」と「+200」の正負のバイアスをかけてみます。

 ちゃんと「-200」と「+200」の正負のバイアスがかかりました。
 これで補正もバッチリです。


・親機(Parent)のオプションビットを0x20000にしてみます。

 受信パケットのみが表示されました。
 CSVで取り込んだ時に必要なデータのみとなり処理がとても楽になりますね。


・押しボタン・磁気(リード)スイッチの送信タイミング
  パケットを送信のタイミングが1:立ち上がり 0:立ち下りが逆だったのが
  修正されました。(これは Ver 1-03-3 で修正)
  送信タイミングについてはv1.3.2 beta[V1-03-1]とよくちがいがわかりません。
  たぶん手でSWをこちょこちょやっているのでわからないのでしょう。
  旧バージョンでも不具合は感じられなかったのでより品質がアップかな・・。
  押しボタン・磁気(リード)スイッチモードの電源ON時またはリセット後の
  DO1の出力は「HI」です。


ふと気づいたこと。
 子機のUARTに何か文字コードを送信すると送信間隔で決められた時に送信する
 データと同じ内容のパケットを送信するのです。v1.3.2 beta[V1-03-1]でも同じです。

 子機のインターラクティブモードはM2をGNDにして電源を入れるでしたよね。 
 これを忘れていて+++と勘違いしておかしいおかしいとはまっていた時に発見!
 たぶん前回のテストでは気づかなかっただけだと思いますが・・。

 確認したモードはアナログセンサ、温度センサLM61、押しボタン・磁気(リード)スイッチ
 モードです。(I2Cモードは未確認)
 子機の構成はTWE-LiteDIP + AE-UM232R(秋月電子)でAE-UM232Rの3.3V出力を
 TWE-LiteDIPの電源にも使用し接続はRX・TXのみです。

 TWE-Liteは送信間隔で決められた送信時以外はスリープしているはずなのに
 UART割り込みでWAKE UPしているのでしょうか?
 それならば標準アプリの間欠モードでもUARTの割り込みでWAKE UPしてくれると
 とても嬉しいのですけど・・ 

 TWE-LiteDIP単独では起こらないかもしれませんが別な実験で確認しないと
 はっきりしたことはわかりません。


後日TOCOSさんのホームページに修正版がアップされますが必要な方はこちらからどうぞ





出力変更コマンドを擬似間欠最短時間で使ってみる 2014/9/28

標準アプリのDIN(デジタル入力)にスイッチを接続したリモコン機能では
スイッチのチャタリングの影響や間欠モード時のLowからHiへの変化は
伝わらないなど確実性ではいまひとつの感があります。
確実(正確)にLow・Hiを伝えるには「出力変更コマンド0x80」で直接相手の
DO(デジタル出力)を変更するのが一番のように思えます。
出力変更コマンドは親機から子機、子機から親機どちらでも実行できますが
TWE-LiteのUARTを使用するため連続モードでしか動作できません。

CR2032のコイン電池でも動作できるように擬似間欠モードで出力変更コマンドが
動作する最短時間を探ってみました。
実験に使用した標準アプリのバージョンは親機・子機とも
V1-06-5です。
オプションビットで通知コマンドを抑止しています o: set Option Bits (0x00000002)

実験に使用するコマンドはTOCOSさんのホームページに出ているものをそのまま使用します。

 親機 → 子機
  :78
80010101000000000000000005 (DO1の出力をLowにする)
  :78
80010001000000000000000006 (DO1の出力をHi にする)

 子機 → 親機
  :00
8001010100000000000000007D (DO1の出力をLowにする)
  :00
8001000100000000000000007E (DO1の出力をHi にする)

 実験のブロック図


PIC 12F1822でTWEの電源をONしてからTWEに出力変更コマンドを渡すまでの時間です。
 100回ずつ3回実施して受信側DO1の出力が正しく変更された回数を確認します。
 TWEに出力変更コマンドを渡した後はTWEの電源は切らずに実験します。

 TWEの電源をONしてからTWEに出力変更コマンドを渡すまでの時間が6msあれば
 10msでも50msでも成功率にほとんど違いはありません。
 5msでは成功率=0です。

PIC 12F1822からTWEに出力変更コマンドを送出完了後のTWE電源OFFまでの時間です。
 100回ずつ3回実施して受信側DO1の出力が正しく変更された回数を確認します。
 TWEの電源をONしてからTWEに出力変更コマンドを渡すまでの時間=6msです。

 PICからTWEに出力変更コマンドを送出完了後にTWEがコマンドバケットを送信するまで
 22msあればよさそうです。少し余裕を見て25msあれば問題ないでしょう。

TWEの電源をONにしてから受信側TWEのデジタルポートの出力が変化するまでの時間です。

  @はTWEの電源をONにしてから31Byteのコマンドを送出するまでの時間
  Aは送信側TWEの電源がONになってから受信側TWEの出力が変化するまでの時間
  Bは送信側TWEがコマンドを送信して受信側TWEの出力が変化するまでの時間

 9600BPSで出力変更コマンドを処理した場合は42ms〜59ms程度で受信側の出力を
 変更できます。だいたいは50msくらいですがたまに60msを超えることもあるようです。
 Low → Hi Hi → Low への変化に差はないようです。
 また送信側が親機でも子機でもタイミングに差はないようです。

送信側TWEの電源ONの最短時間は
 最低限必要な時間=
  コマンド送出までの時間 6ms + 電源0FF猶予時間25ms = 31ms
 この31msにPICからTWEへのコマンド送出時間を加えたものがTWEをONする時間です。
 コマンド送出速度とTWEのON時間は下の表のようになります。


 UARTの速度の違いは31Byteの出力変更コマンドの処理時間です。
 最低限必要な時間が31msあるのでUARTの速度を上げても劇的な短縮は望めません。
 個人的にはPICの消費電流も考えて4MHz・19200BPSがベストチョイスかな・・
 一回の送信で46.5msならCR2032でもだいじょうぶでしょうか・・。


より確実に出力ポートを変更させるために

「出力変更コマンド0x80」は連続モードで実験していても100%の成功率ではありません。
たまには(そこそこかもしれない・・)失敗があるようです。 ※補足参照

そこでより確実な動作が要求される場合は出力変更コマンドを2度送信してみたら
どうでしょうか。下の条件でテストしてみます。
 :コマンド送出WAIT=6ms 電源0FF猶予=25ms UART=9600BPS 送信間隔=5ms
結果は600回で Low → Hi への失敗が1回のみでした。ほぼ完璧レベルでしょうか・・

CR2032での実験はまだですがとりあえず無線のPTTで使ってみようかなと・・・思案中
TWEでいろんなことをしてみると子機・子機間通信、親機・親機間通信ができると
もっと便利に使えるようになると思うのですが・・


※ 補足
 失敗の要因がどのへんにあるのか簡単なテストをしてみました。
 出力変更コマンドはDO1のLEDを一定間隔で点滅させます。そして出力変更コマンドを
 TWE-Lite DIPとToCoSticの両方で受信させてDO1のLEDの状態を見ます。
 正常な時は両方とも同じように点滅をします。
 点滅が同時におかしくなるか片方だけおかしくなるかを見ます。
 結果は⇒ 失敗する時はほとんどが片方だけおかしくなるのです。
 これは受信側で正しく処理できなかったことを意味します。
 送信側よりパケットの取りこぼしなど受信側に起因することのほうが多いのかもしれません。
 おかしくなるのはTWE-Lite DIPもToCoSticもほぼ同じ割合でした。


TOCOSさんの関連ページ
  http://tocos-wireless.com/jp/products/TWE-Lite-DIP/TWE-Lite-DIP-step3-80.html
  http://tocos-wireless.com/jp/products/TWE-Lite-USB/control.html

 ※擬似間欠モードとは私が勝手に命名したものでTOCOSさんの標準ではありません。


ちょっとした問題(?)発覚 2014/10/12
擬似間欠モードでの出力変更コマンドは、コマンドとコマンドの間がおよそ1秒程度ないと
受信側でコマンドが処理されないことがわかりました。

1秒以内の出力変更が必要なければなにも問題ありませんが
短時間での出力変更が必要な場合は使い方を検討する必要があります。

理由は送受信するパケットには昇順のSequenceNumber(シーケンスナンバー)があって
擬似間欠のように送信時のみ電源をONにするといつも同じSequenceNumberになります。
このため受信側では連続してして受信した同一SequenceNumberのバケットは破棄
または再送扱いされます。このパケットの破棄または再送処理をする時間がおよそ1秒で
1秒を経過すると同一SequenceNumberでも処理をしてくれるのではないでしょうか。
図で表すと下のようになります。


ToCoNet SDKのパケットスニファでSequenceNumberをみると実験環境での
SequenceNumberは常に「54」から始まっていました。
上記事象は任意データの送信でも同様であるためI2C出力コマンド等
全般にあてはまるものと思われます。

回避策
1.マイコン側でコマンドの送信間隔を1秒以下にならないように調整する
2.1秒以下の送信時はTWEの電源をONしたまま2度コマンドを送信する
  SequenceNumberは54,55,56,57となり2回目のコマンドが処理される
  ただしこの送信のあとTWEをOFFするならば次回の送信は1秒空ける必要がある
3.電源ONのまま使用する ←コイン電池では持たない・・・

自分の場合は・・
無線のPTTスイッチが目的なので送信ボタンを押して受信に戻す時のみ1秒以下の
ボタン操作を認めてコマンド送信をする。
受信から送信の切り替えは1秒待つようにしようかと考えています。回避策2相当です。


余談:バケットスニファを使ってみました。
インストール方法はホームページに公開されていますが「ToCoNet SDK」導入が簡単です。
ToCoNet SDKを導入と言ってもダウンロードして解凍するだけです。
「WinPCap」をあらかじめインストールとありますがWireshark portableを最初に起動した時に
インストーラーが起動されるのであらかじめのインストールは不要かと。
使ってみてTWE-Liteは常に2回同じパケットを送信していることもわかりました。
上の例でSequenceNumberが54,55となっているのはそのためです。
逆に考えると常に2回同じパケットを送っていても結構失敗するのは何でって
思ったりしますけど・・。
スニファも今ではフリー版がありますがイエローケーブルから10BASE-Tになった頃は
何百万もしたような。データ転送のトラブル時にはスニファがよく出動したものでした。
少し懐かしく思えます。





擬似間欠モードでバッテリー電圧測定開始から6ヶ月 2014/10/25

擬似間欠モードでバッテリー電圧の測定開始から6ケ月が経過しました。
電源に使用した単三電池は計算上の175日をクリア。詳細はこちら





アナログ入力のちょっと変わった使い方 2015/1/20

防犯センサーやドアの開閉センサーなどちょこっとつないでみたいけど
空いているデジタル入力が足りなくてどうしようかなんてことありませんか?
そんな時もしアナログポートが空いていれば有効に使えるかもしれません。

アナログ入力とPWM出力ポートの振る舞いは一番最初に実験しましたが
再度簡単な実験をしてみます。

実験は下記回路のSWをON-OFFして連続モード時と間欠モード時で
ToCoStickのPWM3出力がどうなるかためしてみます。


TWE:子機・標準アプリ Ver:V1-07-1
この後の実験でデジタル入力のプルアップ停止の必要が
あるためこのバージョンで実験。

AI3の入力電圧が1.3V〜2.0VになるようにR1とR2を設定
R1=56k R2=75kだと電源電圧2.3V〜3.3Vの範囲で上記の
値になります。実験の回路は手持ちの抵抗を組合わせて
いるのでE24系からちょっとずれてます・・

AI3を使用したのはToCoStickのLEDがAI3の出力(PWM3)に
なっていて目で確認しやすいため

連続モード時(M3オープン)
 SWをON-OFFした瞬間に通知コマンドで通知されます。
 ただし一回の通知コマンドで出力が Hi→Low Low→Hi にはなりません。
 Hi→Lowには4回の通知コマンドでおよそ0.1秒、Low→Hiも同様です。
 ToCoStick(V1-04-1)が受け取った通知コマンドです。

 LEDだとじわっと明るくなったり暗くなったりといったイメージです。
 通知コマンドはToCoStick(V1-04-1)ですがTWE-Lite DIP(V1-06-5)でも同様です

間欠モード時(M3→GND)
 間欠モード時はSWをON-OFFした瞬間には通知コマンドは送信されません。
 TIMER WAKE UPで間欠送信時にAD変換値が通知されます。
 したがって通知される時はHiかLowのいずれかですのでPWM出力も
 HiまたはLowに一瞬で変化します。


防犯センサーやドアの開閉センサーなどに使う方法


TWE:子機・標準アプリ・間欠モード Ver:V1-07-1

インタラクティブモードでDI1のプルアップ禁止
 O:set Option Bits #2(0x00000001)

AI3の入力電圧が1.3V〜2.0VかつDI1の入力電圧が
VCCの90%程度になるようにR1 R2 R3の値を設定
E24系だとR1=100k R2=470k R3=750kで
電源電圧2.3V〜3.3Vの範囲で上記の条件を満たせます。

CR2032などコイン電池使用を考えて高抵抗で実験しました。

間欠モードでデジタル・アナログ入力ポートを組み合わせます。
・上記の回路でSWをON→OFFにするとDI1とAI3はLowになります。
 このDI1のHi→Lowの割り込みでWAKE UPして通知コマンドが送信されます。
 通知コマンドを受信した親機はDO1とPWM3の出力がLowとなります。
・SWをOFFからONにした時は割り込みが発生しないので通知コマンドは送信されません。
 次のTIMER WAKE UPによる通知コマンドでポートの状態が通知されます。
 SWのチャタリングの影響で即通知されることもありますが、リードSWでの実験では
 チャタリングの影響はほぼありませんでした。

 要約すると「SWをOFFした時はポートの状態がすぐに伝わりONした時は
 間欠10秒なら最大で10秒後にONしたことが伝わる」ということになります。

 親機のバージョンはV1-03 でもV1-06でも違いはありません。

(注意)
 デジタル入力ポートはプルアップを停止する必要があるので
 バージョンがV1-07-1を使用する必要があります。
 内部プルアップの抵抗値は50kΩくらいと思われるので
 プルアップのまま抵抗値を決める方法もありかとは思いますが・・


この方法でデジタル入力ポート1個とアナログ入力ポート4を組合せば
最大16箇所のセンサーを検知できます(実際に16個の実験はしていないのでたぶん)
 イメージだとこんな感じ→検知するとLEDが点灯(●)します

  1F ⇒ DI1●  AI1○ AI2● AI3○ AI4○
  2F ⇒ DI2○  AI1○ AI2○ AI3○ AI4○
  3F ⇒ DI3●  AI1○ AI2○ AI3● AI4○
  4F ⇒ DI4○  AI1○ AI2○ AI3○ AI4○

欠点はAI1〜AI4は共用ですので同時多数の検知にはむかないかもしれません・・
たとえば上のようにDI1のAI2、 DI3のAI3が同時に検知したら実際の表示は
DI1 DI3 AI2 AI3の4つのLEDが点灯します。
1Fと3Fのセンサーが検知したことはわかりますがどっちの階がAI2かはわかりません。
欠点はありますが使い方しだいでしょうか・・

この回路はコイン電池で動くでしょうか?
 E24系でR1=100k R2=470k R3=750kとした場合SWは通常ONなので常に2.5μA(VCC 3.3V)の
 電流が流れます。1年間で22mAh CR2032の容量のほぼ10分の1
 TWE-Lite DIP使用方法(中級偏)に出ている電池寿命で間欠10秒で318日となっています。
  
http://tocos-wireless.com/jp/products/TWE-Lite-DIP/TWE-Lite-DIP-step2.html
 間欠動作時間をもう少し長くするとコイン電池で1年間くらいは使えるでしょうか。
 検知する回数が何回かにもよりますが・・
 あくまで計算上です。実際に実験していないので何ともいえません・・

<補足>
・アナログ入力電圧を1.3V〜2.0VにするのはPWM出力を常にHiレベル(DUTY 100%)に
 するためです。1.3V以上あればDUTY 100%になります。
 AD入力の上限値2.0Vを超えると通知コマンド上では正しい値が通知されますが
 PWM出力がおかしくなります。

・アナログ入力に高抵抗を使用するとAD変換値は計算値より低めになります。
 またGNDレベルも0Vにはなりません。
 上記回路の710kで通知コマンド上で0E(224mV)程度となります。
 まあこれくらいならLEDが光ることはありません。

・デジタル入力の内部プルアップの抵抗値は50kΩくらい。
 外部に51kの抵抗をつなぐと電圧がほぼ半分になるのでこれくらいの値と思われます。


センサー専用ならば無線タグアプリを使用したほうが賢明かもしれません。
親機の処理はUARTに出力されるコマンド処理となりますが・・






標準アプリのPWM出力を再確認 2015/3/1

1月23日に標準アプリVer 1.6.12(beta)が出ましたがツイートの文言に
[PWMの出力をAD生データを元に出力するオプションを追加(可変抵抗器用の最適化をオフ)]
とあります。この「可変抵抗器用の最適化」ってなんじゃいな??・・・と。

そこでPWM出力について再確認してみることに。
そしたら最初の実験結果と値がまるで違うのです。
なんでなんでと実験していてようやくわかってきました。
私がいままで思っていたPWM出力はVer 1.6.12(beta)のことだったのです。
Ver 1.6.12(beta)については後述します。

ここでは標準アプリのPWM出力についてもう一度実験してわかったことを記載します。

実験はPWM出力のDutyが0% 20% 40% 60% 80% 100%時のアナログ入力電圧の値を
電源電圧(送信側)が2.5V 3.0V 3.3Vでそれぞれ調べます。
回路は下図のとおりで使用するポートはアナログ入力1、PWM出力1です。
 受信側はFT232経由でPC接続するためVCC=3.3Vです。
 また同時にToCoStickで送信側のAIN入力電圧と電源電圧をモニタしています。
 実験に使用したTWE-Lite DIPのバージョンは「V1-01-3」ですが他のバージョンでも
 同じです。(断言できませんがつまみ食い程度に所要ポイントでは確認しています・・)


ちょっと見づらいグラフですが縦軸はアナログ入力電圧、横軸はPWM出力のDutyで
すぐ下の表が送信側VCCごとのアナログ入力電圧の実測値です。


このグラフの意味するところはアナログ入力(AIN)をする送信側の電源電圧によって
各Dutyの測定ポイントごとのAIN入力電圧は異なりますが
実測値から逆算した倍率(AIN÷VCC)がどのポイントでもほぼピタリ一致します。
これは通知コマンドの電源電圧とアナログ入力値からPWMのDutyを決めていると推測されます。


つまりこういうことです。

 

このことを「可変抵抗器用の最適化」と言っているのではないでしょうか・・

・ポイントは
電源電圧の変化に伴ってアナログ入力電圧も変化することが必要です。


ちょっと気を利かしてアナログ入力は電源電圧の変動に影響されない回路を組んでしまうと
ドツボにはまってしまうかもしれません・・・
「超簡単」というだけあってよく考えられていますね・・

調光器やラジコンのアクセルなどにPWM出力を使う場合には簡単な回路で
便利いいかもしれません。

いろいろ書きましたが
 通知コマンドのアナログ入力値を使ってPCなどで処理する場合は関係はありません。

また、よるある思い込みで間違ったことを記載しているかもしれませんので・・・・





Ver 1.6.12(beta)のPWM出力 2015/3/7

Ver 1.6.12(beta) PWMの出力をAD生データを元に出力するオプションを試してみます。
0-1800mVでフルスケールし2000mV 以上は未使用ポート扱いになると記載があります。

実験の回路は標準アプリのPWM確認時と同じです。
・PWM出力側(受信側)のVerがV1-06-12で
オプションビットを「00000040」にします。
・アナログ入力側はV1-01-3で電源電圧は2.5Vと3.0Vで確認します。
 他のバージョンでも同じです(断言はできませんが所要ポイントは確認)



・アナログ入力側の電源電圧による影響はありません。
 アナログ入力の電圧でDutyが決まります。

・Dutyは1800mVでぴたりと100%(1000us)つまりHiになりっぱなしとなり
 100us=180mVで直線的に変化しています。(周期を標準の1msとして)
 (50us以下では測定誤差が大きいですが・・)

 ちょっと計算してみます。
 1mVのDuty = 1000us ÷ 1800mV = 0.56us
 TWE-Lite DIPのAD変換の最小値は4mVなので 4mVのDuty = 0.56us X 4 ≒ 2.2us
 オシロでみているとだいたい2usちょっとづつ変化していて計算値とも一致します。

・2000mV 以上は未使用ポート扱いは今までどおりで変わりないように思えます。
 送信側はバージョン依存がなく通知コマンドのアナログ入力値は7Fが最大値で
 7Fを超えるとFFになるため正確には2044mV以上は扱えないためです。

・標準アプリのPWM出力では70mV付近以下になるとLow(Dutyが0%)になりますが
 このモードでは4mVまで正確なDutyでPWM出力されます。

 なぜ4mVかというとブレッドボード上の実験ではTWE-Lite DIPのアナログ入力を
 GNDに接続してもAD変換結果は0mVにはなりません。
 どうやっても4mVが最小値なのです。
 これは「アナログ入力をGNDにしても2.2usのパルスが出る」ことになります。

 ノイズ対策とGNDがしっかりした基板では0mVが実現できるかもしれませんが
 ユニバーサル基板では難しいかもしれません。
 使用目的によっては注意が必要でしょう。
 
 
AD変換値が4mVか8mVで出力をLowにできるようにオプションビットがあれば
 いいかもしれません・・


標準アプリPWM出力との違いまとめ
・電源電圧(アナログ入力側)の影響は受けない
・アナログ入力電圧が1.5V程度から1.8Vへ拡大された。
・PWM出力が完全にLowにはならない(たぶん)ので注意が必要
・オプションビット「00000040」を指定しなければ通常のPWM出力として使用できる。
・そのほかは今までといっしょです。

  ※Ver 1.6.12(beta) もあくまで「標準アプリ」ですがここでは説明のために分けました。





Ver 1.6.14(beta) 子機間欠受信モード
2015/5/3

Ver 1.6.14(beta)で子機間欠受信モードをやっとサポートしてくれました。
さっそくどんな感じなのか試して見ました。

 ここではデジタルポートのみの確認でアナログポートは未確認です。
 またスニファーで実際のパケットを検証したりソースリストを解析している訳ではありませんので・・・


動作の条件としては下記を満たす必要があります。
・親機・子機とも標準アプリVer 1.6.14(beta)であること
・子機はM1・M3をGNDに接続し間欠受信モード(Mode5)にする

間欠受信モードは子機がTIMER WAKE UPまたはDI WAKE UPで
スリープ状態から起床した時に送信する通知コマンドに対して
親機が通知コマンドを返信することにより実現しているようです。

通常の間欠モードと違う点は子機が通知コマンドを送信したあと
一定時間受信モードになり親機の通知コマンドを受信することです。
TOCOSさんのホームページでは
「多くの場合30ms程度で一連の動作が完了、タイムアウトは約100ms」となっています。
 
http://www.tocos-wireless.com/jp/products/Software_download/index.html

実際の通知コマンドのやり取りを見てみます。


 TIMER WAKE UPした子機は@で通知コマンドを送信します。
 子機からの通知コマンドを受信した親機はAで子機へ通知コマンドを送信します。
 ToCoStickも同じように通知コマンドを受信していますA’。
 間欠受信の子機がTIMER WAKE UPしてからSLEEPするまでの時間は
 上記の場合は32msでしたが30ms〜50msくらいで変動するようです。

 親機がV1-06-14でないといけない理由は間欠受信子機が送信する通知コマンドは
 「
ID=7D」となっています。親機は「7D」のIDを持った通知コマンドを受信するとすぐに
 自分のIO状態を通知コマンドで送信する必要があるからです。
 下図のように親機がV1-06-14でないと親機からの通知コマンドが戻ってきません。
 また、親機からの通知コマンドが受信されない場合(タイムアウト)は
 WAKE UPしてからSLEEPするまでの時間が100ms前後と長くなります。



親機の通知コマンドを受信できないと(欠落)どうなる?
→ Ver 1.6.15(beta)で修正されました
・連続で欠落した場合
 1度親機の通知コマンドを受信したあと2度以上連続で受信できないと
 2度目の受信タイミングで子機のポートはリセット(DIポートは Hi になる)されます。
・受信、欠落、受信、欠落を繰り返した場合
 親機のポートの状態を維持しますが一瞬ポートの出力にまばたきがあります。
 たとえば出力がLoの場合→ 最初の受信で出力ポートがLoになります → 次の受信に
 失敗してもまだ出力Loを維持します → 次の受信は成功しLoを維持しますが
 ここで出力が一瞬Hiになります。時間にして20ms程度です。 

間欠時間は?
 CONFIGの「t: set mode4 sleep dur 」で設定できます。
 設定では10000msまでの表示ですが [ Input mode4,5 sleep dur[ms] (DEC:0,100-10000): ]
 65534msまで入力できるようです。←今までのバージョンでも入力できますけど・・
 またVer1-06-14では「0」も設定できますが動きはよくわかりません。
 
使用時に注意することは?
・親機からの通知コマンドが受信できないとタイムアウトになるまで100ms程度
 起動しているので消費電流が多くなることと出力のばたつきがあること。

・間欠受信は間欠モードにちょっとだけ(100msくらい)受信もするという方法で実現している
 ようなので、この受信時間内にVer1-06-14以外の親機が1秒おきに送信する通知コマンドを
 受信すればそのコマンドは有効になります。← これけっこうあります。
 複数の親機が混在する場合は注意が必要かも。

なんに使えそう?
 このページの最初のほうでもふれた自転車発見器。
 このモードを使えばなんの変更もせず簡単に作れそうです。

 NaPiOnのページで動体検知をしていますが、夜間は動作を停止してねって場合に
 に親機からの指示で通知を一時制限するような使い方もできそうです。

 いろいろ使えそうかもしれません。
 あとは標準アプリも早くOTA(Over The Air)に対応してくれるととても便利になるのですが・・・


Ver 1.6.15(beta)で間欠受信モードの機能追加・修正 2015/6/16

TocosNewsのツイートでは案内がなかったように思いますが
Ver 1.6.15(beta)がさりげなくアップされていたので変更点を確かめてみました。

 
http://tocos-wireless.com/jp/products/Software_download/index.html

確認はデジタルポートのみです。

[修正]→ 
親機からの受信を失敗するとIO状態がクリアされる問題を修正
・V1-06-14では2度続けて受信を失敗するとポートがクリア(出力Hi)されていましたが
 V1-06-15では連続で受信を失敗しても正常受信時のポートの状態を維持します。
・上記修正により受信、欠落、受信、欠落を繰り返した場合に発生していた
 出力のまばたきもなくなりました。

[機能追加その1]→
 間欠受信モードで親機のDI1=Lo→子機のDO1=Loとなった後
 
親機電源OFF(RESET)→親機DI1=Hi→親機復帰後、子機が無線受信してもDO1=Hiに
 設定されない振る舞いを「設定される」ように変更しました
 (通常モードの仕様は「設定されない」です)

・これは間欠受信モードのみに適用される機能です。
 Ver依存性は間欠受信側のみV1-06-15にすればOK。
 親機はV1-06-14でもかまいません。
 通常モードでも発生する事象なので今後は通常モードでも適用されるのでしょうか??

[機能追加その2]→ オプションビット[00000800]を設定するとDI1-4全ポートのプルアップを停止
・実験で確認はしていませんがDI1-DI4のプルアップ停止です。





Ver 1.6.16(beta) 再送設定機能 2015/8/4

Ver 1.6.16(beta)で再送機能が追加されたようです。
再送回数を変えることによって通知コマンドが正しく伝わらないエラー回数は
どのように変わるのかちょっとだけ試してみました。

デェフォルト値は下記のようになっています。

 x: set Tx Power (03)

 送信出力と再送回数の設定
  XYの2桁で指定します。
  X: 再送回数で
0がデフォルト2回、1-9 が指定の回数、F が再送なし
  Y: 送信出力を指定します。3が最強で2,1,0と1段階小さくなる。
  例えば 43 を指定すると再送4回、電波出力最強となります。
    ↓  ↓
 
http://tocos-wireless.com/jp/products/TWE-Lite-DIP/TWE-Lite-DIP-step3-interactive.html

デェフォルト値は「03 = 再送2回、出力最大」です。
そのまま解釈すれば通知コマンドは2回送信されると思ったのですが
スニファーで確認すると通知コマンドは
3回送信されています。
送信間隔は2ms程度です。

Ver 1.6.16(beta)以前のバージョンでは通知コマンドは2回送信です。

確かに再送回数と言っているので以前のバージョンの2回を
送信1回+再送1回 = 2回 の送信と考えると
再送回数デェフォルト2回 --> 送信1回+再送2回 = 3回 でつじつまは合います。
それなら以前のバージョンとの互換を考えるとデェフォルトは「13」が正しいと思いますが・・・

ややこしいので送信回数を一覧にしてみます。 これはVer 1.6.17(beta)も同じです。

  x = F3  → 1回  再送なし
  x = 03  → 3回  デェフォルト値
  x = 13  → 2回  
  x = 23  → 3回  
  x = 33  → 4回  
  x = 43  → 5回  
  x = 53 - 93 は未確認

このままだと設定ミスしちゃいそうですね。
素直に送信回数として x=13→1回 x=23→2回 x=33→3回 デェフォルト=23 とすれば
わかりやすいと思うんですが・・・・

そんな訳で実験中にエラーの回数がな〜んか変だなぁと思って
スニファーで確認したら上記のとおり・・・
実験を最初からやり直すのもこの暑い中そんな気力でません。
なにせ実験は送信側はPICマイコンで制御しているものの
受信側はツールを作るのが面倒なので耳と目を使った人力なのですから・・
意識を集中して(←だいぶうそっぽい)エラーのカウントはしていますが
エアコンのない部屋で汗だくでの実験ですから多少の誤差はありそうです。
まあそのあたりを考慮して、参考にならないかもしれませんが
さわり程度にさらっと流してください。
また、Ver 1.6.17(beta)の再送回数も調べた関係で
Ver 1.6.17(beta) と Ver 1.6.16(beta) が混在しています。
以下(beta)は省略します

実験では「再送回数」という言葉を使わずに「送信回数」とします。
最初の送信も再送もすべて送信回数として扱います。

実験環境
 TWE-Lite親機と子機間の距離は約40cm、無線LAN(2.5GHz 5GHz)あり
 PCの無線マウス等も稼動中の中での実験です。
 また、TWE-Lite子機から車のバッテリー電圧のIICコマンドが5秒ごとに飛んできます。


親機・子機連続モードでの実験
 親機・子機とも連続モードで、子機から出力変更コマンドで親機のDI1を約1秒おきに
 Lo→Hi→Lo→Hiをくりかえすために500回のコマンドを送出します。
  通知コマンドの定期送信「あり」・「無」はオプションビット「o」によって設定します。
  バージョンは親機・子機ともVer 1.6.16、一部Ver 1.6.17



子機間欠モードでの実験
 子機は間欠10秒で動作させ、子機のDI1を約1秒おきにLo→Hi→Lo→Hi(※1)と
 500回変化させDI WAKE UPによる通知コマンドで親機のDI1を変化させます。
  子機は[ y: set mode7 sleep dur (10s)]を「0」に設定し10秒ごとの
  間欠送信を停止します。
  親機の通知コマンドの定期送信は「あり」または「無」です。
  バージョンは親機・子機ともVer 1.6.17です。
 
(※1)Lo→Hiへの変化はプログラムでチャタリング波形にしてありDI WAKE UPできます。



連続・間欠、どちらのモードも再送なし送信回数「1回」はエラーが多発します。
送信回数1回と送信回数2回の差がこれほどあるとはちょとおどろきです。
デェフォルトで2回送信していた訳がよくわかります。
連続モードでは送信回数1回以外はなんとなく「どんぐりのせいくらべ」のような
気もしますが・・・
間欠モードでは送信回数3回で親機の定期送信を止めるとエラーはたったの2回です。



せっかくですので擬似間欠モードでの実験もしてみました。
 連続モードとテスト内容は同じく出力変更コマンドで相手側のDI1を約1秒おきに
 Lo→Hi→Lo→Hiをくりかえすために500回のコマンドを送出します。
 ただし送信側は擬似間欠モードで動作させます。
  通知コマンドの定期送信「あり」・「無」はオプションビット「o」によって設定します。
  バージョンは親機・子機ともVer 1.6.17です。一部Ver 1.3.3



擬似間欠モードでは連続モードと間欠モードの中間位のエラー回数ですが
出力変更コマンドを2回送信する方法を用いれば
前回のテストでは600回のコマンド送出で1回失敗しましたが
今回は500回のコマンド送出x5回目=2500回のコマンド送出でもノーエラーでした。
2ms間隔で連続送信する再送よりも、10数msあいたコマンド再送の方が有効なのでしょう。
それから連続モードのテストで受信側親機にV1-03-3を使った方がなんとなくエラーの
回数が少なかったような気もします。
5回目以降もテストしたのですがそんな傾向があるような・・・
単なる気のまよいかもしれませんが・・・。

以上の結果から送信側の定期送信がないほうがエラーの発生率が低くなるのは
まちがいなさそうですが、そもそも実験のしかたがいいのか悪いのかもありそうですし
実際の使用目的に合わせた実験をして判断しないとなんとも言えないかもしれません。




アナログ入力を利用したNaPiOnでの動体検知を追加しました こちら 2015/9/4



東京コスモス電機株式会社からワイヤレス事業が分離しモノワイヤレス株式会社に 2015/10/21



Audioアプリの音声伝送を試してみました こちら 2016/3/9



Ver 1.8.1の再送設定機能の確認 2016/9/28

MONOSTICK対応となったVer1.8.1で再送設定機能は
Ver 1.6.16(beta)を引き継いだのか確認してみました。  
設定の方法が変わらないので同じはずだと思いつつ念のための確認です。

 --- CONFIG/MONO WIRELESS TWELITE DIP APP V1-08-1/SID=0x81002a1b/LID=0xfe ---
 a: set Application ID (0x67720102)
 i: set Device ID (122=0x7a)
 c: set Channels (18)
 x: set Tx Power (03) 
←ここ デフォルト=03
 t: set mode4 sleep dur (1000ms)
 y: set mode7 sleep dur (10s)
 f: set mode3 fps (32)
 z: set PWM HZ (1000,1000,1000,1000)
 o: set Option Bits (0x00000000)
 b: set UART baud (38400)
 p: set UART parity (N)


再送回数の設定は次のとおり(Ver 1.6.16(beta)からの変更点はなし)

 xは送信出力と再送回数の設定で XYの2桁で指定します。
  X: 再送回数で 0がデフォルト2回、1-9 が指定の回数、F が再送なし
  Y: 送信出力を指定します。3が最強で2,1,0と1段階小さくなる。
  例えば 43 を指定すると再送4回、電波出力最強となります。

スニファー機能で確認するとVer 1.6.16(beta)をしっかり引き継いでいます。
 各設定値におけるパケット送信回数です
  x = F3  → 1回  再送なし設定 
  x = 03  → 3回  デェフォルト値(再送2回)
  x = 13  → 2回  再送1回設定
  x = 23  → 3回  再送2回設定
  x = 33  → 4回  再送3回設定
  x = 43  → 5回  再送4回設定
  x = 53 - 93 は未確認

Ver1.8.1でもデフォルトではパケットが3回飛ぶことになります。
今後のバージョンはこのまま3回のパケットが飛ぶのがデフォルトになるのでしょうか・・?


中継でも3パケットか確認してみたらちゃんと3パケット飛んでました。 当然か・・・^-^;;
下のスニファー画面は3秒間隔で飛んでくる間欠データを中継している様子です。

中継されるTWE-Lite DIPはver1.6.15(beta)でパケットは2回飛んでいます。
中継のTWE-Lite DIPはver1.8.1 X=03デフォルトで中継パケットは3回飛んでいます。
中継でもデフォルトでは3回パケットが飛ぶ(送信される)ということですね。

ver1.6.15以前のバージョンと同じパケットの送信回数にするには
x=13 にする必要がありそうです。


ただしスニファーの見方があってればの話ですけど・・・・


  2016年9月現在モノワイヤレスHPから Ver1.6.16(beta) と Ver1.6.17(beta) は
  ダウンロードできなくなっています。




♪すぐできる すごく安心 ♪ 2016/11/18

どこかで聞いたようなフレーズだとピン!とくる人はそれなりの年齢の方でしょうか・・・・
そう日清食品チキンラーメンのCMです^-^;; 
「すぐおいしい」は○ですね。カップラーメン3分に対し30秒ですから
でも「すごくおいしい」はそこまでおいしいとは言えんだろう・・・・かなぁ・・・  
あくまで個人的な意見です・・・

話をもどしましょう。

すぐできること
 TWE-Lite DIPの10ピン「TX」UART送信にLEDをつなぐだけ。


すごく安心なこと
 TXにつないだLEDはUART出力で点滅します(人間の目には一瞬ピカッとするだけですが)
 標準アプリなどたいていの場合はパケットを受信するとUARTに出力します。
 つまりLEDがピカッ!と光れば電波を受信した証拠。 
 電波が届いているとわかっていても目で見てわかればやっぱり安心!
 「すごく安心」と感じるのは私だけかもしれないけど・・・
 以前から電波探知として使っていたのですが
 ある実験から安心できると思えたことを書いてみます。

実験したことは
 夏の間の3ヶ月間AM2321を使った温湿度計から中継を経てToCoStickで
 暑い高松の気温と湿度を24時間測定してみること。
 あわせて門の開閉センサとNaPiOnによる人感センサでセンサが検出時に
 IIC出力のスタンドアロン親機のブザーを鳴らすセキュリティーの実験もしてみました。
 
実験の環境は
 下記の図は実験のざっくりとした位置関係です。
 赤の●印はTWE-Lite DIP子機でそれぞれ決められた間隔で送信します。 
 TWE-Lite DIP子機は高さ2m以内、2Fの室内に中継機・IIC出力のスタンドアロン親機と
 ToCoSticを配置します。スタンドアロンの親機は移動できます。
 TWE-Lite DIP子機と中継機・スタンドアロンの親機・ToCoStick間の距離は
 最長でも13m程度です。
 

 

電波の飛びは 
 送受信が水平ではなく上下(ななめ)で壁がコンクリートのせいでしょうか
 設置したい場所を含め距離のわりに飛んでくれません。

 図は各TWEからどこに電波が飛んでいるか矢印で表しています。
 実線は受信相手を少しくらい移動してもある程度余裕で受信できる場合、
 破線は受信相手を少しでも動かすとたちまち受信できなくなる場合と
 たまにしか受信しないけど全く受信できないことはない場合です。
 線がないところへは電波は飛びません。
 実線はたった3本。いかに電波が飛ばないかです・・・・^-^;;
 子機を1台づつ動作させても4台同時に動作させても子機の数には関係はありませんでした。


 電波が弱い環境では電波の飛びも(受信状態)安定しません。
 いつもと同じ環境なのに(思っているだけかも)受信できるエリアが毎日のように変わる。
 受信できたりできなかったり時間帯や日によって変わる。
 カーテンが風でゆれると受信状態が変化する。
 などなど・・  
 でもこれらは電波の弱い環境では当たり前っちゃ当たり前かもしれないけど

そこで本題です

さて夜間にBの位置にスタンドアロンの親機を移動してセキュリティ監視をするとします。
ドロボーさんは門を開けずに忍び込んでくるかもしれませんから門の開閉センサとNaPiOnの
人感センサの両方の検知が必要です。
両方のセンサの電波が受信できるエリアは50cm四方、でもセンサは感知しない限り
ブザーは鳴りません。
スタンドアロンの親機を置いた位置はこれでいいのか確かめるすべはありませんね・・・
さあ 「あなたな〜らどうする♪」 ^-^;; ^-^;;
私ならブライト、いえいえ迷わずTWE-Lite DIPの10ピン「TX」にLEDをつけます。

LEDがピカッ!・ピカッ!っと安定的に光るところを探せばいいんです。
そしてその周期は3秒と10秒、この周期でLEDがピカッ!っとすれば電波の取りこぼしなし、
周期がおかしければ取りこぼしありという訳です。
いたって簡単で安心できるでしょう・・・
電波が強力でこんな苦労をしないにこしたことはないんですがね・・・


まあ、安心するしないは別として電波探知としても便利です。
LEDの点滅状態でどこの電波の受信が悪いとかいいとかの判断にも使えます。

あなたもいかがでしょうか・・・・


そうそうもう一つ忘れてはいけない事。
 それは親機の定期送信をオプションビットで止めること(Ver1.6.12以降)
 ToCoStickも親機も通常は1秒ごとにポート状態を定期送信しています。
 電波の弱い環境だと不要な定期送信を止めるだけで受信状態がすごく改善しますよ。




子機間欠モードでリモコンを作ってみる 2017/5/29

標準アプリの子機間欠モードはスイッチを押した時の Hi → Lo の変化は伝わりますが
スイッチをはなした時の Lo → Hi の変化は伝わりません。
ですからスイッチを押している間だけONなどという動作はできません。
でもスイッチを2個使って親機の出力をフリップフロップでラッチすれば実現できそうです。
まあ多少の制約はありますが・・・・ 
フリップフロップは74HC00を使います。
子機はスイッチとTWE-Lite DIP だけなのでコイン電池が使えますよ^o^



回路はいたって単純です。親機の出力に74HC00でフリップフロップを組みます。
・子機のSETボタンを押すと親機のDO1がLo、DO2はHiなので74HC00のSET(3PIN)が
 Hiになります。
・子機のRESETボタンを押すと親機のDO2がLo、DO1はHiなので74HC00のRESET(6PIN)が
 Hiになります。
・SETボタンとRESETボタンの両方を押すと74HC00のSET・RESETの両方がHiになります。
 ただしずっと押していないとTimerによるWAIK-UPでDI1・DI2のHiが伝わるので状態が
 変化します。
・SETボタンは何度押してもSET動作、RESETボタンは何度押してもRESET動作しかしません。
 ですから2度押しを習慣づければ確実にSET・RESETの動作ができます。

間欠受信モードにすれば親機の出力常態のモニターだってできちゃいます。
 ただしスイッチの2度押しが必要です・・ (1回目で出力を反転させ2回目でその結果を読むため)
 それとモニタ用にLEDを使うとするとコイン電池ではきびしいかもしれません・・・
 上記の回路をクリックすれば間欠受信モードの回路も載ってます

なんに使える?
・電灯のスイッチのようにONとOFFをする使い方
・無線のPTTスイッチとして送信・受信ボタンとして使う ←私のモービル機に採用 しました^O^
・その他いろいろ

フリップフロップゆえの問題
・フリップフロップなので必ずSETとRESETの入力が必要です。
 なのでDI1・DI2・DI3・DI4をそれぞれ独立した4CHのリモコンとしては使えません。
・フリップフロップは電源を入れた時SETになるかRESETになるか不定です。
 必ずどちかにする必要がある場合は、余りのゲートを利用してCRによる遅延をいれて
 あげればいいです → 上記の回路をクリックすれば遅延回路も載ってます

間欠モードはどちらがおすすめ?
・インターラクティブモードの設定ができるなら間欠1秒または間欠受信にして
  
t: set mode4 sleep dur (1000ms)  ← の1000msをうんと長くする
・インターラクティブモードの設定ができないなら間欠10秒にする




AM2321温湿度計のプログラムをちょっとだけ省電力化しました こちら R02 2017/7/1



高出力タイプ TWE-Lite RED DIP  2017/9/27

TWE-Lite DIPに高出力タイプの「RED」が加わりました。
送信出力 +2.50db(1.78mW) から +9.14db(8.2mW) へ4.6倍のパワーアップ
電波の電力密度は距離が2倍になると1/4になるので出力4倍だと距離は2倍。
単純に考えると今までの2倍の距離まで電波は飛んでくれそうです。
これはあくまで自由空間でのお話なので現実とは違いますが・・・・

私の環境では今ひとつ電波の飛びが悪く(受信が悪い?) 高出力タイプは
どの程度飛ぶのか興味あるところです。
ヘッダーピン未実装タイプを待っているのですがなかなか販売されないので
問い合わせたところ11月の出荷になるそうです。 
 → HPに記載されました。
それまで待ってみることにしましょう。

TWE-Liteが出始めた頃には
高出力タイプに「TWE-001 STRONG」というのがありました。
10mWクラスでとても興味があったのですがコネクタが特殊なのと
価格も高かったので実験するにはいたりませんでしたけど・・・・
 ※画像は当時のTOCOSホームページからの流用

  送信出力: 9.08dbm 
  受信感度: -100dbm
  送信電流: 28.0mA
  受信電流: 23.5mA
  待機電流: 1.36μA(ディープスリープ時)

2018/4/11
高出力タイプの「RED」DIPで家じゅうどこでも電波が届くか実験してみました。
「RED」DIPは親機として同じ場所で0.5秒間隔で定期送信させます。
子機は今までの「BULE」DIPを使いTX端子にLEDを接続した電波探知機?です。
この子機を持って家の中をあちこち動き回ります。
そしてLEDが0.5秒間隔でチカッ・チカッと光れば電波が届いてる証拠になります。
 「RED」DIPの親機を置いた位置は前回「♪すぐできるすごく安心♪」コーナーで
 実験したToCoSticの位置です。

結果は・・
 家の中では隅から隅までとまでとはいきませんがほぼ全ての部屋へ電波が届きます。
 まあ多少の電波の取りこぼしはありますが・・・ 
 室外の温湿度センサーや門の開閉センサの位置へは中継なしでばっちり
 電波が飛んでくれます。
 しかしNaPiOn人感センサの位置だけはたまにしか電波が届きませんでした。
 やはり「BULE」の1mWクラスに比べると雲泥の差があるように感じます。

 「RED」と「BULE」の仕様 (モノワイヤレスさんのホームページから抜粋)

送信電流を「BULE」と比較してみると最大出力時は23.3mAと8mA多いですが
「BULE」と同じくらいの送信出力では14.0mAと1.3mA少なくなっています。
受信電流は14.7mAと2.3mA少なくなりました。
最低動作電圧が同じだとすれば単三電池での連続動作は「BULE」と比較して
半日くらい長く動でしょうか。 (単三電池の容量=2000mAとして)
受信感度も-1dbですが良くなっています。

価格的はDIPタイプの半完成品で「RED」が2.980円 「BULE」が1,620円(秋月電子)と
その差1300円ほどとあと300円足すと「BULE」がもう一台買えてしまいます。
使用目的をよく考えて選択する必要もありそうです。

アプリについては「RED」と「BULE」ではバイナリが共通ではないので
「RED」対応の最新バージョンしかサポートされていないようです。
「超簡単!TWELITE標準アプリ」の旧バージョンでのテストはできないようです。
オーディオ・信号アプリなど個別アプリでも「RED」が使用できるかチェックする必要は
ありそうです。




ねこの部屋TOPへ  ねこちゃんのアルバムもみてね!! ▲ページ先頭へ