FC2ブログ

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

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

PIC16F1503で音声再生

【開発の意図】
大容量のSPIフラッシュが出回ってきたことで、鳴り物おもちゃの修理をPIC電子オルゴールでの換装ではなく全面的に音声再生で換装することが可能になった。

先般は音声再生に機能を絞って 「ATtiny13Aで音声再生」 を開発したが8ピンでは応用範囲が狭いので、14ピンで音声再生も開発しておくことにした。

現在(2018年10月)秋月で14ピンの1チップマイコンで最廉価なのはPIC16F1503(@80円)だ。AliExpressを見てもこれより安いのは見当たらない。100円以上ならPIC電子オルゴールが載せられるデバイスがあるので、それらを音声再生に絞って利用する意味はない。それで今回のターゲットは PIC16F1503 だけだ。


【設計】
①プログラムメモリが2kワードしかないので必要最小限の機能に絞るが、ポップノイズの抑止は実装する。

②内部オシレータが16MHzなので、PR2=255にすると周期は64usになってしまう。それで、PR2=127にして、PWM1DCHの下位7ビット+PWM1DCLの上位1ビットで8ビット分解能にする。

③PWM周期は32usとなり、TMR2のポストスケーラを1/4に設定して、128usのTMR2割り込みでデューティサイクルを更新する。4倍オーバーサンプリングになる。音声データは8kspsでサンプリング周期は125usであり若干の差異が生じるが、PWMステップ数を合わせ込むとPCMデータからデューティサイクルへの変換で計算誤差が生じるので、125usとの差異は許容範囲として受容する。

④動作は以下の流れとした。
・POR後にはSleepしている。
・トリガSWのオンで音声再生を開始する。
・再生が終了するとSleepする。
・再生中にトリガSWがオンされると再生を中止してSleepする。


【回路図】
PIC16F1503で音声再生回路図
16F1503はSDIがRC1に固定されていて、RC1は内部プルアップができないので、外部でプルアップ若しくはプルダウンする。

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



  1. 2018/10/20(土) 15:40:38|
  2. 音声再生・録音再生
  3. | コメント:0

ATtiny13Aで音声再生

【開発の意図】
音を出すおもちゃは殆どが音声再生でやっている。このようなおもちゃが故障したときに音声再生を汎用的な部品で換装しようとすると音声データを格納する大容量のメモリが必要になってコスト高になってしまう。そのため、メモリ容量が少なくて済む電子オルゴールで音楽を鳴らしたり、必要最小限に音声を切り詰めて修理をしてきた。救急車のような効果音も音符で表現して電子オルゴールで鳴らす工夫もしている。

ところが最近は大容量のSPIフラッシュメモリが安価に出回るようになり、先般、 PIC電子オルゴールの音声再生機能でSPIフラッシュメモリをサポート した。そうすると、おもちゃが元々やっているように音楽も音声再生でやればいい、という考えに戻る。音楽表現は電子オルゴールよりも格段に優れるし、面倒な音符データも作らずに済む。

電子オルゴールは実行時に波形発生の計算を行うので、ある程度の処理能力が必要だ。そのため、PIC電子オルゴールではターゲットデバイスを16F18xxや16F17xxのシリーズに限定している。しかし、音声再生だけならもっと安いCPUでも構わない。そこで、ポート数が5以上ありPWM機能を備えたデバイスで最廉価なATtiny13A(2018年秋月@50円)で音声再生を作る。これならW25Q64と組み合わせて100円以内で、8ビット8ksps、1024秒の音声再生が実現できる。


【設計】
ATtiny13AのPWMはデューティ値を0に設定しても1ステップ分はPWM出力が出てしまう。100%に設定すると出っ放しにはなる。これはデバイスの仕様なので受け入れるしかない。
0%にならないよりは100%にならない方がマシなので、ピン出力を反転出力にして、デューティ値を補数で設定することにした。

最初はPIC電子オルゴール並みに音声番号選択や再生終了時コールバックなどの機能を書いたのだが、プログラムメモリオーバとなり撃沈されてしまった。512ワードに過大な期待は禁物だ。それで、音声データすべてを再生する処理内容に変えて、おもちゃ固有の制御は個別に開発することとする。汎用性のある省電力Sleepのコードは含めている。そうするとプログラムメモリ使用率は44%にまで下がった。

