FC2ブログ

名張市つつじが丘おもちゃ病院

三重県名張市つつじが丘でおもちゃの病院を開院しています。年中無休で修理は無料、部品代のみ実費です。おもちゃの修理依頼は tutuji@cb4.so-net.ne.jp へメールにてご連絡下さい。なお、宅配便での受け付けは行っておりません。このブログにはおもちゃ等の修理事例やツール製作などを載せていきます。故障診断や修理方法の改善等、ご意見をお寄せ下さい。

PICでタッチSW(第4弾)Sleep対応

【前振り】
前回の 「PICでタッチSWを製作(第3弾)」 では、容量検知モジュールを持たないPICでタッチSWを実現し、PIC電子オルゴールの操作を試みた。
今回は非演奏中にはSleepさせて、省電力化を図った。

【設計】
容量検知の仕組みはポートの浮遊容量の変化を検知することだ。その動作は以下の通り。

①ポートにLを出力し、浮遊容量を放電しておく。
②ポートを入力モードに変更すると、1MΩの外部プルアップで充電が始まる。
③充電が進んでポートがHレベルになったときに、IOC割り込みにて充電に要した時間を計時する。
④計時の精度を確保するため、計時中はIOC以外は割り込みを禁止し、電子オルゴールのPWM周期の32us以内に充電が完了するようにプルアップ抵抗値を決めている。
⑤計時の仕掛けは、充電開始時にTMR0を初期化しておき、IOC割り込み時のTMR0の増分で計測する。

Sleep中はTMR0が停止するので計時はできない。従って計時が完了してからSleepする。

省電力の度合いは計時時間とSleep時間との比による。計時時間は自由度が無く20us程度となるので、Sleep時間を長くすればより省電力にできる。タッチSWのレスポンスとのトレードになる。
このサンプルでは電子オルゴール非稼働中のタッチセンスの周期を32msにしている。1回の動作ごとに1個のタッチSWしか評価しないので5個のタッチSWを一巡するには160ms要する。PIC電子オルゴールの固有処理のコールバック周期も32msに合わせた。

タッチ有無の判定は容量検知結果の変化で判定する。その閾値を小さくすると敏感になるが誤動作が増える。逆に大きくすると誤検知はしなくなるが鈍感になる。実装によっても状況が変わるので、定数宣言しておきチューニングできるようにしておく。

PIC電子オルゴールではFoscは32MHzが必要だが、x4PLLが安定するのに時間を要する。16F1705では実測で2ms程度が掛かっている。このため、非稼働中の容量検知はFoscを16MHzにして実行する。稼働中はTMR0のプリスケを1/2とすることで、非稼働中の計時結果との互換を保つ。

動作確認環境は前回の 「PICでタッチSWを製作(第3弾)」 と同じ。


【実験結果】
タッチセンスの使い勝手は前回と同等のレベルになった。
稼働中と非稼働中では計時結果に段差があった。この原因が判らないのだが、ほぼ固定差なので、固定値で一律の補正を行った。
非稼働中の消費電流は14uAとなった。

【ダウンロード】
「PICでタッチSW」の設計資料は ここから ダウンロードできる。

今回のSleep対応したタッチSWの仕組みはPIC電子オルゴールに組み込んで公開している。
PIC電子オルゴールの設計資料と開発プロジェクトは ここから ダウンロードできる。

該当するプロジェクトは touch_PIC1705_SLP.X
スポンサーサイト



  1. 2018/11/06(火) 12:07:02|
  2. タッチセンス
  3. | コメント:0

PICでタッチSWを製作(第3弾)

【前振り】
PICでタッチSWを製作(第2弾)」 では、センシングモジュールを内蔵していない廉価なPICで、発振回路も外付けしないでタッチSWを実現できた。

今回は、それを PIC電子オルゴール に組み込んで、タッチSWでオルゴールを制御する試みで、電子オルゴールとタッチSWを1つのPICに載せることでコストを抑えることが目的だ。


【デモ動画】
理屈は後にして、先ずはデモ動画をご覧下さい。


タッチSWは2×3のマトリクス構成に見立てているが、SW回路をセレクト線とセンス線で構成している訳ではなく、複数のタッチSWの同時押しをソフトで評価しているだけだ。


