データレコーダーのエミュレータを作ってみた (その6)

  • 2011/10/08(土) 17:16:49

以前の記事でzaks2525さんに、
「16X2 のLCDでファイル名さえ選べるものになればメチャクチャ実用的になりますね。 」
とコメント頂きました。
それから時間がかなり経過してしまいましたが一応完成です。

こちら。
ベースはATtiny45からATtiny861Aへ変更しました。
#Chanさんの作成されたものがベースです。いろいろソースから何からお借りしています。
#ありがとうございます。
マイクロSDに入っているwavファイルを再生し、ファイル名をLCDに表示できるようにしました。
改良したい点は多いですが、とりあえずwavの再生をもとにしたテープのエミュレータはベータ版として公開と考えます。
またテープに関するプロテクトや再生上の問題など、多くの点を「j80」作者のHAL_8999さんより情報いただきました。
本当にありがとうございます。

仕様、注意点、回路図、ソース、HEXなどは続きます。

まず仕様と注意点ですが、

音声出力はモノラルです。また今までのATtiny45のものと同様に出力が弱いのでアンプを使用することを推奨します。
#というか使用しないとロードできないと思います。

マイクロSDカードはFAT32のSDHCまで対応していますが、相性があるかもしれません。他の用途に使用していたカードを流用する場合は、一旦PC上でフォーマットしてから使用してください。

”wav”という名前のフォルダーがある場合はその中にあるファイルを、ない場合はルートフォルダーにあるファイルを再生します。ファイルを最後まで再生後、次のファイルを再生します。また、すべてのファイルを再生したら、先頭のファイルから再度再生します。

再生できるwavファイル自体は、リニアPCMのもので、8KHz〜48KHz、8もしくは16Bit、モノもしくはステレオで再生できるChanさんの作成されたプレイヤーをもとにしていますが、48KHz(もしくは最低でも44.1KHz)8ビットモノラル限定で使用してください。(理由は後述)
16bitであったり、他の周波数の場合は変換をお願いします。

プッシュスイッチは単純に次のファイルへスキップするものです。再生したいファイルを選ぶためには複数回押す必要があります。

LCDは3.3Vもしくは5V駆動するものを使用しました。後でも書きますが、VccとVddが物によって反対になっていることがあります。選択されたパーツの仕様を確認してもしピンが違う場合はそれに合わせて作成してください。
#間違って、速攻で新品のLCDを一個焼きましたorz。

LEDが回路上は付いていますが、デバッグ用に使ったものの名残です。なくても動作します。

remoteからのラインにジャンパとスイッチがありますが、手動でプレイ、ポーズを切り換えるためのものです。回路図を見てもらえばわかると思いますが、スイッチはremoteの有効、無効を切り換える物です。
ジャンパでスイッチで無効時にポーズにするか、プレイにするかを選択できます。
ちょっと分かりにくいかもしれませんが、一般的にはジャンパはオープン(つながない)で、スイッチを切り換えることでremoteがプレイ中でも、手動でポーズとプレイになります。

また、これはあくまで「データレコーダー」を置換するためのものです。
どういう事かというと、データレコーダーはポーズになった際にテープが若干先行するという動作をします。この部分をエミュレート(プレイからポーズに切り替わった際に、ある程度先に進む)しないと、ロード時にエラーになるテープが存在します。
#わかる人にはわかってもらえると思います。

先ほどwavは48KHz、8ビット、モノラルでと記載したのはこれが理由です。
#ホントは周波数、ビット、ステレオか?などで読み飛ばすバイト数を計算すればよいのでしょうが、面倒なのでやめましたw
#ソースあるので、改良できる方、お願いします。
そのwavであればおおよそ500msecほど先送りされるようにしました。また、44.1KHzであっても誤差が10%程度なので、500msecが450msecになる程度ですので、大丈夫と思います。

回路図はこちら。


左のがAVR部分、右のがAMPの回路です。
見辛くて申し訳ありません。
電源は基本5Vで、それを3.3V変換し、3.3VはSDやAVRに使用しています。
LCDは5Vのものでもいいですし、3.3Vのものでも問題ありません。
作成したものは秋月で購入した、3.3V動作できるSC1602BBWB-XA-LB-Gという型番です。
もう一度書きますが、LCDの電源部分に注意してください。
LCDを購入した際に付いてくるデータシートなど参考に、必ずVdd(5Vもしは3.3V)とVss(GND)は確認してください。