動作は以下の流れとした。
・POR後にはSleepしている。
・トリガSWのオンで音声再生を開始する。
・再生が終了するとSleepする。
・再生中にトリガSWがオンされると再生を中止してSleepする。

また、ポートが1本しか余っていないので、あまり高機能な応用はできない。


【回路図】
ATtiny13Aで音声再生回路図

【再生音】
ATtiny13Aで音声再生
ミラーナの修理で使った音声を8ビット8kpsで再生した音だ。


【ダウンロード】
設計資料と開発プロジェクトは ここから ダウンロードできる。開発環境は AtmelStudio7。
  1. 2018/10/12(金) 14:03:12|
  2. 音声再生・録音再生
  3. | コメント:0

シリアルフラッシュROM(24/25)ライターの製作

先日は PICプログラマーで大容量SPIフラッシュをサポート したが、PICプログラマーから派生した I2CインタフェースEEPROM(24シリーズ)ライター でも大容量SPIフラッシュをサポートした。これで 「シリアルフラッシュROM(24/25)ライター」となった。


【外観】
シリアルフラッシュROMライターの製作外観説明


【回路図】

シリアルフラッシュROMライターの製作回路図1
シリアルフラッシュROMライターの製作回路図2


【配線図】
シリアルフラッシュROMライターの製作配線図


【操作】

シリアルフラッシュROMライターの製作画面

各リストボックスで該当するアイテムを選択して、「実行」をクリックすると読み書きが行われる。

メモリの容量をフルに読み書きすると長時間を要するので、実使用量に合わせて相当するW25Qxxの設定で読み書きを実行すれば時間短縮になる。


【設計】
・ポートの遣り繰り
①I2Cの信号線SCLとSDAをSPIのSCKとMOSIに兼用させる。
②SPIのMISOとSSは新たにポートを割り当てる。
③前作では空きポートを束ねてターゲットの電源供給に充てていたので、それから1本を剥ぎ取りSSに充てる。
④MISOにはMCLRを充てる。

・SPIの実装
①ISPのファームウェア「ISPpic16F1459」からソフトSPIの部分を移植する。
②SPIに割り当てたポートの初期設定は「CS(SS)をH」の実行機能と同時に実施することで、I2Cとの競合を避ける。

・ターゲットはPICプログラマーと同じとする。
①SPIフラッシュ
25AA320A
25AA640A
25AA128
25AA256
25AA512
25AA1024
SST25xx020
SST25xx040
SST25xx080
SST26xx016
SST26xx032
SST26xx064
W25Q16
W25Q32
W25Q64
W25Q128

②I2Cフラッシュ
24FC32A
24FC64
24FC128
24FC256
24FC512
24FC1025
24FC1026
AT24C1024B
CAT24M01
S-24CM01C


【ダウンロード】
詳細な製作資料とファームおよびPC側制御ソフトの開発プロジェクトは ここから ダウンロードできる。

PC側の制御ソフトはGUIとプログラマー制御の2つから成る。
①GUIを担うVBプロジェクト資材は「EEPROM」、実行ファイルは「EEPROM\bin\EEPROM.exe」
カレントディレクトリを 「EEPROM\bin」 に置いて起動すればよい。

②プログラマー制御を担うVCプロジェクト資材は「ISPdll」、DLLファイルは「ISPdll\Release\ISPdll.dll」

プログラマー側の制御ソフトは
③16F1454のファームウェアでMPLABXプロジェクトは 「ISPpic16F1454\apps\usb\device\cdc_basic\firmware\ISPpic16F1454.X」
USBドライバー組み込みに必要な inf と cat は 「ISPpic16F1454\Windows」 にある。
  1. 2018/10/04(木) 18:49:55|
  2. プログラマー
  3. | コメント:0

PICプログラマーの機能改善(大容量SPIフラッシュのサポート)

【前振り】
先日 PIC電子オルゴールVer5_7で大容量SPIフラッシュメモリ(W25Q64)をサポート したのだが、その機能を利用するには大容量SPIフラッシュメモリに音声データを書き込む手段が必要になる。24/25系ライターのCH341Aが安価(2018年10月AliExpressで$2以下)に出回っているのでそれを買えばいいのだが、それでは「製作の自己完結」が損なわれる。僕はこの考えを重視していて、USB接続のPICプログラマーの製作にあたり、その制御マイコンを書込みための鶏プラグラムの製作から始めている。
それで、今回もPICプログラマーで大容量SPIフラッシュの書き込みをサポートした。


