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