DigitalFeatures (read as "Digital Integration Features") are a new family of features available for applicable models of ACCES' PCI Express (PCIe) and PCI Express Mini Card (mPCIe) Digital I/O product lines.

Features include both new functionality for Input and Output digital bits, as well as general performance optimizations and advanced IRQ functionality.

General Features

  • Features common to all DigitalFeatures devices
    • Memory-Mapped registers: All registers are implemented using "memory" instead of "ports" leading to a massive (~10x!) performance improvement.
    • Advanced IRQ generation (Change-of-State++)
      • Multiple selectable IRQ sources per input pin, and several per output

Digital Output Features

  • One-Shot: Generate a pulse of configurable duration and direction
  • Pulse-Train: Generate a sequence of n such pulses, with a configurable delay between
  • PWM: Generate a fully-configurable PWM signal, with flexible base frequency and high precision
  • Quadrature: Generate a stepper-motor "quadrature output" pair, with "increment n" and "decrement n" commands at register-level for low-latency performance

Digital Input Features

  • Debounce: Configurable lowpass/debounce digital filtering, per-bit, to eliminate transitions associated with mechanical contacts
    • All additional input features operate on the debounced data
  • Event Detection: Various signal conditions can be selected to generate "Events"; Events can be configured to generate IRQs and/or increment the associated per-input Counter.
  • Counters: One counter per input increments when selected signal conditions ("Events") are detected
    • Threshold Exceeded: Each input counter has an associated threshold with an optional "count threshold exceeded" IRQ
  • Pulse Measurement: Measure pulse duration, both high-side and low, with resolution as low as 16ns
  • Frequency Measurement: Measure frequencies as fast as ~30MHz
  • Quadrature: 32-bit Quadrature counter supports A/B [and optional Index] quadrature signal input, counting in "x4" mode at up to 125MHz

IRQ: Advanced IRQ generation

Rather than being limited to "any change of the input generates an IRQ" you can now enable any combination of Rising Edge, Falling Edge, High-going pulse, Low-going pulse, and Event Counter Threshold Exceeded for input bits, and Pulse- or Pulse-Train Generation Complete IRQ sources for output bits.

One-Shot, Pulse-Train, PWM

A flexible direction-and-duration engine allows precise control (8ns resolution) selection of pulse and inter-pulse durations for generating anything from 1 to 255 sequential pulses or the same engine can be used for PWM generation by setting the pulse count to free-run mode. An IRQ can be generated whenever a pulse or train generation has finished.

DEB: Debounced Digital Inputs

Debouncing provides a way to avoid mechanical contact bounce from confusing your software and users, and can greatly reduce spurious "edge" or "change-of-state" IRQs. By commanding the onboard intelligence to monitor the inputs and filter out contact bounce you can avoid adding low-pass filters to your digital inputs. DigitalFeatures' implementation of this lowpass filtering includes per-bit selection of "debounce" or "raw" data, and the debounce time constant can be selected globally. All DigitalFeatures work with the "debounced" data, if it is enabled for the bit in use.

Event Detection

A major upgrade from the simple Change-of-State IRQs common decades ago, Event Detection (CoS++) allows per-input-bit selection of as little as a single edge, or any combination of falling/rising edges and/or pulses, or even the occurrence of up to 255 of these Events, to generate an IRQ. To qualify as a Pulse the signal must go active for less than 216-1 * 8ns.


Each input pin can count various events: falling edges, or rising edges, or pulses - up to 255 Events, with optional target-count-exceeded IRQ. Instead of being interrupted on every pulse, choose to count them instead, and you can get interrupted as rarely as every 10th, 100th, or 255th pulse — or anywhere in between — using these 8-bit Event Counters


Both pulse and frequency measurements are available, able to measure pulses (both rising and falling) from 16ns to ~8ms.


Quadrature signals (A/B [and optional Index]) can be fed to a 32-bit quadrature counter at up to 125MHz. A/B pairs can be generated as well, and the hardware interface registers include "increment by n" and "decrement by n" as well as "IRQ on completion", for efficient motor-control algorithms

Acquisition, Control, Communication: Engineering and Systems

olark('api.rules.defineRule', { id: 'delayed_response', description: 'Will send a response to the visitor after an operator doesn't respond.', condition: function(pass) { olark('api.visitor.getDetails', function(details) { var delay = 60 / details.messageCountForThisVisit; if (details.isConversing && details.secondsSinceLastMessageToOperator >= delay && !details.secondsSinceLastMessageToVisitor) { pass(); } }); }, action: function() { olark('', { body: 'Sorry about the delay. We'll get back with you as soon as possible ... but it might be via e-mail, especially if it is currently 2am Pacific.' }); olark('', { body: 'Automated delay message has been sent to visitor.' }); }, perVisitor: true });