【設計】
対象デバイスは、SST25xx、SST26xxなどの信号線や命令コード、処理シーケンスが25系の標準のものとする。
おもちゃ修理に利用可能な低価格で入手出来るW25Qxxは外せない。

おもちゃ修理が使用目的なので、書き込みプロテクトは一切サポートしない。

標準インタフェースのSPIフラッシュメモリは従来からサポートしているので、今回の機能改善はデバイステーブルの新規作成とチップ消去機能の追加だ。


【使い方】

プログラマー操作画面

各リストボックスで該当するアイテムを選択して、「実行」をクリックすると読み書きが行われる。

メモリの容量をフルに読み書きすると長時間を要するので、実使用量に合わせて相当するW25Qxxの設定で読み書きを実行すれば時間短縮になる。


【ダウンロード】
PICプログラマーの設計資料とソフトウェアは ここから ダウンロードできる。

PC側の制御ソフトはGUIとプログラマー制御の2つから成る。
①GUIを担うVBプロジェクトは「ISP\ISP\ISP.sln」、実行ファイルは「ISP\ISP\bin\ISP.exe」

②プログラマー制御を担うVCプロジェクトは「ISP\ISPdll\ISPdll\ISPdll.sln」、DLLファイルは「ISP\ISPdll\Release\ISPdll.dll」

プログラマー側の制御ソフトは
③18F14K50のファームウェアのディレクトリは「ISPpic18F14K50」、プロジェクトは「ISP\ISPpic18F14k50\apps\usb\device\cdc_basic\firmware\ISPpic18F14K50.X」、HEXファイルは「ISP\ISPpic18F14k50\apps\usb\device\cdc_basic\firmware\ISPpic18F14K50.X\dist\LPCUSBDK_18F14K50\production\ISPpic18F14K50.X.production.hex」

④16F1459のファームウェアのディレクトリは「ISPpic16F1459」、プロジェクトは「ISP\ISPpic16F1459\apps\usb\device\cdc_basic\firmware\ISPpic16F1459.X」、HEXファイルは「ISP\ISPpic16F1459\apps\usb\device\cdc_basic\firmware\ISPpic16F1459.X\dist\LPCUSBDK_16F1459\production\ISPpic16F1459.X.production.hex」

⑤16F1454のファームウェアのディレクトリは「ISPpic16F1454」、プロジェクトは「ISP\ISPpic16F1454\apps\usb\device\cdc_basic\firmware\ISPpic16F1454.X」、HEXファイルは「ISP\ISPpic16F1454\apps\usb\device\cdc_basic\firmware\ISPpic16F1454.X\dist\LPCUSBDK_16F1459\production\ISPpic16F1454.X.production.hex」

今回のバージョンアップは上記の①と②が更新されているので、PC側の制御ソフトだけを差し替えればよい。

PC側の制御ソフトは、OSへのインストールは必要なく、任意の1つのフォルダにISP.exeとISPdll.dllをコピーするだけで良い。
VisualStudio2008のランタイムが無いと言われたら、ビルゲイツの指示に従って別途インストールする。

PICプログラマーを始めて導入するときはUSBドライバーの登録が必要である。USBドライバー本体はWindows標準のものを使用する。infファイルとcatファイルは「PICプログラマー\ISP\ISPpic18F14k50\Windows」、「PICプログラマー\ISP\ISPpic16F1459\Windows」、「PICプログラマー\ISP\ISPpic16F1454\Windows」にある。

ハードウェアの設計書は「USB接続簡易共用プログラマー設計・回路図・配線図.xls」。
各デバイス毎のソケットアダプタ結線は、シート名「ソケット・・・」を参照。
  1. 2018/10/03(水) 20:50:07|
  2. プログラマー
  3. | コメント:0

PIC電子オルゴールVer5_7でWAVファイルからHEXファイルを生成するツールを製作

【前振り】
PIC電子オルゴールで扱う音声データは、WAVファイルを素にツールでアセンブラのソースコードを作って、それをMPLABXでbuildしてHEXファイルを生成していた。
先般、 PIC電子オルゴールVer5_7で大容量SPIフラッシュメモリ(W25Q64)をサポート したのだが、従来の手法では8MバイトものPCMデータを扱うことができない。それで、WAVファイルから直接インテルHEXファイルを生成するツールを作った。

