5: 2010-11-04 (木) 16:18:21 eid7gud  |
現: 2010-11-05 (金) 19:44:27 eid7gud  |
| | LEDのON/OFF駆動ならPIO4~7、輝度を変えての点灯ならPIO4と5が利用できます。 | | LEDのON/OFF駆動ならPIO4~7、輝度を変えての点灯ならPIO4と5が利用できます。 |
| | | | |
| - | Multifunction I/O moduleのCN2には、VOUTとGND端子が1つずつしかありません。複数台のLEDを接続したり、後でLEDを取り外したりする場合は、ユニバーサル基板とピンヘッダで変換基板を作り、ケーブルと3ピンコネクタでセンサを接続するなどの工夫が必要です。 | + | Multifunction I/O moduleのCN2には、VOUTとGND端子が1つずつしかありません。複数台のLEDを接続したり、後でLEDを取り外したりする場合は、ユニバーサル基板とピンヘッダで変換基板を作り、ケーブルと3ピンコネクタでセンサを接続するか、ブレッドボードで配線するなどの工夫が必要です。 |
| | | | |
| | ''変換基板作成例'' | | ''変換基板作成例'' |
| | Multifunction I/O moduleが度々リセットするような場合は、別途電源を用意し外部機器に供給する必要があります。 | | Multifunction I/O moduleが度々リセットするような場合は、別途電源を用意し外部機器に供給する必要があります。 |
| | | | |
| | + | またPWM駆動のようにPIOをソース源とする場合は1端子あたり30mA以下に抑え、さらに全端子の電流が50mAを超えないように調整してください。 |
| | | | |
| | #ref(figure3.png) | | #ref(figure3.png) |
| | しかし誤ってプログラムのループの中で高速に書き換えを行ってしまった場合、あっと言う間に制限を越えてしまう危険性があります。 | | しかし誤ってプログラムのループの中で高速に書き換えを行ってしまった場合、あっと言う間に制限を越えてしまう危険性があります。 |
| | | | |
| - | Multifunction I/O moduleの設定の変更にはDxpacket Configuratorを使用します。 | + | PIO4 Configを1にするプログラムを以下に示します。 |
| - | 基本的な使い方は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, 10, 1); |
| | + | fd_printf ("Complete"); |
| | + | fd_SoftReset(); |
| | + | while (1); |
| | + | } |
| | + | |
| | + | 一度だけ実行しましょう。~ |
| | + | 書き換えが終わるとブートローダへ戻ります。~ |
| | + | PWM駆動をする場合は以下修正が必要です。 |
| | + | |
| | + | fd_DXWriteByteData (200, 10, 1); |
| | + | |
| | + | ここでIDが200のMultifunction I/O moduleのアドレス10を1に書き換えています。アドレス10はPIO4 Configです。~ |
| | + | PWM駆動をする場合は第3引数は1ではなく4となります。~ |
| | + | IDとアドレスは適宜変更してください。 |
| | | | |
| | **プログラミング [#k2387ac0] | | **プログラミング [#k2387ac0] |
| | #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 DigitalOut = 255; // アドレス43の値 | | uint8_t DigitalOut = 255; // アドレス43の値 |
| | + | |
| | 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) { |
| | DigitalOut |= (1 << 4); | | DigitalOut |= (1 << 4); |
| - | fd_DXWriteByteData (1, 43, DigitalOut); | + | fd_DXWriteByteData (200, 43, DigitalOut); |
| | fd_Wait (1000); | | fd_Wait (1000); |
| | DigitalOut &= ~(1 << 4); | | DigitalOut &= ~(1 << 4); |
| - | fd_DXWriteByteData (1, 43, DigitalOut); | + | fd_DXWriteByteData (200, 43, DigitalOut); |
| | fd_Wait (1000); | | fd_Wait (1000); |
| | KEY_QUIT; | | KEY_QUIT; |
| | #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 Duty = 0; // デューティー比 | | uint8_t Duty = 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_DXWriteByteData (1, 49, Duty); | + | fd_DXWriteByteData (200, 49, Duty); |
| | Duty++; | | Duty++; |
| | if (Duty > 255) Duty = 0; | | if (Duty > 255) Duty = 0; |