2.5 KiB

SoftRcPulseOut library

SoftRcPulseOut is pseudo-asynchronous library designed to generate RC pulse signals. RC pulse signals are intended to command servos, Electronic Speed Controllers (ESC), Brushless Controllers and any devices expecting such a command signal.

Some examples of use cases:

  • Servo/ESC/Brushless Controller tester
  • Servo sequencer (look at RcSeq library which uses SoftRcPulseOut)
  • Robot wheels using modified Servo to support 360° rotation
  • RC pulse stretcher (in conjunction with SoftRcPulseIn library)

Supported Arduinos:

  • ATmega368 (UNO)
  • ATmega2560 (MEGA)
  • ATtiny84 (Standalone)
  • ATtiny85 (Standalone or Digispark)
  • ATtiny167 (Digispark pro)

Tip and Tricks:

Develop your project on an arduino UNO or MEGA, and then shrink it by loading the sketch in an ATtiny or Digispark (pro).

API/methods:

  • The SoftRcPulseOut library uses the same API as the regular SoftwareServo library:

    • attach()
    • attached()
    • detach()
    • write()
    • read()
    • setMinimumPulse()
    • setMaximumPulse()
    • refresh()
  • Two additional methods allow using µs rather than angle in ° :

    • write_us()
    • read_us()
  • Methods for version management:

    • LibVersion
    • LibRevision
    • LibTextVersionRevision
  • Synchronization:

    • By giving 1 or true as optional argument for the SoftRcPulseOut::refresh() method, the pulses are refreshed immediately (without waiting for the usual 20ms).

    • the SoftRcPulseOut::refresh() method returns 1 or true when the pulses have been refreshed. Testing this return value provides a 20ms timer.

Design considerations:

The SoftRcPulseOut library relies on a 8 bit timer. This allows using it even on little MCU (such as ATtiny85) which do not have any 16 bit timer.

Whereas a 8 bit timer is used for pulse generation, the jitter is limited by using anticipated interrupt masking.

Interrups are only masked during rising and falling edges of the pulse signals.

CAUTION:

The end user shall also use asynchronous programmation method in the loop() function (not too long blocking functions such as delay(1000): the SoftRcPulseOut::refresh() method shall be called at least every 50ms).

Contact

If you have some ideas of enhancement, please contact me by clicking on: RC Navy.