;*************************************************************** ; ; SERIAL COMMUNICATION SPECIFICATION ; ;*************************************************************** RS232 PARAMETERS: 9600 bps, 8 byte, NO parity, NO handshaking, 2 STOP bit ;*************************************************************** ; ; COMMAND TO FROM PC TO SERVOCONTROL ; ;*************************************************************** - VALUE ARE EXPRESSED IN BINARY - STOP = B'00000000' ; START PWM FOR DRIVING SERVOS (GREEN LED ON); 1 BYTE COMMAND START = B'00000001' ; START PWM FOR DRIVING SERVOS (GREEN LED OFF); 1 BYTE COMMAND LOAD = B'00000010' ; UPDATE SEQUENCE MEMORY OF MICRO BY PC (RED LED ON DURING PROGRAMMATION); (SEE PROGR. PROTOCOL) START SEQ = B'00000011' ; START AUTMATIC ESECUTION OF SEQUENCE IN MEMORY (RED & GREEN LEDs ON); 1 BYTE COMMAND STOP SEQ = B'00000100' ; STOP AUTMATIC ESECUTION OF SEQUENCE IN MEMORY (RED & GREEN LEDs OFF); 1 BYTE COMMAND DOWNLOAD = B'00000110' ; READ MEMORY FROM MICRO; 1 BYTE COMMAND; (SEE PROGR PROTOCOL) ERASE = B'00000111' ; ERASE SEQUENCE MEMORY; 1 BYTE COMMAND --- DO NOT USE! RESERVED! TEST = B'00010000' ; TEST; 1 BYTE COMMAND --- DO NOT USE! RESERVED! RESET = B'00010001' ; RESET PROCESSOR; 1 BYTE COMMAND: SUGGESTED AFTER PROGRAMMATION! --------- ALL FOLLOWING COMMANDS ARE 2 BYTE COMMANDS ----------- - FIRST BYTE (SELECTING SERVO TO UPDATE) MUST BE FOLLOWED BY - - A BYTE WITH THE VALUE (0-255) FOR THE SELECTED SERVOCONTROL - - VALUE MUST BE CALCULATE: BINARY VALUE = ((DEGREE * 2) + 128) - - RANGE: -64° / +63.5° MAX RESOLUTION 0.5° - UPDATE SERVO 0 = B'00001000' ; UPDATE SERVO 0 UPDATE SERVO 1 = B'00001001' ; UPDATE SERVO 1 UPDATE SERVO 2 = B'00001010' ; UPDATE SERVO 2 UPDATE SERVO 3 = B'00001011' ; UPDATE SERVO 3 UPDATE SERVO 4 = B'00001100' ; UPDATE SERVO 4 UPDATE SERVO 5 = B'00001101' ; UPDATE SERVO 5 UPDATE SERVO 6 = B'00001110' ; UPDATE SERVO 6 UPDATE SERVO 7 = B'00001111' ; UPDATE SERVO 7 UPDATE SERVO 8 = B'00101000' ; UPDATE SERVO 8 (ONLY FOR SERVO DRIVER V 2.0) UPDATE SERVO 9 = B'00101001' ; UPDATE SERVO 9 (ONLY FOR SERVO DRIVER V 2.0) UPDATE SERVO 10 = B'00101010' ; UPDATE SERVO 10 (ONLY FOR SERVO DRIVER V 2.0) UPDATE SERVO 11 = B'00101011' ; UPDATE SERVO 11 (ONLY FOR SERVO DRIVER V 2.0) ;*************************************************************** ; ; PROGRAMMING PROTOCOL ; ;*************************************************************** --- PROGRAMMING SEQUENCE --- UPDATE SEQUENCE MEMORY OF MICRO BY PC IS STARTED SENDING THE BYTE B'00000010' (IN DECIMAL "2") TO THE MICROCONTROLLER: THIS INITIALIZATION BYTE MUST BY FOLLOWED BY THE "NUMBERS OF BYTES OF COMPLETE SEQUENCE" THAT WILL BE SENDED. "NUMBERS OF BYTES OF COMPLETE SEQUENCE" MUST BE A 2 BYTE NUMBER (HIGH AND LOW BYTE FOR "NUMBERS OF BYTES OF COMPLETE SEQUENCE"). AFTER THIS THE MICROCONTROLLER WILL SEND AN ACK BYTE (B'11111111', IN DECIMAL "255"). AFTER SENDED THE ACK CHAR THE MICROCONTROLLER IS READ TO RECEIVE ALL THE COMPLETE SEQUENCE. THE SEQUENCE MUST COMPOSED BY MAX 1024 STEPS. EACH STEP IS COMPOSED BY THE 8 (OR 12 FOR V 2.0) BYTE CONTAINIG VALUES FOR SERVOS AND OTHER THO BYTE CONTAINING THE WAITING TIME (2 BYTE LONG 0-65535) FOR THE SEQUENCE: -> VALUE OF SERVO MUST BE CALCULATE IN THIS WAY: SERVO VALUE = ((DEGREE * 2) + 128) -> VALUE OF TIMA MUST BE CALCULATE IN THIS WAY: TIME VALUE = TIME(ms) / 20 FOR EACH STEP MUST BE SENDED THIS SEQUENCE OF BYTE: FOR V 1.0 SERVO_0 VALUE (0-255), SERVO_1 VALUE (0-255), ... ,SERVO_7 VALUE (0-255), TIME_HIGH_BYTE VALUE (0-255), TIME_LOW_BYTE VALUE (0-255) "NUMBERS OF BYTES OF COMPLETE SEQUENCE" = NUMBER OF STEP * 10 FOR V 2.0 SERVO_0 VALUE (0-255), SERVO_1 VALUE (0-255), ... ,SERVO_11 VALUE (0-255), TIME_HIGH_BYTE VALUE (0-255), TIME_LOW_BYTE VALUE (0-255) "NUMBERS OF BYTES OF COMPLETE SEQUENCE" = NUMBER OF STEP * 14 NOTE: EACH 256 BYTES RECEIVED MICRO WILL SEND AN ACK BYTE (B'11111111', IN DECIMAL "255") --- READ SEQUENCE --- READING OF MEMORISED SEQUENCE START BY SENDING TO THE MICRO BYTE B'00000110' (IN DECIMAL "6"). RECEIVED THIS BYTE THE MICRO WILL SEND 2 BYTE CONTAINING "NUMBERS OF BYTES OF COMPLETE SEQUENCE" AND AFTER ALL SEQUENCE WILL BE SENDED. THE SEQUENCE HAS THE SAME FORMAT SHOWED ABOVE FOR THE PROGRAMMING SEQUENCE