avr-microcontrollers

WHAT IS AVR MICROCONTROLLER?

AVR MICROCONTROLLER :

An AVR microcontroller is a type of device manufactured by Atmel, which has particular benefits over other common chips, but first what is a microcontroller?

AVR Mircocontrollers are easy to learn and use. They are simple enough to make your first program in minutes, but also have advanced capabilities for more complex applications.

A microcontroller has all or most of PC features built-in to a single chip, so it doesn’t need a motherboard, and many components, LEDs for example, can be connected directly to the AVR. If you tried this with a microprocessor, bang!

AVR microcontrollers come in different packages, some designed for through-hole mounting and some surface mount.

avr-microcontrollers

The AVR Microcontroller deals with data in 8-bit chunks as its data bus is 8-bit wide, although there is now an AVR32 with a 32-bit bus and an ATxmega family with a 16-bit data bus.

A PC has an operating system (Windows or Linux) and this runs programs, such as Word or Internet Explorer or Chrome that do specific things. An 8-bit microcontroller like the AVR doesn’t usually have an operating system, although it could run a simple one if required, and instead, it just runs a single program.

Just as your PC would be useless if you didn’t install any programs, an AVR must have a program installed to be any use. This program is stored in memory built-in to the AVR, not on an external disk drive like a PC. Loading this program into the AVR is done with an AVR programmer, usually when the AVR is in a circuit or system, hence AVR ISP or AVR In-System Programmer.

So what is a program? A program is a series of instructions, each very simple, that fetch and manipulate data. In most applications where you would use an AVR, such as a washing machine controller, for example, this means reading inputs, checking their state, and switching on outputs accordingly. Sometimes you may need to modify or manipulate the data or transmit it to another device, such as an LCD or serial port.

A series of simple binary instructions are used to do these basic tasks and each one has an equivalent assembly language instruction that humans can understand. The most basic way of writing a program for an AVR is to use assembly language (although you could write binary numbers if you want to be pedantic).

Using assembly language allows you to understand far more about the operation of the AVR and how it is put together. It also produces very small and fast code. The disadvantage is that you as the programmer have to do everything, including memory management and program structure, which can get very tedious.

To avoid this, high-level languages are increasingly being used to write programs for the AVR, C in particular but also Basic and Java derivatives. A high level means that each line of C (or Basic or Java) code can translate into many lines of assembly language.

The compiler also deals with the program structure and memory management so it is much easier. Commonly used routines, such as delays or maths, can also be stored in libraries and reused very easily. The C compiler also deals with larger numbers that take up more than a byte (8-bits).

In my opinion, writing AVR programs in C is like driving a car. Yes you can do it very easily but if something goes wrong you haven’t got a clue how to fix it and you can’t deal with tricky situations like icy roads. Starting with assembly language and writing some simple programs lets you understand what is going on “under the hood” so you know how it works and can get the most out of it. Then swap to C by all means but at least you know how the AVR microcontroller fits together and its limitations.

As well as having reprogrammable code memory for your program, the AVR has a second memory called EEPROM where you can store user data, like serial numbers, calibration data, and other information that needs to be preserved. It is accessed by instructions in your program.

AVRs also have an I/O space, which is used to control the hardware of the microcontroller and store temporary data used by your program. The hardware includes ports, ADC, communication interfaces like I2C (2-wire interface), SPI and UART (serial port), timers, and watchdogs that recover from system crashes. All these peripherals are controlled from your program using special instructions. A lot of AVR code programming is about how to set up and control this hardware interface.

 

A final word about Arduino. This is a simplified development system for microcontrollers. It is based on the AVR microcontroller but this is pretty well concealed. It is great for developing a quick project but it won’t really teach you about AVRs or how to program them using real development tools.

Microcontrollers are fundamentally different from microprocessors. Microprocessors are the brains of computers and they do all of the heavy lifting by executing instructions one after another at blazing speeds. This is not the case with microcontrollers, which operate much slower and often have very little memory. They’re also not as powerful, but they’re great for low-power applications that need a lot of inputs and outputs.

AVR microcontroller are used in many everyday objects, such as microwaves, cameras, air conditioners, dishwashers, washing machines, ovens

AVR Microcontrollers are not programmable in the same way as an Arduino board, but can be programmed using assembly language or C, and usually don’t require additional software to upload firmware and are much cheaper than other single chip MCUs, this makes them ideal for projects that don’t require a lot of power or advanced peripherals.

A typical AVR microcontroller has embedded memory and input/output ports, enabling it to control external devices without much help from other components.

Programming AVR Microcontrollers is relatively easy to do if you have a basic understanding of computer programming skills