WPILibC++  2020.3.2-60-g3011ebe
Counter Functions

Functions

 HAL_ENUM (HAL_Counter_Mode)
 The counter mode.
 
HAL_CounterHandle HAL_InitializeCounter (HAL_Counter_Mode mode, int32_t *index, int32_t *status)
 Initializes a counter. More...
 
void HAL_FreeCounter (HAL_CounterHandle counterHandle, int32_t *status)
 Frees a counter. More...
 
void HAL_SetCounterAverageSize (HAL_CounterHandle counterHandle, int32_t size, int32_t *status)
 Sets the average sample size of a counter. More...
 
void HAL_SetCounterUpSource (HAL_CounterHandle counterHandle, HAL_Handle digitalSourceHandle, HAL_AnalogTriggerType analogTriggerType, int32_t *status)
 Sets the source object that causes the counter to count up. More...
 
void HAL_SetCounterUpSourceEdge (HAL_CounterHandle counterHandle, HAL_Bool risingEdge, HAL_Bool fallingEdge, int32_t *status)
 Sets the up source to either detect rising edges or falling edges. More...
 
void HAL_ClearCounterUpSource (HAL_CounterHandle counterHandle, int32_t *status)
 Disables the up counting source to the counter. More...
 
void HAL_SetCounterDownSource (HAL_CounterHandle counterHandle, HAL_Handle digitalSourceHandle, HAL_AnalogTriggerType analogTriggerType, int32_t *status)
 Sets the source object that causes the counter to count down. More...
 
void HAL_SetCounterDownSourceEdge (HAL_CounterHandle counterHandle, HAL_Bool risingEdge, HAL_Bool fallingEdge, int32_t *status)
 Sets the down source to either detect rising edges or falling edges. More...
 
void HAL_ClearCounterDownSource (HAL_CounterHandle counterHandle, int32_t *status)
 Disables the down counting source to the counter. More...
 
void HAL_SetCounterUpDownMode (HAL_CounterHandle counterHandle, int32_t *status)
 Sets standard up / down counting mode on this counter. More...
 
void HAL_SetCounterExternalDirectionMode (HAL_CounterHandle counterHandle, int32_t *status)
 Sets directional counting mode on this counter. More...
 
void HAL_SetCounterSemiPeriodMode (HAL_CounterHandle counterHandle, HAL_Bool highSemiPeriod, int32_t *status)
 Sets Semi-period mode on this counter. More...
 
void HAL_SetCounterPulseLengthMode (HAL_CounterHandle counterHandle, double threshold, int32_t *status)
 Configures the counter to count in up or down based on the length of the input pulse. More...
 
int32_t HAL_GetCounterSamplesToAverage (HAL_CounterHandle counterHandle, int32_t *status)
 Gets the Samples to Average which specifies the number of samples of the timer to average when calculating the period. More...
 
void HAL_SetCounterSamplesToAverage (HAL_CounterHandle counterHandle, int32_t samplesToAverage, int32_t *status)
 Sets the Samples to Average which specifies the number of samples of the timer to average when calculating the period. More...
 
void HAL_ResetCounter (HAL_CounterHandle counterHandle, int32_t *status)
 Resets the Counter to zero. More...
 
int32_t HAL_GetCounter (HAL_CounterHandle counterHandle, int32_t *status)
 Reads the current counter value. More...
 
double HAL_GetCounterPeriod (HAL_CounterHandle counterHandle, int32_t *status)
 
void HAL_SetCounterMaxPeriod (HAL_CounterHandle counterHandle, double maxPeriod, int32_t *status)
 Sets the maximum period where the device is still considered "moving". More...
 
void HAL_SetCounterUpdateWhenEmpty (HAL_CounterHandle counterHandle, HAL_Bool enabled, int32_t *status)
 Selects whether you want to continue updating the event timer output when there are no samples captured. More...
 
HAL_Bool HAL_GetCounterStopped (HAL_CounterHandle counterHandle, int32_t *status)
 Determines if the clock is stopped. More...
 
HAL_Bool HAL_GetCounterDirection (HAL_CounterHandle counterHandle, int32_t *status)
 Gets the last direction the counter value changed. More...
 
void HAL_SetCounterReverseDirection (HAL_CounterHandle counterHandle, HAL_Bool reverseDirection, int32_t *status)
 Sets the Counter to return reversed sensing on the direction. More...
 

Detailed Description

Function Documentation

◆ HAL_ClearCounterDownSource()

void HAL_ClearCounterDownSource ( HAL_CounterHandle  counterHandle,
int32_t *  status 
)

