FC2ブログ

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

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

PIC電子オルゴールVer5_7でSPIメモリからタッチセンスで音声再生

2月は今日でおしまいだが、今月のブログ記事はまだ4件。そこで、駆け込みでブログへアップ。

ネタは、お馴染みのPIC電子オルゴールで、「SPIメモリからタッチセンスで音声再生」すること。 タッチセンスでPIC電子オルゴールを操作する のは以前にやっていたが、SPIメモリとの組み合わせはやっていなかった。真新しい仕掛けは無く、今までの事例を組み合わせるだけだ。

しかし、ここで言うタッチセンスは、CPSモジュールを内蔵しないPICで「無理矢理タッチセンス」するオタク的なやり方で、今までの事例を組み合わせるだけと言っても、マイコンの仕組みが判っていないとカスタマイズは難しい。そこで、「無理矢理タッチセンス」の応用事例を追加することで、理解の一助になればと思う。

【要件】
タッチSWは5個。それぞれのタッチで、各SWに割り当てられた音声を再生する。これは単独タッチセンスの機能だ。
複数のSWを同時にタッチすると、その組み合わせに割り当てられた音声を再生する。これは複合タッチの機能だ。

【設計】
タッチSWの複数タッチは、一般のキーマトリクスと違ってセレクト線とセンス線の区別が無く、単独タッチがほぼ同時に起きる事象だ。複数のタッチには多少の時間のズレがあるので、必ず単独タッチを検知する。

この単独タッチを排除することを考えないといけない。それには、一定時間は監視を続けて、単独タッチなのか複数タッチなのかを見極めることだ。

もう一つの方策は、単独タッチと複数タッチの誤検知を受容することだ。一瞬、間違った音声を再生し掛けてもすぐに正しい音声が出てくれば問題ないことが多い。但し、タッチを放したときには、複数タッチの音声を再生中は単独タッチに切り替えないように対処することが必要だ。今回の応用事例はこの方策を採っている。

16F1503で実現する場合は、タッチSWは5個まで実現できる。「無理矢理タッチセンス」ではタッチSWを接続するポートの要件として、出力モードに設定できることと、IOC割り込みが可能なことがある。これに該当するポートはRA0~2とRA4、RA5の5本しかない。

ポートの浮遊容量を充電時間で測定し、その変化でタッチを検知するのだが、PWM周期内に測定を終えなければならない。測定中にPWM(TMR2)割り込みが発生すると、IOC割り込みレイテンシが変化して測定に誤差を生じるからだ。ポートの浮遊容量を10pFとすると、1MΩとの時定数は10usになり、PWM周期の32usに比較していい塩梅になる。

【回路図】
PIC電子オルゴールテストベンチ回路図(タッチセンス)

【テストボード】
PIC電子オルゴールテストベンチ(タッチセンス1)
PIC電子オルゴールテストベンチ(タッチセンス2)

【ダウンロード】
PIC電子オルゴールのファームウェアは ここから ダウンロードできる。

今回追加したプロジェクトは onsei_PIC1503_SPI_touch.X
親のソースコードは onsei_PIC1503_SPI_touch.asm

【動作テスト】
単独タッチで音声を再生したあと、最後に複数タッチで音楽を再生している。



スポンサーサイト



  1. 2019/02/28(木) 10:15:21|
  2. 電子オルゴール+音声再生
  3. | コメント:0

Toyトランシーバの試作

2.4GHzトランシーバの活用事例の一つとして、Toyトランシーバ(ガントラ)を作ってみた。
Toyトランシーバの修理のヒントになるかも。
Toyトランシーバ外観

【設計】
トランシーバモジュールは「nRF24L01」若しくは「SE8R01」、制御マイコンは16F1503とする。

無線伝送はトランシーバモジュールにお任せなので、作り込みは下記のみとなる。

・送信側は、音声をADCして、PCMデータをデータペイロードに詰め込む。

・受信側はデータペイロードからPCMデータを取り出し、PWMにてDACする。

