マイコン工作実験日記

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

CDトランクに収納してみた

2009-08-31 23:16:49 | W-SIM
電話機ジャケットを無理やり携帯可能にするための次のステップは、なんといってもケースです。なにしろメイン・ボードだけでも100x140mmあるうえに、W-SIM青耳が基板に隠れないように耳を出しているために、さらに15mmくらい幅が必要です。おまけにメイン・ボードの上にSLICボードを載せているので、高さも必要です。そんなわけで、タカチとか秋月のケースには適当なものが見つけられませんでした。

100円ショップで手ごろなケースを探したところ候補となったのが、ハガキ100枚を収納するケースでした。こちらは、ちょうど基板と青耳がすっぽりと収まるサイズだったのですが、高さが足りないためにフタが閉まりませんでした。150枚収容のケースがあれば良かったのですが。。

そんなワケで妥協して選択したのが、CDトランクというケース。手持ち用のハンドルがついているケースで持ち運びに便利なので、もともと製作中の基板を収容するのに使っていたケースです。あくまで製作中に利用するだけで、もう少し小さいものを探すつもりでいたのですが、結局適当なものをみつけられずに断念。サイズ的にはかなり余裕があるので、電池もラクラクと収まりました。



受話器をつなげてフタを閉めたら、ハイ、できあがり。↓これで、曲がりなりにも携帯可能だと言えるのではないかと自己満足(かなり曲がってるけど)。受話器とケースとが一体化していないので、持ち運びにくいのが一番の難点。なんか、うまい解決策はないかと思案してはいるのですが。。



そして、もうひとつの難点がLCD表示がみずらくなってしまったこと。ケースが若干乳白色がかっているために、表示が見にくいのです。まぁ、穴を開けてLCD部分だけ顔を出させればいいだけのことなんですが、適当な長さのスペーサの手持ちが無いので、ケースの中に入れたままです。



もう8月も終わりです。夏休みも最後になって、宿題の工作を無理やり仕上げた気分です。

電話機ジャケットの電源を用意する

2009-08-29 23:25:30 | W-SIM
ここのところ、ずっとLPC2388を使ってのMP3プレーヤの製作ばかりをやっているのですが、このブログへのアクセスを見てみると、W-SIM関連のページを経由して当ブログへといらっしゃる方が依然として多数いらっしゃるようです。そんな方々の期待に多少とも応えるべく(?)、久々に電話機ジャケットのボードを引っ張り出しました。製作している自分はつねに全体像を見ているわけですが、ブログでは製作過程を部分的に説明しているだけなので、ちっとも全体像が紹介できていないと常々反省しておりましたので、そのあたりの補充も兼ねて現状のご紹介です。



ハイ、まずは現在のボードの状況です↑。振り返ってみると、ボード全体の写真を載せたのは1月20日の記事が最後だったかもしれません。基本的にはその時から変化は無いのですが、唯一USB Type Aコネクタのついたケーブルを追加しました。手持ちのボロケーブルをぶった切ってつなげただけなんですが。このケーブルの目的は電源の供給です。これまでは、となりのUSB BコネクタをUSBシリアル兼電源として使っていたのですが、Bケーブルをつなげるとサイズが大きくなってしまい、ケースに収納するのに不向きになってしまうためです。

電源としてはリチウムポリマ電池を使おうかとも思ったのですが、充電回路に加えて今回のハードではSLIC用に5Vも必要なので、その昇圧回路まで必要になってしまいます。それならば最初から5Vを出してくれる市販のUSBモバイル電源を利用しようと考え、そのためにUSB Type Aコネクタを出したというワケです。

さて、そのUSBモバイル電源ですが、まず最初に手持ちのPanasonic製品↓を使ってみました。単3ニッケル水素電池2本から5Vを作ってくれるというものです。



ところが、このモバイル電源ではうまいこと電話機ジャケットが起動できません。電源オンでリセットが入って起動しかけて、LCDのバックライトも少しの間点灯するのですが、すぐと電源が落ちてしまいます。どうやらモバイル電源側が動作を停止してしまうようです。仕様では500mA流せることになっているのですが。。。起動時に思ったよりも大きな突入電流が流れているのでしょうか。。。ソフトでLCDやSLICボードへの電源投入シーケンスを作ってやるとか、できるだけ消費電力節約するように本当に必要な時にしか周辺I/Oにはクロック供給しないとかしてやれば起動できるようになるかもしえませんが、試行錯誤するのも面倒です。そんなわけで、この電源を使うのは断念。もっとも起動できたとしても、単3電池で何時間連続待機できるのか疑問ではあります。

そこで、もう少し強力な電源を準備することにして、購入したのがコレ↓です。サンヨーのeneloopブランドではありますが、リチウムイオン電池を使っている製品です。



今度は問題なく起動できましたし、通話もできます。これならまがりなりにも「携帯電話機」として使えそうです。連続待機時間はまだ調べていませんが、とりあえず一晩くらいは問題なさそうです。



NANDフラッシュにフォントを格納

2009-08-26 23:50:41 | Weblog
NANDフラッシュのアクセスができるようになったので、フォント・データをNANDに書き込んで、これを表示できるようにしてみました。

