ソフトウェアの説明 (1)
各機能ブロックは,回路に対応しています.
各機能ブロックをサブルーチン・コールで行い,プログラム間の結びつきを弱くしています.
ハードウェア・タイマが3本の制約がつきますので、音声再生とRCサーボのパルス幅制御を排他的に行っています.ハードウェア・タイマがもう1本あれば,論理的には動作中に音声の再生ができますが,割り込みのオーバヘッドなどでうまく再生できないかもしれません.
●光受信部
INT0
の立ち下がりエッジで発生した割り込みを契機に,タイマ2割り込みでシリアル→パラレル変換をして同一コードが2度続いたら正常なコードとして採用します.採
用されたコードは,二つある交替バッファのいずれかに保存します.交替バッファの指定は,交替バッファ切り替えSWで指定します.交替バッファ切り替え
SWの変更は,コマンド取得サブルーチンが呼び出されるたびに行われます.したがって,コマンド取得サブルーチンが動き出すまでは受信したコードが同一の交替
バッファに上書きされることになります.
なお,コマンド取得サブルーチンは,交替バッファからコードの取得と同時に無効なコードを交替バッファに設定します.これは,次回のコマンド取得サブルーチンの呼び出しで無効なコードを取得した場合,通信が終了したことを示すことになります.
図2に光信号変換のデータの処理と流れ,図3に光無線信号シリアル→パラレル変換の状態遷移を示します.
●UART部
データの信頼性を上げるため簡易プロトコルを実施します.詳しくはプログラム階層図で見た場合のパソコンとの通信処理のデータ・リンク層を参照してください.この部分は「イニシャルとモニタ」と接続します.
●イニシャルとモニタ部
各機能ブロックの初期化処理を行い,UARTからの処理指定待ちとなります.
メモリの読み出しやメモリの書き込みなど,モニタとしての機能をこの部分で行います.詳しくはプログラム階層図で見た場合のパソコンとの通信処理のセッション層を参照してください.
●EEPROM部
I^2C通信でEEPROM(HN58X24256)をアクセスする関数を提供します.WAV再生を行った場合,読み出しと変換をシリーズに行った場合音われが発生しますので,データ転送のコール・バックをコールしながら処理を行うようにします.
▼I^2Cバスを使ったデータ転送シーケンス
図4にデータ転送シーケンスを示します.
SCL
の制御はマスタ(dsPICマイコン)だけが行います.SCL=“H”の状態で,マスタがSDA=“L”にすると通信が始まります(Start).また,
SCL=“H”の状態で,マスタがSDA=“H”にすると通信は終了します(stoP).
通信が始まると,SCLに同期してSDAにデータを乗せて転送し
ます.データの転送単位は8ビットです.データ転送後,スレーブ側がデータを解釈できたらSDA=“L”にしてACKを返します.SDA=“H”のままの
場合,マスタはNO ACKと解釈します.
付録基板のdsPICマイコンは,I^2Cバス・インターフェースの機能を内蔵していますので活用します.
▼HN58X24256の制御方法
EEPROM
は,16Kバイト品と32Kバイト品を対象としています.当然ながらEEPROMをセットする場合は,16Kバイト品か32Kバイト品の片方です(混在で
は動作しません).
図5にデータの読み書きにおけるI^2Cバスのデータの内容を示します.HN58X24256にはいくつかの動作モードがあります.実
際にソフトウェアで実現しているランダム・リード・モードとページ・ライト・モードについて説明します.
【ランダム・リード・モード】
スタート・コンディションのあと次のビットで構成されるコントロール・バイトを、HN58X24256に送ります.
No. 名称 ビット幅 説明
1 デバイス・コード 4ビット デバイスがEEPROMを示すコードで‘1010’が設定されます.
2 デバイス・アドレス 3ビット I^2Cに接続されたチップ番号(0~7)を示します.
3 制御ビット 1ビット 入出力方向を指定します(0:ライト,1:リード).
次に,読みたいデータを示すアドレスを2バイト転送します.ここまでのシーケンスはライト動作も同じです.
続いてストップ・コンディションを発行せず,スタート・コンディションから始めます.データを読みたいのでコントロール・バイトのLSBにリード(‘1’)を転送します.その後,SCLに同期してHN58X24256からデータがSDAに設定されます.
通信を終える場合は,ストップ・コンディションを発行します.ストップ・コンディションを発行しないとHN58X24256は次のアドレスのデー タをSCLに同期してSDAに転送します.この動作がシーケンシャル・リードで,読み出したいデータの数だけ読み出した後,ストップ・コンディションを発 行すれば終了になります.
【ページ・ライト・モード】
ランダム・リード・モードと基本は,同じです.ランダム・リード・モード
の最初と同等のシーケンスを実施後,書き込みたいデータはSCLに同期してマスタがSDAを制御します.また,決められたページのバイト数を
HN58X24256送ります.これは,EEPROMの仕様によって異なります.HN58X24256では64バイト/ページです.
なお,ページ・ライトによる書き込み回数の保証は100000回に対し,バイト・ライト・モードでは10000回と保証回数は1桁少なくなります.
■参考文献
(1)トランジスタ技術 PICで体験するマイコンの世界,2007年8月号,CQ出版(株)
(2)トランジスタ技術 パソコンで作る私だけの実験室,2006年8月号,CQ出版(株)
(3)二足歩行ロボット製作超入門,浅草ギ研著,2006年9月,オーム社
(4)dsPIC30Fファミリーリファレンスマニュアル(70046b_jp.pdf),Microchip Technology Inc.
(5)TDA2822M データ・シート,1464.pdf,STMicroElectronics社
(6)HN58X24256データ・シート,rjj03c0116_hn58x24xxxi.pdf,(株)ルネサステクノロジ
(7)PL-IRM0101-3データ・シート,PL-IRM0101-3.pdf,HB Electronic Components
(8)μPC29Mxxデータ・シート,G10027JJ4V0DS00.pdf,NECエレクトロニクス(株)
(9)ホーム・ページ テクニカルライター後田 敏の部屋
▲ http://goda.blog3.fc2.com/
