FC2ブログ

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

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

PIC電子オルゴールで12F1572と16F1579のサンプルプロジェクトを追加

【前振り】
昨年から公開ファイルには追加されていたのだが、公式のアナウンスはこれが初めてだ(と思う)。

157xはPWM機能が強化されたデバイスで、分解能はなんと16ビットだ。

でも 「そんなの関係ねぇ!」。 PIC電子オルゴールは音源が8ビットしかない。だから、16ピットPWMのメリットは無く、8ビット分解能でいいから半額にして欲しい。

それでも、PIC電子オルゴールでサポートしたのは、それなりに廉価だから。PIC電子オルゴールでは動作スピードとメモリ容量が重要だ。8ピン2kワードでは12F1572が最安(2019年秋月価格@80円)、8kワード20ピンでは16F1579が最安(2019年秋月価格@140円)。AliExpressには12F1572(SOP)が@30円台で出ている。

PIC電子オルゴールの開発当初は、当時最廉価だった12F1822(秋月@80円)を使っていたが、現在は(PIC電子オルゴールとしては)12F1572が代替品となる。


【設計】
PIC電子オルゴールのエンジン部は記述が汎用化されていて、デバイスの差異の影響を受けない(ように設計している)ので、PIC電子オルゴールでのサポートとは、固有処理部にデバイス固有の定義と初期化、それと必要なら割り込み処理のオンコーディング部を書くことだ。

今回のデバイスはPWM機能が強化されていて、PWM関連のレジスタの種類と設定内容が従来のデバイスと全く異なる。そのため、PWMモジュールの初期設定とPWM周期割り込み処理でのデューティ設定トリガの設定を新規に書いた。詳細はソースコードの該当部分を従来のデバイスと比較すれば理解し易い。


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

追加したプロジェクトは
 demo_PIC1572.X onsei_PIC1572.X onsei_PIC1572_I2C.X onsei_PIC1572_SD.X onsei_PIC1572_SPI.X
 demo_PIC1579.X onsei_PIC1579.X onsei_PIC1579_I2C.X onsei_PIC1579_SD.X onsei_PIC1579_SPI.X
スポンサーサイト



  1. 2019/06/24(月) 18:50:35|
  2. 電子オルゴール+音声再生
  3. | コメント:0

ミミクリーペット系おもちゃの基板換装用の完成基板の頒布(飯塚こわれたおもちゃの相談所)

ミミクリーペット系おもちゃの基板換装用の完成基板の頒布を始めた。
ミミクリーペット系おもちゃの基板換装用の完成基板の頒布(飯塚こわれたおもちゃの相談所)基板外観

と言っても、それは「つつじが丘おもちゃ病院」(当院)ではない。当院ではファームウェアを無償で提供しているだけで、ファームウェア書き込み済みマイコンや換装用の基板の頒布は行っていない。頒布を始めたのは 飯塚こわれたおもちゃの相談所 さんだ。上記の画像は飯塚こわれたおもちゃの相談所さんのブログ記事から転載したもの。

換装用基板の仕様や頒布の条件については、飯塚こわれたおもちゃの相談所さんのブログ記事 「オウム返し おもちゃ」修理用マイコン基板の頒布 を参照。
  1. 2019/06/17(月) 09:10:31|
  2. 音声再生・録音再生
  3. | コメント:0

「DFPlayerMiniの制御」のレジューム対応版の改善

DFPlayerMiniの制御車載外観2

【前振り】
「DFPlayerMiniの制御」の記事はしつこいくらいに出てくる。申し訳ないが、今回も。

おもちゃの修理も含めて人からの頼まれ物は納期があり、それなりに完成するのだが、自分の製作物はいつまでも工事中であり、完成することが無い。

【改善点】
「DFPlayerMiniの制御用ファームウェア」も少しずつ改善されてきていて、今回の改善点は、「ソフトUART送信のビットのタイミングをタイマーで計時するようにした」ことだ。

以前は、ビット巾をスピンループで待っていたため、割り込み処理が走行するとビット巾が延びて、通信エラーになる恐れがあった。そのため、アプリ処理の流れで、送信と割り込み処理が同時に起きないようにしていた。本末転倒の対処だった。

