マイコン工作実験日記

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

バッテリー残量表示

2008-01-31 23:43:55 | W-SIM
バッテリーの残量を知るために、電圧の表示を付けました。アンテナ表示の右隣りです。電池の残量アイコンの方が見た目はいいですが、減り具合を調べるためには数値で欲しいので、電圧値を表示しています。電池の出力電圧を1Mオームの抵抗2本で2分したものをA/Dで計測し、表示する際に2倍して戻しています。


当初、電池が3.8Vくらい残っている状態でも2.8Vとしか表示されなかったので、しばらく悩みました。A/Dの端子電圧を測ると3.8Vの半分1.9Vあるのに、ADCのレジスタの内容を確認すると、2.8Vの半分の1.4V相当の値しか出ていません。分圧のための抵抗として1Mオームという高抵抗値を使っているせいだと思いあたり、ADC設定のPRESCALの値を大きくしてやり、十分なサンプル・ホールド時間(SHTIM)をとるように修正したところ、期待どうりの値が出るようになりました。

充電完了直後でも表示の値は4.0です。バックライトを消灯した待ち受け状態で、8時間ほど経過した時点での表示は3.6。消費電力をさらに減らすための方策としては、
  1. 現在、CODECは常時パワー・オン状態。必要ない時には、パワーダウン状態にする。
  2. CPUのクロックを落としてみる。
  3. DC/DCからの出力電圧を5Vから3.3Vに変更する。
といった対処が考えられます。すでに、実行すべきタスクが無い時には、PMC_SCDRを操作してCPUをアイドル状態にはしています。折をみて、順次実験してみたいと思います。

バックライトLEDの制御

2008-01-29 07:53:05 | W-SIM
LCDのバックライトは、LCDキャリアボード上の昇圧回路で生成された6.8Vで点灯しています。キャリアボードでは昇圧回路への供給電圧をLCDへの供給電圧と分離して供給できるようには配慮されていますが、昇圧回路の動作を制御する機能は用意されていません。

回路図を見ると使っているブースタICにはEnable端子があり、この端子を使えばブースタをシャットダウンできるのですが、ボードでは常時イネーブル状態に配線されていることがわかりました。そこで、キャリアボードを改造してこの端子を使えるようにしました。キャリアボードには、外部接続用に6ピンと8ピンのふたつの2.54mmピッチの端子群が用意されていますが、nCS, SCLK, SDATA, RSTの信号は両方に出ています。そこで、ブースタのEnable端子のそばに配置されている6ピンの方のnCS端子へのパターンをカットして、このピンをEnable端子に使うこととしました。



上の写真が改造前、下が改造後です。Enable端子を基板のパターンからはがして、ワイヤでnCSだった端子につないでいます。Enable端子の制御には、CODECの出力ポートを使います。オープンドレイン出力なので、プルアップ抵抗も付けていますが、キャリアボードの下に配置されているので写真からはわかりません。これで、CODECの出力ポート4つのうちの3つを使ったことになります。



LCDをスリープ状態にするとともにポートを制御することで、無事バックライトが消えるようになりました。

バッテリー動作

2008-01-27 18:03:03 | W-SIM
電池動作をさせるべく、昨年秋に買い置きしてあったLipoを使ってみることにしました。電池は充電完了時でも4V程度にしかなりませんので、普通の3端子レギュレータでは、ドロップが大きすぎて使えません。ドロップが0.3V程度ですむLDOがあればいいのではないかと想像しますが、手元には秋月モノしかないので、とりあえず手持ちのDC/DCコンバータを使います。また、充電にはMAX1555を使います。




部品は電池も含めて、いずれもSparkfunで調達してあったものです。じつは、OLIMEXのSAM7-H256もSparkfunで買ったものなので、ほとんどの部品をSparkfunで調達していることになりますね。バラの部品を買って自作するのが面倒なので、ボードを買って済ましています。手間と時間をお金で解決してしまおうというオジサン姿勢ですな。ハードの知識が無くても、ボードつなぐくらいの工作で済むので助かります。

DC/DCの出力は5Vなので、いったん昇圧したのを、SAM7-H256上のレギュレータで3.3Vに落として使うことになります。なんだかとっても無駄している感じです。DC/DCのボードには、出力電圧を設定しているチップ抵抗があるので、こいつを3.3V用の値に交換すればいいのですが、手持ちもないので、とりあえずは5V出力で始めます。ゆくゆくはLDOに入れ替えることにします。