【検討課題】
電子オルゴールとタッチセンスとの並行実行を上手く調停する設計が必要である。

設計条件は以下の2つがある。

・電子オルゴールは、32usのPWM(TMR2)割り込みでデューティサイクルレジスタの更新を行わなければならない。但し、PICのデューティサイクルレジスタはバッファ方式になっているため、次のPWM周期が満了するまでに更新すればよいので、割り込み処理のレイテンシは求められない。

・タッチセンスは、IOC検出で充電時間を計時するので、割り込み処理のレイテンシが求められる。但し、計時結果の変化を評価するので、レイテンシが多少長くても一定であれば問題は無い。

これを実現するには、タッチセンスの計時中はPWM(TMR2)割り込みを禁止して、32usよりも短い時間で計時を終えることだ。
第2弾で、計時に要する時間は7~22usであったので、これらの条件はクリアできる。

IOC割り込みのレイテンシは他の割り込みと競合しないようにすれば、高々2命令サイクルしか変動しないので、計時誤差は0.25us以下にできる。第2弾のポーリング方式では、ポーリングの1ループに6命令サイクルを要していたので、その3倍も計時精度が向上することになる。


【回路】
第2弾と同じテストボードを利用している。


【静電容量センス】
ハード面での静電容量センスの方式や評価結果は第2弾と変わらないので、詳細は 第2弾 を参照。


【ソフト処理】
充電時間の計時にTMR0を充てる。TMR0のクロック源を命令サイクルにして、プリスケは使わない。Fosc=32MHzで1カウントは0.125us、最大計時時間は32usになる。

計時処理の流れを簡単に説明する。

タスク(固有処理コールバック関数)
・放電(されている)
・PWM(TMR2)割込みを禁止
・TMR0の計時初期値を設定
・TMR0割り込みフラグをクリア
・TMR0割り込みを許可
・充電を開始
・ポートを空読み
・IOC割り込みフラグをクリア
・IOC割り込みを許可
・ここで一旦制御を放す

PWM(TMR2)割り込みは禁止されていて、充電完了(IOC)またはタイムアウト(TMR0)の割り込みを待つ。
なおタイムアウト時限は25us程度以下に設定する必要がある。
オルゴールエンジンのタスク処理は演奏または音声再生の処理を実行する。

TMR0オーバフロー・IOC割り込み処理(固有割込み処理コールバック関数)
・TMR0を取得
・TMR0がオーバフローしていれば計時結果を最大値に規制
・TMR0割り込みを禁止
・IOC割り込みを禁止
・PWM(TMR2)割込みを許可
・retfie

これで、PWM(TMR2)割り込みにてPWMデューティサイクルの更新が実行されるようになる。

タスク(固有処理コールバック関数)
・TMR0の取得値の平均値を計算
・TMR0の取得値と平均値を比較して、タッチ有無を判定
・タッチ有無の判定結果でオルゴールを制御する。
・次のポート(タッチSW)に進める

実際に動かしてみて気付いたことは、計時値の時間加重平均値が安定するのにかなりの時間を要することだ。
第2弾のときから過去256サンプル分の計算をしていたが、orgelに組み込むと固有処理のコールバック周期が10msの場合、5個のタッチSWを一巡するのに50ms掛かり、その256サンプル分となると約13秒にもなる。その間はタッチ有りを検出しない。
そこで、第3弾では時間加重平均値の計算を過去16サンプル分に縮めることにした。
その結果、約1秒でタッチ有りを検知できるようになった。
この変更で、1秒より短い時間でタッチしないとタッチ有りを検知しないことになるが、デモ動画のとおり、普通にタッチすれば誤検知は無い。

処理の詳細はダウンロードファイルを参照。


【ダウンロード】
「PICでタッチSW」の設計資料は ここから ダウンロードできる。

この記事のファームウェアはPIC電子オルゴールVer5_7以降に組み込んでいて、開発プロジェクトは ここから ダウンロードできる。
プロジェクトは onsei_PIC1705_touch.X
ソースコードは onsei_PIC1705_touch.asm
  1. 2018/08/14(火) 17:16:42|
  2. タッチセンス
  3. | コメント:0