【設計】
正確に言うと改善後もスピンループであるのだが、ループの中でタイマーを見ることで、割り込み処理が走っても正確に計時する。

計時にはTMR0を使う。TMR0は赤外線受信にも使っているが、赤外線受信とDFプレーヤーへの送信は同時並行処理をしないので、TMR0を共用することができる。TMR2はDFプレーヤーからの割り込み受信に使用していて、これは非同期処理なのでTMR2の共用はできない。TMR1は、それを内蔵していないデバイスもあって、ファームウェアのポータビリティを確保するため敬遠した。

経時の方法はオーソドックスに、TMR0に (-経時時間) を設定し、TMR0のオーバフローを待つ。実際には、TMR0の更新時のインクリ抑止期間と関数呼び出しを含めたオーバヘッド分を加味してTMR0を設定する。

この処理は、DFプレーヤーへの送信処理とデバグ情報出力のソフトUARTに適用した。対象のターゲットデバイスは 12F1501 と 16F18313。10F322 はメモリが満杯で手入れができない状況である。

【改善結果】
ホルダ内トラック数のクエリと再生開始コマンド間を130ms空けていたが、30msの待ちに短縮できた。使用感としては変化には気付かない程度だが。

デバグ情報の採取の制約が少なくなったので、デバグはやり易くなった。こちらの方が僕としてはメリットがある。他の開発プロジェクトにも展開して行きたい。

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

プロジェクトは DFPlayer_1501.X と DFPlayer_18313.X
  1. 2019/06/16(日) 21:48:24|
  2. 電子オルゴール+音声再生
  3. | コメント:0

「DFPlayerMiniの制御」のレジューム対応版で12F1501をサポート

DFPlayerMiniの制御車載外観2

【前振り】
電源オフ/オンで動作状態を引き継ぐ「レジューム機能」をサポート したのだが、16F18313のEEPROMに引継情報を退避するのに43msも掛かるので、その間のVddを保持するのに1000uFもの大きな電解コンが必要だった。EEPROMの書き換えがバイト単位であることが書き換えに時間が掛かる原因になっている。それに対して、HEFはROW単位での書き換えなので、書き換え時間が短くて済む。それで、ターゲットデバイスを12F1501に替えて、引継情報の退避先をHEFにしてみた。

【設計】
12F1501のHEFの書き換え(消去+書き込み)に必要な時間はデータシートでは約4ms、実測では3.3msであった。16F18313のEEPROMの書き換え時間の1/10以下だ。書き換え時間にVddを保持するためのパスコンを小さくできる。実測による評価を行った結果、22uFとした。

Vddのパスコンを22uFとしたときの引継情報書き替えタイミングの実測結果
DFPlayerMiniの制御1501(HEF書替えタイミング検証)

引継情報の1バイトはHEF上では1ワードに対応する。また、HEFの書き換えはROW単位なので、12F1501のROWサイズの16ワードになるよう引継情報の構造体にはダミーエリアを設けておく。

//----------------------------------------------
//作業領域
//----------------------------------------------
static struct DF_CNT //DFプレーヤーの引継情報
{
unsigned char val1; //有効性検証バイト1
unsigned char df_mode; //DFプレーヤーの動作モード
// (0=SD内リピート、1=ホルダ内リピート、2=1トラックリピート)
unsigned char df_volume; //DFプレーヤーの音量設定値
unsigned char df_eq; //DFプレーヤーのイコライザ設定値
unsigned char df_pause; //DFプレーヤーのpause設定値(0=停止中、1=再生中)
unsigned char df_hld_no; //DFプレーヤーのホルダ番号
unsigned char df_trk_no; //DFプレーヤーのホルダ内トラック番号
unsigned char dummy[8]; //ROWを埋めるためのダミー
unsigned char val2; //有効性検証バイト2
} df_cnt;

#define HEF_ADR 0x3f0 //HEFのワードアドレス

//----------------------------------------------
//HEF領域
//----------------------------------------------
const struct DF_CNT HEF@HEF_ADR={0xff,0xff}; //DFプレーヤーの引継情報の初期値

