Difference between revisions of "Python:DAQ 1"
Line 11: | Line 11: | ||
daq.DAQmx_Val_ChanForAllLines) | daq.DAQmx_Val_ChanForAllLines) | ||
: line. | : line. | ||
+ | * If the you run the code and get an error: | ||
+ | DAQError: Specified operation cannot be performed while the task is running. | ||
+ | : or | ||
+ | DAQError: Requested operation could not be performed, because the specified digital lines are either reserved or the device is not present in NI-DAQmx. | ||
+ | : that generally means you had a task running and did not get a chance to stop it (for instance, if your code had an error before getting to the task.StopTask() line. To troubleshoot that: | ||
+ | :* Try to run the code again - the task.StopTask() in the code might overcome the problem | ||
+ | :* If that does not work, clear the variables by clicking the black and white eraser rhombus to the right above the IPython console. That generally removes all tasks so you can try again. | ||
== Equipment Used == | == Equipment Used == |
Revision as of 20:28, 27 September 2018
This page contains pictures and graphs related to Data Acquisition Laboratory 1 (DAQ 1) of EGR 103. It has been updated for Fall, 2018 - including changing the language to Python.
Contents
Supporting Pundit Pages
Typographical Errors / Clarifications
- If the computer says your device is not found, try 'Dev2' instead of 'Dev1' in the
task.CreateDOChan("Dev1/port0/line0:2","", daq.DAQmx_Val_ChanForAllLines)
- line.
- If the you run the code and get an error:
DAQError: Specified operation cannot be performed while the task is running.
- or
DAQError: Requested operation could not be performed, because the specified digital lines are either reserved or the device is not present in NI-DAQmx.
- that generally means you had a task running and did not get a chance to stop it (for instance, if your code had an error before getting to the task.StopTask() line. To troubleshoot that:
- Try to run the code again - the task.StopTask() in the code might overcome the problem
- If that does not work, clear the variables by clicking the black and white eraser rhombus to the right above the IPython console. That generally removes all tasks so you can try again.
Equipment Used
National Instruments Data Acquisition Cards
B209 has machines with two different data acquisition cards. Most of the machines have NI PCI 6014e cards, which will be what is discussed here. The others have a newer NI PCI 6221 cards. The NI PCI 6014e card can read up to 16 single-ended (8 differential) analog voltage measurements, has two analog outputs, and has 8 configurable digital input/output lines. The 6221 cards are more powerful but, generally in EGR 103, we will limit ourselves to the features available on the 6014e cards.
Be careful when making connections; improperly connecting wires can lead to catastrophic damage on the DAQ cards, as is shown on the second picture at right.
CB-68LP
During this lab, you will use the CB-68LP to connect wires to parts of the NI PCI 6014e card. Be sure to use the proper connections - a map is available at the MATLAB:CB-68LP Pinout page.
Radio Shack Experimentor 350
The Experimentor 350 is a simple, but useful, prototyping board. It has two distribution strips (rows X and Y) with 20 pins each and 46 groups of 5 pins on its terminal strip. All the pins in row X are connected together, and all the pins in row Y are connected together; note, however, that X is not connected to Y.
For the main part of the board, half-columns are connected together. For example, rows (ABCDE) in column 3 are all connected. Note, however, that ABCDE are not connected to FGHIJ.
Also, there are some helpful index numbers at the top and bottom to help determine which column you are in. For rows X and Y, some indices do not exist. For example, there is no pin at X6, X12, X18, Y6, Y12, or Y18.
Resistors
Resistors take energy out of an electric circuit and convert that energy to heat. In this case, the light emitting diodes cannot handle the amount of current that the DAQ card can produce, so resistors are placed in parallel to reduce that current. You can use the Resistor Color Codes to determine the resistance of the resistors pictures at right; there should be four resistors (at least) in your box.
LEDs
A diode is an electrical element that generally only allows current to flow in one direction - and only after there is a sufficient voltage difference across the appropriate terminals. LEDs - Light Emitting Diodes - are a special form of diode that emit light when current flows through them.
Because diodes and LEDs are directional, there are visible clues about which side is which. In the first picture at right, the lengths of the leads on the diodes are clearly different - the longer lead should be placed where the higher voltage is expected, as current will be allowed to flow into the longer lead, through the diode, and out through the shorter lead. For the round LEDs, a flat is ground into the collar of the LED on the lower-voltage side - this is shown more clearly in the second picture. Finally, within the diode itself, the larger "flag" of metal inside the diode is on the lower voltage side.
Note that the color of the plastic is not what determines the color of the light - rather the specific semiconductor material and the geometry of the LED do that. The plastic is a convenient way of knowing what color the light will be, however.
Circuit Construction
The pictures at right show both the breadboard and the CB-68LP once everything has been properly connected. Note especially on the CB-68LP where the wires are - there will be no connections in the first two columns and there is only one connection - the black wire for digital ground - in the fifth column.
Code
The following code listing is for three_bits.py
In lab, do not put all this code in at once! Follow along with the instructor.
#%% Import modules
import numpy as np
import PyDAQmx as daq
#%% Create a task
task = daq.Task()
#%% Define useful functions
# Function to change daq outputs
def write_data(data):
task.WriteDigitalLines(1, 1, 10.0,
daq.DAQmx_Val_GroupByChannel,
np.array(data, dtype=np.uint8),
None, None)
# Function to make 3-element LSB-first binary list from integer
def d_to_b(n):
bits = list(map(int, '{:03b}'.format(n)))
return bits[::-1]
#%% Add digital output lines
task.CreateDOChan("Dev1/port0/line0:2", "",
daq.DAQmx_Val_ChanForAllLines)
#%% Stop and start task
task.StopTask()
task.StartTask()
#%% Check lights
write_data([1, 1, 1])
input('PAUSED - Hit return to continue ')
write_data([0, 0, 0])
#%% Write values to output using base 10
val = 0
while 0 <= val <= 7:
write_data(d_to_b(val))
val = int(input('Enter a number between 0 a 7: '))
#%% Turn all off when finished and stop task
write_data(d_to_b(0))
task.StopTask()
Other Resources
- Landing Lights Animation:
Questions
Post your questions by editing the discussion page of this article. Edit the page, then scroll to the bottom and add a question by putting in the characters *{{Q}}, followed by your question and finally your signature (with four tildes, i.e. ~~~~). Using the {{Q}} will automatically put the page in the category of pages with questions - other editors hoping to help out can then go to that category page to see where the questions are. See the page for Template:Q for details and examples.