・ADCとDACは8ビット8kspsで、絶え間なく実行する。

・無線伝送でアンダーラン/オーバーランが発生しないようにトランシーバを制御する。

Fosc=16MHzでPR2=127とするとPWM周期は32usとなり、可聴周波数の外になる。具体的な設定はTMR2のプリスケーラは1:1とし、デューティ値上位レジスタにはPCMデータの上位7ビットを、デューティ値下位レジスタにはPCMデータの下位1ビットを設定する。

PWMの4周期は128usとなり、この周期でADC/DACを実行する。具体的にはTMR2のポストスケーラを1:4とする。
8kspsのサンプリング周期は125usであり、これとは若干乖離するが、送信側/受信側ともに同じだけズレるので、オーバーラン/アンダーランは発生しない。サンプリングレートが8kspsを若干下回るだけだ。

nRF24L01+のデータペイロードは最大32バイトなので、32バイト毎に送受信する。
32サンプルは4.1msに相当する。nRF24L01+は送信モードを維持できるのは3ms以下であるため、送信の都度、スタンバイモードに戻すことになる。

送信側と受信側のFoscは16MHzとするが、クロック精度は有限なので、現実には若干のズレが生じる。つまり、アンダーラン/オーバーランが発生する。
アンダーランが発生した場合はデューティ値の更新を飛ばす。オーバーランが発生した場合は、該当PCMデータを捨てる。これしか執り得ないのだが、発生頻度は非常に低いので問題にはならないと考える。

【製作】
回路図
Toyトランシーバ回路図

配線図
Toyトランシーバ配線図

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

【評価】
再生音声

ブーーとノイジーで改善が必要だが、今のところ原因も対策もノーアイデアで悲しい。有識者の指南をいただきたい。

飛距離はトランシーバモジュールの性能に依存し、パワー強化版では30m程度であるが、非強化版では7m程度しかなく、トランシーバとしては物足りない。

動作タイミング
Toyトランシーバ送信処理タイミング
エアー占有時間は200us/32バイト、占有率は約5%となった。
  1. 2019/02/27(水) 13:05:37|
  2. 2.4GHzラジコン
  3. | コメント:0

27MHzFM方式トイラジ(TOMY)

(僕にとっては)珍しいラジコンがつつじが丘おもちゃ病院へ来院した。27MHzのFM方式だ。40年近くおもちゃ病院をやっているが、FM方式のラジコンはホビーラジコンでは診たことがあるものの、トイラジでは初めてだ。
27MHzFM方式トイラジ(外観)
27MHzFM方式トイラジ(送信機)
送信機の裏側に 「27MHzナローバンド」 の認定表示と 「2007年TOMY」 のロゴがあった。

このおもちゃの故障個所は送信機のタクトSW不良だったのだが、珍しい方式なので、この機会に仕組みを調査した。

1.送信機
【メイン基板表】
27MHzFM方式トイラジ(TX表)
左上のスライドSWは「バンド設定SW」。

電源SWは無く、操作後1分でオートパワーオフする。

垂直に立っているサブ基板は「エンコーダ」。

【メイン基板裏】
27MHzFM方式トイラジ(TX裏)
中央のCOB(U1)はPLL変調器を含むRF処理を行っている。

「バンド設定SW」はこのCOBに繋がっていて、キャリア周波数を決めている。
バンドA : 27.045MHz
バンドB : 27.195MHz
バンドC : 27.255MHz
なお、バンド設定はエンコードには反映されない。

左端のTr(Q1)はRFファイナルアンプ。

【サブ基板表】
27MHzFM方式トイラジ(TXサブ基板表)
エンコーダは4MHzクロックで動いている。

【サブ基板裏】
27MHzFM方式トイラジ(TXサブ基板裏)

【エンコーダ】
ピン接
27MHzFM方式トイラジ(エンコーダピン接)