上記のようにHEF領域を確保しておけば、該当するHEFの領域にプログラムコードが配置されることを防止できる。リンカーコマンドやスクリプトで領域を確保するより、簡便でプログラムの見通しが良い。

12F1501はUARTモジュールを内蔵していないので、DFプレーヤーからの受信は、ソフトUARTの割込み処理で実装する。

【回路図と配線図】

DFPlayerMiniの制御1501(回路図)

DFPlayerMiniの制御1501(配線図1)
DFPlayerMiniの制御1501(配線図2)


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

プロジェクトは DFPlayer_1501.X

【感想】
これからは、EEPROMよりも書き換え時間が短かいHEFを利用するのがよさそうだ。
  1. 2019/06/08(土) 21:18:23|
  2. 電子オルゴール+音声再生
  3. | コメント:0

「DFPlayerMiniの制御」で操作性を改善(レジューム機能の改善)

DFPlayerMiniの制御車載外観2

【前振り】
一昨日行った 「DFPlayerMiniの制御」で操作性を改善(レジューム機能)」 は、EEPROMへの引継情報の退避が頻繁に発生して宜しくない。書き込み許容回数が1日27回じゃ少な過ぎる。そう思いながら作ったのだが、やはり宜しくない。そこで、電源オフのときにだけ退避するように、今になって真面目に取り組むことにした。

【設計】
電源がオフされても、引継情報を退避する時間はVddが保持されるように、電源からショットキーを介してVddを供給し、Vddには大きな電解コンを設置しておく。

Vddを抵抗分圧してコンパレータに入れて、FVRの1.024Vと比較することで、Vddが低下したことを検知する。

EEPROMへの書込み時間は5ms掛かるので8バイトの書き込みには40ms掛かる。実測による評価を行った結果、330uFとした。

Vddのパスコンを330uFとしたときの引継情報書き替えタイミングの実測結果
DFPlayerMiniの制御18313(EEP書替えタイミング検証)

【回路図と配線図】

DFPlayerMiniの制御18313(回路図)

DFPlayerMiniの制御18313(配線図1)
DFPlayerMiniの制御18313(配線図2)
Vddのパスコン330uFは基板には載せていない。


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

プロジェクトは DFPlayer_18313.X

【課題】
EEPROMへの書込みはバイト単位なので、引継情報のバイト数だけ時間が掛かる。そのため、Vddを保持する電解コンに大きなものが必要になる。そこで、退避先をHEFにすれば、ROW単位の消去書込みになるので、退避時間を短くできると思う。
  1. 2019/06/07(金) 19:16:21|
  2. 電子オルゴール+音声再生
  3. | コメント:0

「DFPlayerMiniの制御」で操作性を改善(レジューム機能)

DFPlayerMiniの制御車載外観2

【前振り】
以前に作ったDFプレーヤー は車載で使っているのだが、車のキーONをするたびに再生開始の操作をするのが煩わしくなってきた。それで、キーON時には、キーOFFしたときの曲を自動的に再生開始するようにした。

【設計】
動作状態が変わる都度、管理情報をEEPROMに退避する。
POR時にEEPROMから管理情報を回復して、DFプレーヤを前回動作時の状態に設定する。
PAUSE状態だったときは、再生開始しない。
電源断を挟んで引き継ぐ情報は以下の通り。
・リピートモード(SD内リピート/ホルダ内リピート/1曲リピート)
・音量設定
・イコライザ設定
・PAUSE状態
・ホルダ番号
・トラック番号
ターゲットデバイスはEEPROMを持つものなら何でもよいので、廉価な16F18313を採用した。

EEPROMの書き替え耐力は100k回なので、10年間毎日使うとすると1日当たりの書き替え許容回数は 100k/10年/365日=27回 しかない。そのため、できるだけ永く使えるように、引継情報の書き換えは再生終了時とPAUSE操作時のみとした。ホルダとトラックの選択、音量、イコライザの変更は再生が終了するかPAUSEが操作されるまで引継情報に反映されないことになるが、許容することにする。

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


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

プロジェクトは DFPlayer_18313.X
  1. 2019/06/05(水) 21:04:18|
  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