« リニアーPCMプレーヤー2号機ついに完成 | トップページ | Xbeeワイヤレス電力ロガー子機(センサー)の実装 »

2009年10月16日 (金)

リニアPCMプレーヤー2号機のあとかたづけとソース公開

フューズビットを甘く見てはいけない(10/12/09)
 伊豆高原にある知人の別荘に誘われて2日間ほど留守をした。家に帰って自分が明らかな電子工作依存症になっていることを実感する。工作ルームに座り、目の前の細々とした電子部品や工具を手にすると、これまでの何となくもの足らない気分が解消されて不思議に落ち着いてしまう。困ったものである。

 それはさておき、久しぶりにウェブを覗いたら、驚いた。秋月電子が今プレーヤーに使っているAVRチップMega328Pを何と¥250 で売り出したという。今までの半額である。Mega328p Mega168はこのあいだまで¥400以上していたが、これにつられて¥230である。今人気のArduinoという開発ボードでAVRが売れ出したからだろう。この価格では他のショップも大変だ。

 我が家の部品箱を見たらMega328Pはストックが切れそうだ。これは早速買ってこなければなるまい。伊豆で、出来上がったばかりのプレーヤー2号機を自慢したら、また追加注文があって嬉しい悲鳴である。

 Olimexのプリント基板は、あと2枚で行き先が決まっている。こりゃあプリント基板も追加発注しなければならないか。まあ、それはともかく、この2号機はソースコードをまだ公開していない。パラレルのLCDをI2Cを使ったミニLCDにしただけだが、ミニLCDが持っているアイコンは全く使っていない。

 余り使えそうなアイコンがなかったこともあるが、少なくともポーズの時と演奏中の区別がつかないのは不便している。何かアイコンを表示するようにしてからソースを公開しようと考えていた。

 ストックの最後のまっさらのMega328Pをブレッドボードに入れて、フューズビットの設定から準備を始める。マニュアルに書き込んである所定のフューズビットをAVRspで定義する。フューズビットは、いつもChaNさんのAVRspをDOS窓で動かし設定している。原始的だけれど簡便で使いやすい。手馴れた作業である。(FL=11100111 FH=11010111)

 事もなく設定は終わった。続いてこれまでのファームを書き込み、動作確認する。おやあ、LCDのオープニングメッセージが出ない。このブレッドボードはXbeeなどのテストベンチと共用しているので、色々手が入っている。どこかがはずれたのかと、ジャンパーの接触を確かめるが、問題ない。AVRstudioのコンパイルメッセージもNO ERRORだ。ファームの書き込みも問題ない。

 やれやれ。少し日を空けるとこれだ。何が原因か勘が働かなくなる。しようがない、UARTを入れて中を見るのが一番早い。コメントアウトしたUARTのコードを復活させてコンパイルする。端末をつなぐ。あれれ、ここも動いていない。これはもっと基本的なところだ。オシロでミニLCDとのI2C接続を見ると47Hzのパルスが出ている。何だあ、これは?

 結局、原因はフューズビットだった。ハイビットのWDTON(ウォッチドッグタイマー:通常動作=1、常時動作=0)を0にしていた。ハイビットはこれまでいじる機会が少なく、今度はEEPROMを残しておくモードにするため設定したのだが、ひとつずれていたというお粗末である。WDTONを0にするとプログラムで何もしなければ、数msごとにリセットがかかる。これがI2Cでパルスが出た原因である。フューズビットをなめてはいけない。

ミニLCDのアイコンを動かすソースコードを公開(10/16/09)
 ソースコードの改修に入る。アイコンを表示するコードを本体に入れる。ついでに、てんこ盛りに入っていたデバッグ用のステートメントを整理する。コメントアウトされたデバッグ用のステートメントは不要なようで、意外に役立つもの(特に他人のソースを見るとき)だが、ちょっと多すぎる。

 適当なアイコンがなく迷ったが、演奏中断(ポーズ)は鍵マーク、連続演奏は上下矢印(連続するので)を選んでみた。この機能の追加は10ステップ以下ですんだので、一発で動いた。うむ、これまで演奏中断がわかりにくかったが、これで使いやすくなった。Photo

 次は、EAGLEの修正である。このあいだステレオフォンジャックのフットプリントをノギスで慎重に測って正確にした(部品ライブラリは前回の記事のlbrファイルに追加して更新)。誤配線も直した。回路図は、EAGLEを使っていない人にもわかるようにPDFファイルにし画面キャプチャーでJPEGにした。

 ところが、意外なところで作業が頓挫する。回路図のオペアンプの名前が適当なディバイスを選んだので所定の型番になっていない。これを直そうと色々やったところ、基板ファイルと回路図ファイルの不整合が起きて、元へ戻らなくなった。幻のオペアンプがボードファイルに生じ、基板に2つもオペアンプが出来てしまったのである。

 基板エディターで削除しようとすると、回路図エディターで消せと怒られる。回路図エディターには、そもそも、そのオペアンプは削除されて図上にない。困った。部品名を替えるために、前のオペアンプを削除し、新しいディバイスとして別のディバイスをADDしたのだが(これが正しく入ったことは、新しいディバイスがratsnestで出現している)、前のディバイスのパッケージが残ってしまっている。

 配線が残っているからかと思ってオペアンプ周りの結線をripupしていっても駄目。ripupを続けたら、電源周りの関係ないところまでなくなってしまい青くなる。これは困った。公開しようとした基板(ボード)ファイルが目茶目茶になってしまった。

 EAGLEを調べている余裕はない。仕方がないので、型番が違うオペアンプになっているが、正しい(誤配線を修正、フォンジャック修正)、EAGLEのボードファイルと回路図ファイル、それにAVRstudioのソース一式をzipファイルとし、画面にはオペアンプを正しい型番にした回路図を掲示することとした。 掲載した回路図に誤りがありました。図は修正済みのものです。大変失礼しました。4/16/2011)