PICでタッチSWを製作(第2弾)

【前振り】
以前に 「PICでタッチSWを製作」 の記事を書いた。mTouchソリューションを利用した真面なものと、センシングモジュールを内蔵していないPICに発振器を外付けした強引なものを紹介した。しかし、これらは実際に応用しようとするとコストパフォーマンスが悪い。センシングモジュールを内蔵したPICは秋月でも安くはない。発振器を外付けすると全体コストが上がってしまう。

そこで今回のテーマは、センシングモジュールを内蔵していない廉価なPICで、発振回路も外付けしないでタッチSWを実現することだ。


【アイデア】
基本となるのはポートピンの浮遊容量の充電時間を測るという極めて在り来たりな発想だ。mTouchソリューションはこれを相当回数繰返して、一回毎の誤差を薄めているだけだ、と安易に考えた。今回は1回の充電時間で判定するので、当然ノイズによる影響が大きい。おもちゃ修理への応用に限定して、稀に誤動作も起こり得ることを許容して低コストに作ることを目標とする。


【回路】
PICでタッチSW(第2弾)回路図
外付け部品は、プルアップ抵抗だけだ。抵抗値の1MΩは、ポートのバラつきやVddの変化の影響を受けても回路が制御可能な範囲に入ることを実測して、最適値を求めた結果だ。

評価データはRC2からシリアルでPCへ送って取得する。

タッチSW
・PICのピンからリード線を引き出すだけ。今回の実験では、特にタッチパッドは設けず、リード線の被覆にタッチする。
PICでタッチSW(第2弾)実装1

PICでタッチSW(第2弾)実装5

・単一タッチは、単一のリードにタッチする。
PICでタッチSW(第2弾)実装4

・複数タッチは、複数のリード線の交点にタッチする。
PICでタッチSW(第2弾)実装6

複数タッチは、キーマトリクスに対応するためだ。


【処理方式】

処理の流れは以下の通り。

①LAT=0 TRIS=0 にして放電する。

②TRIS=1 にして充電を開始する。

③PORT=1 になるまでポーリングを繰り返す。

④PORT=1 になったら、③のポーリングを繰り返した回数を取得する。

⑤取得した回数の過去256サンプルで時間加重平均値を計算する。

⑥回数のカレント値が平均値に比べて一定値以上大きいとき、タッチ有りと判定する。

処理の詳細はダウンロードファイルのソースコードを参照。


取得されるポーリング回数はポートによるバラツキやVddの変動の影響が非常に大きい。カレントな回数を評価したのではまともに判定できない。そのため平均値との乖離で評価することにした。これが本方式のミソであり、これにより、個々のチューニングをしなくても(ほぼ)確実な判定ができるようになった。

全体的な調整値として、次の2つがある。

・ポーリング回数上限値
いつまで経っても充電が完了しない場合にプログラムが永久ループしないように、ポーリング回数の上限を設ける。上限に達した場合は「タッチ有り」の判定とする。

設定例 INIT_VALUE equ 32 ;計時初期値

・タッチ有無の判定基準値
(カレント値-基準値)>平均値 のとき「タッチ有り」と判定する。この判定で使う基準値。

設定例 DEF_VALUE equ 1 ;計時有意差基準

【評価】
センス信号(ポートの電位)
・「タッチ無し」のとき
PICでタッチSW(第2弾)センス信号波形タッチ無し

・「タッチ有り」のとき
PICでタッチSW(第2弾)センス信号波形タッチ有り

「タッチ有り」のときの方が信号の立上り時間が僅かに長い。この僅かな差を検知してタッチの有無を判定する。正に神業だ(僕ではなく、PICがと言うこと)。

この信号観測では、オシロのプローブを接続することによる浮遊容量の増加により、本来の充電時間よりもかなり長時間を要していることに留意されたい。


評価データの様式

表示例
様式PICでタッチSW(第2弾)評価データの様式

回数は (unsigned)(-INIT_VALUE) からポーリング毎にインクリを始めて、上限値は255となる。
今回の実験では INIT_VALUE=32 に設定しているので、初期値は 0xe0、上限値は 0xff となる。

