Atmel Software Framework Tutorial

The final part of the Atmel Software Framework tutorial is now available. It covers how to use the ASF help documentation and how to find and use example ASF code. The tutorial uses an Atmel ARM Cortex on an Atmel Xplained evaluation board.

A previous blog post listed the current articles in the tutorial at the time of posting. The tutorial series is now complete.

ASF – Atmel Software Framework Tutorial

The first part of the ASF tutorial series introduces ASF and shows the basic structure of ASF. Each part of the tutorial series explains various parts and usage of the ASF in easy to follow steps.

The final part of this series shows how to use the ASF documentation and ASF example projects in Atmel Studio 7.

 

Breadboard Prototyping with Atmel Xplained Boards

Breadboard prototyping with an Atmel Xplained board is not as easy as using a board such as an Arduino which allows jumper wires to be connected directly from the board’s headers to the breadboard.

Easily Connecting to an Atmel Xplained Board for Breadboard Prototyping

One solution to easily connect to an Atmel Xplained board from a breadboard is to make up a ribbon cable with two female IDC connectors. This allows jumper wires to be inserted into the IDC connector which can then be connected to a breadboard or breadboard circuit. The image below shows how this is done.

Breadboard Prototyping with an Atmel Xplained Pro Board

Breadboard Prototyping with an Atmel Xplained Pro Board

The above arrangement of breadboard prototyping is used in the ASF ARM tutorial series that teaches how to use the Atmel Software Framework on ARM Cortex microcontrollers.

The board in the above image is a SAM4N Xplained Pro board.

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.

INTRODUCTION TO ASF

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

BLINKING AN LED ON AN ATMEL DEVELOPMENT BOARD

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

BLINKING AN LED ON A CUSTOM OR USER BOARD

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.

ADDING ASF TO AN EXISTING PROJECT

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

COMPARING ATMEL BOARD AND USER BOARD ASF PROJECTS

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.

USING EXTERNAL CRYSTALS IN AN ASF PROJECT

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

ASF PROJECT QUICK START CHECKLIST

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

READING AND WRITING PINS USING ASF

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

WRITING TO A PORT USING ASF

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

READING AND WRITING A PORT USING ASF

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

USING A UART FOR C STANDARD I/O FUNCTIONS

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.

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

Unpacking a Atmel SAM4N Xplained Pro Evaluation Board

The Atmel SAM4N Xplained Pro evaluation board contains a ATSAM4N16C microcontroller. The board itself is rather basic with only one user programmable LED and one user programmable push-button switch (the second switch is a reset switch). Pins of the microcontroller are available on headers on the board.

An on-board Embedded Debugger is included on the board, so that no external tools are required to program or debug the ATSAM4N16C.

The video below shows the evaluation board being unpacked.

Some features of the ATSAM4N16C microcontroller are:

  • ARM Cortex-M4 that can run up to 100MHz
  • 3 USARTs and 4 UARTS
  • Real Time Clock (RTC) with calendar and alarm features
  • 10 bit ADC and DAC
  • 1Mb Flash memory
  • 80kb SRAM
  • The usual SPI, TWI, timers, PWM, etc.

The ATSAM4N16C does not contain any USB ports, Ethernet or external bus.

Resources from Atmel