Frustration with a simple radio link via XBee

Hiya.

I am in the process of rebuilding a simple walking robot. Previously I had used a cheap RC radio set and a custom microcontroller board in the robot to perform signal mixing to drive servos. On the rebuild I’m replacing that with a Pololu micro SSC (a serial input, servo controller board) in the robot, and a microcontroller (a Funnel IO board) in the transmitter, the idea being to move the mixing and control logic to the controller to give me a lot more flexibility in controlling the movement.

With a wire directly connecting the serial output of the microcontroller to the serial input on the robot, everything works great. To make the serial link wireless, I bought a pair of XBee series 2.5 modules. This may have been a mistake.

Initially, foolishly thinking this would be easy, I connected the serial output of one of the XBee modules to the input on the Pololu micro SSC, plugged the other XBee module into the Funnel IO. Nothing happened. I verified that the controller in the Funnel IO board was sending valid servo data into the transmitting XBee, and that there was no signal whatsoever coming out of the receiving XBee with a scope. After reading through the manual and various online guides I programmed the controller to send configuration strings into both XBee modules to try and set them to do what I wanted. Still no luck.

At this point I did what I probably should have done earlier - downloaded the X-CTU configuration software and connected the XBee modules to the computer with a FTDI USB communication board. One of the XBee modules wouldn’t respond in any way to the PC. The other one did respond to the X-CTU utility, but the settings it was programmed with didn’t match anything I’d seen in the manual or guides I’d seen. When I tried to change its settings to do what I thought it should be, it stopped responding completely. I tried flashing the firmware as suggested. Nothing happened.

Now I have two XBee modules that seem to be completely dead, and no wireless serial link. All I want is a simple point-to-point wireless serial link. I have since read that I would have been better off with the series 1 XBee boards instead of the series 2.5, since I just want a point-to-point link and don’t need mesh networks or anything similar. However I am at this point reluctant to buy a new set of radios unless I know that these will actually do what I need them to do.

Anyone had any luck setting up a simple, unidirectional, point-to-point wireless serial connection with XBee radios? Is there some trick or secret I’m missing here? Should I give up on the XBee units and look into some completely different technology here?

Isn’t the Pololu Micro SSC a 5v device? The XBee modules are 3.3v. You may have damaged them if you ran them at 5v.

riden:
Isn’t the Pololu Micro SSC a 5v device? The XBee modules are 3.3v. You may have damaged them if you ran them at 5v.

The Pololu Micro SSC is a 5V device, but it’s a 5V input being driven by the 3.3V output of the XBee. That shouldn’t be a problem, since the input to the SSC is high-impedance and unless something really strange is going on shouldn’t feed 5V back to the XBee unit.

I do have a separate 3.3V regulator to provide power to the XBee, and have tested driving the SSC with a 3.3V serial data stream directly from the Funnel I/O board. The Pololu SSC seems to accept a 3.3V input. Technically I should use a level-shifter anyway, and I will put one in if I decide to keep on with the XBee boards, but I really doubt that was the cause of the problem.

Thanks for clearing that up. I’m not sure what to advise as the XBee modules work really well for this use. The fact that X-CTU can’t talk to one of the modules isn’t good. I’ve never had to go down this path before, but does the XBee have a hardware reset that will restore the radio back to factory settings? I also presume that you never changed the firmware on the devices. Perhaps others can be of more help.

I’ve seen XCTU not talk to an XBee series one on several occasions. There are tricks that sometimes will revive it, assuming no hardware fault.

Tech support at Digi talked me through two or three tricky ways to force the microprocessor in the XBee to go into the bootload mode so you can download via XCTU. One way was to hold reset while powering on and so on, another was to run XCTU with the XBee unplugged and plug it in while power is applied to the dev kit motherboard, and another was to set XCTU’s “don’t change baud rate” tic box on the main window.

I also had one where loading rev 10CD of firmware mysteriously made it work but older versions would not.

OK. I bought two new XBee modules, series 1, and achieved some degree of success. After hooking each unit up to my laptop and running the X-CTU software to set addresses and such I was able to send serial data from one unit to the other. I still can’t get the Pololu to accept data from the XBee, I suspect there’s something odd going on with the baud rate or bytes getting dropped. Might be able to get something to work with a lower baud rate. I’m going to need to figure out how to use one of the digital IO lines on the XBee as a manual reset for the Pololu board since there’s no other way to clear an error remotely.

ellindsey:
I still can’t get the Pololu to accept data from the XBee, I suspect there’s something odd going on with the baud rate or bytes getting dropped. Might be able to get something to work with a lower baud rate.

Have you confirmed, in addition to the 3.3V versus 5V UART signals, the UART signal polarity compatibility between the two? That is, a mark = 0v versus mark = 3.3V. and vice-versa for space.

Found the problem. The Funnel IO board was transmitting at 19200, not 38400, despite the line “Serial.begin(38400)” in my code. Strange.

Seems to be working now. I still need to hook up one of the data output lines on the XBee to the reset input on the Pololu SSC board since the SSC tends to lock up if it gets any unexpected characters at all.

ellindsey:
Found the problem. The Funnel IO board was transmitting at 19200, not 38400, despite the line “Serial.begin(38400)” in my code. Strange.

Haha I hate when that happens, always good to check your baud rates :slight_smile: