HardwareBee
https://www.nuvation.com/
  • Find ASIC Vendors
  • Design Services Directory
    • FPGA Design Services
    • Electronic Design Services
    • Embedded Software Companies
    • Add your company
  • Get Price Quotes From Vendors
    • Electronic Design Companies
    • FPGA Design Companies
    • Embedded Software Companies
    • Design & Manufacturing Companies
    • Get IC Device Prices
  • Emerging ICs Directory
    • UWB
      • Spark Microsystems
    • FPGA
      • Colonge Chip
      • Rapid Silicon
    • Radar
      • Acconeer
    • Add your IC
  • Get IC Prices
  • WikiBee
  • Resources
    • FPGA Academy
    • Embedded Academy
    • FPGA vs ASIC Calculator
    • Watt to dBm Converter
    • dBm to Watt Converter
  • Pricing
    • Get Your Company Listed
    • Book a Demo
    • Get a Monthly Lead List
HardwareBee
  • Design Services Directory
    • FPGA Design Services
    • Electronic Design Services
    • Embedded Software Companies
    • Add your company
  • Get Price Quotes From Vendors
    • Electronic Design Companies
    • FPGA Design Companies
    • Embedded Software Companies
    • Design & Manufacturing Companies
    • Get IC Device Prices
  • Emerging ICs Directory
    • UWB
      • Spark Microsystems
    • FPGA
      • Colonge Chip
      • Rapid Silicon
    • Radar
      • Acconeer
    • Add your IC
  • Get IC Prices
  • WikiBee
  • Resources
    • FPGA Academy
    • Embedded Academy
    • FPGA vs ASIC Calculator
    • Watt to dBm Converter
    • dBm to Watt Converter
  • Pricing
    • Get Your Company Listed
    • Book a Demo
    • Get a Monthly Lead List
67885 Views

Step by Step Guide to Microcontroller Programming

03/05/2021, hardwarebee

Get a Price Quote

Search Development Services
  • FPGA
  • Electronic
  • Embedded

Find electronic design, board design and module design companies:

Find FPGA design companies:

Find embedded software companies:

This is a step by step guide for those who want to start with Microcontroller Programming. The article starts with introducing a few basic terms that will be used in the guide, a list of tools, programming languages and at end, an example of a downloadable code with a step by step guide that you could use to practice microcontroller programming.

 

But before diving into Microcontroller Programing. Let’s define first two basic terms: Hardware and Software.

 

Hardware consists of the physical components in the system such as a chips, keyboard, a mouse, a monitor, memories, I/O devices. Hardware is harder to develop compared to software, it has to be designed for very specific applications, and it is a very efficient and perfect solution in high-speed systems.

 

Software is the non-physical components or the applications that run on the hardware such as operating systems, computer games and network applications. Software is highly configurable, easy and faster to be developed, also very cheap compared to hardware.

 

Read here: Microcontroller vs Microprocessor

 

What is a Microcontroller

 

To understand what a microcontroller is, we need to understand first what a microprocessor or a CPU is (Central Processing Unit). A CPU is a heart of any computer system, it is like the human brain when performing a task. We can basically divide it into two essential parts:

Control unit: This unit is used to fetch the data from the memory.

Execution unit: This unit is used to execute or run the data.

 

Types of Processors

 

There are many categories of processors such as general-purpose processors, application specific system processor, and multi-processor system. General purpose processor has many types:

 

▪ Microprocessor

▪ Microcontroller

▪ Embedded processor

▪ Digital signal processor

 

Microprocessor is a semiconductor device or a computer on a chip, but not a fully functional computer. Its central processor unit contains

 

▪ ALU

▪ Program counters

▪ Registers

▪ Other circuits (clocking time, interrupt)

 

 

A microcontroller is an IC that contains a microprocessor and some peripherals to be a complete functional computer, peripherals e.g., ADC, RAM, ROM, DAC.

 

 

History of Microcontroller

 

Originally, Intel corporation was the first manufacture of microcontrollers. The first microcontroller was produced in 1971 in the USA. It was a 4-bit microcontroller with the name i4004. Latterly, Intel produced more sophisticated models in that time with an 8-bit microcontroller and after that a 12-bit microcontroller was developed by Toshiba.

 

Gold Sponsors

 

Applications of Microcontrollers

 

Microcontrollers have many applications in many industries e.g., automotive, medical, industrial automation, aerospace, robotics.

 

In the automotive industry, for example, modern cars nowadays have more than 100 microprocessors for systems like air condition, ABS, EBD and also ADAS or advanced driving assistance systems such as adaptive curies controller and lane assist, the following is an image of an ECU or electronic control unit.

 

