マイコン工作実験日記

Microcontroller を用いての工作、実験記録

ジャケット画像の表示

2009-10-31 16:42:27 | MP3プレーヤ
前回、ジャケット画像がJPEGでしまわれていることがわかったので、今回はPC上でこれをBMPに変換しておくことにより、再生中にジャケット画像を表示するようにしてみました。



画面左上に、画像表示用の領域を用意しておき、その右側に歌手/グループ名とアルバム名を表示するように配置してみました。上の例ではさほど気にならないのですが、背景が暗めだと表示全体が黒っぽく出てしますことが災いして、かなり見にくくなります。



背景が青の場合なんかも、かなり暗く見えて、何の画像なのかわからなくなってしまいます。なんとかしたいけど、いろいろとパラメータを調べて、調整するだけの気力も湧かないので、このまま放置かなぁ。

ジャケット画像を表示するには?

2009-10-27 23:35:16 | MP3プレーヤ
リモコンも使えるようになって、自分でも結構気に入ってきたMP3プレーヤです。そろそろ、次なる追加機能を考えようということで選択したのが、アルバムジャケットの表示機能です。せっかくQVGAという画面の広いLCDを使っていることですしね。

わたしはいつもWMP (Windows Media Player)を使って、CDからの取り込みをおこなっていますが、ジャケット画像がある場合には↓のようにフォルダにその画像が表示されます。



まずは、この仕掛けを調べてみました。フォルダ内を覘いてもMP3ファイルしかないので、最初はMP3ファイルに画像が埋め込まれているのかとおもったのですが、ID3タグを調べてもAPICタグは含まれていませんでした。そこで、もう一度フォルダの中を dir/as で確認してみると。。



はい、隠しファイルになっているようです。全部で4つのJPGファイルがありますが、この例では同じものが含まれているので実際にはサイズは2種類です。JPEG展開にlibjpegを使うとメモリ喰いそうなので、今回はJPEGを使うことは断念することにします。代わりに、手間ではありますがAlbumArtSma.jpg を手動でBMPに変換しておくことにし、これを表示する仕様に決めました。この画像はだいたい75 X 75ドットのようですので、QVGA液晶にサイズ変更することなくそのまま表示できます。

リモコンのノイズ対策

2009-10-23 19:29:57 | MP3プレーヤ
赤外線受信モジュールは、タイマのキャプチャ端子に直接つなげていたのですが、職場の蛍光灯の下だと、なんと毎秒2000回ほどの割り込みが発生していることが判明。これだけのノイズによる割り込みが生じても、リモコン信号として誤検出されることは無いので、実害はありません。しかし、いくらなんでもこれはチトまずいんではないかというわけで対策を施すことに。

そもそも、データ・シートには「電源ラインに100Ωと20μFのRCフィルタを取り付けることを推奨します」と書いてあったんですが、これまではその指示を無視して、ただ単にUSBからの5Vをつなげただけでパスコンすら入れていませんでした。

そこで、まずは試しに0.1μのパスコン入れてみました。これだけで、毎秒800回くらいに減りました。効果あるもんですねぇ。

続いて、データ・シートの指示どおり、100Ωと20μFを入れてみると。。。さらに半分の毎秒400回くらいになりました。これで、なんとか再び「目をつむる」ことができそうです。

比較のために自宅で再度実験してみると、日中の室内(日陰)ではまったく割り込み発生しません。蛍光灯を点けてみても、大丈夫。オン/オフの際に2回くらい発生する程度です。うーん、この違いはいったい何でしょうか? 考えられそうなことは。。
  1. 蛍光灯の種別の違い? 自宅では電球型の蛍光灯と、ふつうの机上スタンドの蛍光灯と試したんですが。。
  2. 蛍光灯の本数の違い。事務所環境では、蛍光灯の本数というか、設置数が多い。

あくまでも想像ですが、設置数が影響しているような気がします。それだけ、赤外線成分が多くなるし、インバータの影響も増えるとか? 

そして、最後に日中の室外(日向)でも実験してみると。。。毎秒、400回の割り込みが発生します。赤外線リモコンの受信が、こんなにも環境条件の影響を受けるものだとは知りませんでした。日光や蛍光灯の光線が直接入らないような向きにするだけで、かなり影響は減らせるので、そのように設置するのが基本ですね。

FMラジオ画面

2009-10-18 23:45:16 | MP3プレーヤ
先週の作業ですが、MP3プレーヤ画面だけでなくFMラジオ用画面も作りました。とは言っても、MP3プレーヤの時のボタン2つを流用しているだけなんですけど。。。周波数表示だけだと、あまりにも画面が寂しいので右肩に時刻表示も入れました。局名表示を入れてもいいかもしれません。