信号定義
27MHzFM方式トイラジ(エンコーダ信号定義)
送信機が稼働時はピン8に27MHzのキャリアが観測されるので、その用途が解らなかったのだが、(福岡)飯塚こわれたおもちゃの相談所 のドクターが解明してくれた。ピン8に「ENB」のシルク印刷があるので、イネーブル機能ではないかと。実機で確認したら1分後にHになった。イネーブルピンに間違いない。

ピン8に27Hzのキャリアが観測されたのは、信号の回り込みで、そのレベルは0.4Vp-pだった。

エンコード出力信号波形の例
27MHzFM方式トイラジ(エンコード波形)
全ての操作に対するエンコード出力信号波形はダウンロードファイルにある。

2.受信機
【メイン基板表】
27MHzFM方式トイラジ(RXメイン基板表)
左下のスライドSWは「バンド設定SW」。

その左側の黒角のMSSFUは「セラミックフィルター」。

垂直に立っているサブ基板は「デコーダ」。

【メイン基板裏】
27MHzFM方式トイラジ(RXメイン基板裏)
左下のスライドSWは「電源SW」。

上部のCOB(U2)はPLL検波器を含むRF処理を行っている。

【サブ基板表】
27MHzFM方式トイラジ(RXサブ基板表)
デコーダは4MHzクロックで動いている。

【サブ基板裏】
27MHzFM方式トイラジ(RXサブ基板裏)

【デコーダ】
ピン接
27MHzFM方式トイラジ(デコーダピン接)

信号定義
27MHzFM方式トイラジ(デコーダ信号定義)

検波信号入力波形の例
27MHzFM方式トイラジ(デコーダ入力波形)
全ての操作に対する検波信号入力波形はダウンロードファイルにある。

3.エンコードルール
エンコード信号を観測したが、エンコードルールの解明には至らなかった。誰かが解析してくれることを期待する。

4.ダウンロード
調査結果の資料は ここから ダウンロードできる。

5.感想
エンコーダ/デコーダの故障時は50円PICで換装できるが、RF処理を行っているCOBが故障した場合は別ICでの換装はかなりのコストが掛かりそうだし、このおもちゃに納められる程に小さく実装することが難しいと思う。
修理のコスト面を考えると、廉価に出回っている2.4GHzトランシーバモジュールで作り替えるのが良さそうだ。
それには下記の記事が参考になる。
2.4GHzラジコン修理事例(長崎)(トランシーバ等換装)
2.4GHzラジコン修理事例(諌早)(トランシーバ等換装)
  1. 2019/02/10(日) 14:25:31|
  2. レガシーラジコン
  3. | コメント:0

「DFPlayerMiniの制御」でDFプレーヤーからの応答を受信する(ソフトUARTの割込み受信)

【前振り】
先般製作した 「DFPlayerMiniの制御」 ではPICからDFプレーヤーへ一方的に制御コマンドを送って、DFプレーヤーからの応答は見ないでいた。トラック番号やホルダ番号を指定して再生させるにはそれで十分なのだが、指定したトラックやホルダが存在しないとかのエラーの検知や、予めメディア内のトラック数やホルダ数を把握して気の利いた制御を行うにはDFプレーヤーからの応答を受信する必要がある。

そのためには、赤外線リモコンからの受信とDFプレーヤーからの応答受信をコンカレントに実行する必要があり、UARTモジュールを内蔵していないデバイスでは実現が難しい。UARTモジュールを内蔵したマイコンで最廉価なのは以下があるが、10F322の価格の倍近くしている。ファームウェアを工夫することで 10F322 で何とかしたい。
12F1572 @80円(2019年秋月)
16F18313 @80円(2019年秋月)

そこで、UARTモジュールを内蔵していないデバイスで割込み受信のフィージビリティスタディをやってみることにした。

結果は、赤外線リモコンからの受信とDFプレーヤーからの応答受信とがコンカレントに実行でき、実用生が実証できた。
この方法はDFプレーヤーに限らず ソフトUARTでの割り込み受信 として一般的に利用できる。