In the medical domain, there are medical devices that include microcontrollers such as an MRI, glucose test set, portable EKG. The following image, is a glucose test device.

 

 

In aerospace, most of the aircrafts have been designed with new avionics systems using microcontrollers. Additionally, there are flight control system, air traffic control system, navigation and weather systems that are all based on microcontrollers.  

 

Popular Microcontrollers

 

There are many microcontrollers’ types and platforms, but selecting a microcontroller depends on many factors:

 

▪ Application

▪ Budget

▪ Performance

▪ Number of GPIO pins

▪ Memory size

▪ Temperature of operating environment

▪ Power consumption

 

AVR Microcontroller

 

The following image contains a block diagram of AVE12DA, one of the most popular microcontroller famlily — the AVR microcontroller:

 

 

 

AVR microcontrollers is produced by Atmel corporation (today: Microchip), Atmel has 6 families of AVR microcontrollers, 4 families as general-purpose microcontrollers and 2 as specific purpose microcontrollers. General purpose microcontrollers are:

 

▪ 8 bit – mega AVR

▪ 8 bit – AT Tiny

▪ 8 & 16 bit – AVR Xmega

▪ 32 bit – AVR

 

Specific purpose microcontrollers are:

 

▪ Automotive AVR

▪ Battery Management

 

Automotive AVR, from its name, it has been developed for automotive applications. It can work under very high temperatures up to 150 Celsius, and it includes protection systems for short circuit problems.

 

Battery management microcontroller is developed for battery management systems to secure charging and discharging operations.

 

Examples of AVR Platforms

 

▪ Arduino UNO

▪ Adafruit Blue fruit Micro

▪ Raspduino

▪ Digispark Pro

 

 

ARM Microprocessor/Microcontroller

 

ARM microprocessor is the most popular processor in the world, especially, in the consumer applications. You may have an ARM processor-based device, but you don’t know! ARM is mostly a key component of any successful 32-bit embedded systems. The first ARM was developed in 1985.

 

 

RISC Technology

 

ARM is used RISC technology, RISC stands for reduced instruction set computer, it is a design philosophy to deliver simple instructions within a single cycle. It relies more on the software. On the other hand, CISC technology relies more on the hardware.

 

 

RISC technology focuses on reducing the instruction set of the processor. On the other hand, CISC processor has a non-fixed number of the instruction set.

 

ARM Features

 

Arm has many features for every embedded system designer is looking for, e.g. low power consuming due to its compact size, also high code density is another feature since we are developing embedded systems, we will have limited resources in the most cases.

 

Internal structure of ARM-based Microcontroller

   

This figure shows the internal structure of most ARM based devices:

 

 

The boxes represent functions, the lines represent buses. Let’s talk more about every component in details:

 

▪ The ARM processor is the core component it is responsible for the processing operations

▪ Controllers are used to coordinate the system functions as memory and interrupt controllers

▪ Peripherals are used to provide the system inputs and outputs

▪ A bus is used for exchanging data between the different components in the system

 

 

Examples of ARM platforms

 

There are many devices and embedded platforms that have arm microprocessor e.g.

 

▪ Arduino Due

▪ Raspberry Pi

▪ STM32F103C8T6

▪ NXP LPC1768

 

 

Other Microcontroller and Platforms

 

As we said before selecting a microcontroller or a platform depends on many factors (budget, number of pins, etc.…). There are also another microcontrollers and platforms e.g.

 

▪ PIC Microcontrollers

▪ 8051

▪ ESP32

▪ Motorola Microcontrollers

 

Microcontroller Software and Hardware Tools

 

Since the creation of the microcontroller, there have been many types of software and hardware development tools. Of course, some of the tools can be used across various microcontroller types but some are very specific per microcontroller. Before starting with microcontroller programming, you may want to get yourself familiar with the microcontroller programming tools and, last but not least, the development process.

 

Using embedded development tools, we may need tools as follows:

 

Assembler

 

It is a software tool that converts your source code in assembly into machine code, for example (GNU assembler).

 

Compiler

 

It is a software program that coverts your source code in a high-level programming language into assembly language or machine code. Compilation can be:

 

▪ Native: this means you run the compiler and the generated code on the same machine

▪ Cross: This means you run the compiler on a machine and the generated code runs on a different machine (processor architecture).

 

Linker and Locator

 

A linker is a program that collect and link the compilations and assemble operations and produce a single exe.

 

A locator is a program tool that can be used to change the memory map of the linker output.

 

