10: 2010-11-04 (木) 16:18:01 eid7gud | 現: 2010-11-05 (金) 19:39:06 eid7gud | ||
---|---|---|---|
Line 29: | Line 29: | ||
ハンダが苦手という方はブレッドボードを使用しても良いでしょう。 | ハンダが苦手という方はブレッドボードを使用しても良いでしょう。 | ||
- | |||
- | ケーブルには必要に応じてノイズの混入を防ぐためのシールド等の措置を講じてください。また、ケーブルが長過ぎると信号の劣化に繋がります。 | ||
FDIII-HCの変わりに[[Dynamixelコンフィギュレータ]]を使用してパソコンと通信することも可能です。 | FDIII-HCの変わりに[[Dynamixelコンフィギュレータ]]を使用してパソコンと通信することも可能です。 | ||
Line 46: | Line 44: | ||
反射型フォトインタラプタのOUTとMultifunction I/O moduleのCN2のPin2:PIO0を接続します。勿論PIO1~PIO7でも構いません。 | 反射型フォトインタラプタのOUTとMultifunction I/O moduleのCN2のPin2:PIO0を接続します。勿論PIO1~PIO7でも構いません。 | ||
- | Multifunction I/O moduleのCN2には、VOUTとGND端子が1つずつしかありません。複数台のセンサを接続したり、後でセンサを取り外したりする場合は、ユニバーサル基板とピンヘッダで変換基板を作り、ケーブルと3ピンコネクタでセンサを接続するなどの工夫が必要です。 | + | Multifunction I/O moduleのCN2には、VOUTとGND端子が1つずつしかありません。複数台のセンサを接続したり、後でセンサを取り外したりする場合は、ユニバーサル基板とピンヘッダで変換基板を作り、ケーブルと3ピンコネクタでセンサを接続するか、ブレッドボードで配線するなどの工夫が必要です。 |
#ref(figure2.png) | #ref(figure2.png) | ||
Line 67: | Line 65: | ||
コントロールテーブルの反射型フォトインタラプタを接続した端子に対するPIO Configを0に設定します。 | コントロールテーブルの反射型フォトインタラプタを接続した端子に対するPIO Configを0に設定します。 | ||
- | PIO Configの設定は、運用時のプログラム内では設定しないことをお勧めします。 | + | PIO Configの設定は、運用時のプログラム内では書き変えないことをお勧めします。 |
- | PIO Configを含む電源を切っても保存されるEEPROMエリア(アドレス0~24)の書き換え回数には制限があるためです。 | + | PIO Configを含む電源を切っても保存されるEEPROMエリア(アドレス0~24)の書き換え回数には制限があるためです。~ |
制限といっても普通に使用していれば制限を越えることはまずありません。 | 制限といっても普通に使用していれば制限を越えることはまずありません。 | ||
しかし誤ってプログラムのループの中で高速に書き換えを行ってしまった場合、あっと言う間に制限を越えてしまう危険性があります。 | しかし誤ってプログラムのループの中で高速に書き換えを行ってしまった場合、あっと言う間に制限を越えてしまう危険性があります。 | ||
- | Multifunction I/O moduleの設定の変更にはDxpacket Configuratorを使用します。 | + | PIO0 Configを0にするプログラムを以下に示します。 |
- | 基本的な使い方はDynamixel Configuratorと同じですのでそちらを参考にしてください。 | + | |
+ | #include <fd.h> | ||
+ | |||
+ | void main (void) { | ||
+ | fd_Init (0, BT_CONSOLE, FD_BEEP_MMI | FD_BEEP_PACKETERR | FD_BEEP_LOWVOLTAGE | FD_BEEP_BOOTUP, 7.4); | ||
+ | |||
+ | fdWait(2000); | ||
+ | fd_DXWriteByteData (200, 6, 0); | ||
+ | fd_printf ("Complete"); | ||
+ | fd_SoftReset(); | ||
+ | while (1); | ||
+ | } | ||
+ | |||
+ | 一度だけ実行しましょう。~ | ||
+ | 書き換えが終わるとブートローダへ戻ります。 | ||
+ | |||
+ | fd_DXWriteByteData (200, 6, 0); | ||
+ | ここでIDが200のMultifunction I/O moduleのアドレス6を0に書き換えています。アドレス6はPIO0 Configです。~ | ||
+ | IDとアドレスは適宜変更してください。 | ||
**プログラミング [#k2387ac0] | **プログラミング [#k2387ac0] | ||
Line 84: | Line 99: | ||
#include <fd.h> | #include <fd.h> | ||
#define KEY_QUIT { if(fd_rx_buff()) fd_SoftReset();} | #define KEY_QUIT { if(fd_rx_buff()) fd_SoftReset();} | ||
+ | |||
void main (void) { | void main (void) { | ||
uint8_t ReadData; // アドレス42の値 | uint8_t ReadData; // アドレス42の値 | ||
bool PIO0; // アドレス42のビット0の値 | bool PIO0; // アドレス42のビット0の値 | ||
+ | |||
fd_Init (0, BT_CONSOLE, FD_BEEP_MMI | FD_BEEP_PACKETERR | FD_BEEP_LOWVOLTAGE | FD_BEEP_BOOTUP, 7.4); | fd_Init (0, BT_CONSOLE, FD_BEEP_MMI | FD_BEEP_PACKETERR | FD_BEEP_LOWVOLTAGE | FD_BEEP_BOOTUP, 7.4); | ||
+ | |||
while (1) { | while (1) { | ||
- | fd_DXReadByteData (1, 42, &ReadData); | + | fd_DXReadByteData (200, 42, &ReadData); |
PIO0 = (ReadData & (1 << 0) ) >> 0; | PIO0 = (ReadData & (1 << 0) ) >> 0; | ||
fd_printf ("%d : %d\r", ReadData, PIO0); | fd_printf ("%d : %d\r", ReadData, PIO0); | ||
Line 101: | Line 116: | ||
---- | ---- | ||
- | fd_DXReadByteData (1, 42, &ReadData); | + | fd_DXReadByteData (200, 42, &ReadData); |
- | Multifunction I/O module(ID=1)のDigital In(アドレス42)のデータをReadDataに代入しています。IDを変更した場合は適宜書き換えてください。 | + | Multifunction I/O module(ID=200)のDigital In(アドレス42)のデータをReadDataに代入しています。IDを変更した場合は適宜書き換えてください。 |
---- | ---- |