Turns an arduino due into a high speed dual channel pulser, which is runtime programmable through a GUI.
Features:
- Two digital channels
- Arduino compatible
- GUI
- Time resolution up to 100ns (Needs testing)
The code is divided into two main parts:
Firmware can be built either in Arduino or through Visual micro extension in Visual Studio. The later is preferred for development since it has Intellisense.
Please note that Arduino is required for both options though.
- Download and install arduino from the official Arduino website.
- Also isntall Arduino 32 SAM boards development tools from Tools > Borad > Board Manager
- Clone this repository or download from
- Open PulseProgrammerFW/PulseProgrammerFW/PulseProgrammerFW.ino in arduino. It also loads other files in the directory into arduino.
- Open arduino and select "Arduino Due (Programming Port)" from Tools > Board
- Press Ctrl+R to verify that the code is OK.
- Connect arduino to the computer through the USB programming port and select it from Tools > Port
- Select the Press Ctrl+U to upload.
- Follow step 1-3 of Option 1.
- Install Visual Studio and make sure the minimum components required for C++ development are installed. A community edition of VS can be downloaded from this Microsoft website
- Install Visual Micro for Visual Studio (Visual Micro Downlad Page)
- Open PulseProgrammerFW/PulseProgrammerFW.sln in visual studio.
- Connect arduino to the computer through the USB programming port.
- Set board to Ardunio Due (Programming Port), build to Release, and com port to the one on which Due is attached.
- Select Debug > Build Solution to build or Debud > Start Debugging to build and upload.
In order to build the desktop application, an installation of MS Visual studio is required. A community edition can be downloaded from this Microsoft website. Only desktop development parts are needed to build the application.
The firmware is built to start working only when it has received a set of program commands from the serial port. These commands are created in the background as the user uses the graphical tools on the GUI to define a "Pulse Program" and transferred in packets to the arduino using the serial port selected by the user. For delays greater than 1us, the inbuilt arduino delayMicroseconds() is used and for shorter delays, "Nop" statements are used.