Simulator

 

It is a program that imitates real scenario, it produces an approximation of the real-time systems. A simulator is used:

▪ if the real hardware not available

▪ in dangerous test environments and scenarios

 

 

Debugger

 

It a software program and hardware device that can be interfaced to my PC to my embedded target. A debugger is used:

▪ to set breakpoints

▪ to trace execution

▪ to dump memory

 

Hardware debugger can be

▪ in-circuit debugger

▪ debug agent software on board

 

Flash loader

 

It is a program and hardware device that can be used to:

 

▪ Program ROM/Flash

▪ Watch variables

▪ Erase ROM/Flash

 

Profiler

 

Profiler is a tool to monitor performance of the software code

 

Integrated Development Environment

 

It is a software program that has most the tools all in one. It may include

 

▪ Text editors

▪ Compilers

▪ Debuggers

▪ Profilers

▪ Simulators

▪ Linkers

 

Microcontroller Software Languages

We can classify them into two types:

 

High-level

▪ C/C++

▪ Java

▪ Ada

 

Using this type will provide an abstraction from the hardware level

 

 

Low-level

 

Machine code

 

It is 0’s and 1s and hard to be written by humans, but easy for computers to understand

 

Assembly

 

It is a mnemonic code and pseudo instructions to improve readability

Examples:

An instruction consists of mnemonic (opcode) + operands

Opcode is an operation taken by a machine processor

Operands is the final target; the opcode have to take an operation for.

 

Assembly language is readable and understandable more than machine code but you need to use it on a specific processor and have knowledge of its architecture.

 

C/C++ Programming Languages

 

High-level languages have the following features

▪ Easy to write

▪ Flexible

▪ Processor independent

▪ High productivity

 

Microcontroller Programming Example Using AVR ATMEGA16

 

ATmega 16 has the following features:

 

▪ 16 Kb of In-system Self programmable flash memory

▪ 512 Bytes EEPROM

▪ 1 Kbyte Internal SRAM

▪ Programming Lock for security

 

Peripheral Features

 

▪ Real-Time Counter with Separate Oscillator

▪ Programmable Serial USART

▪ Four PWM Channels

▪ 8-channel, 10-bit ADC

▪ On-chip Oscillator

▪ Power-on Rest and Brown-out Detection

▪ Internal RC Oscillator and Interrupt Sources

▪ Voltages (from 2.7v to 5.5v)

 

 

LED Blinking Program Example using ATmeg16 and Proteus

 

LED blinking program in embedded systems like the “hello world” program in application development.  In the following example, you will learn and use the Proteus simulator to run your first program. To download the source files, please go to this folder.

 

Write your program using Atmel studio

 

After downloading your IDE,

 

microcontroller programming AVR

 

open it and choose new project and choose the location of the hex file as in the following image

 

microcontroller programming AVR

 

The next step is to choose the microcontroller family

 

microcontroller programming AVR

 

After that you will get the following window with starter code

 

microcontroller programming AVR

 

And now please write the following code

 

microcontroller programming AVR

 

The next step is building your program by pressing F7

 

microcontroller programming AVR

 

After that you will find the hex file on the chosen location

 

microcontroller programming AVR

 

 

The next step is using the Proteus simulator

 

 

And now create a schematic from the selected a template

 

 

microcontroller programming AVR

 

And choose Do not create a PCB layout

 

microcontroller programming AVR

 

Finally, we are done but we need to add the hex file as in the following image

 

microcontroller programming AVR 

 

 

Now edit CKSEL Fuses

 

microcontroller programming AVR

 

Save and click on play

 

 

And you can see that the LED is off for 500ms (left hand side) and on for 500ms (right hand side)

 

 

Program Explanation line by line

 

To download the source files, please go to this folder.

 

#define f_CPU 100000UL // to create a constant and choose the processor speed

#include <avr/io.h> // to recall some files for inputs and outputs

#include <avr/delay.h> // recall this file to use delay functions

int main(void){   // the starting function and the main program

DDRA = 0b0000001; // to configure the pin a as an output / direction

While(1){ // to loop forever

PORTA = 0b00000001; // to make the PA0 = 1 and output 5v (LED is on)

_delay_ms(500); // delay for half a second

PORTA = 0b0000000; // to make the PA0 = 0 and output 0v (LED is off)

_delay_ms (500); //delay for half a second

}

return 0;

} //end of the program

 

Conclusion

 

Nowadays embedded systems are used in vital products and can be used to secure and save a lot of people, as in the medical domain and other applications. You should keep learning after getting an overview and introduction about microcontroller programming. Your next step should be learning embedded software design and real-time triggered systems.

 

