電子音量リモコン改修と、とりとめもない工作
フォトフレームプロジェクトでFPGAという最新技術に挑戦し続けたので、息抜きに赤外線リモコンの電子ボリュームを作って見た。しかしそれが一応完成したというのに、依然として元のプロジェクトや新しく買ったAlteraのFPGA教育ボード、DE0への制作意欲は戻らない。
所長はこれまでに何度も書いているように、生来の天邪鬼(あまのじゃく)、へそ曲がりである。人がやったことの後追いが嫌いで、わざわざ違うことをやりたがる。このあいだの雑誌付録(インターフェース誌2009年5月号)のARMプロセッサー、LPC2388のときもそうだった。あのChaNさんが次号に2章にわたって詳しい制作記事を書かれ、ソースコードまで提供されると、すっかりこの石の興味を失ってしまった。
こんどのDE0も危ない。すんさんの掲示板で、日頃お世話になっているshuji009さんやkugaさんが、AppleⅡクローンの制作を報告され、ソースコードが公表されると、あんなに意気込んでいたAppleⅡへの思いがいつのまにかしぼんでしまった。
気持ちが醒めたのには他にも理由がある。AppleⅡ復活の目的は、ロードランナー、チョップリフターなどの懐かしいゲームをもう一度動かすことだったのだが、どうも10年前の引越しで残してあったはずのフロッピー一式をすべて捨ててしまったらしく、探しているがどうしても見つからない。それ以来急に意欲が失せてしまったことも事実だ。
それはとにかく、ブログの更新にあまり日を空けるのは具合が悪い。まとまったことをしていなかったので脈絡がつかないのだが、備忘録として残すことにする。
高級電子ボリュームでもやっぱり音がなまる(12/10/2010)
PGA2311を使った音量リモコンの実装版が完成し、音を聞きこんでいる。残念ながらプリアンプとメインアンプの間にリモコンを入れるとどうしても音が変わる。ノイズもハムも全くしないが、音の輪郭がやはりごくわずかながらぼやけることは否めない。
並みの録音のCDくらいでは違いは分からないが、当研究所が所蔵する恐ろしく音の良い一昔前の高級アナログFMチューナー(L-01T、定価では15万以上した)では、放送ソースによって音が甘くなるのがわかる(生放送のスタジオでの環境音など)。薄皮一枚が耳についたくらいの差だが、それにしても人間の耳はたいしたものだ。
まあ、これは気にし出したらきりがない。イージーリスニングとHiFi(ハイファイ)とは本来両立しないものだ。どんな高級品でも入出力の差を全くゼロにすることは不可能だ。インピーダンスを揃えたり、RCAジャックを換えたり、ケーブルを短くすれば、少しは改善されるかも知れないが、これ以上の原音追求はやめておこう。いわゆる「音の蟻地獄」にはまるとえらいことになる。
ただ、リモコン電子ボリュームには、やり残していることがある。一時断念していた終了直前の音量レベルをEEPROMに記録する仕掛けである。現在は、変更5回ごとに1回、EEPROMに記憶させているが、どうもしっくり来ない。やはり、電源を切る直前の音量レベルに戻したい。
リセットICやコンデンサーを持ち出して仕掛けを作ろうとしたが、大掛かりになりそうで先送りしていた。リセットICで電源が切れたことが検知できるのは良いが、リセットICは電源が入って安定するまで一定時間(数百ms)リセットしつづけるのが本来の機能である。ループの中で、電源が切れたときと、立ち上がりのときで処理を分ける必要がある。
これを回避する方法が思いつかなかったのだが、何も難しく考えることはなかった。通常のループの中でこれを区別しないで、初期化のところで出力が1になるのを待っておれば良いのだ。どうせ、このPGA2311は100ms後でないと所定の動作を開始しない。そのためのウェイトまで入っている。
思いついた時の手の早さには自信がある。早速ブレッドボードで実験にとりかかる。必要な部品は、秋月で8ヶ¥200で買ったリセットIC(3.3V用 TCM809R)と、手持ちのショットキーバリヤーダイオード、100μFの電解コンデンサーである。いつものシール基板とミニ基板でブレッドボードに刺さるようにして実験した。リセットICは3.3V用を選んだ。本当は5V用の方が、動ける時間が長くなるが他にも使うことを考慮した。
UARTに出力するテストバージョンは問題なく動いた。100μFで、EEPROMに5回、470μFなら30回(バイト)以上、データを書き込める。最後の方は正しい値を書き込めていないようだが、こんなに長くは必要ない。1バイトで十分である。
BOD設定でさらに確実に(12/13/2010)
すんさんの掲示板を見ていてさらに有力な情報を見つけた。AVRプロセッサーのBOD(Brown Out Detect)設定である。電源が切れた後、プロセッサーはループし続けるが、電圧が低くなっていくときに不正な番地に飛ばない保証はない。BODはこれを防止する仕掛けで、これで安全にプロセッサーは停止する。今まで何に使うのかと思っていた機能がこういうときに役に立つとは思わなかった。
早速テストする。フューズビットを書き換え、1.8V以下でリセットする指定にした。よーし、UARTの最後の文字が暴れなくなった。念のためオシロで検証してみる。1.8V以上ある30~50msの間で正しくEEPROMに7バイト書き込めた。EEPROMは特に電源が安定していないとエラーが出るということで、電源電圧が低下していく中での動作を心配したが、1バイト程度なら全く問題ない。
本番機に実装する。バックアップコンデンサー、リセットICなどを配線する。ブレッドボードと本番機では電源が全く違うので、実装してからもオシロで過渡状況を調べる必要がある。よしよし、少なくとも10msはリセットICのリセット動作とBODの間で保証されている。EEPROMへの書き込みは以前実測して4ms以下なので十分だ。
ソフトと回路図の公開は迷ったが、みなさんからの批評や意見も聞きたくてあえて出すことにした(今のところ全く問題は起きていませんがリセットICの通常の使い方とは違う独自の方法です。自己責任でお使いください。また前回の回路図とソフトとは全く互換性がないので注意してください)。
ここに電源断を検知してEEPROMを記録するバージョンのソフトを置きます。
どうもフューズビットを間違えて書いてしまった(12/15/2010)
電源断によるEEPROM保存は、全く問題なく稼動した。しかし、BOD設定をしているうちにフューズビットの書き込みがずれたらしい。Tiny2313のひとつをAVRSPが認識しなくなった。
当研究所は、プログラムライターに凝る趣味がないので、手持ちのライターは一番愛用しているChaNさんのシリアルライターとAVRSP、それに同じUSB-ISPブリッジ、TADさんの雑誌付録のNECの78K0を使ったAVRISPのクローンくらいしか持っていない。
どのライターでも認識しない。BODを設定している間に、どうもリセットピンを無効にするフューズビットを間違えて設定してしまったようだ。まだ殆ど使っていないTiny2313ひとつが書き込み不能になってしまった。一ヶ¥100しかしないチップだが、動かないとなるとやはり気分は良くない。
気になると他のものに手が付かなくなる気質(たち)である。リセットピンを有効にするフューズビットを書き換えるのはパラレルプログラミングが必要だ。自分には関係ないと思っていたAVRのパラレルプログラミングをしなければならない羽目になった。
日頃、読み流していたAVRのプログラムライターの記事を改めて調べまわる。パラレルライターは、TADさんの亀の子方式の高電圧リセッターが一番簡単そうだ。ハンダ付けはさすがにやめてブレッドボードで作る。ブレッドボードにジャンパー18本余りをあてて亀の子の替わりをする。
しかし、何度か高電圧(12V)をかけて試みたが、Tiny2313は息を吹き返さなかった。動かなくなったのはフューズビットの書き損じではない別の原因なのかもしれない。ただ、これまでのライターはすべて純正ではなく互換ライターである。純正で確かめなくてその石を動かないと決め付けるのには少々気がとがめる。
最近は、秋月でもAtmelの純正ライターAVRISP mkⅡが安価(¥3000)で売られているようだが、どうせ純正品を買うなら、パラレルで書けるAtmelの純正ライターDragonを揃えておきたい。VersionUpして最近の石もサポートしているようなので、¥4700(DigiKey)出して買ってみようかとも思う。しかし、¥100で買える石の復旧(それも確実でない)に47倍の投資はいくら何でも割が合わない。とりあえずは潔く諦めることにする。
フォトリフレクターで遊ぶ(12/17/2010)
Tiny2313 1ヶを黄泉の世界に送って、また一気に気分が落ち込んだ。何をするにもやる気がなくなった。情けない性格だが、いつもこういうくだらないことで一喜一憂する。こういう時は、何か全く違うことをして気を紛らわせるしかない。そういうことなら以前秋月でフォトリフレクター(TPR-105F ¥50)を面白がって買ってあったことを思い出した。
フォトリフレクターは、ライントレーサーなどのロボットの位置センサーによく使われるが、買った動機は、脈拍計のセンサーとしてである。ネットをさまよっていて、指の毛細血管の血液の反射率で脈拍がとれるというしかけが面白くてたまたま秋月で買ってあった。
ブレッドボードでそのテストをする。ウェブサイトで見つけた回路は、オペアンプで増幅して指の血流を検知している。オシロで波形を出してみた。何とかそれらしい波形は取れるが、安定しない。1000倍近い増幅率を持ったアクティブLPFになっているのだが脈拍のとれる位置が難しい。市販の脈拍計はどうしているのだろうか。
波形は見えたが、これをどうするかは考えていない。もう少し安定して波形がでれば実装しても良いが、こんなに不安定では実用にはならない。
依然として、フォトフレームへの意欲は戻らない。このところ脈絡のないリサーチが続く。モーター制御にも少し関心がでてきた。いよいよ当研究所の電子工作の最後の大きな山、メカトロニクス、ロボットに向かいつつあるか。
JPEGライブラリー実装の道がついた(12/25/2010)
年末が近づき仕事が少し忙しくなると、皮肉なことに趣味の方の意欲も復活してきた。試験の前に急に小説が読みたくなる学生の頃と同じである。フォトフレームに戻る気力が戻ってきた。まず懸案の画像ファイルのJPEG化の方を考え始める。
JPEGライブラリの実装の準備をのろのろと始める。Eclipseに新しいプロジェクトを起こす。フォトフレームでFPGAにデータを送るSPIは時間にシビアなので、一旦、BMPファイルを作ったほうが安全かもしれない。DMAを使えば良さそうだがそう簡単ではない。やりたいことは沢山あるが、モデルになるソースコードはUNIXベースなので具体的に進めない。
思ったより難しい。前に分かりやすい記事があったと書いたが、UNIXの標準入出力を完全に理解しているわけではない。書かなければならないソースはARMベースである。具体的にFatFSの関数をどこに入れれば良いのか見当がつかない。「ねむい」さんや、「そら。」さんが、私も参考にしているこのサイトを参考に簡単に実装されたようだが、ここには具体的なソースコードが見当たらない。
ウェブを探し回って、ついに見つけた。このサイトのご主人は、昨年の雑誌(インターフェース誌)のARMコンテストで優勝された方で、ソースコード一式は何と、雑誌サイトのダウンロードページ(2010年6月号 MP3プレーヤ/フォトフレーム)にあった。
ソースを早速ダウンロードさせて貰って、調べ始める。うひゃー、大変だ。これはTOPPERS/JSPというOS下で動いているソースだ。こちらはOSのない、いわゆるBareMetalである。JPEGライブラリ移植のポイントは、ファイルアクセスとメモリハンドリングだ。OSが一番活躍するところである。OSのサービス関数を使われていたらお手上げである。最悪の場合はこちらも、このOSをインストールする必要がある。
恐る恐る、ソースコードを詳しく調べ始める。良かった。ファイルのオープンも、メモリハンドリングも、OSを使わず自前(ChaNさんのFatFSそのまま)でやられているようだ。しかし、JPEGライブラリの標準入力をつなぐユーザーインターフェース関数の中でFatFSの関数f_openが見つからない。おかしいな。どこでFatFSを動かしているのだろう。
思わぬところで発見した。JPEGライブラリーの別の関数の中で使われていた。このあたりは手付かずで利用されているのだとばかり思っていたが、構造上、どうしてもここに置くしかなかったようだ。このライブラリは移植性の高いソースだが、やはり全体を知る必要があるようだ。
メモリハンドリングも、TOPPERSの関数ではなく、自前のmallocだった。これで、BareMetalでもJPEGライブラリを移植する目処がたった。ほっと胸をなでおろす。そろそろ実装に入れる。ここしばらくは年賀状の準備や、年末の関西の法事などで手がつかないが、年明けには始められそうである。
| 固定リンク
| コメント (4)
| トラックバック (0)
最近のコメント