【設計】
赤外線受信機能とUART受信機能をコンカレントに実行するにはどちらかを割り込みで対応する必要がある。どちらの機能が汎用性があるかと言えばUARTだ。いろんなファームウェアでの使用頻度が高いし、調歩同期の仕様は普遍的であるからだ。それに比べて赤外線はエンコードの種類が多くて、特におもちゃ修理では都度カスタマイズが必要なことが多い。それを割り込み処理でやるとすれば無用の労力を喰うことになる。それで、UART受信を割り込み処理で実現することとする。

UARTモジュールを内蔵したデバイスでは1バイトを受信する毎に割り込みさせて受信データを取得するのだが、シリアル通信をI/Oポートの入力信号として割り込みで取り扱うには、以下のようにする。

・スタートビットのエッジをIOC割り込みで拾う。
・1/2ビット巾後にタイマー割り込みで、スタートビットの中央で信号レベルをチェックする。
・以降は1ビット巾間隔のタイマー割り込みで、データビットとストップビットをサンプルする。

つまり、ビット単位で割り込み処理をさせる訳だ。

UARTの受信中は頻繁に割り込み処理が走るので、タスク処理で実行している赤外線受信処理にも工夫が必要だ。
赤外線信号のパルス幅の計測を簡易なポーリングループ回数のカウントで行うと、割り込み処理でのCPU時間の誤差が積もって行くので、デコードを誤ることになる。そのため、タイマーを用いた時間計測を行って、割り込み処理での誤差が積もらないようにする。今回の10F322では、TMR0を赤外線受信に、TMR2をUART受信に充てている。

【回路図と配線図】
DFPlayerMiniの制御Bタイプ(回路図)
DFPlayerMiniの制御Bタイプ(配線図1)
DFPlayerMiniの制御Bタイプ(配線図2)

【UART割込み受信の検証】
割込みタイミングの検証
DFPlayerMiniソフトUART割込み受信タイミング検証波形
ch1(赤)が非同期シリアル受信データで 0x55 (1と0が交互に並ぶ)。
ch2(黄)が割り込み処理ルーチンでポートにパルスを出力させたタイミング検証用の信号。
各ビットの中央でサンプルできていることを示している。

赤外線受信とのコンカレント実行の検証
DFプレーヤーからの非同期シリアルデータ
DFPlayerMini応答取得(受信データ)

ファームウェアで割り込み受信した結果の表示
DFPlayerMini応答取得(表示)
<>内に、受信した応答の0起算で3バイト目と6バイト目のデータを表示している。

リモコンの選局ボタンを素早く押して、DFプレーヤーからの応答を受信完了する前に次の操作を矢継ぎ早に指示し、そのときの動作ログを以下に示す。赤外線受信とDFプレーヤーとの送受信の処理、更にログ取得の処理が同時期に重なっても、それぞれの処理は正常に動作している。
DFPlayerMiniソフトUART割込み受信検証ログ

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

ソフトUARTの割込み受信を行うプロジェクトは DFPlayerB_322.X
  1. 2019/02/06(水) 15:49:56|
  2. 電子オルゴール+音声再生
  3. | コメント:0

PICプログラマーのバグ改修(AVRでEEPの読み込みができない)

PICプログラマーとフラッシュライターで、 「不用意に読み込みを行って既存のHEXファイルを上書きしてしまうのを防止する」 改善を行ったのだが、そのときに 「AVRのEEPが読み込めない」 というバグが混入してしまった。

そのときの改善方法は、読み込みファイル名を $.hex に固定する と言うことだった。しかし、AVRの 「読込み」 では、ファイル名の拡張子が eep ならEEPの読み込みと判断していたので、改善の結果、EEPからの読み込みが指示できなくなってしまっていた。

そこで、EEPの読み込みを指示するチェックボックスを設けて、それがチェックされていれば、読み込みファイル名を $.eep に固定することにした。

修正版は ここから ダウンロードできる。
入れ替えは PC側の制御ソフトの 「ISP」 だけでよい。フラッシュライターの 「EEPROM」 はAVRを対象としないので変更は無い。
  1. 2019/02/03(日) 09:11:44|
  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