マイコン工作実験日記

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

時計の自動設定

2008-02-11 14:32:32 | W-SIM
ブート時に時計の日時を自動的に設定するようにしてみました。前の記事で実験したPPP接続とSNTPによる時刻取得をブート時に連続的に実行するようにしています。



PPP接続中はLCD画面の左上にアイコンで状態表示する機能も付け加えてあります。アイコンの点滅にはRTCからの1Hz信号を利用しています。ダイアルアップによるPPP接続中と、接続できた状態とでアイコン表示が変化します。時刻取得ができるとRTCが設定され、画面右上の時刻表示も変化します。その後、PPP接続が切断されて待ち受け画面に戻るので、取得した日付と時刻が表示されます。

実際にはSNTPでの時刻取得にはさほど時間がかからないので、PPP接続されている時間もごくわずかです。PPP接続アイコンの変化もわかりにくいくらいの短時間なので、このデモではわざとSNTPでの時刻取得後1秒待ってからPPP接続を切断するようにしてあります。

時刻設定終了後に117を呼んで、設定された時刻の確認をしてみました。RTCでは秒単位でしか時刻を管理していませんので、若干のずれが生じます。秒が変わるタイミングでRTCを設定するようにスケジューリングをすれば、より正確な時刻設定も可能ですが、そこまでの処理はやっていません。まぁ、こんなもんでわたしは満足です。

TINETを載せてみた

2008-02-09 16:30:22 | W-SIM
とりあえずTINETを載せてみました。これまでは音声端末としての機能しか持っていませんでしたが、少しはデータ通信機能を使えるようにしてみようという試みのための下準備です。

そもそもW-SIMを使ってみようと思った大きな動機は、AT91SAM7SのもつSSC(シリアル同期通信)機能で音声PCMを接続できそうだと考えたからでした。それまでSSC機能を全く使ったことがなかったので、この機能を実験するにはW-SIMは非常におもしろい題材だと考えたのです。Rev.2ボードを使っての実験をとおして、その目的は達成できました。その後、音声端末を作ってみたい興味がわいたのでSSCの代わりにCODECを使う端末機能を作成することで、現在の姿にいたっています。データ通信については、DDとかデータ通信カードのままでもUSBホストとかPCMCIAとかをもったマイコンであれば、いくらでもシリアル経由で操作できます。W-SIMソケットさえあれば、USARTに直結できるので、どんなマイコンでも操作できることは自明です。

そんなわけで、当初からデータ通信よりも音声通話の方に興味があって実験を進めてきたわけですが、一応の通話機能も備わったので、そろそろデータ通信機能の実験も始めたくなりました。その一番の理由はRTCの時刻設定です。LPC2138なんかだと自前のRTC機能をバッテリでバックアップすることができたりするのですが、AT91SAM7のRTT機能は時計としては役立たずなことは、以前の記事でも書きました。そのためにRTCチップを載せたのですが、いまだにバックアップ機能はないので、電源を入れ直すと日付/時刻を手動で設定しています。電池を載せてバックアップしようかとも思ったのですが、データ通信機能を使えば、RTCのバックアップなんか不要だと思いいたりました。つまり、電源投入時にSNTPでネットワークから時刻をひろってきてRTCを設定すればいいわけです。

TINETはこれまでにも「秋月H8-3069F」、「DWMのオマケARM基板+CS8900」、「SAM7-EX256」を使って遊んできたのですが、これらはみんなethernet接続での利用だったので、PPPは今回初めて使うことになります。TINETはもともと、H8ベースで開発されているようなので、ARM7で使うには2, 3箇所のパッチが必要でしたが、とりあえず接続できるようになりました。

早速、DNSとSNTPのクライアント機能を追加です。これらの機能は3年程前にH8-3069Fで遊んだ時に作成したコードがあったので、それらを持ってきてくっつけただけです。デバック・コンソールからの操作で、PPP接続とSNTPを実行できるようになりました。