【設計】
・要件
①処理対象のWAVファイルはリニアPCM形式のみとする。これ以外の形式のWAVファイルを扱う場合は、巷に出回っている気の利いたツールで事前にリニアPCM形式に変換しておくこととする。

②WAVファイルのch数・量子化ビット数・サンプリングレートを評価して、自動的にモノラル8ビット8kspsに相当するインテルHEXファイルを生成する。

③複数のWAVファイルを入力可能とする。入力の順に、HEXファイルの0番地から詰めて行く。

④音声データのダイナミックレンジを最大化する。

⑤orgelで使う音声データインデックスの定義に必要な vos_mac のスクリプトも生成する。各音声の開始アドレスと長さはこれを見れば判る。

・機能
//①リニアPCM形式のWAVファイルからインテルHEXファイルを生成する
//②WAVファイルのヘッダ情報を見て、自動的に、orgelで音声再生するためのモノラル8ビット8kspsのPCMデータに変換する
//③サンプリングレートやch数の変換では複数のサンプルの平均値を出力する
//④最大のダイナミックレンジになる(0x00~0xffに振る)ように加工する
//⑤複数ファイルを入力し、順に1個のインテルHEXファイルに出力する
//⑥上記⑤の処理で、入力ファイル毎にorgelの音声データ(SPIフラッシュ)のインデックスを設定するvos_macのスクリプトを出力する
//⑦16Mバイト分までのHEXファイルが生成可能

・入力パラメータ(起動パラメータ)
//P1:出力ファイル(インテルHEX)のパス名
//P2:出力ファイル(vos_macスクリプト)のパス名
//P3:入力ファイル(WAVファイルパス名リスト)のパス名

・WAVファイルパス名リストの例
sharin.wav
kirakiraomeme.wav
aidorumitai.wav
kyounooshare.wav
egaogasuteki.wav
kirarin.wav

・生成されたインテルHEXファイルの例
:020000040000FA
:100000007B906E8D895995816C985A89A25681870B
:10001000748D72807E877C737C828F6B8188847CF8
:100020006E91826D7D93805D94955E7F917B7687E6
:100030007D777F7F895984B44783956C95648196D9
:10004000638395666CAA617D837F885D9E745F9FE4
        ・
        ・
        ・
:1002500083FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A
:00000001FF

・生成された vos_macスクリプト の例
vos_mac 0x000000,0x0024de,8000 ;sharin.wav
vos_mac 0x0024de,0x004575,8000 ;kirakiraomeme.wav
vos_mac 0x006a53,0x0019ad,8000 ;aidorumitai.wav
vos_mac 0x008400,0x002cca,8000 ;kyounooshare.wav
vos_mac 0x00b0ca,0x001de2,8000 ;egaogasuteki.wav
vos_mac 0x00ceac,0x0033a5,8000 ;kirarin.wav

vos_macのパラメータは 音声データ開始アドレス、音声データ長さ、サンプリングレート[sps] となっているので、orgel以外への応用の場合にはこの値を参考にして欲しい。


【使い方のヒント】
①このツールは、入力されたWAVファイルのデータの最大値と最小値を調べて、ダイナミックレンジが最大となるようにデータを加工する。その計算誤差が少なくなるように、入力ファイルの量子化ビット数は落とさないで、このツールに入力するのがよい。

②WAVファイルのサンプリングレートが8kspsでない場合は複数のPCMデータを1つに纏めることにより8kspsに変換する。そのため、WAVファイルのサンプリングレートが8kspsの整数倍でない場合は変換誤差が生じる。これを避けるためには、事前にWAVファイルを8kspsにしておくとよい。


【開発環境】
VisualuStudio2008Express

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

プロジェクトのソリューションファイルは下記にある。
orgel5_7\tool\wav2hex\wav2hex.sln

実行例は下記にある。
orgel5_7\voice_Mirrorna
バッチファイルは wav2hex.bat
WAVファイルパスリストファイルは wavlist.txt
生成されたHEXファイルは W25Q64.hex
生成されたvos_macスクリプトは vos_mac.txt
  1. 2018/10/01(月) 08:25:15|
  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