Problem using the 16 servo controller

i just start using the pololu serial 16 servo controller, after assembled it i try to go through the initial test, the first part, where grounded the serial input was successful, which all the led on, but i really don’t understand what is meant by real serial input, can u specifically explain to me this proccess, thanks.

for the second part, when i unplug the grounded signal the yellow led on, and i connect the serial DB9 to my pc, while open the hyper terminal, the leds were blinking, signaling that the boud rate was either high and sometimes low,i can’t get what was stated inside the manual, could u explain to me? thanks

hope to hear from u soon

Hello,

It sounds as if your servo controller is working. The servo controller requires the first byte it sees to be 0x80 (or 0xFF in Mini SSC II mode) to calculate the baud rate. You are most likely sending other values than that from hyper terminal, which is why you would see baud rate errors.

What happens when you send the correct command packet?

- Jan

Thanks for the reply.

here are some quetion need your confirmation…

1.the steps in the initial test. after i’ve connect the ground to the ‘S’, the 4 led light up, then before unplug the grounded wire, since i’m using the pc(hyper terminal, boud rate 9600) i connect the both serial db9, computer and the controller. then i unplug the ground wire, is it correct?
afterward i type by regarding to the protocal given?

2.what shall i type in the hyper terminal window? coz there is no char for ascii 0x80, how?

thanks

Hello,

It sounds like your controller is working, so you don’t need to worry about the initial test for now. In general, you do NOT want to have an input connected to ground as you also try to send it serial data. Disconnect the ground connection before you do anything else.

If you want to just send commands, you need a terminal that will let you send hex (or binary) values, not just ascii characters. If you do a search, you’ll find various free or demo versions you can use to test your controller.

- Jan

Hi,

I’m trying to control the controller by using the PIC16F877A, sending serial data, 0x80, 0x01, 0x04, 0x00, 0x0B, 0xB8, but there is no change of direction. and the yellow led light, the red led blink, what does this mean? why this happen? and how to solve this?

hope to hear from u soon, thanks.

besides, does anyone have sample program (PIC assembly language) to control the servo? hope u all can help me, k?

Thanks again…

regards
lee

hi,

here is another problem i’m facing now.
i try to send data as above message 80,01,04,01,1B,B3, from the PIC to the servo controller, but the green light flashing and the red light lighted.

the baud rate i’ve tried (19200, 9600, 4800) comes uot with the same result.

Why? and how to solve this?

Thanks

regards
lee

Hello,

This is an indication of a problem with the baud rate detection. This can result from either a bad baud rate or bad data being sent at the right baud rate. Do you have a way of confirming your serial output (e.g. an oscilloscope or another serial device)?

Our sample project 1 includes code for setting up serial transmission on a PIC with a UART, so that code should be applicable to your project. If things don’t work, you can post the relevant code here and someone might be able to spot the problem. Make sure you let us know what your clock speed is.

- Jan

hi,
thanks for the reply

i’ve seen the program for project 1, and the setting is same with me.
for your information, i use pc to see for the code generated, is correct. but the green led stil blinking and red stil light.

here is the program:

	LIST P=16F877A
	#include <P16F877A.INC>
	
	__config 0x3FFA



	

;========= CONSTANT -- USART 

RTS_OUTPUT	EQU	1        
;Port B Pin 1 output for flow control
CTS_INPUT	EQU	2	
;Port B Pin 2 input for flow control

;Constant for baud for 9600 baud
BAUD_CONSTANT	EQU	0x33

;Fosc 8Mhz

;===============MACRO ============

BANK0		MACRO
		BCF	STATUS,RP0
		BCF	STATUS,RP1			;select bank0
		ENDM

BANK1		MACRO
		BSF	STATUS,RP0
		BCF	STATUS,RP1			;select bank1
		ENDM


;============================== STARTING VECTOR =================================

		ORG	0X00
		GOTO		INIT


;============================== INTERRUPT VECTOR ================================
	
		ORG	0X04		;interrupt vector
		GOTO	INIT

;== Initial Set Up 
	
		ORG	0X10
INIT	BANK1	
		MOVLW	0X06
		MOVWF	ADCON1
		MOVLW	B'11111111'			;INPUT
		MOVWF	TRISA
		MOVLW	0XFF
		MOVWF	TRISB
		CLRF	TRISC				;OUTPUT		        CLRF	TRISD
		CLRF	TRISE
		

;============= Main Program ======

MAIN		CALL	SER_SETUP
		MOVLW	0X80
		CALL	SERTX
		MOVLW	0X01
		CALL	SERTX
		MOVLW	0X02			CALL	SERTX
		MOVLW	0X01			CALL	SERTX
		MOVLW	0X40
		CALL	SERTX

SER_SETUP	BANK0
		;BSF	PORTB,1			;set RTS off before setting as output
		BANK1							;change from bank0 to bank1
		;BCF	TRISB,1	 	;enable RTS pin as output

	MOVLW   BAUUD_CONSTANT
;set baud rate
	MOVWF	SPBRG
	BSF	TXSTA,BRGH
;baud rate high speed option; 0 for low speed
	BSF	TXSTA,TXEN	
;enable transmission
	BANK0				;change from bank1 to bank0
	BSF	RCSTA,SPEN			;enable serial port
	RETURN


SERTX	BANK0
;change from unknown bank to bank0
	BTFSS	PIR1,TXIF		;check that buffer is empty
	GOTO	$-1
	MOVWF	TXREG			;transmit byte
	RETURN


	END

Hello,

You might try simplifying your program to find where the error happens. Begin by setting the serial line high, wait a while, then send one byte at a time with big pauses in between (or with some feedback you can use to determine where in the program you are). I suspect that the error condition will happen after the first byte (0x80), but it would be good to know for sure.

Also, you’re using the logic-level serial input, right? What voltage is your PIC running at?

- Jan

thanks for the reply,

after many time of trial, i can control the servo motor already,

however, here is another problem coz the controller only read the first 6 bytes @ 5 bytes, it means that if i’m writting 2 packet of 6 bytes data, it only read the 1st one and go to the first position, whereas the 2nd one is neglected, why is this happen?

i’m using 8MHz and PIC16F877A power supply is 5V

thanks again for the technical help. hope to hear from u soon.

regard
lee