電池の充電はMAX1555が全て面倒みてくれるので、おまかせです。USBと5V ACアダプタを使っての充電が可能になっています。リチウムポリマは、電圧が3V以下にならないように注意して使わなければいけないようなので、その管理は自分でやるしかありません。電池の出力電圧をAT91SAM7のA/Dを使って監視することにします(まだソフトはできていませんが)。
電池の電圧の方がA/DのVREFより高いことになりますので、電池の電圧は抵抗で半分にしたものをA/Dに入れています。



本体のボードにはまとまったスペースが無いので、別基板として電源部を作成して2階建てになってしまいました。うーん、これじゃ充電中を示すLEDが見えないなぁ。これまで給電のためにUSBのひも付きだったのが無くなったので、すっきりしてきました。

LCDのスリープ動作

2008-01-26 20:47:36 | W-SIM
電池で動かすことを考えると、少しでも消費電力を減らすことが好ましいので、キー操作が30秒間なかったらLCDをスリープ状態に遷移させることにしました。スリープ状態では、LCD内部のドライバなどの動作を止めて画面は暗くなるものの、表示データは保持されます。キー操作や着信があったら、それらのイベントをトリガにして画面を回復します。SPIインタフェースはLCDでしか使っていないので、スリープ状態に遷移する際にはSPIインタフェースのクロックも止めてしまい、CPU側の消費電力も削減します。


確かに画面の表示は暗くはなるんですけど、バックライトのLEDがギンギンに光ったままです。画面もバックライトのせいで、深い青色に見えます。バックライトを止めないことには、ちっとも表示が消えている感じがしませんね。

RTCを積んだ

2008-01-25 23:24:58 | W-SIM
RTCとして秋月のRTC-8564NBモジュールを買ってきて積みました。LCDの下に配置したので外観には変化ありません。

RTC自体はI²Cでアクセスすればいいだけなので、配線も操作も簡単です。しかし、時刻を適当な間隔で読みだして表示を更新するよりは、毎秒割り込みをかけてもらって、表示を更新した方が無駄がありません。そこでRTCのCLKOUTから1Hzクロックを出すように設定し、これで割り込みをかけることとしました。

AT91SAM7S256側では、すでに2つのIRQの端子はキーをつなぐのに使ってしまっています。空き端子と入れ替えようかとも思いましたが、使用済みのつもりでいたPA8が実際には使われていないことに気が付いたので、この端子をPin change割り込みで使うことにしました。PA8は、OLIMEXのSAM7-H256ボード上ではジャンパ設定でLEDがつながるようになっており、CLKOUTをつなぐと1HzでLEDが点滅してくれて、好都合です。

メニューにも日付と時刻設定機能を追加して、待ち受け画面にこれを表示するようにしました。



うーん、いまひとつ見栄えが良くないですね。もう少し大きな文字のフォントを用意して、時刻を表示したいです。また、電源入れるたびに日付/時刻を設定するのも面倒。そろそろ全体を電池駆動させるか、RTCだけでもバックアップするようにしないと。

Nokia LCDドライブボード -- 消えた?

2008-01-24 13:27:09 | Weblog
昨日記事にしたばかりのaitendo のパクリLCDドライブボードならびに液晶とのセット商品ですが、Webの商品ページから消えたようです。昨日の夕方ごろには、いくつか売れたようで、在庫数が減っていたことを覚えていますが、今日見てみると2つの商品とも消えています。

LCD本体は残っているし、完売商品のカテゴリに移動しているわけでもないので、2つの商品だけが消されたのではないでしょうかね。まぁ、秋葉にはSparkfunのボードを扱っているSolitonもあることだし、クレームが入って当然だと思いますけど。

Nokia 6610 LCDドライブボード

2008-01-23 00:55:29 | Weblog
W-SIM電話機で使用しているNokia 6610 LCDですが、以前記事で書いたようにわたしは、Sparkfunのボードを使っています。先ほど、気づいたのですがaitendoが新製品として同じようなドライブボードを出しています。

しかし、見るからにSparkfunのデッドコピーです。回路図もSparkfunのEagleで描いたpdf図面からのコピーであることが歴然としてます。液晶とのセットでも3980円ですから、苺Linuxよりもかなり安くなります。

しかし、この露骨なコピーに平気でaitendoの名前をシルクで入れる図々しさにはあきれますね。

RTCについて