Lpcm2_1023

 ついでに、SDカードリニアPCMプレーヤー2号機の仕様を以下にまとめてみた。
1号機に較べると小型化され、充電機能と演奏中断、連続演奏のアイコン表示が追加されている。

外形: 77×51×22ミリ(秋月 アクリルケース蝶番式[小] 117-TSS)

入力: SDカード(SDHCサポート)のルートディレクトリ上のWAVファイル

再生可能ファイル:16/22.05/44.1khz モノーラル/ステレオ リニアー8/16ビット

最大ファイル数: 255(カウンターを2バイトにすれば65535)

出力: ヘッドフォンステレオミニジャック、ボリュームによる音量調整

操作: スライド電源スイッチ、タクトスイッチ3ヶ(ファイルの前後選択と決定)

表示: 16字×2行 LCD(ストロベリーリナックス販売のミニLCDアイコン付き)

電源: 3.7Vリチウムバッテリー(任天堂DS-Lite 互換バッテリー)

充電: USBミニBコネクターより、USBケーブルより充電(5Vなら何でもOK)
    充電中はLEDが点灯し、満充電で消灯。充電中も使用可。

機能:

・通常演奏
ディレクトリの最初から、タクトスイッチでファイル名を前後スクロールさせて表示し、決定ボタンにより演奏開始。SDカード10個までの選択ファイルの位置を記憶し、カードを替えても常にその位置から表示(ファイルを書き換えると最初に戻る)。

・連続演奏
タクトスイッチの前後ボタンの同時押しにより、選択時のWAVファイルから連続再生し、ディレクトリの最後まで行くと最初に戻って演奏を続ける。中止は、再生中の決定ボタン長押し(1秒以上)。連続演奏時は「上下矢印」のアイコンが表示される。

・演奏中断
再生中に決定ボタン押下。再開は同じボタン押下。中断中は「錠前」のアイコン表示

・演奏中止
再生中に決定ボタン長押し(0.5秒以上)。ファイル表示は次のファイルに行く。

ここに、ソースコードの入ったAVRstudioのフォルダーmLPCM328V3と、EAGLEの基板図ファイル(.brd)、回路図ファイル(.sch)をひとまとめにしたzipファイルを置きます。いつものように、メインのファイル名は変わっていませんので注意してください。フォルダーの中には、デバッグ用のUART関係のファイルも入っています。コメントをはずして所定のソースファイル、ヘッダーファイルをAVRstudioにとりこめば、UARTの使用が可能になります。

「mLPCM2.zip」をダウンロード

|

« リニアーPCMプレーヤー2号機ついに完成 | トップページ | Xbeeワイヤレス電力ロガー子機(センサー)の実装 »

AVR」カテゴリの記事

コメント

jujurouさん ご連絡ありがとうございました。
サイトを見させていただきました。大変な力作ですね。私にはとてもここまで集中する気力がありません。あっちをかじり、こっちに寄り道の浮き草電子工作です(笑)。
折角のURLをコメントの中で公開されていませんが、何か理由でもあるのでしょうか。まあ、検索すればすぐに行き着けますけれど。
それはともかく、同好の士が増えるのは心強いものです。これからもよろしくお願いいたします。

投稿: がた老 | 2009年12月12日 (土) 01時20分

以前、SDメモリカードへのアクセスでアドバイスを頂いたものです。

このほど、SDメモリカード内のLPCMを再生するトランスポートが完成しましたので報告します。投稿者名のリンクに該当HPへのリンクを張りました。

作成過程はがた老さん同様にblogで公開しています。こういった 問題発生→原因追求→原因箇所断定→修正 の工程はなかなか公開されていないので大いに広めて行きたいですね(恥ずかしいミスの場合もありますが…)。

投稿: jujurou | 2009年12月11日 (金) 08時48分

無理強いしたようで申し訳ありません。でも、このブログを始めた時のそもそもの動機が、まさしく、「愛読者」さんのご指摘の部分をみなと共有したいというのが始まりでした。人が何に躓いて、どうやって切り抜けたかという過程はとても参考になります。失敗の研究と言うやつです。これからもせいぜい盛大にけつまづくことにしましょう(笑)。ありがとうございました。

投稿: がた老 | 2009年12月 7日 (月) 22時03分

