July 19, 2006マイコンと超音波センサの接続室内で飛行する模型飛行機の自動制御ですが、超音波センサを利用して壁までの距離、あるいは床までの距離を検出することを考えています。超音波センサは加速度計やジャイロのように単体で使うことができるわけではなく、超音波の送受信回路が付加回路として必要になるため、付加回路を制御するためのPICを含めたモジュール構成になっています。詳細は機体搭載基板をどうぞ。 世の中にはこういった通信規格が山のようにあり、電子工作的メジャーなものだとシリアルEEPROMやA/D変換機に搭載されているI2Cがあります。しかし今回は超音波センサモジュールから受信するだけなので、お手軽プロトコルを自作してみました。回路と通信方式は図のとおりです。 要点は中央のマイコンがモジュール側にデータを送るタイミングを一方的に指示していることです。このため、超音波センサの計測時間によるタイムラグを無視していることになるので、なんらかの対策を講じる必要があります。つまり、マイコン側からデータ要求を受けた時点で計測していたのでは、間に合わないことになります。 概念的なコードを書いてみました。続きをどうぞ。 マイコン(受信)側 unsigned char external_read(unsigned char ch){
unsigned char mask = 0x80; // MSB first!! unsigned char result = 0x00; select_low(ch); do{ clk_low(); wait(); clk_high(); if(is_data_high()){result |= mask;} }while(mask >>= 1); select_high(ch); return result; } 超音波センサモジュール(送信)側 // This function is invoked by select_low interrupt!!
void external_write(unsigned char data){ unsigned char mask = 0x80; // MSB first!! do{ (data & mask) ? data_high() : data_low(); while(is_clk_low()); }while(mask >>= 1); } コメント
コメントする
|
スポンサード リンク
|