Atmel Software Framework Tutorial – ARM Cortex

An Atmel Software Framework Tutorial series that shows how to use Atmel Software Framework (ASF) to program ARM Cortex microcontrollers using Atmel Studio and the C programming language.

About ASF

Atmel Software Framework (ASF) consists of a number of modules that can be added to a C language project in Atmel Studio. Adding ASF modules to a project makes various functions available for initializing and using hardware and software services, cutting down development time.

As an example, adding the IOPORT ASF module to a project allows pins and ports of a microcontroller to be initialized and accessed using functions from the IOPORT module. Functions from the IOPORT module can then be called to set up pins or ports as inputs or outputs and other functions allow the pins or ports to be read or written to without having to use the hardware at a register level.

Atmel Software Framework Tutorial Contents

The ASF tutorial series consists of the following parts thus far. More parts are being added to the tutorial series each week.


Introduces the Atmel software framework tutorial and shows how ASF is structured.


How to create a new ASF project for an Atmel Evaluation board. The example project blinks the on-board LED.


How to create an ASF user board project. If you are going to use ASF on your own custom or user board, you will need to know how to write ASF user board projects from scratch. This type of project can still be created and tested on an Atmel evaluation board. Most of this tutorial series shows how to create various projects from scratch using an ASF user board project as this is what is needed in real world applications that use a custom board.


How to add ASF to an existing project that was not started as an ASF project.


There are slight differences between ASF projects created for Atmel evaluation boards and user board ASF projects. This part of the tutorial shows the differences between the project types such as which files are different and where to changes settings in the files.


How to enable the on-chip oscillators of the microcontroller to use the external crystals instead of the internal R/C oscillators in ASF.


A quick start checklist for creating new ASF user board projects. Where to add code and to change settings in a new ASF project.


Using ASF functions to read and write individual microcontroller pins used for general purpose input/output.


How to write to a microcontroller port or group of pins from a port using ASF functions.


Reading and writing a port or group of port pins rather than individual port pins.


How to configure C standard input/output functions such as printf() and scanf() to use a UART for input/output.

Further Parts of the Tutorial Series

Further parts will be added to the tutorial series until it is complete. Check the index and menu of the tutorial for additional parts.

Arduino Projects for Beginners

A list of easy to build Arduino projects for beginners and kids. These projects use easy to obtain components and can be built on an electronics breadboard. Suitable for use with an Arduino Uno or similar board.

Arduino projects for absolute beginners below list very easy projects for first time Arduino users. The section that follows lists projects for beginners who have learned the basics of how to use an Arduino.

Arduino Projects for Absolute Beginners

The simple projects below are suitable for absolute beginners with Arduino. They are part of a series of tutorials that introduce beginners to basic electronics. For beginners who have not yet used an electronics breadboard, see how to build a simple circuit on breadboard.

Arduino Projects for Beginners

The Arduino projects for beginners area on the Starting Electronics website has various projects for beginners such as:

Other projects suitable for beginners:

Programming Arduino

Beginners wanting to learn how to program Arduino can look at the Arduino programming course.

Arduino Ethernet Shield

For those wanting to know how to use the Arduino Ethernet shield as  a web server, the Arduino Ethernet shield web server tutorial explains all you need to know.

Other Arduino Resources

Also see the following areas on the Starting Electronics website:

  • Arduino Projects – various Arduino projects for beginners and more advanced users.
  • Arduino Tutorials –  interesting Arduino tutorials.
  • Arduino Articles – various articles and small projects such as how to battery power an Arduino, connecting a buzzer to Arduino, using Arduino to measure voltage and more.
  • Arduino Software – various Arduino software projects and information on installing Arduino software.

Another useful resource for projects is the Arduino tutorials page on the Arduino website.

Moving Light Display Arduino Project for Beginners

This easy Arduino project for beginners can be built on an electronic breadboard and uses only four LEDs and four series resistors to make a moving light display. The Arduino sketch for the project can be modified to change the rate at which the pattern on the LEDs is updated. The patterns to display on the LEDs can also be changed.

Moving Light Display Arduino Project for Beginners