ブート時にはTINETの起動メッセージも表示されるようになり、賑やかになりました。
  • pppコマンドを入れると、W-SIMの動作モードがDTEモードからアダプタモードに切り替わり、データ通信を開始してPPPで接続します。
  • 「つなぎ放題」を契約したので、ダイアル時には##64を指定して、つなぎ放題でのパケット接続を指定しています。
  • ntpコマンドを入力すると、決められたNTPサーバにSNTPでアクセスして時刻を表示します。サーバ名はホスト名で登録してありますので、実際にはDNSを使ってアドレス解決してから、時刻の取得をしています。
  • ppp hangコマンドによりPPPでの接続が切断され、W-SIMの動作モードをDTEモードに戻しています。
  • SNTPで時刻を表示するとともに、RTCの設定も行っているので、液晶画面の表示にもそれが反映されます。

*TINETに興味のある方は、秋月H8-3069Fで始めてみることをお薦めします。導入手順につていは、この資料が、整理されていてわかりやすです。

タスク構成

2008-02-07 23:51:28 | W-SIM
Rev.2ボードの時と同じように、W-SIM電話機ボードでのタスク構成についても書いておくことにします。TOPPERSのシステムタスクについては、省略します。

タスク名説明
main_task初期化処理をおこなった後、キーパッドならびにスイッチの入力を監視し、イベントを生成する。
modem_reader_taskW-SIMからのメッセージを監視し、イベントを生成する。
phone_taskイベントを受信し、対応する処理をおこなう。
ringer_task着信時鳴動音の周期を生成するタスク
console_taskデバック用コマンドの処理をおこなう。

キーを押したり、W-SIMの状態に変化があった場合にはmain_taskならびにmodem_reader_taskがそれを検出し、イベントを生成してデータ・キューに入れるようにしています。RTCから毎秒発生する割り込みや電界強度の変化、LCDのスリープモード遷移タイマーの満了といった事象も、すべてイベントとして扱い、データ・キューに送られます。

電話機としての振舞いの制御をおこなっているは、phone_taskです。データ・キューからイベントを順番に読みだし、その時点での呼や画面の状態に応じた制御をおこないます。メニューの表示や操作の処理もphone_taskがおこなっています。

LCDへの書き込みはすべてphone_task経由でおこなわれるようになっています。複数のタスクがデバイスに対してのアクセスをおこなう場合には、アクセスの競合を避けるためにロック処理が必要となりますが、アクセスするタスクは一つだけになっているので、ロックは不要となっています。

呼の発信や着信の実際の処理は、W-SIMに対してATコマンドを送信することに帰着します。発信ならATD、着信ならATAコマンドを発行した後、modem_reader_taskがCONNECTメッセージを受信したことをphone_taskに通知すると、呼は通話状態になったとみなされます。W-SIMからのPCM信号は全てCODECチップにつながっていますので、マイコンは音声については何も処理していません。CODECは、これらの信号を受けて受信したPCM信号を展開してスピーカあるいはイヤフォンから再生してくれます。一連の処理は全てCODECチップがハードウェアで処理してくれますので、マイコンがする仕事は出力するデバイスや再生音量を決めたりすることくらいで、これらの操作はI²Cで行います。このように通話中の状態でもAT91SAM7Sマイコンはヒマにしており、退屈しのぎに通話時間を数えて表示するくらいの仕事しかしていないわけです。

マイコン資源の使用状況

2008-02-06 21:13:31 | W-SIM
使用しているマイコンAT91SAM7S256にはARM7 CPUとしての機能以外にも各種周辺機能が備わっています。これら周辺機能の使用状況とその用途をまとめると次のようになります。

周辺機能名Rev2ボードW-SIM電話機ボード
PIOLED制御キーパッド、スイッチ、RTC割り込み、W-SIM DISP信号、CODEC/LCDのリセット
SPI未使用LCD制御
TWI (I²C)未使用CODEC, RTC制御
USARTW-SIMモデム信号W-SIMモデム信号
SSC (同期シリアル)W-SIM PCM信号未使用
RTT未使用未使用
PITTOPPERSで使用TOPPERSで使用
WDT未使用未使用
TC (Timer)未使用未使用
PWM未使用CODEC用クロック生成
UDP (USB)USBオーディオ未使用
ADC未使用電池電圧測定
DBGUデバック用コンソールデバック用コンソール

対比のためにRev2ボードでの使用状況も示しました。Rev2ボードではW-SIMからのPCM音声信号はSSCで受けて、USBを経由してホストのPCと送受する構造となっていました。W-SIM電話機ボードでは、PCM音声信号はCODECにつながっているために、SSCは未使用となっています。

