Interrupt-driven RC Servo Function Library (servo.c)
The servoInit and servoOff effectively turn on and turn off servo control. When you run ServoInit, it automatically assigns each "channel" of servo control to be output on the SERVO_DEFAULT_PORT. One "channel" of servo control can control one servo and must be assigned single I/O pin for output.
- This code allows you to drive up to 8 RC servos from any combination of ports and pins on the AVR processor. Using interrupts, this code continuously sends control signals to the servo to maintain position even while your code is doing other work.
If you're using all eight channels (SERVO_NUM_CHANNELS = 8), then then by default the code will use SERVO_DEFAULT_PORT pins 0-7. If you're only using four channels, then pins 0-3 will be used by default.
The command servoSetChannelIO(channel, port, pin) allows you to reassign the output of any channel to any port and I/O pin you choose. For exampe, if you have an RC servo connected to PORTC, pin 6, and you wish to use channel 2 to control it, use:
servoSerChannelIO( 2, _SFR_IO_ADDR(PORTC), 6)
(NOTE: you must include the "_SRF_IO_ADDR()" part around your port)
The servoSetPostion and servoGetPosition commands allow you to command a given servo to your desired position. The position you request must lie between the SERVO_MIN and SERVO_MAX limit you defined.
: This servo library has been tested to work without issue on several different AVR processors and with several different brands/kinds of servos. However:
- Proper output duty cylces are dependent upon a user calibation and configuration.
- IF YOUR SERVOS ARE EXCEPTIONALLY POWERFUL, AN ERRONEOUS OUTPUT DUTY CYCLE GENERATED FROM THIS CODE OR ANY OTHER SOURCE CAN DAMAGE YOUR SERVO'S INTERNAL DRIVER CHIP OR ITS GEARS!
- I have never experienced any servo damage from erroneous control signal input, but it is possible.
Generated on Sun Oct 29 03:41:09 2006 for Procyon AVRlib by