回数(カレント値)は 1回の充電時間測定での値。

回数(平均値)は 過去256サンプルでの時間加重平均値で、単位は「1/256]。

今回の実験では DEF_VALUE=1 に設定しているので、 (カレント値-1)>平均値 のときに「タッチ有り」と判定し、’*’を表示する。

単一タッチ
・ch0をタッチ
F0F10F F1F1FB EAEC90 EAEC59 F5F6A9
F2F110 F0F1FA EBEC8F EAEC57 F5F6A8
F1F110 F1F1FA EAEC8D EAEC55 F5F6A7
F3F112* F0F1F9 EAEC8B EAEC53 F6F6A7
F1F112 F1F1F9 EAEC89 EAEC51 F5F6A6
F3F114* F0F1F8 EAEC87 EAEC4F F6F6A6
F1F114 F1F1F8 EAEC85 EAEC4D F5F6A5
F3F116* F0F1F7 EBEC84 EAEC4B F5F6A4

・ch1をタッチ
EFF12F F1F1DF EAEC2C EBEBF6 F5F67A
F0F12E F0F1DE EBEC2B EAEBF5 F5F679
EFF12C F1F1DE EBEC2A EBEBF5 F5F678
F0F12B F3F1E0* EBEC29 EAEBF4 F5F677
EFF129 F5F1E4* EAEC27 EAEBF3 F5F676
F0F128 F4F1E7* EBEC26 EAEBF2 F5F675
EFF126 F5F1EB* EAEC24 EAEBF1 F5F674
F0F125 F4F1EE* EAEC22 EAEBF0 F5F673
EFF123 F6F1F3* EAEC20 EAEBEF F5F672
F0F122 F4F1F6* EAEC1E EAEBEE F5F671
EFF120 F6F1FB* EAEC1C EAEBED F5F670
F0F11F F4F1FE* EAEC1A EAEBEC F5F66F

・ch2をタッチ
EFF0FB F1F21F EAEBF9 EAEBDD F5F657
EFF0FA F1F21E EBEBF9 EAEBDC F5F656
EFF0F9 F0F21C EBEBF9 EAEBDB F5F655
EFF0F8 F1F21B EDEBFB* EAEBDA F5F654
F0F0F8 F0F219 EEEBFE* EAEBD9 F5F653
EFF0F7 F1F218 EEEC01* EAEBD8 F6F653
F0F0F7 F0F216 EEEC03* EBEBD8 F5F652
EFF0F6 F1F215 EFEC06* EAEBD7 F5F651
EFF0F5 F0F213 EFEC09* EAEBD6 F5F650
EFF0F4 F1F212 EFEC0C* EBEBD6 F5F64F

・ch3をタッチ
EFF0C2 F0F1D7 EBEC2C ECEBAA F6F61A
EFF0C1 F0F1D6 EAEC2A EBEBAA F5F619
EFF0C0 F0F1D5 EBEC29 ECEBAB F6F619
EFF0BF F0F1D4 EAEC27 EFEBAF* F6F619
EFF0BE F0F1D3 EBEC26 EDEBB1* F6F619
EFF0BD F0F1D2 EAEC24 EFEBB5* F6F619
EFF0BC F0F1D1 EBEC23 EEEBB8* F6F619
EFF0BB F0F1D0 EAEC21 F0EBBD* F6F619
EFF0BA F0F1CF EBEC20 EEEBC0* F6F619
EFF0B9 F0F1CE EAEC1E EEEBC3* F6F619
EFF0B8 F0F1CD EAEC1C EEEBC6* F6F619
EFF0B7 F1F1CD EAEC1A F0EBCB* F6F619
EFF0B6 F0F1CC EAEC18 EEEBCE* F6F619
EFF0B5 F0F1CB EAEC16 F1EBD4* F6F619