ソフトウェアの大きさは、こんな感じです。
$ size simphone.elf
   text    data     bss     dec     hex filename
  41148    1264    7848   50260    c454 simphone.elf
$

41148+1264=42412バイトが、256KBあるフラッシュの使用量となります。SRAMは64KBありますが、そのうちの1264+7848=9112バイトを使用していることになります。表示に使用している英文フォントもtextサイズの中に含まれています。また、各タスクが使用するスタックはbssサイズの中に含まれています。

このようにまだまだメモリには空きがあるので、次の段階としてTCP/IPのサポートのためにTINETを入れてみるつもりです。

主要パーツリスト

2008-02-05 23:41:20 | W-SIM
ここらで現状の整理を兼ねて、参考のためにW-SIM電話機の主要パーツリストを掲載しておきます。

品名型番製造元購入先
CPUボードSAM7-H256OLIMEXSparkfun
CODECML7041OKIZaikostore
W-SIMコネクタSCZA1A0100ALPSMouser
RTCRTC-8564NBセイコーエプソン秋月
カラーLCDLCD-00569Nokia互換Sparkfun
LCDキャリアボードLCD-00600SparkfunSparkfun
電話キーパッドPK1213-03???千石
ナビ・スイッチCOM-08236SparkfunSparkfun
スピーカ8オーム 0.5W???千石
ピッチ変換基板QFP48-P5アイテムラボアイテムラボ


  • これ以外にはコネクタやCRもいくつか必要になりますが、省略。電源部については別記事を参照してください。
  • CPUボードは国内ではいちごLinuxソリトンが取り扱っています。また、ベステクでもほぼ同等のボードを販売しています。
  • LCDとキャリアボードも、いちごLinuxとソリトンが取り扱っています。ナビ・スイッチもSarkfunのものですが、こいつはまだ取り扱っていないようです。
  • CODECには2.048MHzのクロックが必要ですが、こいつはCPUボードで作っています。別のCPUを用いる場合には、このクロックの準備が別途必要となるかもしれません。
  • CPUやLCDは、好みで選択できるでしょう。AT91SAM7は、次の点が便利です。
    1. モデム信号をサポートしたUARTポートがある
    2. SPIポートがカラーLCDの接続に必要な9bit転送をサポートできる
    3. SPIポートではDMAが使える
  • W-SIMコネクタやCODECのTQFPのハンダ付けは ちょっと難しいので、初心者向け工作ではありません。

回路図を公開するつもりはありません。それぞれの部品のデータシートを読んでもらえば、それらを適切に直結すればいい程度の回路だということがわかっていただけるでしょう。(だからこそ、わたしでも作れているのですが。) マイコンのピンの割り当てや、設定を考えるのもマイコン工作の大きな楽しみのひとつだと思います。

最後に、楽しい電子工作は、すべて自己責任でお願いします。上記部品の購入あるいは使用にあたって、どのようなトラブルが発生しても、対応いたしかねます。

DTMF送出操作

2008-02-03 18:15:51 | W-SIM
DTMFを送出する様子を動画にしました。映画の上映案内に電話して、DTMFにより音声応答メニューを選択しています。



通話中状態では、通話時間を表示するようにしました。RTCからの割り込みで時間をカウントしています。切断により待ち受け画面に戻り、時刻表示に変わります。

DTMFを送る

2008-02-01 22:48:05 | W-SIM
DTMF(いわゆるピポパ音)を送出する機能を追加実装しました。

通話状態において、DTMFを送出する方法には次の2つがあります。
  1. CODECのトーン生成機能を使う方法
  2. ATDコマンドを使う方法
1のCODECのトーン生成機能についてはすでに記事にしていますが、着信音だけでなくDTMF音を生成することもできるので、この機能を使います。I²Cを使ってCODECのレジスタに書き込みすることで、指定したDTMF音を指定した出力デバイスあるいはPCMに送出することができます。

2の方法は、ATDコマンドに続いて送出する桁を指定する方法です。複数桁を指定することもできます。ATDコマンドは、本来発信する際に使用するものですが、通信相手と接続されている状態においてはDTMF音を送出する機能として働いてくれます。

今回は、1のCODECを使う方法で実装しています。この方法は通話中でなくても利用できますので、キークリック確認音としてのDTMF発生にも使うことができます。