This is another advanced home-made device, It took me weeks to do it. I was looking at the Mindsensors servo controller, when Matt Allen casually mentioned you could make them yourself. Once I set out to make one, I wanted it to do a little bit more.
I thought it would be nice if it could read input from an RC receiver as well. The final design has 2 readable inputs and 3 switchable ones, so you can directly control the servos.
Starting in the top-left corner, going clockwise, there is the PICAXE programmer header, 3 servo outputs, the servo battery connector, the NXT connector, 2 readable inputs and finally 3 switchable inputs. The PICAXE can directly control the outputs, or route them straight to the 3 non-readable inputs, for remote control.
If you know what you’re doing, this is the stripboard layout I designed. Use wisely, and at your own risk.
The code, more or less compatible with the Mindsensors quick mode.
#picaxe20x2 #no_data '#define switching setfreq m32 init: table 0x00, ("V0.1") table 0x08, ("pepijn") table 0x10, ("servo") for b20 = 0 to 0x17 readtable b20, @ptrinc next b20 symbol servin1 = w0 symbol servin2 = w1 symbol servpos = b4 symbol servpin = b5 symbol incontrol = b6 servo B.2,150 servo B.3,150 servo B.4,150 pullup %10100000 hi2csetup i2cslave, 0x02 setintflags %01000000,%01000000 main: pulsin b.1, 1, servin1 pulsin b.0, 1, servin2 put 0x42, word servin1 put 0x44, word servin2 #ifdef switching if servin1 < 1200 then incontrol = 1 high C.4 high C.3 high C.2 else incontrol = 0 low C.4 low C.3 low C.2 endif #else incontrol = 1 high C.4 high C.3 high C.2 #endif goto main interrupt: setintflags %01000000,%01000000 hi2cflag = 0 if incontrol = 1 then get hi2clast, servpos let b20 = hi2clast - 0x5A lookup b20,(B.2,B.3,B.4),servpin servopos servpin,servpos endif return