・ch4をタッチ
EFF09D F0F1B8 EAEBF5 EAEC1C F5F610
EFF09C F0F1B7 EAEBF4 EBEC1B F5F60F
EFF09B F1F1B7 EAEBF3 EBEC1A F5F60E
EFF09A F0F1B6 EAEBF2 EAEC18 F6F60E
EFF099 F0F1B5 EAEBF1 EBEC17 F5F60D
EFF098 F0F1B4 EAEBF0 EBEC16 F8F60F*
EFF097 F1F1B4 EAEBEF EBEC15 F7F610
EFF096 F0F1B3 EAEBEE EAEC13 F9F613*
EFF095 F1F1B3 EAEBED EBEC12 F8F615*
EFF094 F0F1B2 EAEBEC EAEC10 FAF619*
EFF093 F1F1B2 EAEBEB EBEC0F F8F61B*
F0F093 F0F1B1 EBEBEB EAEC0D FEF623*
EFF092 F0F1B0 EBEBEB EAEC0B F8F625*
F0F092 F0F1AF EBEBEB EAEC09 FDF62C*

ch(ポート)のバラつきが大きいことが判る。タッチ時の平均値との差分は2~3程度で極少ない。

ポーリングのループは6命令サイクルであり、取得された回数から充電時間は7~22us程度と推定される。

タッチ有無の判定結果は不安定で、チャタリングしているように見える。これはハムノイズが原因と思われる。
1MΩのプルアップなのでノイズに弱いことは想定範囲だが、応用する場合は留意が必要だ。


複数タッチ
・ch1とch3を同時にタッチ
EFF071 F1F18D EAEBCA EBEBF1 F5F68F
EFF070 F0F18C EAEBC9 EAEBF0 F6F68F
EFF06F F1F18C EAEBC8 EBEBF0 F5F68E
F0F06F F0F18B EAEBC7 EAEBEF F6F68E
EFF06E F1F18B EAEBC6 EBEBEF F5F68D
F0F06E F0F18A EBEBC6 EDEBF1* F6F68D
EFF06D F3F18C* EAEBC5 EEEBF4* F5F68C
F0F06D F1F18C EAEBC4 EDEBF6* F6F68C
EFF06C F4F18F* EAEBC3 EFEBFA* F5F68B
F0F06C F1F18F EBEBC3 EEEBFD* F6F68B
EFF06B F4F192* EAEBC2 F0EC02* F5F68A
F0F06B F1F192 EBEBC2 EEEC04* F6F68A
EFF06A F4F195* EAEBC1 EFEC07* F5F689
F0F06A F1F195 EBEBC1 EDEC08 F6F689
EFF069 F4F198* EAEBC0 F0EC0C* F5F688

・ch2とch3を同時にタッチ

EFF04B F1F1D3 EAEB96 EBEC53 F5F65F
F0F04B F0F1D2 EBEB96 EAEC51 F6F65F
EFF04A F1F1D2 EAEB95 EBEC50 F5F65E
F0F04A F0F1D1 EBEB95 EBEC4F F6F65E
EFF049 F1F1D1 EBEB95 EDEC50 F5F65D
F0F049 F0F1D0 EDEB97* ECEC50 F6F65D
EFF048 F1F1D0 ECEB98 EFEC53* F5F65C
F0F048 F0F1CF EEEB9B* EDEC54 F6F65C
EFF047 F1F1CF ECEB9C EFEC57* F5F65B
F0F047 F0F1CE EEEB9F* EDEC58 F6F65B
EFF046 F1F1CE EDEBA1* EFEC5B* F5F65A
F0F046 F0F1CD EFEBA5* EDEC5C F6F65A
EFF045 F1F1CD ECEBA6 F0EC60* F5F659
F0F045 F0F1CC EEEBA9* EDEC61 F6F659
EFF044 F1F1CC EDEBAB* EFEC64* F5F658
F0F044 F0F1CB EFEBAF* EDEC65 F6F658
EFF043 F1F1CB EDEBB1* F0EC69* F5F657
F0F043 F0F1CA EEEBB4* EDEC6A F6F657
EFF042 F1F1CA EDEBB6* EFEC6D* F5F656

タッチ時の平均値との差分は2~3程度で単一タッチ時と変わらない。
非タッチのchへの影響は認められない。キーマトリクスへの応用も可能であることが確認できた。


【ダウンロード】
このファームウェアの設計資料と開発プロジェクトは ここから ダウンロードできる。

【今後の課題】
・充電完了のポーリング中に割り込み処理が走ると、ポーリング回数カウントに誤差が生じる。この誤差は「タッチ無し」の方向に働くので、アプリケーションによっては無視できる場合もある。

・上記の誤差を生じさせないためにはポーリング中は割込みをマスクすることだが、それが許容できるかどうかはアプリケーションによる。

・充電完了をポーリングでセンスするのではなく、ポートチェンジ割込みで検知する方法も考えられる。この場合は充電時間計時用のタイマーを占有する必要がある。

上記の方策を含めて、PIC電子オルゴールでの利用方法を検討する。
  1. 2018/08/07(火) 17:46:33|
  2. タッチセンス
  3. | コメント:0

PICでタッチSWを製作

1.やりたいこと
タッチSWを使ったおもちゃで、センサICが故障している場合にPICで換装する。
どんなおもちゃに応用するのか決まっている訳ではないので、いろんなパターンを用意しておきたい。
mTouch搭載のPICを使うと容易にタッチSWが実現できる。8chは16F1823、16chは16F1939が比較的廉価にできる。
mTouch非搭載のPICでもタッチSWを実現する。6chは16F54、16chは16F57が比較的廉価にできる。

2.回路構成
【16F54で6ch実装】
PICでタッチSW回路図54
静電容量検出用の発振器は外付けする必要がある。性能は求められないので簡易で廉価にできるものとして、シュミットトリガインバータ1個でCR発振器を組む。74AC14を使ったのは秋月で安く販売されていたからであり、他に理由はない。
コストは16F54@60円(2016年9月秋月)、20MHzクリスタル@10円(2016年9月aitendo)、74AC14@10円(2016年9月秋月)、15pFセラミ@0.7円(2016年9月秋月)×8個、470kΩ@1円(2016年9月秋月)×6個、10kΩ@1円(2016年9月秋月)×6個。

【16F57で16ch実装】
PICでタッチSW回路図57
コストは16F57@60円(2016年9月秋月)、20MHzクリスタル@10円(2016年9月aitendo)、74AC14@10円(2016年9月秋月)×3個、15pFセラミ@0.7円(2016年9月秋月)×18個、470kΩ@1円(2016年9月秋月)×16個、10kΩ@1円(2016年9月秋月)×16個。

【16F1823で8ch実装】
PICでタッチSW回路図1823
静電容量検出に関しては外付け部品が全く必要ない。PICとタッチパッドだけで構成できる。
コストは16F1823(@100円2016年9月秋月)。

【16F1939で16ch実装】
PICでタッチSW回路図1939
コストは16F1939@220円(2016年9月秋月)。

3.タッチ検出の仕組み
mTouch搭載、非搭載ともタッチ検出の仕組みは同じで、CR発振器のCに対して人体が触れることで容量負荷が大きくなり、発振周波数が低下する。その変化を捉えてタッチを検出する。

【mTouch搭載デバイスの場合】
1個の内蔵発振器をアナログマルチプレクサで複数のピンに出し、複数chのタッチSWを機能させている。

【mTouch非搭載デバイスの場合】
外付けの発振器を用意して、PICのピンに入れる。アナログマルチプレクサを外付けするとコスト高になってしまうので、必要ch数分の発振器を用意して、それと1対1に対応付けたピンに入力する。

発振器を構成するインバータの入力ピンにビニル被覆のリード線を付けて、指先で被覆の上からリード線に軽くタッチすると発振周波数が10%くらい下がる。押さえ気味に強くタッチすると20%くらい下がる。

4.設計の要点
個体差や環境変化によるドリフトに自動的に追随するために、測定した周波数サンプルの過去16回分の平均値を基準値とする。
測定値<基準値のときはタッチ、測定値>=基準値のときは非タッチと判定する。

測定値が基準値近辺ではタッチ判定と非タッチ判定がバタ付くので、これを避けるために2つのヒステリシス特性を持たせる。

・レベル的なヒステリシス
非タッチからタッチへの状態遷移は、測定サンプルが (基準値×63/64) より下がったときとする。
タッチから非タッチへの状態遷移は、サンプルが基準値以上になったときとする。
mTouch非搭載デバイスでは上記の通り、ヒステリシス幅は1/64とするが、mTouch搭載デバイスではヒステリシス幅は1/128として、検出感度を上げている。

