Programming the AVR without using the Arduino IDE

Most recently , a lot of students from a particular school has been asking if this is possible. It appears that they have been asked by their instructor to build robots but without using the Arduino IDE to discourage “copy-paste” programming. The problem arises when the instructor is unable to give direction as to how this is done.

This quick article discusses the very basics in hope that the reader can pickup critical information and get a decent starting point.


Almost all AVR’s are programmable or are supported byt the hardware and software tools we shall discuss. Your AVR should have the essential circuits already build and ready for use: regulated power , crystal oscillator if not using the internal one, and access to the ICSP pins: SCK, MISO, MISO, RESET, VCC and GND.


What you can NOT use in this premise

While some users complain of the lack of functionality, the Arduino IDE is a great in many ways in that it has the full package of compilers, linkers, editor etc. that are essential to do programming and that it is particularly simple, lightweight and open source. Other software have repackaged it into their own environment such as what is done in Visual Micro – a Visual Studio plugin that allows the Arduino IDE to be integrated into Visual Studio. There is also an Arduino plugin for Eclipse but again this uses the existing Arduino IDE core tools. Others simple repackage the editor such as in the case of the code editor in Fritzing .

What we can use

Before Arduino, there were several IDE’s that were floating around the internet. We can list some of them below:

There are all capable IDE’s/tools suite with varying strengths and weaknesses. Some of these are paid software while some are freeware wit limitations. WinAVR is open-source however, it is not the friendliest of these bunch.

Atmel/Microchip has released its official development IDE called the Atmel Studio, previously known as AVR studio. It is a very capable and professional tool suite for AVR’s. It works with C/C++ so it should not be too difficult for someone used to Arduino programming. In recent years, this IDE has improved by leaps that we could consider this as currently the best IDE, bar the Arduino environment,  for AVRs.


Now that we have identified our software tool, we need a hardware tool to program (and debug) the AVR using the ICSP port. This tool sits in between the computer and your target AVR circuit and is responsible to uploading the bits and bytes of the machine code into the AVR’s flash. You may use any of the following:

Atmel ICE – this is the official tool supported by Atmel Studio, highly capable but is the most expensive.

AVRISP mk II – this is also an official tool but is nearing the end of its life. It is less than half the price of the Atmela ICE but is still capable  and supported in Atmel Studio 7 although no longer actively being maintained. This tool has been cloned and is found in many Chinese stores with mixed experience from users.

STK500 and compatibles – Atmel has previously released the STK500 development board way back before Arduino and its programmer has been included in several compatible programmers such as that from Sparkfun or Olimex . To date, the original STK500 dev board from Atmel is still being sold.

USBASP – One of the cheapest tool but several users have complained of the difficulty in using this tool with Atmel Studio and the support for newer AVR chips. Using this with the Atmel Studio should be fine, however, a proper guide from online may be necessary to use the pair. Note that this programmer tool appears to have stopped active maintenance of its firmware nor does Atmel Studio officially support it.

USBISP – This is being sold by chinese outlets with some labled as USBASP. so care should be taken when doing so. While we have had success using this to flash AVR’s off a compiled hex file, we have not tried it with the Atmel Studio.


The optiboot, used in some Arduino boards, is a powerful bootloader when we consider what it can do. The bootloader is pre-programmed into the AVR chip and works as a self-programming code that is able to fetch data from its UART (“serial” port) and write these into the chips program memory. This is why we do not use a special hardware programming tool when we use the Arduino as it is intended –  we simply use a USB cable.

Granting that the students with this problem are at least allowed to use the optiboot , or any other bootloader, then the issue with programmers may be elimited following this sequence:

  • Burn the bootloader into the chip – this can be done with an Arduino board such as the Uno wired up to the target AVR. The firmware for the Arduino acting as a programmer is already build and is ready to use. Read more about it here. It should be noted that we will use the Arduino IDE and an extra Arduino board just to upload/burn the bootloader into the chip
  • Generate the machine code in Atmel Studio. Develop the code in C/C++ in Atmel Studio (or other IDE’s) and then compile it. You should be able to find the machine code as hex or bin file.
  • Download a software programmer. Atmel FLIP, AVRdude and several other tools downloadable from the internet or try Xloader, though it is not confirmed if it can support machine codes generated outside the Arduino IDE.
  • Upload the machine code into the target AVR using a USB-Serial converter (FTDI, Prolific, CP2102 or CH340G) via the Serial port, usually UART0 or D0 and D1 in most AVR’s

