This discussion explains how to use the new dll library available for both Windows 32 and 64 bits OS.
We aim to provide a detailed explanation of the dll functions and the commands associate with each evaluation board.
This discussion WONT provide any more specific example than the .vi and VB6 code attached.
We are not software developers so for any other software platform, don’t ask please.
If you have some question you can use any search engine available in the web.
Before start you must install, ADI_PDA_Drivers.exe
The dll can be found in the next path:
“Program Files\Analog Devices\USB Drivers\ADI_CYUSB_USB4.dll”
Before continue, the dll has been developed in C++ so, some clarifications
- The sign “*” before the name of the function means pointer
- UInt: unsigned integer, 4 bytes
- Int: Integer, 4 bytes
- UShort: unsigned short, 2bytes
- Char: char, 1 byte
- UChar: unsigned char, 1 byte
The three first functions are used to connect with the board and have to be called in the order they are presented in this document.
Uint Search_For_Boards (uint VID, uint PID, uint *Num_boards, char *PartPath);
This function searches the PC for USB devices that match the requested VID and PID. It returns an error (zero for non-error) along with the number of matching boards found and a path address in a buffer for each of them.
The PartPath returns the path for each board found in the PC that match PID and VID.
Ie. Num_boards = 2,
Path for the first board -> PartPath
Path for the second board -> PartPath
VID : 0x0456.
PID : 0xB20E
Int Connect(Uint VID, Uint PID, char PartPath, Uint *Handle);
The PID and the VID are the same than before.
This function connects with the board at address path after making sure that it’s still the correct board (checks PID & VID). A handle is returned, along with an error variable (zero for non-error). The handle is the unique identifier for the PC-Board connection.
PartPath is a single location from the previous array, typically PartPath(0).
Int Download_Firmware(Uint Handle, char pcFilePath);
This function programs the uC. The pcFilePath is the path where is located the hexadecimal file (included in the attached file) to program the uC. The char array should be null terminated (finish with 0)
Int Vendor_Request(UInt Handle, UChar Request, UShort Value, UShort Index, UChar Direction, UShort DataLength, UChar *Buffer);
This function sends commands between PC and board. The command table is included in the hexadecimal code that has been downloaded previously.
Each command requires different parameters for the execution. The list of commands available for both boards is explained below.
An error value is returned (zero = no error)
16 LSB data
8 MSB data
DATA returns 3 byte of data
Int Disconnect (Uint Handle)
This function closes the connection PC – board.
If do you think I miss something just let me know.
How did you set pcFilePath when downloading the firmware?
pcFilePath is the path where is place your firmware code...
Do you mean in VB6 or LV?
I am using the LV files you provided.
I have the firmware .hex in the same folder as the .dll and the labview files but I am unsure how you pointed pcFilePath to the .hex
Check an example,
I looked through the example however I was not able to get it to properly load the firmware .hex file.
For both you labview files and the c# code that I worked out (attached for your reference), I am able to run all of the functions with no errors, but the firmware file is not being properly downloaded. I have confirmed this by running the provided control software then switch to either LW or C# and running SearchForBoards and Connect to get the handle, and then making changes to the DAC output using Vendor Request.
In the C++ code above you have the filepath listed as a char array, however in LW, it is a byte array, is this interchangeable; I have tried both of these methods in C# with no success.
Would you mind making any suggestions you see that may fix this issue?https://www.dropbox.com/s/u2ldb87c4zd67k5/USBConnector.cs?dl=0.
USBConnector.cs are the classes that contain the functions and program.cs is the basic console program that I wrote to establish the connection and change the output of all channels to ~1.6V.
There are a few extra functions in USBConnector.cs that can be ignored for now since they are only used to export some variable values to MATLAB.