Robotis RX-28 User Manual

Page of 39
 
DYNAMIXEL 
RX-28 
 
// --- Gloval Variable Number --- 
volatile byte gbpRxInterruptBuffer[256];  
byte gbpParameter[128]; 
byte gbRxBufferReadPointer; 
byte gbpRxBuffer[128];  
byte gbpTxBuffer[128];  
volatile byte gbRxBufferWritePointer; 
 
int main(void) 
{  
  byte bCount,bID, bTxPacketLength,bRxPacketLength; 
   
  PortInitialize(); //Port In/Out Direction Definition 
  RS485_RXD; //Set RS485 Direction to Input State. 
  SerialInitialize(SERIAL_PORT0,1,RX_INTERRUPT);//RS485 
Initializing(RxInterrupt) 
  SerialInitialize(SERIAL_PORT1,DEFAULT_BAUD_RATE,0); 
//RS232 
Initializing(None Interrupt) 
   
  gbRxBufferReadPointer  =  gbRxBufferWritePointer  =  0;    //RS485 
RxBuffer Clearing. 
 
  sei();  //Enable Interrupt -- Compiler Function 
  TxDString("\r\n  [The  Example  of  Dynamixel  Evaluation  with 
ATmega128,GCC-AVR]");  
 
//Dynamixel Communication Function Execution Step. 
// Step 1. Parameter Setting (gbpParameter[]). In case of no parameter 
instruction(Ex.  INST_PING),  this  step  is  not 
needed. 
// 
Step 
2. 
TxPacket(ID,INSTRUCTION,LengthOfParameter); 
--Total 
TxPacket Length is returned 
//  Step  3.  RxPacket(ExpectedReturnPacketLength);  --  Real  RxPacket 
Length is returned 
// Step 4 PrintBuffer(BufferStartPointer,LengthForPrinting); 
 
  bID = 1; 
  TxDString("\r\n\n Example 1. Scanning Dynamixels(0~9). -- Any Key to 
Continue."); RxD8(); 
  for(bCount = 0; bCount < 0x0A; bCount++) 
  { 
    bTxPacketLength = TxPacket(bCount,INST_PING,0); 
    bRxPacketLength = RxPacket(255); 
    TxDString("\r\n TxD:"); PrintBuffer(gbpTxBuffer,bTxPacketLength); 
    TxDString(", RxD:");    PrintBuffer(gbpRxBuffer,bRxPacketLength); 
    if(bRxPacketLength == DEFAULT_RETURN_PACKET_SIZE)  
    { 
      TxDString(" Found!! ID:");TxD8Hex(bCount); 
      bID = bCount;  
    } 
  } 
 
  TxDString("\r\n\n  Example  2.  Read  Firmware  Version.  --  Any  Key  to 
Continue."); RxD8(); 
  gbpParameter[0] = P_VERSION; //Address of Firmware Version 
  gbpParameter[1] = 1; //Read Length 
  bTxPacketLength = TxPacket(bID,INST_READ,2); 
  bRxPacketLength 
RxPacket(DEFAULT_RETURN_PACKET_SIZE+gbpParameter
[1]); 
  TxDString("\r\n TxD:"); PrintBuffer(gbpTxBuffer,bTxPacketLength); 
  TxDString("\r\n RxD:"); PrintBuffer(gbpRxBuffer,bRxPacketLength); 
  if(bRxPacketLength == DEFAULT_RETURN_PACKET_SIZE+gbpParameter[1]) 
  { 
    TxDString("\r\n Return Error      : ");TxD8Hex(gbpRxBuffer[4]); 
    TxDString("\r\n Firmware Version  : ");TxD8Hex(gbpRxBuffer[5]); 
  } 
   
  TxDString("\r\n\n  Example  3.  LED  ON  --  Any  Key  to  Continue."); 
RxD8(); 
  gbpParameter[0] = P_LED; //Address of LED 
  gbpParameter[1] = 1; //Writing Data 
  bTxPacketLength = TxPacket(bID,INST_WRITE,2); 
  bRxPacketLength = RxPacket(DEFAULT_RETURN_PACKET_SIZE); 
  TxDString("\r\n TxD:"); PrintBuffer(gbpTxBuffer,bTxPacketLength); 
  TxDString("\r\n RxD:"); PrintBuffer(gbpRxBuffer,bRxPacketLength); 
   
  TxDString("\r\n\n  Example  4.  LED  OFF  --  Any  Key  to  Continue."); 
RxD8(); 
  gbpParameter[0] = P_LED; //Address of LED 
  gbpParameter[1] = 0; //Writing Data 
  bTxPacketLength = TxPacket(bID,INST_WRITE,2); 
  bRxPacketLength = RxPacket(DEFAULT_RETURN_PACKET_SIZE); 
  TxDString("\r\n TxD:"); PrintBuffer(gbpTxBuffer,bTxPacketLength); 
  TxDString("\r\n RxD:"); PrintBuffer(gbpRxBuffer,bRxPacketLength); 
 
  TxDString("\r\n\n  Example  5.  Read  Control  Table.  --  Any  Key  to 
Continue."); RxD8(); 
  gbpParameter[0] = 0; //Reading Address 
  gbpParameter[1] = 49; //Read Length 
  bTxPacketLength = TxPacket(bID,INST_READ,2); 
  bRxPacketLength 
RxPacket(DEFAULT_RETURN_PACKET_SIZE+gbpParameter
[1]); 
 
  TxDString("\r\n TxD:"); PrintBuffer(gbpTxBuffer,bTxPacketLength); 
  TxDString("\r\n RxD:"); PrintBuffer(gbpRxBuffer,bRxPacketLength); 
  if(bRxPacketLength == DEFAULT_RETURN_PACKET_SIZE+gbpParameter[1]) 
  { 
    TxDString("\r\n"); 
    for(bCount = 0; bCount < 49; bCount++) 
    { 
      TxD8('[');TxD8Hex(bCount);TxDString("]:"); 
TxD8Hex(gbpRxBuffer[bCount+5]);TxD8(' '); 
    } 
  } 
  
  TxDString("\r\n\n Example 6. Go 0x200 with Speed 0x100 -- Any Key to 
Continue."); RxD8(); 
  gbpParameter[0] = P_GOAL_POSITION_L; //Address of Firmware Version 
  gbpParameter[1] = 0x00; //Writing Data P_GOAL_POSITION_L 
  gbpParameter[2] = 0x02; //Writing Data P_GOAL_POSITION_H 
  gbpParameter[3] = 0x00; //Writing Data P_GOAL_SPEED_L 
  gbpParameter[4] = 0x01; //Writing Data P_GOAL_SPEED_H 
  bTxPacketLength = TxPacket(bID,INST_WRITE,5); 
  bRxPacketLength = RxPacket(DEFAULT_RETURN_PACKET_SIZE); 
  TxDString("\r\n TxD:"); PrintBuffer(gbpTxBuffer,bTxPacketLength); 
  TxDString("\r\n RxD:"); PrintBuffer(gbpRxBuffer,bRxPacketLength); 
  
  TxDString("\r\n\n Example 7. Go 0x00  with Speed 0x40 --  Any Key to 
Continue."); RxD8(); 
  gbpParameter[0] = P_GOAL_POSITION_L; //Address of Firmware Version 
  gbpParameter[1] = 0x00; //Writing Data P_GOAL_POSITION_L 
  gbpParameter[2] = 0x00; //Writing Data P_GOAL_POSITION_H 
  gbpParameter[3] = 0x40; //Writing Data P_GOAL_SPEED_L 
  gbpParameter[4] = 0x00; //Writing Data P_GOAL_SPEED_H 
  bTxPacketLength = TxPacket(bID,INST_WRITE,5); 
  bRxPacketLength = RxPacket(DEFAULT_RETURN_PACKET_SIZE); 
  TxDString("\r\n TxD:"); PrintBuffer(gbpTxBuffer,bTxPacketLength); 
  TxDString("\r\n RxD:"); PrintBuffer(gbpRxBuffer,bRxPacketLength); 
    
  TxDString("\r\n\n Example 8. Go 0x3ff with Speed 0x3ff -- Any Key to 
Continue."); RxD8(); 
  gbpParameter[0] = P_GOAL_POSITION_L; //Address of Firmware Version 
  gbpParameter[1] = 0xff; //Writing Data P_GOAL_POSITION_L 
  gbpParameter[2] = 0x03; //Writing Data P_GOAL_POSITION_H 
  gbpParameter[3] = 0xff; //Writing Data P_GOAL_SPEED_L 
  gbpParameter[4] = 0x03; //Writing Data P_GOAL_SPEED_H 
  bTxPacketLength = TxPacket(bID,INST_WRITE,5); 
  bRxPacketLength = RxPacket(DEFAULT_RETURN_PACKET_SIZE); 
  TxDString("\r\n TxD:"); PrintBuffer(gbpTxBuffer,bTxPacketLength); 
  TxDString("\r\n RxD:"); PrintBuffer(gbpRxBuffer,bRxPacketLength); 
  
  TxDString("\r\n\n  Example  9.  Torque  Off  --  Any  Key  to  Continue."); 
RxD8(); 
  gbpParameter[0] = P_TORQUE_ENABLE; //Address of LED 
  gbpParameter[1] = 0; //Writing Data 
  bTxPacketLength = TxPacket(bID,INST_WRITE,2); 
  bRxPacketLength = RxPacket(DEFAULT_RETURN_PACKET_SIZE); 
  TxDString("\r\n TxD:"); PrintBuffer(gbpTxBuffer,bTxPacketLength); 
  TxDString("\r\n RxD:"); PrintBuffer(gbpRxBuffer,bRxPacketLength); 
   
  TxDString("\r\n\n End. Push reset button for repeat");  
 
34