いちおう、ボタンをタッチすることで周波数の低い方、あるいは高い方に向かってシークして選局するようにしてあります。LCDの下側についているメニュー・アイコンをタッチすることで、時計表示、MP3プレーヤ画面、FMラジオ画面の3種類の機能を切り替えられます。



もちろん、リモコンからも左右ボタンを使って選局できます。機能選択には、ダッシュ+前進/後進ボタンを使うことにしました。写真の手前にあるのがダッシュボタンです。

アンテナはビニル線を使っているのですが、先日きなこにカジられた結果、短くなってしまいました。それいらい、ガクンと感度が落ちたように思われます。

音量調節機能

2009-10-16 07:01:34 | MP3プレーヤ
連休中に音量調節機能を入れました。スライダーで操作しようかとも思っていたのですが、リモコンでの操作のこともあるので、左右のボタンで10段階の調節としました。中央のバーは音量の表示だけ。



リモコンからは、前進/後進ボタンで音量調節です。もちろん再生操作もサポートせなばならないので、ボタン押下時間を3段階に分けて判断することで画面上の5つのボタンの機能を左右ボタン2つで提供することとしました。

右短クリック再生/一時停止のトグル
右中押し次の曲
右長押し次のアルバム
左短クリック再生中は一時停止。停止中は曲の始めに
左中押し前の曲
左長押し前のアルバム

ようやくとアルバム機能も入れました。

リモコンの前進/後進ボタンは、もちろん音量調節として機能します。

プレーヤの操作処理は、タッチパネルの操作ボタンによって生じるイベントで駆動するようにしています。リモコンの処理では、検出されたボタン信号とボタンが離されるまでに連続して信号が検出された回数から、対応するパネル操作ボタンを決定し、そのイベントに変換しているだけです。

けっこう、Q-STEERのリモコン気に入っています。

秋の新製品

2009-10-13 23:45:35 | OLIMEX
連休を使ってMP3プレーヤのソフト開発作業を進めたので、それなりの進捗があったのですが、その件については次回にでも書くこととして、きょうはOLIMEXです。

ずいぶんと久しぶりにOLIMEXの What's NEW?が更新されて、新製品が予告/紹介されています。

  • ARM-USB-TINY-HはFT2232Hを使ったJTAGのようです。相変わらずのケースが購買意欲を無くさせますが、3~5倍も速くなるのは魅力的かな? お値段据え置きのようですし。
  • LPC1766-STKは、すでにIARにODMされているものでしょうか。IARでは1768となっているんですが、写真のIARのボードを良く見ると、1766と描いてあったりします。わからん。
  • LPC3131-Hは、コーデックが載っています。ボタンさえつければ、とりあずMP3プレーヤになりますね。

他の新製品も近日中には、詳細がわかってくるのでしょう。楽しみです。

リモコン機能を追加する -- その2

2009-10-12 00:03:26 | MP3プレーヤ
リモコン機能のドライバ編です。

赤外線受信モジュールは、CAP0.0とCAP0.1端子の両方に接続してあります。受信モジュールからの信号は反転出力となっており、信号が検出できた期間だけLレベルが出力されます。そこで、次のようにしてLが出力される時間を計測してやることにしました。

  • CAP0.0で立下り検出して、CR0にタイマ値をロード
  • CAP0.1で立上がり検出して、CR1にタイマ値をロード
  • CAP0.1で立上がり検出時に割り込み生成


割り込み処理で、CR1 - CR0 を計算してやれば、Lレベルの時間が計れることになります。Q-STEERの信号は、このページで解説されているように、ヘッダーに続く6ビットで構成されていますので、これを割り込み処理の中で解析し、その結果を上位に通知することとしました。

簡単な実験結果の表示は次のようになりました。



ir_countが割り込み回数。ir_dataが最後に検出されたリモコンからのボタン信号です。そして、ir_gotがボタン信号として判別された回数。最初の表示の段階では、一度もリモコンのボタンを押していないのに800回も割り込みが入っています。1回のボタン信号の検出に必要な割り込み回数はヘッダと6ビットデータの合計7回ですから、けっこうノイズをたくさん拾って割り込みがかかっていることがわかります。信号の長さを確認して不正と判断したものは読み捨てているので、ボタンの検出は問題なくできてはいます。

ボタンを押し続けていると、繰り返し同じ信号が出力されます。ボタンが離されると停止信号が出てきます。同じ信号を受信した回数をカウントすることで、ボタンの長押しを判断することにしようと思います。

不要な割り込みの回数を減らしたいと思い、タイマのクロックを落としてみたりしたのですが、ほとんど変化なし。こんなにノイズ拾うものなのでしょうか?

リモコン機能を追加する -- その1

