本件は、
おもちゃの病院新津(新潟)様 の修理事例 であり、つつじが丘おもちゃ病院(当院)はファームウェアの開発を請け負った。
当記事には依頼元のおもちゃの病院新津(新潟)様から提供していただいた情報や資料が含まれている。
1.患者
よくあるキーボードおもちゃだ。
2.症状
3.診察
依頼元の診察によるとCOBチップの不良とのこと。
4.治療
当院は故障したCOBチップをPICで換装するためのファームウェアの開発を請け負った。
【要件】
素のキーボードのおもちゃは多機能であるが、PIC電子オルゴールで実現できる範囲の検討を含めて、要件定義もお任せいただいた。
・鍵盤の操作で音階を演奏すること
・数種類の音色のバリエーションを持つこと
・自動演奏曲を持つこと
・数種類の効果音が出せること
・動作中はLEDをチカチカさせること
【設計】
①キーボードとオルゴールは定まった音程で音を出すところは似ていて、キーボードおもちゃの修理にPIC電子オルゴールを適用することはできそうだ。
②しかし、オルゴールは音符で表される長さ(音価)に従って音を出すが、キーボードでは人が鍵盤を押している間は音を出し、鍵盤を離すと音を止める必要がある。これを以下の処理方法で実現する。
・鍵盤が押されたら鍵盤に対応する曲を演奏開始する。
・曲は1個の音符でできていて、その音符を永久に演奏し続けるものにしておく。具体的には、無条件分岐を使って1個の音符を繰り返させる。さらにタイ修飾することで、音符の切れ目を殺す。
・鍵盤が離されたら演奏中断させる。具体的にはAPIのSONG_SEL()をパラメータ値を0としてコールする。
③鍵盤の数だけ曲を用意する。例えば37キーの場合は37曲になる。
④音色のバリエーションについては、矩形波で平坦なエンベロープはオルガン的な音色になる。ストリングは鋸波でエンベロープのアタックを若干長くとる。ピアノ音は生ピアノのサンプリング波形でエンベロープもピアノに合わせる。
⑤現行のPIC電子オルゴールでは曲に音色が固定されるので、3種類の音色を表現するには音程毎に3種類の曲を用意することになり、37キーでは111曲になる。収容曲数の上限は255なので実現は可能である。
⑥鍵盤での手動演奏と電子オルゴールでの自動演奏、それと、音符で表現できる効果音と音声再生での効果音も入れる。
⑦キーマトリクスの回路は、依頼元から以下の資料をいただいた。なお、作成途上のものであり、キーマトリクス部分のみを参考にして欲しいとのこと。
本ファームウェアでは、音色の切り替えや手動演奏/自動演奏/効果音の機能切り替えの操作も含めて、セレクト線6本×センス線8本 の構成で利用することとした。
【発生音】
発声音のサンプルはこれ 【ダウンロード】
キーボードおもちゃ用ファームウェアの開発資材は
ここから ダウンロードできる。
関連記事
スポンサーサイト
2018/03/20(火) 18:56:50 |
マイコン換装
| コメント:13
<<
ミミクリーペットの修理(ボイスレコーダー・チェンジャー換装)新バージョンの改善 |
ホーム |
PIC電子オルゴールVer5_7で(糸魚川)Dr.渡辺氏の曲目を追加 >>
今回、アンパンマンのキーボード修理に、使わせていただきました。(URL参照)
PIC換装で、本来の機能は縮小しますが、思いがけないメリットもあります。
最終仕上げは、お客さまからのリクエストにお応えして、オルゴール曲目と順番を入れ込むカスタムメイドが可能です。
せっかくなので、子どもたち、パパ・ママ、ご家族みんなで選曲して、「世界に一つだけの夢」を乗せたキーボードにして欲しいと願っています。
修理技術の向上は、誰のためなのか考え直す機会となりました。ありがとうございました。
2021/05/25(火) 18:19:11 |
URL |
ToyDr.わたなべ #9q2FTWbs
[ 編集 ]
曽根原様
大泉です。
このファームウェアは電子オルゴールの仕掛けを使って無理矢理キーボードに仕立てているところが判り辛いのですが、上手く応用していただいたそうで嬉しく思います。おもちゃ病院業界にマイコン換装の手法が浸透していくことを期待しています。
2019/07/13(土) 10:21:09 |
URL |
大泉茂幸 #-
[ 編集 ]
大阪市平野区のおもちゃ病院でボランティアをしています。
COBが故障と思われるプリキュアのキーボードの修理に、公開されているPICのプログラムを使わせていただきました。
修理不能で返すところでしたが、何とかなりました。
ありがとうございました。
2019/07/13(土) 08:45:34 |
URL |
曽根原 康樹 #GCA3nAmE
[ 編集 ]
鶴岡様
つつじが丘おもちゃ病院 大泉です。
ご連絡有難う御座いました。随分前からの間違いでした。他にもお気付きの点が御座いましたら、ご連絡いただければ有難いです。
2018/05/02(水) 20:29:51 |
URL |
大泉茂幸 #-
[ 編集 ]
お世話になっております。
その後も100kin楽器を制作中です。YUUKI100_SIN14.asm は、下記のような変更が必要なようですのでお知らせいたします。
<<オリジナル>>
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;勇気100%(SIN14)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TEMPO set 140 ;テンポ[4分音符/分]
KEYTRNS set 70 ;キートランスポート率[%]
include enve_PIANO.asm ;エンベロープデータ
include wave_PIANO_C4.asm ;音源データ
ON0_SMP set wave_PIANO_C4_smp ;パート0音源テーブルサンプル数
include wave_PIANO_C2.asm ;音源データ
ON1_SMP set wave_PIANO_C2_smp ;パート1音源テーブルサンプル数
include onpu_YUUKI100.asm ;音符データ
<<変更後>>
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;勇気100%(SIN14)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TEMPO set 140 ;テンポ[4分音符/分]
KEYTRNS set 70 ;キートランスポート率[%]
include enve_EXP.asm ;エンベロープデータ
include wave_SIN14.asm ;音源データ
ON0_SMP set wave_SIN14_smp ;パート0音源テーブルサンプル数
ON1_SMP set wave_SIN14_smp ;パート1音源テーブルサンプル数
include onpu_YUUKI100.asm ;音符データ
2018/05/02(水) 11:55:04 |
URL |
鶴岡美秋 #THCQVIZI
[ 編集 ]
大泉様
お世話になっております。
オートパワーオフを曲の演奏時間より短くすると、演奏が途中で止まってしまうため、ちょっと勘違いしました。(演奏中は自動的にタイマーがリセットされるはずと思い込んでおりました。)
演奏の中断を避けるため、前回ご教示いただいた箇所に加えて、下記のような変更を行い、オートパワーオフ10秒での正常動作を確認しました。
xorlw 1 ;自動演奏のときは
btfsc STATUS,Z ; ときは
; return ; 戻る
goto cb_koyuu50 ;timer_hの値セットへ
movlw 0 ;演奏を中止する
CALLAPI SONG_SEL
call clr_led ;追加:中止したときLEDを消灯するサブルーチン
return
;追加:動作がなければ10秒でSLEEPする
cb_koyuu50
banksel ORGEL_BANK ;自動演奏終了判断
movfw song_no
btfsc STATUS,Z
return
banksel KOYUU_BANK
movwf wk2 ; 演奏が途中で終了を防ぐ
movlw 8 ; 10秒で
movwf timer_h ; 初期化する
movfw wk2
return
ありがとうございました。
なお、ダイソーピアノの改造は好評でして、もっか2台目、3台目を幼児のいるお母さん向けに制作しております(無償提供です)
2018/04/17(火) 06:59:08 |
URL |
鶴岡美秋 #1tbb00Ds
[ 編集 ]
鶴岡様
大泉です。
僕が提案したコードはWレジスタの退避回復が抜けていましたね。申し訳ありませんでした。
「キー検出に失敗する」のは判りません。
2018/04/15(日) 15:01:10 |
URL |
大泉茂幸 #-
[ 編集 ]
大泉様
ご連絡ありがとうございます。
下記のような書き換えでチャレンジしたのですが、
タイマーの時間は短くなるのですが、副作用としてキー検出に失敗するよう症状が現れてきます。
; clrf timer_h ;オートパワーオフタイマーをクリアする
movwf wk2
movlw 94 ;オートパワーオフタイマーを
movwf timer_h ; 初期化する
movfw wk2
はっきりしませんが、2分の設定以上なら、大丈夫そうなのですが・・
2018/04/15(日) 12:55:13 |
URL |
鶴岡美秋 #-
[ 編集 ]
鶴岡様
大泉です。
「オートパワーオフタイマーを1分にする」は
clrf timer_h ;オートパワーオフタイマーをクリアする
を
movlw 47 ;オートパワーオフタイマーを
movwf timer_h ; 初期化する
に変更すればよいと思います。
2018/04/15(日) 11:17:00 |
URL |
大泉茂幸 #-
[ 編集 ]
お遊びピアノは鍵盤が13しかありませんし、SWもあと付けもしづらいです。
そこで、キーボードはピアノに限定し、1C~2Cまでの13音とし、オルゴールも13曲としました。8Ωのスピーカー付きですので、トランジスタ1個で電流増幅し、音量を確保しました。
気が付いたことをレポートします。
1)LED制御
KEYBOAD_18346.asm では、LED出力 はRA4,RA5であり、swapf 命令を使われておりますが、
100kin_piano_18346ChgPort.asm では、LED出力 はRA0,RA1,RA2としたので、2行コメントアウトし、
さらに、曲番に合わせてLED点灯させるため、最下位ビットを反転させる必要がありました。
;LED点滅
banksel ORGEL_BANK
movfw song_no ; 曲番号と
xorwf part0_onpu,W ; パート0の音高コードを
banksel KOYUU_BANK
; movwf led ; LED点滅パターンに
; swapf led,W ; して
;鶴岡挿入
xorlw b'00000001' ; RA0のデータ反転
banksel LATA
movwf LATA ; LEDへ出力する
出力ビット RA2 RA1 RA0 → RA2 RA1 RA0 (反転後)
ド (8) 0 0 1 → 0 0 0
ド#(9) 0 0 0 → 0 0 1
レ (10) 0 1 1 → 0 1 0
レ#(11) 0 1 0 → 0 1 1
2)オートパワーオフ
5.5分ではなく、1分くらいにしたかったのですが、timer_hへの値代入等ではうまくできませんでした。
2018/04/15(日) 10:42:30 |
URL |
鶴岡美秋 #1tbb00Ds
[ 編集 ]
鶴岡様
大泉です。
レポート有難う御座いました。
当方はPICkitを使っておりませんので、不具合に気が付きませんでした。
やはり「#」などの特殊な文字は避けた方が無難ですね。
2018/04/11(水) 21:54:26 |
URL |
大泉茂幸 #-
[ 編集 ]
大泉様
お世話になっております。
本サイトでご提供されております「キーボードおもちゃ用ファームウェアの開発資材」を利用させていただき、
おもちゃの修理ではなく、ダイソーの「音が鳴る お遊びピアノ」というおもちゃをキーボード&オルゴールに
改造することを思い立ちまして、試作を開始しました。
私が使っている統合開発環境は MPLAB X v4.15 、 mpasm(v5.77) です。
(先週まで進捗報告1)
ダウンロードさせていただいたプロジェクト、KEYBOARD_demo_18346.X を使ってみたところ、
①Clean and Build project (トンカチとほうきのアイコン)はエラーなく通り、hexファイルも生成されるのですが、
②Programer To Go PICkit3 (緑色の下向き矢印のアイコン)では、以下のようなメッセージとともに
Build に失敗してしまっておりました。
make -f nbproject/Makefile-default.mk SUBPROJECTS= .build-conf
make[1]: Entering directory 'C:/Users/USER/Desktop/100kin_piano/100kin_piano_demo_18346.X'
make -f nbproject/Makefile-default.mk dist/default/production/100kin_piano_demo_18346.X.production.hex
make[2]: Entering directory 'C:/Users/USER/Desktop/100kin_piano/100kin_piano_demo_18346.X'
make[2]: Leaving directory 'C:/Users/USER/Desktop/100kin_piano/100kin_piano_demo_18346.X'
nbproject/Makefile-default.mk:90: recipe for target '.build-conf' failed
make[1]: Leaving directory 'C:/Users/USER/Desktop/100kin_piano/100kin_piano_demo_18346.X'
nbproject/Makefile-impl.mk:39: recipe for target '.build-impl' failed
make[2]: *** No rule to make target 'C:/Users/USER/Desktop/100kin_piano/song_kb_piano_0F', needed by 'build/default/production/_ext/1472/100kin_piano_demo_18346.o'. Stop.
make[1]: *** [.build-conf] Error 2
make: *** [.build-impl] Error 2
BUILD FAILED (exit value 2, total time: 764ms)
③エラーを回避すべく試行を重ね、プロジェクトに含まれる
・song_kb_XXX_YY#.asm という名前のすべてファイル名を song_kb_XXX_YYs.asm (sは#(sharp)の頭文字)に変え、
・各song_kb_XXX_YY#.asmとKEYBOARD_demo_18346.asm 中に含まれるXX# という文字列も XXs にすべて変えました。
この #→s の置換により、②のエラーを生じることなく、Build でき、PICへの書き込みも行なえるようになり、
demoファームの動作検証がスムースに行えるようになりました。
④同様の現象は KEYBOARD_18346.X での生じておりましたので、#→s の置換を行ったところ、回避できるようになりました。
開発環境によるものと思われますが、また気が付いたことがあれば、レポートさせていただきます。
2018/04/11(水) 20:17:38 |
URL |
鶴岡美秋 #-
[ 編集 ]
PIC換装の結果が楽しみです。キーボードは入力スイッチが多いので設計が大変だと拝察いたします。ご健闘をお祈りします。
つい最近、同じタイプのキーボードが入院したので、密かに(PIC換装に至ることを)期待したのですが、リード線の半田付けで完治退院は嬉しくもあり、半分は残念な気もします。
当方の診療記録は、URLをご参照願います。
2018/04/06(金) 22:51:41 |
URL |
Dr.わたなべ.M #-
[ 編集 ]