2008-01-22 23:25:40 | W-SIM
現在の待ち受け画面は、画面中央を真っ白な空間が占めていて、とっても物足りなさを感じます。待ち受け画面の定番といえば、やはり時計です。真っ白でなくて、何かの画像を入れるとしても、やはり時計も入れておきたいものです。

AT91SAM7SにはRTT(Real-Time Timer)という機能が用意されており、32KHzのCR発振器によりカウントすることができます。このクロック源は、CPUクロックとか簡易的なタイマカウンタとして使う分には問題無いのですが、時計のための原発振として使うには、狂いが大きすぎます。実際にカウントしてみると、1分もたたないうちに、どんどん時間表示がずれていくのが目に見えてわかります。。。データシートのRC発振器特性を見ると、+/-10KHzになっています。「オイオイ、32Khzなのに10Khzも狂うかもしれないのかよ」という感じです。カウンタの分周率を調整したところで、バラツキが大きいでしょうねきっと。

もちろん、普通のタイマを使って水晶発振を元に作成したクロックから分周する方法もあります。TOPPERSが使うタイマーとしてはPIT(Periodic Interval Timer)を利用していますので、実は3つあるTC(Timer Counter)は(今のところ)ひとつも使っていません。しかし、どうせ時計だけなくカレンダも欲しくなるでしょうから、やはり外付けのRTCでいきましょうか。

そんなわけで、超定番の秋月RTC-8564NBを積むことにします。

画面の構成

2008-01-21 23:12:37 | W-SIM
現在のところLCD画面を、3つの部分に分けています。



最上部の背景色が黄色の部分には音声再生の音量と、電界強度情報を表示しています。電界強度を示すアンテナは、フォントを作成して文字として出力することで表示しています。ただし、最大で6本もアンテナを立たせると横長になってしまうので、8X8ドットでフォントを作成し、2文字を使って表示することにしています。
電界強度の情報はW-SIMのDISP1~DISP3の3端子の出力をPIOで読み取っています。どうやら、この3つの端子は負論理となっており、電界強度が最大の時に 0x0 が出力されるようです。3ビットあるので、全部で8つの状態が表現できるわけですが、W-SIM対応の電話機のアイコンを見る限り、最大ではアンテナ6本です。どのように3端子の出力を解釈すれば良いのかわからないので、現在は次のように実装しています。

DISP3DISP2DISP1表示
000アンテナ6本
001アンテナ5本
010アンテナ4本
011アンテナ3本
100アンテナ2本
101アンテナ1本
110アンテナ0本
111圏外表示


「アンテナ0本」では何も表示していません。実際に圏外状態になる場所で実験してみればいいのでしょうが、自宅周辺でそんな場所を探すのも面倒なので、まだ確認できていません。表示は電界強度に変化があった時に描画しなおせばいいので、これら3端子のつながるポートではPin Change割り込みを許可して、割り込みが生じたら状態を読み取って描画しなおすようにしています。

中央の白い部分はメインのスクリーンとし、ここにメニューや発信する番号、着信時の発信者番号を表示します。メニューで用意している機能については、また別途説明することにします。

下部の緑背景色の部分は、W-SIMから受信したATコマンド応答やメッセージを表示する領域として4行分(高さ32ドット)を割り当てています。表示内容はスクロールされていくので、最後の4行分が表示されることになります。使用しているNokia 6610 LCDには、ブロック(高さ4ドット)単位でスクロールする領域を設定できる機能があるので、この機能を利用しています。

電話機らしくなった

2008-01-20 16:14:16 | W-SIM
LCDとキーを付けることでかなり電話機らしくなったW-SIMの操作の様子です。



以下、動作概要の説明です。
  1. あいかわらずのUSB給電で電源を入れると、待ち受け画面になります。
  2. スイッチを押してメニュー起動。音声出力先をスピーカに切り替え。
  3. メニューを終了して待ち受け画面に戻る
  4. 177に続いて#を押すことで。ダイアル開始。
  5. スイッチを上下に廻すことで音量を上下してみる。
  6. 最後にスイッチを押して切断

メニュー項目の選択はスイッチ操作だけでなく、項目番号の入力でも操作できるようにしてあります。また発呼の開始は、スイッチを押すことでも可。

なんか以前にも増してスピーカのノイズ音が大きくなったような気がするので、そのうちに何とか対策を講じなければとは思っているのですが、具体的にどうすればいいのかまだわかっていません。