2009-10-09 22:19:12 | MP3プレーヤ
再生/停止程度の操作はタッチパネルでできるようになったMP3プレーヤですが、リモコン機能を追加することにしました。先週LPC2388の周辺機能で使っているものを洗い出しましたが、どうせならもう少しシャブリ尽くしてやろうと考えた次第です。

先月、簡単にIrDAの実験をしましたが、IrDAは仮想COMポート通信やファイル転送には向いていますが、リモコン用途には向いていないようです。以前から、SparkfunのNordic FOBがカッコイイなぁとは思っているのですが、たかがリモコンにnRF24を使っているので値段高すぎです。テレビのリモコンじゃデカ過ぎなので、何か小型でスマートなリモコンがないだろうかと思案しておりましたが、いいものがあったことを思い出しました。コイツ↓です。



昨年、DWMおまけ基板でQ-STEERリモコンを作りましたが、そのQ-STEERに付属していたリモコンです。これなら普通に38KHzで変調かけているだけですから、秋月の赤外線リモコン受信モジュールが使えます。その気になってきたら、このボタン構成だってプレーヤ向きに見えてきました。十字になっていないのは、ちょっと残念ですが、上下でボリューム、左右でPlay/Pause と Next/Prevという感じでしょうか。

と、いうわけで SPS-444-1を買ってきて付けてみました↓。秋月にはいくつもリモコン受信モージュールがありますが、どれも仕様的には同じようなものなので、どういうふうに使い分けたらいいのか、よくわかりません。とりあえず、150円とお値段が高い方が、ご利益もあるのではないかと期待して選んできました。



秋月のリモコン受信モジュールはいずれも電源、出力レベルが5V系になっていますが、LPC2388は5Vトレラントで動いてくれるので、タイマのキャプチャ端子(CAP0.0とCAP0.1)に直結です。Timer0は、これまでTOPPERSのシステムタイマに使っていたのですが、端子の都合上Timer0はリモコン受信に使うこととし、システムタイマは Timer1に移動させることにします。

ようやく足を上げた

2009-10-06 00:09:19 | MP3プレーヤ
先日動画で示したように、MP3プレーヤは起動すると時計として動くようにしてあるのですが、バッテリでのバックアップが無いために、起動の度ごとに日付/時刻の再設定が必要です。いいかげん面倒になってきたので、ようやくとバックアップ電池を取り付けることとしました。

みなさん、それぞれの方法で電池を取り付けられているようで、参考にさせていただきました。結果、電池フォルダとその取り付け方法についてはネムイさんに倣って、タカチのフォルダを両面テープで貼り付けて使うことにしました。ただし、面倒なのでダイオードは省略してVCCはつなげずに、VBATは常時電池駆動することにしました。

いざ27番ピンのVBAT端子の足上げ作業をやろうとしたところ、すでに各種端子や32Kクリスタルをとりつけた後であったため、とても作業しにくいことが判明。わたしの技量では足上げできそうもないので、秋葉の書泉ブックタワー2階のCQ出版コーナーに出かけて2枚目の基板を調達してきました。先月くらいまでは、5月号がまだ数冊平積みされて残っていた記憶があるのですが、きょうは本棚に2冊しか残っていませんでした。



無事、足上げと電池フォルダ取り付け作業が完了。めでたく時計の日時設定がバックアップされるようになりました。

忘れていたPWM

2009-10-03 17:34:17 | MP3プレーヤ
今頃になって、LCDの輝度制御をやっていなことに気が付きました。輝度を調節できるようにと考えPWM2をLCDのEN端子につながていたのですが、常にHレベルを出していただけでした。いちおうPWMデューティを変えてちょっと暗くしてみましたが、やはりアイコンの表示が黒っぽく出る症状には変化なし。

まぁ、いちおうPWMも使ってみたということで、現時点で使っているLPC2388の周辺機能を列挙してみると。。。

機能用途
UART0TOPPERS/JSPログ出力、ならびにデバック・コンソール
Timer0TOPPERS/JSP用タイマ
SSP0タッチパネル ADS7846
I2C1FMチューナ AR1010
I2C2コーデック TLV320AIC23B
I2Sコーデック TLV320AIC23B
PWM2LCD輝度制御
MCISDカード
USBホストUSBスピーカ
RTC日付、時刻表示
GPIOLCD表示

いろいろと使ってみたつもりでしたが、まだこんなもんでした。とてもじゃないけど、豊富な機能は使いきれそうもありません。現時点でRAMの総使用量は64KBを超えているので(もちろん削ることはできるのですが)、もはやEthernetは使うことはなさそうな予感。Ethernet用のRAM領域にはまだ残りがあるのですが、TCP/IP用のバッファが足りなくなりそうです。それよりも、PHYを追加するのが面倒ですし。