Disables the down counting source to the counter.

Parameters
counterHandlethe counter handle

◆ HAL_ClearCounterUpSource()

void HAL_ClearCounterUpSource ( HAL_CounterHandle  counterHandle,
int32_t *  status 
)

Disables the up counting source to the counter.

Parameters
counterHandlethe counter handle

◆ HAL_FreeCounter()

void HAL_FreeCounter ( HAL_CounterHandle  counterHandle,
int32_t *  status 
)

Frees a counter.

Parameters
counterHandlethe counter handle

◆ HAL_GetCounter()

int32_t HAL_GetCounter ( HAL_CounterHandle  counterHandle,
int32_t *  status 
)

Reads the current counter value.

Reads the value at this instant. It may still be running, so it reflects the current value. Next time it is read, it might have a different value.

Parameters
counterHandlethe counter handle
Returns
the current counter value

◆ HAL_GetCounterDirection()

HAL_Bool HAL_GetCounterDirection ( HAL_CounterHandle  counterHandle,
int32_t *  status 
)

Gets the last direction the counter value changed.

Parameters
counterHandlethe counter handle
Returns
the last direction the counter value changed

◆ HAL_GetCounterSamplesToAverage()

int32_t HAL_GetCounterSamplesToAverage ( HAL_CounterHandle  counterHandle,
int32_t *  status 
)

Gets the Samples to Average which specifies the number of samples of the timer to average when calculating the period.

Perform averaging to account for mechanical imperfections or as oversampling to increase resolution.

Parameters
counterHandlethe counter handle
Returns
SamplesToAverage The number of samples being averaged (from 1 to 127)

◆ HAL_GetCounterStopped()

HAL_Bool HAL_GetCounterStopped ( HAL_CounterHandle  counterHandle,
int32_t *  status 
)

Determines if the clock is stopped.

Determine if the clocked input is stopped based on the MaxPeriod value set using the SetMaxPeriod method. If the clock exceeds the MaxPeriod, then the device (and counter) are assumed to be stopped and it returns true.

Parameters
counterHandlethe counter handle
Returns
true if the most recent counter period exceeds the MaxPeriod value set by SetMaxPeriod

◆ HAL_InitializeCounter()

HAL_CounterHandle HAL_InitializeCounter ( HAL_Counter_Mode  mode,
int32_t *  index,
int32_t *  status 
)

Initializes a counter.

Parameters
modethe counter mode
indexthe compressor index (output)
Returns
the created handle

◆ HAL_ResetCounter()

void HAL_ResetCounter ( HAL_CounterHandle  counterHandle,
int32_t *  status 
)

Resets the Counter to zero.

Sets the counter value to zero. This does not effect the running state of the counter, just sets the current value to zero.

Parameters
counterHandlethe counter handle

◆ HAL_SetCounterAverageSize()

void HAL_SetCounterAverageSize ( HAL_CounterHandle  counterHandle,
int32_t  size,
int32_t *  status 
)

Sets the average sample size of a counter.

Parameters
counterHandlethe counter handle
sizethe size of samples to average

◆ HAL_SetCounterDownSource()

void HAL_SetCounterDownSource ( HAL_CounterHandle  counterHandle,
HAL_Handle  digitalSourceHandle,
HAL_AnalogTriggerType  analogTriggerType,
int32_t *  status 
)

Sets the source object that causes the counter to count down.

Parameters
counterHandlethe counter handle
digitalSourceHandlethe digital source handle (either a HAL_AnalogTriggerHandle of a HAL_DigitalHandle)
analogTriggerTypethe analog trigger type if the source is an analog trigger

◆ HAL_SetCounterDownSourceEdge()

void HAL_SetCounterDownSourceEdge ( HAL_CounterHandle  counterHandle,
HAL_Bool  risingEdge,
HAL_Bool  fallingEdge,
int32_t *  status 
)

Sets the down source to either detect rising edges or falling edges.

Note that both are allowed to be set true at the same time without issues.

Parameters
counterHandlethe counter handle
risingEdgetrue to trigger on rising
fallingEdgetrue to trigger on falling

◆ HAL_SetCounterExternalDirectionMode()

void HAL_SetCounterExternalDirectionMode ( HAL_CounterHandle  counterHandle,
int32_t *  status 
)

Sets directional counting mode on this counter.

The direction is determined by the B input, with counting happening with the A input.

Parameters
counterHandlethe counter handle

◆ HAL_SetCounterMaxPeriod()

