VS10xx(7)
一応、まとめておこう。
1.データを送りつけるだけではだめだ、ということ。
2.データのビットレートにあわせて、転送タイミング、転送サイズを調整する必要がある。
3.VS10xx側のバッファは32byte程度しかない。
4.ストリームモードも、あまり使いやすくはない。
5.RC発振器の校正はちゃんとやろう(爆
・・・・・5.は冗談としても、思ったよりいろいろ考えないといけないようだ。
誰だよ、転送すりゃ鳴るなんて言ったのは!(笑
一応、まとめておこう。
1.データを送りつけるだけではだめだ、ということ。
2.データのビットレートにあわせて、転送タイミング、転送サイズを調整する必要がある。
3.VS10xx側のバッファは32byte程度しかない。
4.ストリームモードも、あまり使いやすくはない。
5.RC発振器の校正はちゃんとやろう(爆
・・・・・5.は冗談としても、思ったよりいろいろ考えないといけないようだ。
誰だよ、転送すりゃ鳴るなんて言ったのは!(笑
終わってしまう前に見てきました。
のだめカンタービレ 最終楽章(前編)
・・・・っていうのは、じつは1週間前の話。
原作を一通り読んでいたので、ストーリーもセリフも
だいたい想定内。
ドラマはまったく見てなかったけど、配役は・・・。
お話は、原作どおりで面白いのはいいとして。
昨今のドラマってのは、日本人に平気でカツラかぶせて外人の役やらすのか???
音声が日本語なのはいいとして、
カツラがカツラと分かるぐらい違和感ありまくりの格好ってのは
一体どーなのよ。
みんな、これを受け入れちゃったわけ?
・・・それとも、それすら笑う場所なのか?
あと、何箇所かモロに人形使ってるってのが分かるシーンが・・・・
VFXつかってんなら、ごまかすなり
カメラアングルをもう少し考えて撮れよ・・・
せっかくいい原作なのに
絵的に損してる。
安っぽく見える。
後編は一応見るつもりではいるけどさ・・・
ひとやま、越えました。
ずーっと長いこと・・・・最初にMMCを使った頃から・・・
課題だったマイコンからファイルシステムをアクセスする件。
・・・・・っていう導入は、前に書きましたね。ゑゑ。
この一週間の大部分を、シリアル通信の文字化け解消に費やしてしまった件。
AVRマイコンを内蔵のRC発振器で使うとき、
校正用の値を校正用のレジスタにセットすると
校正されるという・・・極当たり前のことなんですが。
その値がプログラムからは読めない場所にあって、
それを読める機能のあるライタソフトで読み出してプログラム内に埋め込むか
EEPROMにでも書いてそこから設定するか、なんですけど。
いつもなら、AVRStudioあたりのプログラマで
読み出して、その値をEEPROMの何番地に書く、という機能を使うのですが
以前作ったライタがいつの間にか古くなってて
ファームのアップデートも出来ず、結果的にはAVRStudioにおいてけぼり喰らってるので
えるむ/Chan さんのところのシリアルポート用のライタとそのソフト、
あとは、それをGUIで扱えるようにしたavrdude-GUIを使っています。
残念ながら、校正用の値をGUIで読むことも設定することもできないようで。。。
都合よく、手元にAVRDragonというJTAGICE-MkII互換機能をもった基板と
動作不良を疑われてペンディングになったVS1053bのユニバーサル基板が
なぜかJTAG仕様で作成されてたので、これにCPU変換基板を差し替えて
8MHz用の校正値を読んでプログラムに埋め込めばいいはず。
・・・・というのが、話の枕なんですね(ぉぃぉぃ
ことの始まりは、おそらく音が鳴り始めた頃に遡る。
転送速度とCPUクロックは依存関係にあるので、その辺の調整で、
とりあえず音が鳴ることが分かったとき辺りから、
シリアル通信によるデバックはほとんど必要なく、
設定値を変えてコンパイル→書き込み のシーケンスで作業は進められました。
ただ、ふとみると、文字化けしてるんです。
でも、まあ、デバックに使わないから放置してたんです。
FatFsを組み込むにあたって、まずはテストプログラムで様子を見ようと思い
サンプルをコンパイルして実行。
main関数から何まで、サンプルであれば文字化けもなく動いてる。
まあ、多少は文字化けしてましたけど。読めないほどではなかったので。
いざ再生プログラムに組み込んで動かすと、
案の定、動かない。
とりあえず、戻り値くらいは表示させないとダメかと思い、
メッセージを埋め込む。
そういえば、文字化けしてたね・・・・・。
実験段階では、ご丁寧に4MHz用の校正値を校正レジスタに入れてた。
実際には、当然最高速である8MHzで動かしたい。
8MHzも4MHzも、値にそんなに差はなかったから、そのままでもいいだろう・・・ぐらいに思ってたんですが
まさか、これが原因だとは・・・○| ̄|_
いろいろ試した挙句、「校正が何か悪さを?」と思い、コメントアウト。
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・直った・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
ちなみに、8MHz用の校正値を読み出して書いたら、また文字化け。
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
正直、疲れました。ゑゑ。
ひとやま、越えました。
ずーっと長いこと・・・・最初にMMCを使った頃から・・・
課題だったマイコンからファイルシステムをアクセスする件。
自作するほどの体力も気力もなくなりつつあるので、
この際、他人様の公開しているソースファイルを使ってでも、越えてしまいたかった。
とはいえ、最初にMMCを使った頃にはまだフリーでマイコンに組み込めるような
ファイルシステムは皆無だったことを考えれば、なんと恵まれた時代だろうか。
現実問題
ディスクフォーマットについて調べ始めると、かなり泥臭い部分が多いし
その解釈も拡張も各々が好き勝手にやった挙句、
「なんとなく、デファクトスタンダード(事実上の標準)?」という感じで広まっているだけに過ぎない。
HDDのフォーマットも、FDの記録密度も、なんら指針はないわけで。
あるのは、それこそ慣例のレベルでしかない。
※確かにISOでの規格化はあったかもしれないが、そんな表記よりも
「DOS/Vフォーマット済み」とか書くほうが分かりやすいことを考えると、
規格化されたこと自体あまり意味がない。
先頭セクタの値の意味も、FATの記録位置も、なにもかも。
ほとんどは、Microsoftが作ったFileAllocationTableという仕組みと
おそらくはIBM/MicrosoftがPC/AT用に書いたOSが、最初そうなっていた、というだけの
ブートセクタ、パーテーションテーブル、ソレにまつわる容量の限界。
よくもまあ、これだけ世の中的にMicrosoftに引きづられてるよなぁ・・・
昨今、FATでは限界があるので新たなフォーマットへ移行しつつあるわけで
逆に資料がどんどんなくなっていってしまうような仕組みなわけ。
だからこそ、今のうちに何とかしておきたかった。
今回のこの企画自体、FATが扱えなきゃなんともならないわけで。
フリーのFATファイルシステムとしては有名どころの、「FatFS」を
えるむ/Chanさんの所から持ってきて組み込んでみた。
その組み込みに実はこの1週間を費やしてしまった。
まあ、実際の作業時間は1日1~2時間しか取れなかったのだが
その大部分はFatFSとは無関係な、シリアル通信の文字化けと戦っていたというダメっぷり。
・・・・・ということで。とりあえず、愚痴終わり(え?えぇぇっ?
VS1011Eをちょっと脇において
ボタン電池を複数使ってこんなものを。
当初の予定では、
ボタン電池・・・正確には二酸化マンガンリチウム電池・・・を
並列にして3Vで容量を取れるようにしようと思ってたんですが
・・・・人に言うと
「リチウム電池を並列接続にはしない。というか、するな」
理由もいろいろ説明されて、そういうもんだと分かったので
4つをとりあえず直列にして、12V。それをステップダウンDC/DCコンバータで
目的の3V・・・入手の都合で3.3V・・・を精製。
使ってみた感じ、VS1011Eは普通に鳴らすぐらいは出来るようだ。
鳴らし続けて、どのくらい持つかな・・
まあ、実際にVS1101Eがどのくらい消費するのか調べるのが先かな。
前回、一応の結果として
「クロックが速すぎて、データが取れてない」と書いてはいますが、
そんな話は、とうてい納得できない。
VS1011E自体が24.576MHzを要求してるのに
ソレよりも遅いCPUからのシリアルクロックが速すぎるなんてことは
あり得ないですね。
じゃあ、真実としては、どういうことなのか。
デバイスがデータを再生(消費)する速度に対して、こちらが送りつける速度が
タイミング的に速すぎる。
だから、クロックを落とすとデータの消費と供給のタイミングが合うように見える。
結論としては
「それって、バッファを上書きしちゃってるんじゃない?」ってことに
気づくわけです。
ただ、それだけのことだorz
一ヶ月悩んで、さらにデバイスのダウングレードまでして
出た結論が「バッファの上書き」
・・・・・・・・・・・・・・・ま、まあ。途中で投げなかっただけでも(ぉ
さーて困ったぞ。
思いっきり原因不明ぢゃないですか。
思い当たる節は・・・まったくない。
ただ、時たま再生スピードが合ってないけど
それっぽく聞こえることがあったよーな・・・
Webを再度検索しなおすと、みんな最初は
「再生スピードがおかしい」という現象にあってるようだ。
・・・・・・・・・・・・・・・・!!!
まさかと思うが、クロックが速すぎる・・・・?
内蔵RC発振器の設定を見直し、4MHzを2MHzに。
・・・・・・鳴ったorz
をーゐ・・・こんなオチなのか?
データの転送速度が速すぎて、データを取りこぼしてただけ。
まぢですか・・・
そういえば、AVRでSDカードとVS1011Eで作ってる人のソースを見ると
毎回SPIモジュールを設定しなおしてるのがあったけど
それは、これが原因か?
とりあえず、クロックを8MHzに戻して、SPIのクロック設定を調整してみる。
CPUクロックの1/128設定で元データ通りの速度で再生できた。
今のところ、音楽データではないので真偽のほどは分からないが、
これで良しとしておこう。
分かってしまえば、完全脱力。
をれの、1ヶ月を返せぇぇぇぇぇぇぇ~~
そんな感じの顛末でした。
おしまい(を
勢い余って、グレードを下げることをあっさり決めた割に
この一週間は、発注してた基板が届くとあって
それどころではなかったのだが。
まあ、回路図はあっさりと書き上げて
部品だけはちょこちょこと買出しに行ってたわけです。
どうせ作り直すなら、MicroSDとFT232RLの基板も搭載しよう、ってことで。
基板到着後、一応MicroSDは実装。FT232RLはまだ部品が足りないけど。
会社に休業させられてる状態なので
時間は充分にあったはずなのに、なぜかまったく製作が進まないまま3連休突入。
土曜の夜に、大まかな配線図面を書いて
日曜の夜中に部品の固定だけ。
月曜の昼間に配線作業。
あーら。結構あっさり組めちゃったわね(ゐ
・・・単電源だとラクだねw
さてさて。
MicroSDの動作確認をとりあえず済ませて。
問題のVS1011E。
とりあえず、使ってるポートを変えているので修正。
その辺はまあ、問題ない。
しかし・・・・出てくる音は、前とまったく変わらずorz
なぜだ。。。(T_T)
実は、先月いっぱいいっぱい、VS1053bという
MP3デコーダICをいじってたんですが。
このIC,巷の情報を総合すると、
「データを転送し続ければ勝手に判断して再生してくれる」といわれるくらい
使い方は単純・・・らしいです。
・・・・が。
ハマりまくったわけです。
今頃、こうして記事書いてるってことは。
回路図の時点で、いくつか躓いてたんですが・・・
1.VS10xxシリーズは種類がいっぱいある。
電源なんて3.3Vonlyの単電源だとおもいこんでたのですが
このVS1053bは1.8Vと3.3Vを要求してくる。
2.とりあえず、で選んだCPUがATmega128
ほんと、手近にあったのを選んだのよ。
ソフトの資産もあったし、使いこなれてるし。
そしたら、Romが128KByteあるんだけど、コンパイラがどうにも。
サンプルで鳴らすデータを抱えなきゃならないのに、
あるサイズを超えるとデータ配列をコンパイルできない。
3.デバイスの電源電圧がマチマチだった
CPUは5Vで20MHzでフル回転したかったのに
VS1053bは3.3Vが限界電圧。
というか、その辺の仕様を斜め読みしかしてなかったので
恐らくVS1053bをひとつ、壊した(T_T)
そんなこんなで、ソフトを書いてたんですが。
CPUはとりあえず3.3V対応版を以前買って余らせてたのでそれを使う。
内臓の発振器つかって8MHzで動かす。
再生データはPCにあった適当なWAVファイルを変換して使う。
オシロスコープの波形も問題ない。
なのに、おかしな音しかならない。
かと思えば、電源投入直後だけは再生に成功(それでも再生速度がおかしい)するが
リセットや再投入するとまたおかしな音になる。
どうにもこうにも、煮詰まったまま年越し。
いろいろとソースファイルを探して回ったが、どれも処理自体は同じ。
原因が分からない。
どうすっぺえか。
思い余ってグレードを下げてVS1011Eで再度、ユニバーサル基板を組むことに。。。
作ったはいいが、実装する部品が揃っていないので
動作確認できるはずもないのですが。
とりあえず、工作のいらないものだけ先に。
一番左が、秋月で売ってるもの。
真ん中は前回作った基板。台湾製。
右の赤い基板が、今回の新作。
ぱっとみ、基板が赤い以外に・・・・気づく人は気づくと思いますが
ベタとランド間のクリアランスが、広がっています。
というか、前回のは狭すぎると思います(笑
穴の精度も、今回は問題なかったみたいなので
実用に耐えうるものになったと思うのですが。