Where to get the hardware programmers mentioned here

Layad Circuits may get them for you. While they may not be onstock, we can import the tools from you direct from the manufacturers. Contact us today – 09164428565,, or visit our physical store at B314 Lopez bldg., Session Rd. Baguio City.

When to encase an Arduino

Asked why one student would want to buy an Arduino acrylic casing for his fan-speed controller box , he quickly said “ginmatang da met amin, agalaak meten ah” [Everyone bought one, so I might as well get mine]. Sounds familiar? Well, that band wagon effect may have happened to you but let us be look closer at these popular enclosure.

At first glace, a casing for your bare Arduino board would seem logical as it would provide a form of protection from the elements, ESD damage and other catastrophic possibilities like spilling coffee over your board. Again, this would sound reasonable…almost! In this article, we will breakdown some of the reasons why you need and why you might not really need an acrylic case for your Arduino board.

Microcontrollers in Embedded Systems Applications – a lot of Arduino projects require embedding the board into the application and many times, we literally need to embed the board itself on a larger PCB or perhaps a larger box. Obviously, you do not need an enclosure for the Arduino since you are most likely to enclose the whole system in a bigger box. In such a case, what you need a proper enclosure or panel box.

Arduino as a Development Board – If you are not permanently embedding your board and simply want it for experiments, then this is where you might need an enclosure. Afterall, the Arduino was meant as a development board. But here is one reason you may be better off not encasing your board – as an experiment board, you might want full access to everything on the board, from its components to the microcontroller pins. Before the rise of the Arduino, most of microcontroller development boards are bare without enclosures just like this Atmel AVR development board – the STK500 which, although first released more than a decade ago, is still being used and still without a casing even today.

The benefit is obvious, as a developer, you will at some point require access of certain components within the board. For example, when an external circuit connected to an output pin is not behaving as expected, you may want to probe the voltage level directly at the microcontroller’s pin. Simple power tests, checking the regulator’s temperature, and probing signals are reasons why a casing may not be convenient for a development board

Aesthetics – An Arduino enclosed by a transparent casing may be an eye-candy. But imagine a project where you use most of the pins. That would mean a lot of wire sticking out of the enclosure and then into other modules or PCB’s. If you have a few wires or perhaps with some slick wire management techniques, you might be able to get away with a good looking setup.

So what for is this casing? – here are some reasons we’ve though an acrylic casing would really shine:

  • If you are using the board for frequent but light experiments that do not require extensive signal probe and the like.
  • Small projects with components that can be placed inside the casing or with only a few components outside the casing (e.g. a shield)
  • When it is used as a training board for different users with varying electronics knowledge. The case would be a good protection for clumsy fingers touching the sensitive electronics.

So the next time you think about purchasing a casing, think about your application and judge for your self if it is really needed.

Determine if a BJT is NPN or PNP using a Saleng Uno

While there are almost an infinite number of simple applications, a transistor tester appears to be uncommon in Arduino related materials. This simple project demonstrates the Saleng Uno as a BJT transistor type tester. A standard 16×2 LCD module displays if the result is NPN or PNP, a momentary button tells the Saleng Uno when it should start processing and the three 10K resistors are used as test circuit.



Demo Video:

We’ve based this project from this article. We’ve added an LCD and a start button and added some validation before displaying results.


Demo of the Saleng-ACS712 (5A)

A simple test code for the Saleng-ACS712 module. Connect the terminal blocks of the Saleng ACS712 in series with the circuit you want to test. Simply upload and open the serial monitor with a baud rate of 9600. Connects are as follows:


The complete code may be downloaded from our github page.

See the Saleng-ACS712 user guide here.