2009年12月30日水曜日

B046 : uMP3 PLAYERの組み合わせデバッグ

今回は
  1. SDカードからデータを読み出す。
  2. 読み出したデータをVS1011eに書き込む。
  3. 上記動作前後にAT45DB161Dへの入出力を実行する。
  4. 上記動作前後にLCDへの入出力を実行する。
という組み合わせデバッグ。

このハードウェアはSPIづくし。
一連の動作を先日までに実装したドライバで行なうことになる。



まずは単機能毎のテスト。
VS1011e周辺のアナログ回路の動作も確認。

一応問題なさそう。


念のため波形も確認しておく。

次にVS1011eを使った再生。
これはSDカードから読み出したデータをVS1011eへ転送するというもの。

アプリケーションノートで再生方法について再度確認。
今回はvs1011e_play関数にストリーム読み出し関数のポインタを与えることで
自動的に読み込みと再生制御を行ってくれるように設計した。

再生してみるとイヤホンから音楽が流れた。
正直に嬉しい。


現段階はハードウェアチェック用ファームウェア。
ユーザ向けのアプリケーション用ファームウェアは別途設計することになる。

GW Instek GDS-1102Aのホスト上ソフトウェアの機能

フルスクリーンでオシロの画面を表示できる機能。
ちょっと面白そうなので試してみました。



ホストとはUSBで接続します。
GW Instek社から無償でダウンロードできるFreeWaveというソフトウェアを使うことで、簡単にフルスクリーンで波形を表示することができます。

当然解像度は変わりませんが、小さな画面で確認しづらいと感じたときや、例えば学校の授業でも使えるかもしれません。

VS1011eのドライバを書く

VLSI社のVS1011eのドライバを書く。
レジスタ全般を読めるようにして、いくつかのレジスタへの設定インターフェースを実装。

途中レジスタの書き込みや読み込み動作で怪しい挙動を示しているのを発見。
オシロで波形を見ていたらおかしな波形がMISOに出てきていてすぐに気づけた。
データシートを再度確認するとSPIのクロックがスペックを超えていた。



すぐにクロックを修正して、動作確認。
期待通りレジスタが正しく読めることを確認した。

AT45DB161Dのドライバを書く

AT45DB161DはAtmelから出ているSPIインターフェースを持つフラッシュロム。



2つのSRAMで構成されたバッファとメインのフラッシュロムから構成されている。
これが8ピンSOPで提供されているのだから使わない手はない。

xputs(PSTR("buffer1 write:\r\n"));
at45db161d_buffer1_write(0, 16, romtest_src);

xputs(PSTR("buffer1 read:\r\n"));
at45db161d_buffer1_read(0, 16, romtest_des);

xputs(PSTR("buffer1 to main memory with erase:\r\n"));
at45db161d_buffer1_to_main_memory_page_with_erase(0);

xputs(PSTR("main memory page to buffer1 transfer:\r\n"));
at45db161d_main_memory_page_to_buffer1_transfer(0);

xputs(PSTR("buffer1 read:\r\n"));
at45db161d_buffer1_read(0, 16, romtest_des);

xputs(PSTR("main memory page read:\r\n"));
at45db161d_main_memory_page_read(0, 0, 16, romtest_des);

at45db161d_main_memory_page_to_buffer1_compare(0);
at45db161d_status_register_read(&stat);
if ((stat & 0x40) == 0x00) {
xputs(PSTR("Verify successed.\r\n"));
} else {
xputs(PSTR("Verify failed!\r\n"));
}

NOKIA 6100とかNOKIA 6610と呼ばれている液晶モジュールについて

STNの液晶モジュールでSPIで制御できるというもの。
今回B046 : uMP3 PLAYERのために二つの取り扱い店から合計で7個購入した。
これに関して少し整理しておく。
  1. 外見が少し異なれば中身は大幅に違う。
  2. コネクタの取り扱いについて。
  3. バックライトの電圧について。
■外見が少し異なれば中身は大幅に違う。
二つの取り扱い店から購入したのだが、実際に制御しようと思った時にはまるのがこれ。
取り扱い店も正確な情報は把握していないと考えた方が良い。
調べて見ると少なくとも4つのコントローラがあるようだ。
  • EPSON社S1D15G00
  • EPSON社S1D15G10
  • LEADIS Technology社LDS176
  • PHILIPS社PCF8833