Moving Light Display Arduino Project for Beginners

Details of this Arduino Project for Beginners

A breadboard is used to connect four LEDs with series resistors to an Arduino which can be an Arduino Uno or other Arduino. Four wire links connect the LEDs to four of the Arduino pins which are set as outputs. A common GND wire from the Arduino is connected to the breadboard which connects the other side of each of the series resistors to GND. This completes the circuit and enables the LEDs to be switched on by the sketch running on the Arduino.

Moving LED Arduino Project

Moving LED Arduino Project

The full project includes the circuit diagram, Arduino sketch code and instructions on how to modify the sketch to display different moving light LED patterns on the LEDs.

Other Arduino Beginner Project Resources

Those new to Arduino may be interested in the beginners electronics series of tutorials that includes an introduction to Arduino.

The same tutorial series includes ten Arduino projects for absolute beginners which is a sample of various Arduino built-in examples with instructions on how to build each project.

Installing Arduino Software and Drivers in Windows 10

There are some choices to be made when installing Arduino software and drivers in Windows 10. Arduino offer two ways of installing the Arduino IDE on a Windows PC — Windows installer file and a Windows zip file. Windows 10 will also install a default driver when an Arduino is plugged into the USB port of a PC. This driver can be replaced by the Arduino driver that comes with the Arduino software.

Arduino Software and Drivers

Installing Arduino software using the Windows zip file is the simplest method of installing the software. It is just a matter of copying the folder out of the downloaded zip file into the desired location on the PC. This allows the software to easily be removed by deleting the folder.

When Windows 10 installs a driver automatically, the Arduino just looks like a COM port in Windows Device Manager. It is not recognized as an Arduino, although it will work properly and code from the Arduino IDE can be loaded to it. After installing the Arduino driver that comes with the Arduino software, the Arduino will be shown as an Arduino on a COM port in Device Manager. The difference is shown in the image below.

Windows Default COM Driver and Arduino Driver

Windows Default COM Driver and Arduino Driver

As can be seen in the image, with the default Windows 10 driver installed, the Arduino appears as USB Serial Device (COM4) (left), but after the Arduino driver is installed the same Arduino appears as Arduino Uno (COM4) (right).

Full instructions on installing the Arduino IDE software and updating the Arduino driver can be found in the article on how to install Arduino software and drivers on Windows 10.

Floating Point Numbers don’t Print with sprintf in Atmel Studio AVR C

When writing C program code for 8-bit Atmel AVR microcontrollers and using Atmel Studio, functions such as printf() and sprintf() do not print floating point numbers of type float. Instead of printing a float to a string or standard output, a question mark is printed.

Question Mark is Printed from the sprintf Function Instead of Float Number

The image below shows the output from the serial port of an AVR microcontroller that printed a floating point number to a string using the sprintf() function. The string was then sent to a terminal program running on a PC. The C program was built in Atmel Studio 7 using the default project settings. As can be seen, floating point numbers don’t print with sprintf, but a question mark is printed instead of the expected number.

Floating Point Numbers don't Print with sprintf in Atmel Studio AVR C

Floating Point Numbers don’t Print with sprintf in Atmel Studio AVR C

Cause of the float Printing Problem

The problem occurs because Atmel Studio 7 uses the minimal version of the function that all the printf family of functions rely on. Using the minimal function reduces code size of the printf family of functions which is desirable when using microcontrollers, especially the smaller 8-bit AVR microcontrollers that have small amounts of memory. Floating point numbers are not supported by the minimal function, causing the question mark to be printed instead of the floating point number.

Printing float Numbers with sprintf using AVRs and Atmel Studio

To fix the floating point printing problem, the full function that the printf family uses must be linked into the program instead of the minimal function. The article on how to print floating point numbers in AVR C code with Atmel Studio 7 shows how to include the full function by changing linker settings in Atmel Studio.

After changing setting in Atmel Studio, the sprintf function works properly and prints the floating point number to the terminal as shown in the image below.

Printing float Numbers with an AVR Microcontroller using sprintf

Printing float Numbers with an AVR Microcontroller using sprintf