void HAL_SetCounterMaxPeriod ( HAL_CounterHandle  counterHandle,
double  maxPeriod,
int32_t *  status 
)

Sets the maximum period where the device is still considered "moving".

Sets the maximum period where the device is considered moving. This value is used to determine the "stopped" state of the counter using the HAL_GetCounterStopped method.

Parameters
counterHandlethe counter handle
maxPeriodthe maximum period where the counted device is considered moving in seconds

◆ HAL_SetCounterPulseLengthMode()

void HAL_SetCounterPulseLengthMode ( HAL_CounterHandle  counterHandle,
double  threshold,
int32_t *  status 
)

Configures the counter to count in up or down based on the length of the input pulse.

This mode is most useful for direction sensitive gear tooth sensors.

Parameters
counterHandlethe counter handle
thresholdThe pulse length beyond which the counter counts the opposite direction (seconds)

◆ HAL_SetCounterReverseDirection()

void HAL_SetCounterReverseDirection ( HAL_CounterHandle  counterHandle,
HAL_Bool  reverseDirection,
int32_t *  status 
)

Sets the Counter to return reversed sensing on the direction.

This allows counters to change the direction they are counting in the case of 1X and 2X quadrature encoding only. Any other counter mode isn't supported.

Parameters
counterHandlethe counter handle
reverseDirectiontrue if the value counted should be negated.

◆ HAL_SetCounterSamplesToAverage()

void HAL_SetCounterSamplesToAverage ( HAL_CounterHandle  counterHandle,
int32_t  samplesToAverage,
int32_t *  status 
)

Sets the Samples to Average which specifies the number of samples of the timer to average when calculating the period.

Perform averaging to account for mechanical imperfections or as oversampling to increase resolution.

Parameters
counterHandlethe counter handle
samplesToAverageThe number of samples to average from 1 to 127

◆ HAL_SetCounterSemiPeriodMode()

void HAL_SetCounterSemiPeriodMode ( HAL_CounterHandle  counterHandle,
HAL_Bool  highSemiPeriod,
int32_t *  status 
)

Sets Semi-period mode on this counter.

The counter counts up based on the time the input is triggered. High or Low depends on the highSemiPeriod parameter.

Parameters
counterHandlethe counter handle
highSemiPeriodtrue for counting when the input is high, false for low

◆ HAL_SetCounterUpdateWhenEmpty()

void HAL_SetCounterUpdateWhenEmpty ( HAL_CounterHandle  counterHandle,
HAL_Bool  enabled,
int32_t *  status 
)

Selects whether you want to continue updating the event timer output when there are no samples captured.

The output of the event timer has a buffer of periods that are averaged and posted to a register on the FPGA. When the timer detects that the event source has stopped (based on the MaxPeriod) the buffer of samples to be averaged is emptied.

If you enable the update when empty, you will be notified of the stopped source and the event time will report 0 samples.

If you disable update when empty, the most recent average will remain on the output until a new sample is acquired.

You will never see 0 samples output (except when there have been no events since an FPGA reset) and you will likely not see the stopped bit become true (since it is updated at the end of an average and there are no samples to average).

Parameters
counterHandlethe counter handle
enabledtrue to enable counter updating with no samples

◆ HAL_SetCounterUpDownMode()

void HAL_SetCounterUpDownMode ( HAL_CounterHandle  counterHandle,
int32_t *  status 
)

Sets standard up / down counting mode on this counter.

Up and down counts are sourced independently from two inputs.

Parameters
counterHandlethe counter handle

◆ HAL_SetCounterUpSource()

void HAL_SetCounterUpSource ( HAL_CounterHandle  counterHandle,
HAL_Handle  digitalSourceHandle,
HAL_AnalogTriggerType  analogTriggerType,
int32_t *  status 
)

Sets the source object that causes the counter to count up.

Parameters
counterHandlethe counter handle
digitalSourceHandlethe digital source handle (either a HAL_AnalogTriggerHandle of a HAL_DigitalHandle)
analogTriggerTypethe analog trigger type if the source is an analog trigger

◆ HAL_SetCounterUpSourceEdge()

void HAL_SetCounterUpSourceEdge ( HAL_CounterHandle  counterHandle,
HAL_Bool  risingEdge,
HAL_Bool  fallingEdge,
int32_t *  status 
)

Sets the up source to either detect rising edges or falling edges.

Note that both are allowed to be set true at the same time without issues.

Parameters
counterHandlethe counter handle
risingEdgetrue to trigger on rising
fallingEdgetrue to trigger on falling