This documentation supports the latest PCIe host firmware, the latest OpenEphys.Onix1 package, and Bonsai 2.9+.

Table of Contents

Breakout Board Digital Inputs

The following excerpt from the Breakout Board example workflow demonstrates digital inputs functionality by responding to button presses and saves digital inputs data.

/workflows/hardware/breakout/digital-inputs.bonsai workflow

The DigitalInput operator generates a sequence of DigitalInputDataFrames. In this workflow, digital inputs are configured to be asynchronous. This means that although the digital inputs are sampled in hardware at 4 Mhz, data frames are only emitted when the port status changes (i.e., when a pin, button, or switch is toggled). Digital inputs can also be configured to be sampled at regular intervals. The digital input ports on the Breakout Board use 3.3V logic levels but are also 5V tolerant. In the Breakout Board example workflow, the DigitalInput's DeviceName property is set to "BreakoutBoard/DigitalInput". This links the DigitalInput operator to the corresponding configuration operator.

Clock, DigitalInputs, and Buttons are all members of DigitalInputDataFrame which are each selected by a MemberSelector operator. They contain the AcquisitionClockHz-based sample times, digital port status, and buttons' status, respectively. The MatrixWriter operators save the selected members to files with the following format: digital-clock_<filecount>.raw, and digital-pins_<filecount>.raw, and digital-buttons_<filecount>.raw, respectively.

Because MatrixWriter is a sink operator, its output sequence is equivalent to its input sequence. For example, the output of the MatrixWriter connected to Button is equivalent to Button's output. Therefore, it's possible to process digital data by branching directly off the MatrixWriter operators. The selected DigitalInputs and Buttons members are both enumerator types: DigitalPortState and BreakoutButtonState, respectively. Enumerators assign names to values. When DigitalPortState or BreakoutButtonState is connected to a HasFlags operator, these names appear in the HasFlags's Value property's dropdown menu. In this case, the values that these names represent correspond to bit positions of the breakout board's digital ports. In this workflow, the top HasFlags operator checks if Pin0 is True, and the bottom HasFlags operator checks if Triangle or X are True.