2011/01/30

MVA-TFT液晶モジュールのテスト

題名の通り、aitendoで購入した液晶モジュールS95517-A035のテストを行いました。

下の写真にある通り、テストにはPSoC3テストボードを使用しています。
テストの様子。右下に見えるのがコントロールを担うPSoC3
この液晶モジュールを動かすこと自体は、aitendoで配布されているAVR用のサンプルコードをPSoC3に移植すればよいだけなので、それほど難しくありませんでした。
(と、書いていますが、Readピンの初期レベルをHにするのを忘れていたため1発では動いていません)

初期の実験では、PSoC3の8051コアを限界に近い67MHzで動かしていたにもかかわらず、1画面を描画するのに1秒程度かかってしまい、計測データの表示に使うにはちょっと遅すぎました。
単に高速なマイコンを使ってしまうのが最も簡単な解決策ですが、それほど複雑な画面表示をするわけではないのに、高性能なマイコンを使うのはもったいない、ということで、機能をある程度限定し、PSoC3のモジュールを使うことで、表示の高速化を試みました。


2色限定で高速表示を行うためのPSoC3のモジュール群。右半分は色を指定するための、左半分はデータを書き込むためのモジュール 
この液晶モジュールは、16bitの色情報を解像度の320*480回送り込むことで1画面の表示を行います。しかし、今回の目的は計器の表示パネルなので、ある背景色の上に特定の色で文字や図形を描画できれば十分で、16bitカラーをフルに使うことはないと考えられます。

そこで、上のモジュール群の右半分を使い、色情報をレジスタに書き込む値で固定してしまい、ある点を表示する場合(AND群に1入力)にはその色がポートに出力され、表示しない場合(AND群に0入力)には黒が出力されるようにしています。
(ANDを他の論理演算に置き換えれば任意の2色の切り替えができると思います)

また、このような方法をとると、点ひとつを色情報なしの1bitで表すことができるため、プログラム上では8点を1バイトに割り当てています。
そのため、1バイトの各ビット情報を順次右側に送り込む必要があるのですが、これはまさしくシフトレジスタの仕事です。
上のモジュール群の左半分では、シフトレジスタが含まれるSPIモジュールを使い、プログラムから送り込まれる1バイトの値をビットに分解し、右側のモジュールに送り込んでいます。
それと同時に、SPIモジュールのクロック出力で液晶モジュールのWriteピンも制御しているので、プログラム側が行うことは、単に表示データをROMから送り込むことだけです。
(まだ実装していませんが、ROMからSPIモジュールへのデータ転送はDMAを使ってCPUを介さずに行えるので、さらにCPUの仕事を減らすこともできます。)


このモジュール群を使うことで、1画面を表示するのにかかる時間は0.1秒以下にまで短縮することができました。これならば、データ計測やSDカード書き込みなど、表示以外の機能にも十分なリソースを割くことができます。

今後は、この液晶モジュールのサイズに合わせて、実機に搭載する計測ボードの設計を行うつもりです。

2011/01/27

PSoC3の書き込み(解決編)

昨年末に記事にしたPSoC3の書き込みの問題ですが、Cypress社と連絡を取って解決することができました。

Cypress社への連絡

Cypress社に技術的な質問をする場合には、CypressのwebページからMy Account->My Support CaseとたどってTechnical SupportにMy Caseを作成する手があります。
今回はここを利用して相談しました。

最初の書き込みをしてすぐに回答があり、3日ほどでMiniProg Rev.7を送っていただけることになりました。それから10日ほどでMiniProg3が発送され、その後数日で届きました。
届いたMiniProg3を使ってPower Cycle Modeで書き込んでみると、あっさり書き込めました。
連絡を取ってから20日ほどで問題が解決したことになります。

MiniProg3 Rev.7。通常のMiniProg3と見分けるための赤いシールが貼ってある


問題はどこにあったか?

