FastArduino v1.10
C++ library to build fast but small Arduino/AVR projects
Loading...
Searching...
No Matches
timer::PulseTimer< NTIMER_, PRESCALER_, T > Class Template Reference

Special kind of timer::Timer, specialized in emitting pulses with accurate width, according to a slow frequency. More...

#include <fastarduino/pulse_timer.h>

Inheritance diagram for timer::PulseTimer< NTIMER_, PRESCALER_, T >:
Collaboration diagram for timer::PulseTimer< NTIMER_, PRESCALER_, T >:

Public Member Functions

 PulseTimer (UNUSED uint16_t pulse_frequency)
 Create a PulseTimer with the provided pulse_frequency. More...
 
- Public Member Functions inherited from timer::Timer< NTIMER_ >
 Timer (TimerMode timer_mode, PRESCALER prescaler, TimerInterrupt interrupts=TimerInterrupt(0))
 Construct a new Timer handler and initialize its mode. More...
 
void set_interrupts (TimerInterrupt interrupts=TimerInterrupt(0))
 Set the list of interrupts that must be triggered by this timer. More...
 
void enable_interrupts (TimerInterrupt interrupts)
 Add new interrupts to be enabled to the current list of interrupts that must be triggered by this timer. More...
 
void disable_interrupts (TimerInterrupt interrupts)
 Remove interrupts from the current list of enabled interrupts triggered by this timer. More...
 
bool are_interrupts_enabled (TimerInterrupt interrupts) const
 Test if interrupts are currently enabled for this timers. More...
 
void set_input_capture (TimerInputCapture input_capture)
 Set the input capture mode for this timer. More...
 
TimerInputCapture input_capture () const
 Return the current TimerInputCapture used by this timer. More...
 
void set_capture_noise_canceller (bool cancel_noise)
 Set or clear the noise canceller for input capture on this timer. More...
 
bool has_capture_noise_canceller () const
 Tell whether noise canceller for this timer's input capture is active or not. More...
 
void set_timer_mode (TimerMode timer_mode)
 Change timer mode. More...
 
TimerMode get_timer_mode () const
 Get current time mode. More...
 
void set_prescaler (PRESCALER prescaler)
 Change prescaler for this timer. More...
 
void begin (TYPE max=0)
 Start this timer in the currently selected mode, with the provided prescaler value and max value. More...
 
void begin_ (TYPE max=0)
 Start this timer in the currently selected mode, with the provided prescaler value and max value. More...
 
void reset (TYPE ticks=0)
 Reset current counter to ticks . More...
 
void reset_ (TYPE ticks=0)
 Reset current counter to ticks . More...
 
TYPE ticks ()
 Return the current counter value for this timer. More...
 
TYPE ticks_ ()
 Return the current counter value for this timer. More...
 
void suspend_interrupts ()
 Temporarily suspend this timer: the timer does not generate any interrupt any longer. More...
 
void suspend_interrupts_ ()
 Temporarily suspend this timer: the timer does not generate any interrupt any longer. More...
 
void resume_interrupts ()
 Resume this timer if it was previously suspended: the timer's counter is reset and the timer starts generating interrupts again. More...
 
void resume_interrupts_ ()
 Resume this timer if it was previously suspended: the timer's counter is reset and the timer starts generating interrupts again. More...
 
bool is_interrupt_suspended ()
 Check if this timer interrupts are currently suspended, i.e. More...
 
void suspend_timer ()
 Suspend this timer, ie stop this timer counting (ticks() will not change then). More...
 
void suspend_timer_ ()
 Suspend this timer, ie stop this timer counting (ticks() will not change then). More...
 
void resume_timer ()
 Resume this timer, ie restart counting (ticks() will start changing again). More...
 
void resume_timer_ ()
 Resume this timer, ie restart counting (ticks() will start changing again). More...
 
void end ()
 Completely stop this timer: timer interrupts are disabled and counter is stopped. More...
 
