FC2ブログ

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

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

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弾)>>

コメント

コメントの投稿


管理者にだけ表示を許可する

プロフィール

大泉茂幸

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

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

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

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

カテゴリ

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

最新記事

最新コメント

月別アーカイブ

訪問者数

検索フォーム

RSSリンクの表示

リンク

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

ブロとも申請フォーム

この人とブロともになる

QRコード

QR