中々何が面白いのか?というのを説明するのは難しいです。下手に説明して、変な誘導をしてしまうのは本意ではありません。が、ちょっとだけ書かせていただきます。

私は今まで電気(主に通信)関係の計画、設計積算および発注、施工監督、予算管理などを行ってきた関係で、数多くの失敗を自らもしていますし、他の人の失敗も見てきています。

その経験から、後日落ち着いてから書かれた「成功談」というのは、正直嘘くさいと感じます・・・美化しすぎといいますか。


リアルタイムでの失敗→原因追及→対処→やった!!
→あれ?やっぱ駄目→再度・・・・

という「はらはらどきどき」の過程があって始めて成功というものがあると思っていますし、その過程が本当に面白いです。

がた老さんが書かれているように、ミステリー(好きですけど)よりも面白い というのはその通りだと思います。

こんな説明しかできなくて申し訳ありませんが。
これからもよろしくお願いします。

投稿: 愛読者 | 2009年12月 6日 (日) 16時03分

>他にもデータシート内での矛盾がありちょっと悩ましいところです。

これは、有力な情報をありがとうございます。参考にさせていただきます。このチップの入力はI2Sフォーマットではないみたいですね。

>ブログ無茶苦茶面白いのでこれも続けてください!

 いやあ、これは嬉しいですね。今までの苦労が吹き飛びます。勿論続けますとも。
友人からは「長すぎる」と言われますが、自分のお粗末な失敗話をあえて公開しているのが面白いのでしょうかね。これからの参考のために、このあたりの話をもう少し頂けるとさらに嬉しいです。

投稿: がた老 | 2009年12月 5日 (土) 13時41分

レスありがとうございます。

>なお、Mega328の3.3Vでの20Mhzクロックは規格外

存じています。PCならオーバークロックはコア電圧を下げるのが基本ですがAVRでは一種、逆なので最初?となりました。

今、ブレッドボードを見ながら回路図を起こしているのですが、μPDの接続でデータシートとは異なる接続をしていたことを発見しました・・・何故こんなに綺麗になっているのか?因みに精機の接続にするとノイズ(ホワイトノイズの様)になります(1番ピンを3v3にで吊ると綺麗に鳴り、オープンあるいはGNDでノイズ)。
他にもデータシート内での矛盾がありちょっと悩ましいところです。
とこれを書いていたら、鈴商からBU9480Fが届きましたので、こちらでがた老さんそのままの回路にもチャレンジします。

ブログ無茶苦茶面白いのでこれも続けてください!

投稿: 愛読者 | 2009年12月 4日 (金) 11時30分

成功おめでとうございます。最初のコメントは、自己解決されたようでレスポンスをさぼっていました。すみません。TDA1543というチップは、デジタルオーディオの世界では有名なDACのようですね。実は、私もμPD6376を買ってあります。余裕が出来たら、BU9480Fの代わりに動かしてみようと思っていますが、なかなか時間がとれません。なお、Mega328の3.3Vでの20Mhzクロックは規格外ですので、ご注意(今まで4台以上作って全く問題は起きていませんが)。

投稿: がた老 | 2009年12月 4日 (金) 00時47分

TDA1543では、苦労しましたが、なんとか音が聞こえました。

μPD6376というコンバータを秋月で買ったところ、ソフトウェア改修せずにそのまま綺麗な音で鳴りました。

I2Sにも色々あるので、まだまだ勉強が必要だと感じた1週間でした。

投稿: 愛読者 | 2009年12月 3日 (木) 22時46分

がた老さん初めまして。

1つだけ教えてください。
外部クロックに使用しているクリスタルですが、何メガヘルツなんでしょうか?
と、聞こうと思ったらソースに20MHzと書かれてましたねorz。

DAコンバータは手持ちのTDA1543というのが見つかったのでそれで作ってみます。

投稿: 愛読者 | 2009年11月26日 (木) 20時09分

もっと詳しく見るべきでした、調べてみます。
有り難う御座いました。

投稿: ラジオ少年 | 2009年10月22日 (木) 18時21分

ストロベリーリナックスで販売されている、この大きさのLCDはこれ一種類しかありません(7032iはコントローラの型番です)。3行のように見えるのは1行目がアイコン(12ヶある)表示行だからです。このブログの前のほうの記事に詳しく出ています。記事一覧でお調べください。

投稿: がた老 | 2009年10月22日 (木) 17時11分

mLPCM2.ZIPをDLさせて頂きました。
これから部品集めをしようと思います。回路図でLCDのタイプがST7032Iとなっていますが、このブログの写真を見ますと、3行表示のLCDをお使いの様です。
ストローベリーリナックスで販売されているLCDだと思います。両方使える感じでは有りますが、どちらを使うべきか?アドバイスを頂きたくお願い致します。

投稿: ラジオ少年 | 2009年10月22日 (木) 11時45分

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック


この記事へのトラックバック一覧です: リニアPCMプレーヤー2号機のあとかたづけとソース公開:

« リニアーPCMプレーヤー2号機ついに完成 | トップページ | Xbeeワイヤレス電力ロガー子機(センサー)の実装 »