・時間的なヒステリシス
タッチ判定のときは直ちに結果に反映するが、非タッチ判定は、それが3サンプル以上継続しないと結果に反映しない。
16F54ではSRAM容量が小さいため管理データを設けることができず、この機能を実装することができなかった。

mTouch非搭載デバイスで、外付けのインバータを同時に稼働させると相互に影響しあって正しくタッチ判定ができなかった。
そのため、同時には1個のみを発振させて、複数のchをラウンドロビンに測定することにした。
PICのポートを出力モードに設定することで、発振を止める。ポート出力とインバータ出力がぶつかるので10KΩの抵抗を挿入している。

タッチSWの判定結果は、2線式同期シリアル通信でホストマイコンへ送る。データ送信中を示すための信号を加えて、全体で3信号線とする。なお、ホストマイコンとのインタフェースは本記事のテーマではない。

設計の詳細はダウンロード資料を参照

5.ファームウェア
16F54はSRAMが25バイトしかなく、6ch分の管理情報しか持てなかった。74AC14の素子数と一致して都合がよい。
初めはC言語で書いてみたのだが16F54の場合で3ch分しか収まらなかったので、アセンブラに替えた。

16F57もSRAMのエリアが複数のバンクに分断されていて、C言語では16ch分の管理データを配列で配置することができず、これもアセンブラとなった。

16F1823と16F1939はC言語での開発ができた。アセンブラに比べて簡潔で見通しのよいソースコードに仕上がった。

設計資料と開発プロジェクトは ここから ダウンロードできる。

6.実測信号波形
【74AC14の発振波形】
タッチしていないときは約190kHzで発振している。
PICでタッチSWOSC波形

タッチしたときは約160kHzに低下している。
PICでタッチSW74AC14発振波形タッチ時

その他の信号波形はダウンロード資料を参照
  1. 2016/09/29(木) 09:47:11|
  2. タッチセンス
  3. | コメント:0

プロフィール

大泉茂幸

Author:大泉茂幸
名張市つつじが丘おもちゃ病院
名張市つつじが丘南3番町129
tutuji@cb4.so-net.ne.jp
090-5534-6494
連絡は上記のメール、またはSMSでお願いします。

子どもの頃から趣味は電子工作一筋でやってきました。理科離れが進む中で科学技術に興味を持つ子どもが少しでも増えて行くことを願って、子ども達に電子工作の活動の場を提供しています。

1981年からおもちゃ病院の活動を始め、2014年に三重県名張市への移住を機に「つつじが丘おもちゃ病院」を開院しました。自分でおもちゃを設計し製作する【おもちゃ工房】と、マイコンを応用した電子工作を楽しむ【マイコンクラブ】も併設しています。新規参加メンバーを募集しています。

当ブログで公開している技術情報や成果物の複製、改変および再配布はフリーです。読者様のおもちゃ病院活動のお役に立てば幸いです。ご利用いただいた結果や感想等を記事へのコメントやメールでフィードバックしていただけると有難いです。なお、公開ファイルは最新版を載せているので、古い記事の内容から変わっている場合があります。

カテゴリ

おもちゃ修理技術 (124)
¦ ・電子オルゴール+音声再生 (52)
¦ ・音声再生・録音再生 (13)
¦ ・2.4GHzラジコン (35)
¦ ・レガシーラジコン (13)
¦ ・赤外線リモコン (4)
¦ ・RFID (3)
¦ ・タッチセンス (4)
ツール製作 (35)
¦ ・プログラマー (27)
¦ ・USB-シリアル変換 (3)
¦ ・その他のツール (5)
修理事例 (157)
¦ ・マイコン換装 (75)
¦ ・電子・電気修理 (59)
¦ ・メカ修理 (23)
製作記事 (5)
PIC開発 (4)
おもちゃ病院 (9)
ドクター研修会 (2)
未分類 (0)

最新記事

最新コメント

月別アーカイブ

訪問者数

検索フォーム

RSSリンクの表示

リンク

このブログをリンクに追加する

QRコード

QR