まずはフォント・データの書き込みです。いつものIPA GUIフォントをビットマップにしたものを10ptと13ptの2種類用意してみました。PCからSDカード渡しで、LPC2388につないだLCDモジュール上のNANDにコピーします。



コピー時に指定しているのは、コピーを開始するページ番号です。コピーを実行するとコピーされた最終ページの番号が表示されます。そこで、その後のページからもうひとつのフォントを書き込んでいます。

書き込んだフォントを実際にアクセスして表示してみたのが、この↓画面です(サイズは13pt)。1文字表示させる度にNANDからの読み込みが発生しているので画面を文字で埋めるとさすがに時間かかりますが、曲データ程度の文字数ならさほど気にならないだろうと予想しています。


GPIOでNANDフラッシュにアクセスする -- その3

2009-08-22 22:12:52 | Weblog
フラッシュの読み取りに続いて、ブロック単位での消去とページ単位での書き込み処理を追加。使用しているHY27US08561Aは、32ページ/ブロックで、合計2048ブロックという構成です。データシートによると、消去には5ms、書き込みには200usを要しますが、これらの処理はフォントを準備する時にしか使わない予定なので、R/B信号をポーリング待ちすることにしました。ECC処理は今のところ全く無しです。読み書きできるだけなら、去年もやったことなので、今年はちゃんとこの機能をアプリで利用するようにしなくては。。

フォントの格納に備えて、SDカード上のファイルの内容を指定したページ以降にコピーするコマンドを用意しておきました。



readしてみて、書き込まれていることを確認してみます。



対応するブロックを消去すると、データはすべて0xffになります。



NANDフラッシュを利用するための準備作業はこんなところでしょうか。次の作業予定は、フォントデータを準備して、フラッシュに書き込むことです。


GPIOでNANDフラッシュにアクセスする -- その2

2009-08-19 01:05:33 | Weblog
LCDモジュールの載っているNANDフラッシュはHY27US08561Aという32M X 8bitのものです。データシートに合わせて、制御信号を操作するルーチンを作成。まずは、READ IDコマンドを発行して、デバイスIDを読み出してみます。



最初は00読み出し結果が00になってしまっていたのですが、nRDを落としてからデータを読むまでにnopをはさんでみたとろころ、ちゃんと読み出せるようになりました。FastGPIOは充分に高速動作しているようです。
正しいIDが読みだせたので、つづいてページ(512バイト)の読み出し。READ1コマンドでスペアの16バイトも一緒に読みだしてみます。



昨年書き込んでおいたデータがちゃんと読み出せています。スペア領域の最初の4バイトが00になっていますが、これはバスの上下の8ビットが逆になっていたためにECCがちゃんと書き込めなかったのが原因だったと記憶しています。

GPIOでNANDフラッシュにアクセスする -- その1

2009-08-15 22:16:35 | Weblog
LCDボードに搭載してあるNANDフラッシュにフォントを格納しようと計画しているので、まずはこのNANDにアクセスしてみることにします。昨年はAT91SAM7SE256のもつEBIを使って接続実験してみたのですが、LCDボード側のNANDフラッシュは8ビット幅であるにもかかわらず16ビットデータバスの上位8ビット側に接続されてしまっているために、AT91SAM7SEのもつECC機能もうまく使えず、結局基礎実験をしただけで応用を断念してしまっています。

今回はLPC2388に接続しているわけですが、LPC2388のEBIではSRAMやNORフラッシュは接続できるようですが、NANDフラッシュはサポートしていないようです。もっとも、16本あるLPC2388のアドレスバスをすでにGPIOとして使ってLCDの16ビットバスにつなげてしまっているので、どのみちEBIは使えなくなってしまっているのですが。。。NANDへのデータ線はLCDをつなげた際にすでにつながっているので、残りは制御信号をつなげてやれば良いだけです。制御信号は、NANDCE, ALE, CLE, R/Bの4本しかないので、これらもGPIOのP3[0]~P3[3]を使ってつなげることにしました。このあいだまで、LCDの制御線に使っていたポートです。

これらを操作して、データバスでコマンドを送ってやれば、読み書きができるはずです。ECC処理はソフトで実現可能でしょうが、面倒なので省略するつもりでいます。

ちょびっと改善

2009-08-11 23:43:42 | Weblog
LPC2388に接続しているLCDは、CMOSカメラの実験で使っていたものと同一のものです。ちょっと値が張るので、同じモジュールを差し替えて使っている次第です。このLCDは、16ビットパラレルでの接続ですが、データ信号16本に加えて、制御信号として/CS, /WR, /RD, RSの4本が必要なので、合計20本のGPIOを使っています。LPC2388で、この20本をどう割り当てるかですが、外部メモリは使わないだろうということで、次のように使っていました。


この20本を使って、実際に全画面クリアをするのに要する時間を計測してみました。



数字は、10回連続してクリアするのに要した時間です。1回15msくらいかかることになります。なにしろドットをひとつずつソフトで書いていくので、320x240=76800回の書き込みをおこなっているわけです。その際に、
  1. 書き込みデータを出力する
  2. /WRをLに落とす
  3. /WRをHに戻す
という手順が必要となります。これまでは、データ線と制御線が、別のポートにあったので、上記のように3回のGPIO出力が必要でした。しかし、データ線と制御線が同じポートにあれば、
  1. 書き込みデータを出力するとともに/WRをLに落とす。
  2. 書き込みデータを出力するとともに/WRをHに戻す。
という2回の書き込みで済ませられるはずです。そこで、ポートの割り当てを次のように変更。

画面クリアの試験は、



ちょびっと改善できました。もちろん、画面の表示も正常です。単純に76800回ループしているだけなので、ちょっとループを展開してやるとかすれば、もう少し早くなるでしょうが、全画面クリアだけ早くなったところで大して意味無いので、こんなもんで納得することにしておきます。

アンチ・エイリアス表示してみる

2009-08-07 22:45:49 | LCD
MP3での日本語での再生データ表示に向けて、フォントのアンチ・エイリアス表示の実験をしてみました。以前から一度、実験しようと思いつつも、先延ばしにしていたので、ようやくとやってみたという感じです。

これまで、フォントはモノクロのビットマップを使っての表示しかしていませんでした。現在使用しているLCDはRGB565の16bit、65536色での表示が可能なので、中間色を使ってのアンチ・エイリアス表示ができるはずであり、メモリもCPUパワーもあるLPC2388でこれを使わないのももったいないだろうというわけです。FreeType2を使ってIPAフォントを展開していますが、もともとFreeType2はディフォルトで256階調のビットマップを生成してくれるようになっています。これまでは、わざわざモノクロ指定をして使っていたのですが、生成されるビットマップの線が細く感じられたので、さらにボールド指定をして使っていました。

まずはアンチ・エイリアスの効果がどのくらいあるのをかをLinux上で事前に調べておきましょう。FreeType2のパッケージにはftviewというプログラムが付属しており、これを使うことで指定したフォントでの表示のプレビューができます。まずは、アンチ・エイリアスを施さない場合の表示です。対象フォントはIPA GUIでありサイズは13ptです。



次にアンチ・エイリアスを施した場合の表示です。階調表示の効果で全体的にぼやけて柔らかくなった印象を受けますね。



それでは次にLPC2388につなげたLCDに表示しての実験に進みます。モノクロのビットマップでは1ピクセルにつき1ビットのデータ量ですみましたが、アンチ・エイリアスのために256階調のビットマップを生成すると、当然ながらデータ量は8倍に増えます。今回は実験で表示する文字列に相当するビットマップデータだけを生成して、フラッシュに格納することにします。

文字表示の際には前景色と背景色を指定して文字表示をおこないますが、フォントのピクセルデータが0xFFであれば前景色、0x00であれば背景色、それ以外の値であれば階調に応じて前景色と背景色の中間色を計算して表示することになります。フォントデータとしては256階調ありますが、そんなに細かくなくてもいいだろうと思い実際には16階調分の処理しかしないことにしてみました。文字列の表示ルーチンの最初で中間色を計算してテーブルに格納しておきます。各文字を描画する際には、このテーブルを参照してピクセル描画してゆきます。文字列表示ルーチンでは、前回呼ばれた時と前景色/背景色の指定が同じであれば、テーブルのデータが有効であるので、再計算を省きます。

と、まぁ、こんな処理を入れて、LCDに表示した結果がコレ↓です。文字サイズは13ptならびに10ptで、上半分がアンチ・エイリアス無しの場合、下側がありの場合です。


ARM PACMAN

2009-08-05 00:29:22 | Weblog
ここんとこ、再度LPC2388の付録基板を使っているわけですが、なにげなくYouTubeでLPC2388で検索かけてみたら、こんな動画を見つけました。LPC2388としか書いてないので、詳しいことはわからないのですが、投稿時期からみてもオマケ基板の可能性高いのではないかと。

自分はゲーム関連のプログラム経験/知識が無いもんで、こういうのを見るとただただ感心しちゃいます。

再生画面を作ってみた

2009-08-02 23:36:57 | MP3プレーヤ
ID3タグ情報のデコードができたので、この情報をLCD画面に表示してみました。いちおう、カミさんのiPodの画面を真似てこさえてみたつもりです。LPC2388でLCD表示させるのもずいぶんと久しぶりだなぁ。



フォントは昨年W-SIMタッチパネル・ジャケットを製作した時に使ったIPAフォントから英字部分だけをビットマップ化したものを使っています。したがって、日本語の曲名とか歌手/演奏者名なんかはいまのところ表示できないわけです。もちろんIPAフォントには漢字も含まれていますが、LPC2388のフラッシュに収納できる容量ではないので、フォント用のストレージを用意せねばなりません。使用しているLCDにはフラッシュメモリが搭載されているので、これにフォントを保存して使ってみようかと考え中です。

LCDはタッチパネル搭載でもあるので、タッチ操作できるようにもするつもりでいますが、ゆくゆくはということで。。とりあえずは、フォントの方から検討を進めるつもりでいます。