diff --git a/CHANGELOG.md b/CHANGELOG.md index 743a0d082c..37f0acd52d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -558,6 +558,7 @@ #### [nidigital] Unreleased - Added - (Common) Added `nitlsconfig[grpc]>=1.0.0a2` to the optional gRPC dependencies. + - Added the `nidigital_sequence_registers_and_flags.py` example. - Changed - Removed diff --git a/docs/nidigital/examples.rst b/docs/nidigital/examples.rst index b8c8cc689a..c2cdfdca46 100644 --- a/docs/nidigital/examples.rst +++ b/docs/nidigital/examples.rst @@ -30,3 +30,12 @@ nidigital_ppmu_source_and_measure.py :encoding: utf8 :caption: `(nidigital_ppmu_source_and_measure.py) `_ +nidigital_sequence_registers_and_flags.py +----------------------------------------- + +.. literalinclude:: ../../src/nidigital/examples/sequence_registers_and_flags/nidigital_sequence_registers_and_flags.py + :language: python + :linenos: + :encoding: utf8 + :caption: `(nidigital_sequence_registers_and_flags.py) `_ + diff --git a/src/nidigital/examples/sequence_registers_and_flags/Pattern.digipat b/src/nidigital/examples/sequence_registers_and_flags/Pattern.digipat new file mode 100644 index 0000000000..6b9e5f7c8e Binary files /dev/null and b/src/nidigital/examples/sequence_registers_and_flags/Pattern.digipat differ diff --git a/src/nidigital/examples/sequence_registers_and_flags/PinLevels.digilevels b/src/nidigital/examples/sequence_registers_and_flags/PinLevels.digilevels new file mode 100644 index 0000000000..35dc1d1866 --- /dev/null +++ b/src/nidigital/examples/sequence_registers_and_flags/PinLevels.digilevels @@ -0,0 +1,15 @@ + + + + + + 0 + 3.3 + 0.8 + 2 + 0 + HighZ + + + + \ No newline at end of file diff --git a/src/nidigital/examples/sequence_registers_and_flags/PinMap.pinmap b/src/nidigital/examples/sequence_registers_and_flags/PinMap.pinmap new file mode 100644 index 0000000000..d6fa6148d0 --- /dev/null +++ b/src/nidigital/examples/sequence_registers_and_flags/PinMap.pinmap @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/nidigital/examples/sequence_registers_and_flags/Specifications.specs b/src/nidigital/examples/sequence_registers_and_flags/Specifications.specs new file mode 100644 index 0000000000..51ba58bb5a --- /dev/null +++ b/src/nidigital/examples/sequence_registers_and_flags/Specifications.specs @@ -0,0 +1,9 @@ + + +
+ + 1 µs + +
+ +
\ No newline at end of file diff --git a/src/nidigital/examples/sequence_registers_and_flags/Timing.digitiming b/src/nidigital/examples/sequence_registers_and_flags/Timing.digitiming new file mode 100644 index 0000000000..1a44a993ec --- /dev/null +++ b/src/nidigital/examples/sequence_registers_and_flags/Timing.digitiming @@ -0,0 +1,23 @@ + + + + + + timing.period + + + + 0 ns + timing.period / 2 + timing.period + + + (3 * timing.period) / 4 + + Pattern + + + + + + \ No newline at end of file diff --git a/src/nidigital/examples/sequence_registers_and_flags/nidigital_sequence_registers_and_flags.py b/src/nidigital/examples/sequence_registers_and_flags/nidigital_sequence_registers_and_flags.py new file mode 100644 index 0000000000..287bfd8fa8 --- /dev/null +++ b/src/nidigital/examples/sequence_registers_and_flags/nidigital_sequence_registers_and_flags.py @@ -0,0 +1,82 @@ +#!/usr/bin/python + +import argparse +import nidigital +import os +import sys +import time + + +def example(resource_name, options): + + with nidigital.Session(resource_name=resource_name, reset_device=True, options=options) as session: + + example_dir = os.path.dirname(__file__) + pin_map_filename = os.path.join(example_dir, 'PinMap.pinmap') + session.load_pin_map(pin_map_filename) + + spec_filename = os.path.join(example_dir, 'Specifications.specs') + levels_filename = os.path.join(example_dir, 'PinLevels.digilevels') + timing_filename = os.path.join(example_dir, 'Timing.digitiming') + session.load_specifications_levels_and_timing(spec_filename, levels_filename, timing_filename) + session.apply_levels_and_timing(levels_filename, timing_filename) + + pattern_filename = os.path.join(example_dir, 'Pattern.digipat') + session.load_pattern(pattern_filename) + + try: + session.write_sequencer_register(nidigital.SequencerRegister.REGISTER0, 100) + + print('Start bursting pattern') + session.burst_pattern(start_label='new_pattern', wait_until_done=False) + + session.write_sequencer_register(nidigital.SequencerRegister.REGISTER1, 50) + register_value = session.read_sequencer_register(nidigital.SequencerRegister.REGISTER1) + + flag0_state = session.read_sequencer_flag(nidigital.SequencerFlag.FLAG0) + if session.simulate: + # Simulated hardware does not update sequencer flag states. + session.write_sequencer_flag(nidigital.SequencerFlag.FLAG1, True) + else: + while not flag0_state: + time.sleep(0.01) + flag0_state = session.read_sequencer_flag(nidigital.SequencerFlag.FLAG0) + input('Press Enter to write seqflag1 as True: ') + session.write_sequencer_flag(nidigital.SequencerFlag.FLAG1, True) + + flag0_state = session.read_sequencer_flag(nidigital.SequencerFlag.FLAG0) + flag1_state = session.read_sequencer_flag(nidigital.SequencerFlag.FLAG1) + print(f'reg1 value: {register_value}, seqflag0 state: {flag0_state}, seqflag1 state: {flag1_state}') + + session.wait_until_done() + finally: + session.selected_function = nidigital.SelectedFunction.DISCONNECT + print('Done bursting pattern') + + +def _main(argsv): + parser = argparse.ArgumentParser(description='Demonstrates how to read and write sequencer registers and flags during a digital pattern.', formatter_class=argparse.ArgumentDefaultsHelpFormatter) + parser.add_argument('-n', '--resource-name', default='PXI1Slot2,PXI1Slot3', help='The specified resource name shown in Measurement & Automation Explorer (MAX) for a digital pattern instrument.') + parser.add_argument('-s', '--simulate', default='True', choices=['True', 'False'], help='Whether to run on simulated hardware or real hardware') + args = parser.parse_args(argsv) + + options = 'Simulate=1, DriverSetup=Model:6570' if args.simulate == 'True' else '' + example(args.resource_name, options) + + +def main(): + _main(sys.argv[1:]) + + +def test_main(): + _main([]) + + +def test_example(): + resource_name = 'PXI1Slot2,PXI1Slot3' + options = {'simulate': True, 'driver_setup': {'Model': '6570'}, } + example(resource_name, options) + + +if __name__ == '__main__': + main() diff --git a/src/nidigital/examples/sequence_registers_and_flags/sequence_registers_and_flags.digiproj b/src/nidigital/examples/sequence_registers_and_flags/sequence_registers_and_flags.digiproj new file mode 100644 index 0000000000..b38b8e1fca --- /dev/null +++ b/src/nidigital/examples/sequence_registers_and_flags/sequence_registers_and_flags.digiproj @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file