FAQ

 

What is a microcontroller?

 

A microcontroller is a small, low-cost computer that can be programmed to perform a variety of tasks. It is typically used in embedded systems, which are computer systems that are built into other devices such as appliances, cars, and industrial control systems.

 

What is microcontroller programming?

 

Microcontroller programming is the process of writing software for a microcontroller to control the behavior of an embedded system. This involves writing code in a programming language such as C or C++, and then uploading the code to the microcontroller using a programming tool such as a debugger or programmer.

 

What are some common programming languages used for microcontrollers?

 

Some common programming languages used for microcontrollers include C, C++, and assembly language. Other programming languages, such as Python and Java, can also be used with microcontrollers, but they may require additional software libraries or tools to work effectively.

 

What tools do I need to start programming a microcontroller?

 

To start programming a microcontroller, you will need a computer, a microcontroller development board, and a programming tool such as a debugger or programmer. You will also need a programming language compiler, such as GCC or Keil, and a text editor to write your code.

 

How do I upload my code to a microcontroller?

 

To upload your code to a microcontroller, you will need to connect the microcontroller development board to your computer using a USB cable. Then, you can use a programming tool such as a debugger or programmer to transfer the code from your computer to the microcontroller.

 

What are some common mistakes that people make when programming microcontrollers?

 

Some common mistakes that people make when programming microcontrollers include forgetting to include necessary header files, using incorrect syntax, and not properly debugging their code. It is also important to pay attention to the limitations of the microcontroller and ensure that your code does not exceed its memory or processing capabilities.

 

References:

 

https://www.faa.gov/regulations_policies/handbooks_manuals/aviation/phak/

AVR Microcontroller and Embedded Systems: Pearson New International Edition: Using Assembly and C, Muhammad Ali Mazidi, DeVry University

ARM System Developer’s Guide Designing and Optimizing System Software A volume in The Morgan Kaufmann Series in Computer Architecture and Design Book • 2004


Software Development

Email:

Never miss an update!

Follow us on LinkedIn

Do you need any price
information?

(Electronic design, FPGA design, Embedded SW services, PCB design, Turnkey)

Yes
No
This page is sponsored by
HardwareBee

Copyright 2017-2024, HardwareBee. All rights reserved.

  • About Us
  • Contact
  • Subscribe
  • News
  • Get Free Support
  • Get listed
  • Send a wiki/article
  • Advertise

Follow Us

Be sure to follow our LinkedIn company page where we share our latest updates LinkedIn
Partner with us Partner with us

Design and Manufacturing Services

  • Engineering Design Services
  • Electronic Design and Manufacturing
  • Electronic Product Development
  • Electronic Product Design
  • Electronic Consulting Services
  • Electronic Engineering Companies
  • Electronic Engineering Services
  • Electronic Product Design and Development
  • Electronics Design Services
  • Electronics Design Company
  • Electronic Design Consultants
  • Electronic Design Company
  • FPGA Design Company
  • FPGA Consultant
  • FPGA Design Services UK
  • Electronics Manufacturing services
  • Electronics Manufacturing Companies
  • Electronic Contract Manufacturing Companies
  • Electronic Manufacturing Services Companies
  • EMS Companies Directory
  • Electronic Design Services
  • FPGA Design Services
  • Embedded Software Companies
  • PCB Layout Services
  • Printed Circuit Board Manufacturers
  • Design and Manufacturing Services
X

Don’t miss anything, follow us on LinkedIn

https://www.linkedin.com/company/hardwarebee/

We are using cookies to give you the best experience on our website.

You can find out more about which cookies we are using or switch them off in .

Privacy Overview

This website uses cookies so that we can provide you with the best user experience possible. Cookie information is stored in your browser and performs functions such as recognising you when you return to our website and helping our team to understand which sections of the website you find most interesting and useful.

Strictly Necessary Cookies

Strictly Necessary Cookie should be enabled at all times so that we can save your preferences for cookie settings.

If you disable this cookie, we will not be able to save your preferences. This means that every time you visit this website you will need to enable or disable cookies again.

3rd Party Cookies

This website uses Google Analytics to collect anonymous information such as the number of visitors to the site, and the most popular pages.

Keeping this cookie enabled helps us to improve our website.

Please enable Strictly Necessary Cookies first so that we can save your preferences!

Additional Cookies

This website uses the following additional cookies:

(List the cookies that you are using on the website here.)

Please enable Strictly Necessary Cookies first so that we can save your preferences!