私が購入した7個のうち、コントローラのモデルが判明したのはPHILIPS社のPCF8833を持つであろう3個。その他はまだ確信が持てないので保留状態。

■コネクタの取り扱いについて
0.5[mm]ピッチ自体はそんなに難しいハンダ付けではないのだが、コネクタの形状に起因した難しさがある。フラックスを軽く塗ってハンダ付けしたところ、コネクタの溝にそってフラックスがハウジング全体に流れ込んでしまう。

また、取り外しや取り付けには細心の注意が必要。
乱暴に取り外そうものならLCD側のコネクタがパターンから離れたり、ハウジング内部のピン(極細)が変形してしまう。
これによって何より困るのが動かないときのデバッグ。
先にあげたコントローラが不明な事が重なった場合、一体何を見ているのかわからなくなる。

実際に最初に実装したコネクタは若干変形していてLCDの初期化に成功したり失敗したりしていた。こういう現象がデバッグ1台目で発生すると結構手間取ってしまうことがある。

■バックライトの電圧について
バックライトの端子に印可する電圧というのが示されているものの、これでは設計できない。
多くは+7Vという一瞬考えてしまう電圧が示されている。
購入したLCDの一つをバラバラにしてみたところ単なるチップLEDの直列回路のように見える。
これなら別に+7Vという電圧に拘らなくても順方向電圧x2と電流制限抵抗を考慮すれば良い。

以上3点が今回のプロジェクトで整理が必要と思ったところ。
機会があれば各LCDモジュールの写真を挙げて識別方法とそのライブラリを掲載したい。

2009年12月26日土曜日

GW Instek社のGDS-1102Aを購入。

数ヶ月前から検討していたオシロスコープを購入しました。
色々な選択肢があったのですが、現在の自分の位置と予算、そして必要なスペックを考慮して台湾GW Instek社のGDS-1102Aを選定。

RIGOL社やLeCroy社、そしてもちろんテクトロニクス社やアジレント社の物とも比較。
最終的にWaveJet 312も視野に入れていたのですが、このクラスはまた次のステップの時に。

今回は秋葉原の東洋計測器株式会社で購入。
とても感じの良いお店でした。
各社のエントリモデルから高級モデルまで実機を通電状態で展示してあります。
実際に物を見て決めたかったので非常に重宝しました。

スペックは100M[Hz]が2チャンネル。
他社のエントリモデルよりもメモリ長が長い(最大2Mポイント)のと、画面や筐体のデザインが気に入った点が購入の決め手となりました。

それでは少しだけ機能をご紹介しましょう。

画面は本体のキャプチャ機能を使って取得しています。
下記のように印刷に適した画面で取ることもできますし、


白黒反転をオフにすると見たままをとることができます。


上記画面を見てわかるとおり日本語表示にも対応。
更に英語やポルトガル語、韓国語や中国語も表示できるようです。

キャプチャ機能ですが、ただキャプチャできるだけでなく、以前とった画像と・・・


現在測定中の波形を・・・


重ねて表示する機能なんかも備えています。
この例では電源の立ち上がりを対策前と対策後で比較しているわけです。


そして決め手となったメモリ長を生かした例を挙げてみましょう。
これはSPIのクロックとデータをトリガでキャプチャした例です。
画面の左側にトリガポイント(アップエッジ)があります。


TIME/DIVノブを回して時間軸を拡大していきましょう。


どんどん拡大していきます。


見えてきましたね。


どんどんTIME/DIVを回します。


クロックも見えてきました。


現在25[us]/div.


10[us]/div.


ここまでくると何個のデータを送ったのか確認できます。


更に拡大・・・。


ここまで来るとデータも確認できます。


さすがにここまで拡大するとサンプリング点がはっきりわかるものの、トラブルシューティングのスタート地点としては悪くない。


最初の画面と下記の画面を見比べてわかるとおり、他社のエントリモデルではできそうでできない芸当ができるモデルになっています。


正確に言うとできるモデルはあるのですが、大手他社メーカでは値段が+10万円近くになります。
で、実際の製品はというと中国製のOEMだったりします。

結果的にブランドを気にせず自分の身の丈にあったものを選択したらこの機種になりました。
先日設計してあがってきた基板のデバッグ+ファームウェアのデバッグに使用していますが、今回の投資には満足しています。


以前は波形が見えないので暗中模索でした。
波形が見えるだけで次の行動への決断が早くなります。