void end_ ()
 Completely stop this timer: timer interrupts are disabled and counter is stopped. More...
 
template<uint8_t COM>
void set_output_mode (TimerOutputMode mode)
 Change the output mode for this timer; this enables connection between this timer to one of its associated digital output pins. More...
 
template<uint8_t COM>
void set_max (TYPE max)
 Change the maximum value for this timer, in relation to one of its associated digital output pins. More...
 

Additional Inherited Members

- Public Types inherited from timer::Timer< NTIMER_ >
using TYPE = typename TRAIT::TYPE
 The type of this timer's counter (either uint8_t or uint16_t). More...
 
using CALCULATOR = Calculator< NTIMER >
 The Calculator type for this Timer. More...
 
using PRESCALER = typename PRESCALERS_TRAIT::TYPE
 The enum type listing all available precaler values for this timer. More...
 
- Static Public Attributes inherited from timer::Timer< NTIMER_ >
static constexpr const board::Timer NTIMER = NTIMER_
 The Board timer used by this Timer. More...
 
static constexpr const TYPE TIMER_MAX = TRAIT::MAX_COUNTER - 1
 The maximum value that can be set to this timer's counter. More...
 
static constexpr const TYPE PWM_MAX = TRAIT::MAX_PWM
 The maximum value that can be set to this timer's counter in PWM mode. More...
 
static constexpr const board::DigitalPin ICP_PIN = TRAIT::ICP_PIN
 The pin that is used for Input Capture feature, if supported by this timer, or board::DigitalPin::NONE if not. More...
 

Detailed Description

template<board::Timer NTIMER_, typename timer::Calculator< NTIMER_ >::PRESCALER PRESCALER_, typename T = typename board_traits::Timer_trait<NTIMER_>::TYPE>
class timer::PulseTimer< NTIMER_, PRESCALER_, T >

Special kind of timer::Timer, specialized in emitting pulses with accurate width, according to a slow frequency.

This is typically useful for controlling servos, which need a pulse with a width range from ~1000us to ~2000us, send every 20ms, ie with a 50Hz frequency. This implementation ensures a good pulse width precision for both 16-bits and 8-bits timers.

Note: if NTIMER_ is an 8-bits Timer, then one of the following macros must be used to register the necessary ISR for the PulseTimer to work correctly:

For concrete usage, you can check the following examples, provided with FastArduino source:

  • analog/PWM3
  • analog/PWM4
  • motors/Servo1
  • motors/Servo2
Template Parameters
NTIMER_the board::Timer to use for this PulseTimer
PRESCALER_the prescaler value to use for this PulseTimer; it shall be calculated with timer::Calculator::PulseTimer_prescaler()
Tthe type (uint8_t or uint16_t) of the Timer determined by NTIMER_; you should not specify it yourself, as its default value alwayy matches NTIMER_.
See also
timer::Timer
timer::Calculator::PulseTimer_prescaler
REGISTER_PULSE_TIMER8_AB_ISR
REGISTER_PULSE_TIMER8_A_ISR
REGISTER_PULSE_TIMER8_B_ISR

Definition at line 245 of file pulse_timer.h.

Constructor & Destructor Documentation

◆ PulseTimer()

template<board::Timer NTIMER_, typename timer::Calculator< NTIMER_ >::PRESCALER PRESCALER_, typename T = typename board_traits::Timer_trait<NTIMER_>::TYPE>
timer::PulseTimer< NTIMER_, PRESCALER_, T >::PulseTimer ( UNUSED uint16_t  pulse_frequency)
inlineexplicit

Create a PulseTimer with the provided pulse_frequency.

Parameters
pulse_frequencythe frequency, in Hz, at which pulses will be generated; this frequency must match the PRESCALER_ template parameter.

Definition at line 255 of file pulse_timer.h.


The documentation for this class was generated from the following file: