Tag Archives: IntelliSense

An interview with Tim Leek of Visual Micro for Atmel Studio

By Eric Weddington, Marketing Manager, Open Source & Community

We were looking for ways to support users of the Arduino platform and provide a way for them to transition to C/C++ and custom boards – if and when they wanted. Fortunately, we didn’t have to go far. Tim Leek of Visual Micro in the UK was already on the way. He now has a release candidate of his Arduino language plug-in for Atmel Studio! As you can see below, I recently spoke with Tim in-depth about this plug-in:

Eric Weddington:

Can you tell us a little more about the Visual Micro plugin to Atmel Studio? What features does it have?

Tim Leek:

Essentially, the Visual Micro plugin extends Atmel Studio to include every important  feature of the Arduino IDE. If we look behind the scenes, we see the plugin uses the tool chain and rules of the Arduino IDE for the build process, while ensuring Atmel Studio has the knowledge required to provide IntelliSense and many other code design features.

The plugin – which is compatible with all Arduino IDE versions (1.5 in beta) – provides a wealth of additional features for the Arduino IDE and is targeted at all types of Arduino users, ranging from novice to expert. So yes, an Arduino project of any size or complexity may be opened in Atmel Studio, compiled and upload with just a few mouse clicks. New Arduino projects may be created with the same ease.

In addition, Arduino sketch programs can be uploaded using standard USB (or via a hardware programmer), burning of bootloaders, while multiple serial monitors ensure Atmel Studio is a complete Arduino solution. There are many other features such as  additional build reports (memory/dis-assembly), drill down into source for build errors and support for additional compiler -D defines.


What makes the Visual Micro plugin to Atmel Studio unique?


First and foremost, Atmel Studio, which is designed specifically for Arduino (Atmel) microcontrollers. From a plug-ins perspective, Visual Micro offers a number features that make it  unique, such as total compatibility with Arduino and complete integration into a more powerful IDE.

There really are a variety of unique features, with some mentioned above. Additional features include blistering fast build times (ex- first build), single-click ability to add a new .cpp and .h source to a project that automatically contain a “ready to use” class with the correct Arduino declarations, a micro explorer help and reference tool, automatic detection of Arduino project structure changes made outside of Atmel Studio and the ability to clone examples for new projects.

Remember, Arduino does not normally provide a debug facility, so users must debug using print statements that are physically added to the sketch source code. However, Visual Micro provides an optional USB debug facility for Arduino which allows the versatility and power of Atmel Studio BreakPoints to be used to debug an Arduino. Simply put, having the ability to easily trace which functions are running on an Arduino, while inspecting variables and expressions of a running Arduino by simply placing Breakpoints in code is a huge benefit that significantly accelerates development.

Meanwhile, the debugger provides a huge range of additional capabilities such as timed breakpoints, conditional breakpoints, “When Hit” text messages, expression watch and the ability to update variables on a running Arduino.

One other notable feature of the debugger is the “extensibility” features of its design. By default, it is supplied with a few open source graphical window controls which displays, for example, Arduino digitalPin states and analog pin graphs in real-time. These controls can be edited and altered by advanced users familiar with C# and registered for use in Atmel Studio Arduino debugging using simple xml files. Visual Micro provides a public interface in the form of a windows assembly that allows the plugin and debugger graphical visualizations to communicate during an Arduino debugging session.

Basically, I set out to create a professional standard, easy to support and easy to use Arduino IDE alternative with a dedicated community forum and wiki. There is still much work to be done and a few rough edges to  polish – but there is certainly unique and growing community at  visualmicro.com


How did you first get involved with Arduino devices?


I have always liked electronics and engineering, yet both always felt out of my reach. Over the past decade, the internet has helped me expand my knowledge of microcontrollers and electronic circuitry. While I’m not highly technical, my true interest is with making things. For me, the code is simply a means to an end.

I had previously experimented with other microcontrollers in a simple way but found them either overly simplistic or too complex. They seemed  to have huge challenges which took away the fun of the project and required too much time and effort. It is probably worth noting that some years ago I was given a book by Tom Igoe that I really enjoyed called “Making Things Talk,” which taught me how to use an Arduino to implement features for my projects. I could easily understand the Arduino syntax and saw that it supported all of the things that interested me. I bought an Arduino and a couple of shields such as XBee and Button Pad, slowly discovering the huge community and the wealth of Arduino examples and resources.


What drew you to using the Visual Studio platform?

When I first started out programming Arduino in the IDE I found that I missed Visual Studio which is very feature rich and, perhaps most importantly, has IntelliSense. People with deep knowledge of the Arduino syntax and intimate knowledge of the library code their project includes might not need IntelliSense but I certainly do.

I have used Visual Studio in my business forever, partly for the same reasons that I use Arduino microcontrollers. Visual Studio is easy to use, well documented, highly flexible, totally reliable and it just works out of the box, the latter being the most important for me. My view, as a Windows user, is that writing a complex document is often best done with Microsoft Word, in the same way that writing a Windows  program is best done with Visual Studio.

For microcontroller development, the Microsoft .NET Micro Framework  (NETMF) is on the face of it, the most natural path for my project work. This is because it uses Visual Studio, is open source and includes a debugger. I discovered NETMF after wanting more than the Arduino IDE so decided to try it out.

NETMF development was easy enough in Visual Studio but for various reasons NETMF didn’t turn out to be the solution for me. For example when coding, I felt too far removed from the hardware. I also found it easier to find Arduino examples and a huge community of help. After these experiences, I located an advanced tutorial on the Arduino playground (wiki) that explained how to configure Visual Studio to show Arduino IntelliSense. After a few tests and a lot of poking around the Visual Studio SDK it became apparent that the Visual Studio platform was capable of being a really great Arduino IDE.


Any future plans with the plugin that you can tell us about?


Yes, many features to improve productivity, accelerate learning for new users and provide more flexibility for advanced users. There is currently a dedicated and active forum on visualmicro.com which everyone is invited to join. There are also many user interface “wizards” that would make life easier for novices. For example, the creation of “ready to go” Arduino starter projects, easier management of version controlled eeprom, simpler configuration of various debug modes and a wealth of other tools to significantly reduce the Arduino learning curve and make developing more fun.

For advanced users, more flexibility in the build process. We already have a huge amount of flexibility over the build process but the option for closer integration with Atmel Studio project properties and tool chains will be welcomed by many users. I hope the open source community helps to extend the graphical  visualizations available to the debugger to include many useful controls such as “Temperature Gauge,” “Light Meter,” “LCD display” and other useful controls.