購入するとついてくるデータシートで確認したほうがいいとことをもうひとつ。
LCDの表示としてChaNさんのEZ-LCDを利用しました。
そのソースのhd44780.cにdelayなどを変更するところがあるので、使用したLCDのデータシートで一応確認してください。
#define    IF_DLY450
#define    LCD_ETIME_1   
#define    LCD_ETIME_2   
がそれです。
データシートのCommandsという記載の中にある、Execution Timeを見てください。
LCD_ETIME_1がClear Displayです。1.53msecだったので、1530とソースには記載されています。
LCD_ETIM_2がそのほかのものです。37usecだったので。37と設定しています。
またWrite Mode中に記載のあるEnable Pulse Widthをみてください。460となっていたので、IF_DLY450をPINB;4回にしてあります。
AVR自体の動作速度が固定なので、ほとんど問題にならないと思いますが、再生はされるのにLCDが表示されないなどの場合は、この辺の問題です。

回路図はバックライト付きのもので作成していますので、VR10Kで明るさを変えています。
またRESETが空いていますのでISPできるように回路図は書いてありますが、不要であればいりません。
アンプ部分はNJM386を利用した通常のアンプ回路そのままです。前回までのものと同じです。こちらは5Vで動作させています。

ソースとHEXはこちらです。例のごとく.txtの拡張子を削除して.zipとして展開してください。
通常のHEXはdatreclcd.hexです。
FUSEはLow, High, Ext の順で0xC1, 0xDD, 0x01ですので、忘れずにFUSEを設定してください。

で、実際の動作です。
LCDの表示ですが、SDが入っていないと、

こんな感じ。LEDが2回の点滅を繰り返します。

SDを挿入すると

このように表示され、LEDが1回点滅した後、


LEDは点灯したままになり、LCDには再生中のファイル名が表示されます。

この状態でremote端子で再生、ポーズがコントロールされますよ。


プッシュスイッチを押すと、次のファイルに進み、

表示が変わります。ちなみに長いファイル名は上の写真のような感じ。
#ホントは現在何%までデータをプレイしているか?などを表示したかったのですが、play中にLCDへデータを送るとdelayが必要なので音声が途切れてしまいました。
#そのためやめました。これも改良できる人はどうぞお願いします。
また先にも書きましたが、仕様としてremoteで停止時におおよそ500msec先送りされます。

それによって、


「ファンキーモンキー」がロードできました!


こんなかんじです。

再生中にププププっと周期的にノイズが入ることがあったりします。
おそらくSDからのタイミングが悪いのだと思うのですが、カードを出し入れしたり、一度電源を切って入れなおしたりすると直るので、深く追求してませんwすいません。

ATtinyでは私の能力的にこの辺りが限界です。
これ以上の機能(録音やデータから音声でプレイなど)にするためにはもうちょっと規模の大きいAVRが必要ですが、そうなってくると250KHzの高速PWMがなく、DACを利用して音声を出力しなければならなくなります。
部品点数や回路規模もちょっと大きくなるので、その辺はまた追々ということで。

またwavへの録音でいろいろと試してみましたが、確実なのはやはり一旦cmt8001を利用してcas+cmt形式へ変換し、それを元にpcm8001にてwavにするのがもっとも確実でした。
現在HAL_8999さんといろいろと情報交換させていただいていますが、cmt8001はかなりなレベルでの読み取り能力があり、生成されるcas形式にボーレートや特殊なフォーマットの情報などが記載されています。
それを元にpcm8001で変換した場合、まったく同一のwavファイルが綺麗に生成されます。
一般的にはこちらを利用した方がいいと思います。

一般的といったのは、「機動戦士ガンダム」などの途中に音声の入っているテープは当然変換できません。
こういったテープは丁寧にwavにするのがいいでしょう。

では

この記事に対するトラックバック

この記事のトラックバックURL

この記事に対するコメント

秘密のコメント

ブログ管理人への秘密コメントです

  • 投稿者: -
  • 2011/10/12(水) 15:36:10
  • [編集]

遠慮なくお願いします。

コメントありがとうございます。変更してみましたが、どうでしょうか?遠慮なく指摘していただけると助かります。
正直、まじめに回路など習ったりしたことがないのですw半田ごても結局は父親のものを見よう見真似で小さいころに始めただけです。
こんなのですが、よろしくお願いします。

この記事にコメントする

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