先日の不可解なLCDの動作ですが、コマンドの発行は正しそうです。


といった具合にトラブルシュートの判断に役立っています。
以前は「ハード個体の可能性を疑いたい」状況でも確信が持てませんでした。
例えば「うーん。このコネクタの実装が怪しい。」と言っても、「ファームウェアの制御はどうだろう。」と言った具合です。

気になる波形はSDカードにどんどん蓄積しておきます。


こうしてフロントパネルのSDカードを取り出せば、すぐにパソコンに持ち出すこともできます。
何よりもオシロスコープから飛び出さないのが嬉しいです。
他社製品ではUSBマスストレージ対応だったりしますが、小さいストレージを選ばないと飛び出ますから。


生まれて初めて購入したオシロスコープ。
これをきっかけに、ハードウェア設計と実装のセンスを向上させます。


うーん。
何度見ても波形が見えるのは嬉しいです。


強いて欠点を挙げるとすると
  • テクトロニクス社のオシロのような蓋がない。
  • プローブをしまう機構がない。
いずれも収納に関することですが、この部分は値段相応の箇所と考えています。

2009年12月12日土曜日

B046 : uMP3PLAYERのLCDがやっと表示された

某所通信販売で購入した液晶。
nokiaの携帯電話部品ということらしい。

取り付け直後からトラブル発生。
基板とLCDの間にジェルを入れて固定したのだが、
曲がってしまったので取り付けなおそうと思って外したらコネクタがもげた。
部品の性質もあるだろうが、基板のパッドも小さい気がする。

半田付けすれば使えそうなので予備で購入してあったもう1つと交換。

ついでに気になっていたバックライトも見ておくことにした。
+7Vを印加すれば良いって言われて、わかるにはわかるけど気持ち悪い。
なんのことはないLEDが2個直列に配置されているだけのようだ。
これで納得。

販売元が主張するコントローラのデータシートを入手して実装してみるものの、
うんともすんとも言わない日が1週間ほど続く・・・。

何だか変なパターンが表示されるが、初期化ステップを変更しても何も変わらない。
明らかに何かおかしい。

この手の部品は市場に大量に流出しているので仕方なくウェブ上の調査も開始。
びっくりしたのは下記のサイト。


大量の互換品があるらしい。
おぉ。携帯電話だから供給リスクを最小限にしたいのだろうか。

色々調査するなかで行き着いた結論は、「販売元が主張するEPSON社製コントローラの互換品という説明は間違い」であるということ。
彼らの主張ではEPSON S1D15G10 compatibleだが、実際にはPhilips LDS176かあるいはPCF8833であるということ。 これらは非常に良く似た操作で制御できるが、実際動かないのだから互換とは言えない。彼らも市場にこれだけの「そっくりさん」が出ていることを知らないのかもしれない。

調査の結果を元に実装を修正。
わかってしまえばなんでもない。
無事にLCDコントローラを初期化できた。

同じようにはまる人がいると人類の時間が勿体無いので販売元にも連絡。
こういうのを乗り越えられるかどうか?というのは自分にとって大切になってくるだろう。

それにしてもひどいなぁ。

2009年12月7日月曜日

B046 : uMP3PLAYERの実装とデバッグ

ここ一週間での作業は以下のとおり。

まずは実装。
大きな部品から取り付け。
LCDコネクタ。
意外にも苦労します。
その理由はコネクタ形状にあり。
フラックスを塗っても半田がコネクタの溝に沿って流れてしまう。
ちょっと熱しすぎたので心配だ。
一応形にしてみたところ。
早速デバッグ環境を構築・・・と思ったらいきなりバグを発見。
+5Vというシンボルはここにしかない。
この回路は元々+5.0V系電源で設計されていたものを流用したものだが、
+3.3V系に設計変更した時に修正が漏れてしまった。
確認作業も甘かった。

この基板には入力電圧(+6.0V)と+3.3Vしか存在しない。
仕方がないのでUSBホストから供給される+5.0Vを利用することに。

でも本来これは正しくない。
USBホストに接続されていない時にはVCCIOに+3.3Vが印加され、VCCは0.0Vだからだ。
この時の動作はデータシートには書かれていないが、普通に考えて良くないだろう。

これは他の機能をデバッグするための暫定措置。
まぁ、こんなことでガックリ来ていては先に進めないのでこれはこれとして考えよう。