ゼミのお話/ロボット工学者養成所/一覧/浅草ギ研AGB65シリーズ/AGB65-ADC簡易使用方法

2018-04-16 (月) 15:53:00 (840d)
  • AGB65-ADCへシリアル信号で個別の命令を送ることで,その命令に合った形式で結果が返ってくる.つまり,まずarmadillo300上のプログラムがどのようなデータが欲しいかコマンド送信すると(データリクエスト),AGB65-ADCは要求されたデータを返信する(データリプライ).
    • AGB65-RSCと基本的な使い方は同じであるが,返ってくる値を読み取る必要がある.
  • 以下のように配列を定義して用いる.
    • データリクエスト用データ.以下の配列をシリアル送信する.
      • unsigned char command[4] = {255, 120, 1, 1};
シンクロバイト(255)ADCにデータの通信開始を知らせるデータで,常に「255」である.
ID(120)ADCに設定された固有のID(AGB65シリーズを複数接続したときの判別用.ADCの場合,出荷時のIDは「120」.)
送信バイト数(1)送信される命令の(バイト)数.シンクロバイト,ID,送信バイト数は数えない.
命令1(1)全ポート(16ポート)読み取り(精度8bit)
  • データリプライ用データ.データリクエストした後,以下の配列をシリアル受信する.
    • unsigned char data[20];
data[0]:シンクロバイト(255)ADCからデータの通信開始を知らせるデータで,常に「255」である.
data[1]:ID(120)リクエストされたADCのID(ID=120にリクエストした場合,120の値が入っている.)
data[2]:データバイト数(17)ADCからarmadillo300に向けて送信される命令のバイト数.シンクロバイト,IDは数えない.
data[3]:命令1(1)armadillo300からADCにリクエストされた命令を返信.command[4]の値.
data[4]〜data[19]:[ポート1の結果]〜[ポート16の結果]各ポートにささっているセンサの取得結果
  • 上記のデータを以下のように送受信すると配列dataの中にセンサの情報が格納されている.厳密には,data[0]〜[3]の値を使って正常にデータを受信できているか確認する必要がある(プログラムを参照)
    • int main(){ ...
    • ...
    • write(fd, command, sizeof(command));
    • read(fd, data, sizeof(data));
    • ...
    • }