FC2ブログ

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

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

キーボードおもちゃの修理(マイコン換装)

本件は、 おもちゃの病院新津(新潟)様 の修理事例 であり、つつじが丘おもちゃ病院(当院)はファームウェアの開発を請け負った。
当記事には依頼元のおもちゃの病院新津(新潟)様から提供していただいた情報や資料が含まれている。

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本 の構成で利用することとした。

【発生音】
発声音のサンプルはこれ

【ダウンロード】

キーボードおもちゃ用ファームウェアの開発資材は ここから ダウンロードできる。
関連記事
スポンサーサイト
  1. 2018/03/20(火) 18:56:50|
  2. マイコン換装
  3. | コメント:10
<<ミミクリーペットの修理(ボイスレコーダー・チェンジャー換装)新バージョンの改善 | ホーム | PIC電子オルゴールVer5_7で(糸魚川)Dr.渡辺氏の曲目を追加>>

コメント

Re: YUUKI100_SIN14.asm について

鶴岡様
つつじが丘おもちゃ病院 大泉です。
ご連絡有難う御座いました。随分前からの間違いでした。他にもお気付きの点が御座いましたら、ご連絡いただければ有難いです。
  1. 2018/05/02(水) 20:29:51 |
  2. URL |
  3. 大泉茂幸 #-
  4. [ 編集 ]

YUUKI100_SIN14.asm について

お世話になっております。
その後も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 ;音符データ
  1. 2018/05/02(水) 11:55:04 |
  2. URL |
  3. 鶴岡美秋 #THCQVIZI
  4. [ 編集 ]

「キー検出に失敗」は誤りでした。

大泉様
お世話になっております。
オートパワーオフを曲の演奏時間より短くすると、演奏が途中で止まってしまうため、ちょっと勘違いしました。(演奏中は自動的にタイマーがリセットされるはずと思い込んでおりました。)
演奏の中断を避けるため、前回ご教示いただいた箇所に加えて、下記のような変更を行い、オートパワーオフ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台目を幼児のいるお母さん向けに制作しております(無償提供です)
  1. 2018/04/17(火) 06:59:08 |
  2. URL |
  3. 鶴岡美秋 #1tbb00Ds
  4. [ 編集 ]

Re: タイトルなし

鶴岡様
大泉です。

僕が提案したコードはWレジスタの退避回復が抜けていましたね。申し訳ありませんでした。

「キー検出に失敗する」のは判りません。
  1. 2018/04/15(日) 15:01:10 |
  2. URL |
  3. 大泉茂幸 #-
  4. [ 編集 ]

大泉様
ご連絡ありがとうございます。
下記のような書き換えでチャレンジしたのですが、
タイマーの時間は短くなるのですが、副作用としてキー検出に失敗するよう症状が現れてきます。


; clrf timer_h ;オートパワーオフタイマーをクリアする
movwf wk2
movlw 94 ;オートパワーオフタイマーを
movwf timer_h ; 初期化する
movfw wk2


はっきりしませんが、2分の設定以上なら、大丈夫そうなのですが・・
  1. 2018/04/15(日) 12:55:13 |
  2. URL |
  3. 鶴岡美秋 #-
  4. [ 編集 ]

Re: ダイソーの「音が鳴る お遊びピアノの改造をほぼ終了しました。

鶴岡様
大泉です。
「オートパワーオフタイマーを1分にする」は

clrf timer_h ;オートパワーオフタイマーをクリアする



movlw 47 ;オートパワーオフタイマーを
movwf timer_h ; 初期化する

に変更すればよいと思います。
  1. 2018/04/15(日) 11:17:00 |
  2. URL |
  3. 大泉茂幸 #-
  4. [ 編集 ]

ダイソーの「音が鳴る お遊びピアノの改造をほぼ終了しました。

お遊びピアノは鍵盤が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への値代入等ではうまくできませんでした。
  1. 2018/04/15(日) 10:42:30 |
  2. URL |
  3. 鶴岡美秋 #1tbb00Ds
  4. [ 編集 ]

Re: ダイソーのお遊びピアノの改造に着手しました。

鶴岡様
大泉です。
レポート有難う御座いました。
当方はPICkitを使っておりませんので、不具合に気が付きませんでした。
やはり「#」などの特殊な文字は避けた方が無難ですね。
  1. 2018/04/11(水) 21:54:26 |
  2. URL |
  3. 大泉茂幸 #-
  4. [ 編集 ]

ダイソーのお遊びピアノの改造に着手しました。

大泉様 

お世話になっております。

本サイトでご提供されております「キーボードおもちゃ用ファームウェアの開発資材」を利用させていただき、
おもちゃの修理ではなく、ダイソーの「音が鳴る お遊びピアノ」というおもちゃをキーボード&オルゴールに
改造することを思い立ちまして、試作を開始しました。

私が使っている統合開発環境は 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 の置換を行ったところ、回避できるようになりました。

 開発環境によるものと思われますが、また気が付いたことがあれば、レポートさせていただきます。
  1. 2018/04/11(水) 20:17:38 |
  2. URL |
  3. 鶴岡美秋 #-
  4. [ 編集 ]

ハローキティ・ブランドではなくても、同じ商品?

PIC換装の結果が楽しみです。キーボードは入力スイッチが多いので設計が大変だと拝察いたします。ご健闘をお祈りします。
つい最近、同じタイプのキーボードが入院したので、密かに(PIC換装に至ることを)期待したのですが、リード線の半田付けで完治退院は嬉しくもあり、半分は残念な気もします。
当方の診療記録は、URLをご参照願います。
  1. 2018/04/06(金) 22:51:41 |
  2. URL |
  3. Dr.わたなべ.M #-
  4. [ 編集 ]

コメントの投稿


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

プロフィール

大泉茂幸

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

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

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

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

カテゴリ

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

最新記事

最新コメント

月別アーカイブ

訪問者数

検索フォーム

RSSリンクの表示

リンク

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

ブロとも申請フォーム

この人とブロともになる

QRコード

QR