前回の記事にも書いたとおり、問題はPower Cycle Modeでの書き込みができないことに尽きます。
その原因としては、PSoC Programmer3.12.2と現時点でのMiniProg3の最新ファームウエアがPower Cycle Modeでの書き込み時にリセットを使用することがあります。
それに加えて、MiniProg3 revision 7を見ると、少なくともES2までのデバイスではMiniProg Rev.*Aのハードウエア的な問題でPower Cycle Modeが使えないとあり、新しいチップには修正を加えてMiniProg3 Rev.*AでのPower Cycle Modeに対応させるとあります。
ES3は最終版となるはずなので、チップの問題は解決しているのだとは思うのですが、
意味深な書き込みなどもあるので、実際どうなっているかはわかりません。
(ES2では使えないJTAG Boundary Scanが使えたのでES3のマーキングが入ったES2ということはないと思いますが…。)
少なくとも量産版のPSoC3(2010年冬に量産を開始したらしいです。) と、これから出るであろう新しいファームウエアをMiniProg3 Rev.*Aに入れればPower Cycle Modeでの書き込みが可能になり、問題は起こらないのだと思います。

MiniProg3のRevisionについて

MiniProg3 revision 7
MiniProg3 Rev. *A
上に挙げたKnowledge Baseを見ると、MiniProg3にはいくつかのRevisionがあることがわかりますが、Rev.*AとRev.Nがどのような関係にあるかがよくわかりません。
勝手な想像ですが、Rev.6以前はベータ版で、Rev.*Aがリリース第1版に対応するのだと思います。
そうするとRev.7の位置づけがよくわからなくなりますが、今回のような問題が起こった限られたユーザーに対して配布するものだと考えられます。

だいぶ時間がかかってしまいましたが、これでPSoC3の実験が再開できます。
今後は、カラーグラフィック液晶S95517-A035のテストを行う予定です。

2011/01/04

LGAのリフローはんだ付け

地磁気センサAMI304のはんだ付けを行いました。

AMI304は側面に足が出ていないLGA12パッケージで提供されるため、はんだこてを使った手はんだは行えません。
そこで、はんだペーストとホットエアを使ったリフローはんだ付けをしてみました。

はんだペーストを使ったはんだ付けは、Fenrirさんの方法を少しアレンジした方法で行いました。

使った主な道具は以下の通りです。

  • ガス式はんだこて goot GP-510
  • はんだペースト Chip Quik SMD291AX
  • OHPシート EPSON MJOHPS1N

はじめにはんだマスクを用意します。
Fenrirさんはカプトンステンシル・マイラーステンシルを外注していますが、さらに手軽に済ませるために、OHPシートをはんだマスクとして使いました。
今回使ったOHPシートの厚さは130umで、Indoor airplane worldさんが使っているカッティングシートやラミネートフィルムと同じ程度の厚さです。
OHPシートに、はんだペーストを乗せる部分のパターンを印刷し、デザインナイフで切り抜きマスクにします。
今回のパターンは0.7mmピッチで0.35mm×0.35mmの穴を開けるものでしたが、この程度なら手でも十分切れるようです。

はんだペーストの塗布のテスト
試しにコピー用紙の上にはんだペーストを塗布してみました。
はんだペーストの塗布には、そのあたりに転がっていた接着剤(Super-X)に付属してきたへらを使いましたが、特に問題なく塗布できています。
はじめは、0.35mm×0.35mmの穴を開けていましたが、あまり面積が小さいと紙にはんだペーストがうまく付着しないので、少し穴を細長くし、面積を大きくするとうまく付着するようになりました。

はんだペーストの塗布がうまくできたので、実際に基板を使いはんだ付けを行いました。
上に書いた要領ではんだペーストを塗布し、その上にチップ部品を乗せます。
チップ部品を正確な位置に乗せられるかどうかが気になりますが、大体合っていれば加熱してはんだが溶けた時に正しい位置に吸い込まれるようです。

チップ部品を乗せた後は、ガス式はんだこてのホットエアを使い加熱します。
本来ならば、データシートにある温度プロファイルに近くなるようにホットエアの吹き出し口と基板との距離をコントロールすればよいのですが、今回ははんだペーストが溶ける様子を見ながら加熱時間を調整しました。

ホットエアはんだ付けを行った基板
はんだ付けを行った基板が上の写真です。
今回は秋月電子の標準DIP化モジュール風の変換基板を作製しました。
この基板を使って、地磁気センサのテストを行います。