Standalone ATmega328p

Support for using the ATmega328p as standalone board. More...

Detailed Description

Support for using the ATmega328p as standalone board.

Overview

The ATmega328p is most popular in the Arduino UNO. However, the 28 PDIP package of the ATmega328p can easily be used without any "board": Just place it on a bread board, and connect a TTL adapter and an ISP and you're ready to go.

The ATmega328p has two internal oscillators, one clocked at 8MHz and one at 128kHz. By default the fuses of the ATmega328p are configured that the internal 8MHz oscillator can be used. This allows the ATmega328p to be operated without any external components at a supply voltage anywhere between 2.7V and 5.5V.

ATmega328p.jpg
ATmega328p DIP package on a breadboard


MCU

MCU ATmega328p
Family AVR/ATmega
Vendor Microchip (previously Atmel)
RAM 2Kb
Flash 32Kb
Frequency 8MHz (up to 20MHz with external clock)
Timers 3 (2x 8bit, 1x 16bit)
ADCs 6 analog input pins
UARTs 1
SPIs 1
I2Cs 1 (called TWI)
Vcc 2.7V - 5.5V (when clocked at 8MHz)
Datasheet Official datasheet

Pinout

68747470733a2f2f692e696d6775722e636f6d2f715849456368542e6a7067
Pinout of the ATmega328p


All credit for above pinout image goes to https://github.com/MCUdude/MiniCore#pinout

Clock Frequency

The ATmega328p has two internal oscillators clocked at 8MHz and at 128kHz that allow it to be operated without any external clock source or crystal. By default the fuses are configured to use the internal 8MHz oscillator resulting in a clock speed of 8MHz. By setting the CKDIV8 fuse the clock divider can be enabled to operate the ATmega328p at 1MHz.

This "board" is configured to use 8MHz as core clock, so that the ATmega328p can be used without external circuitry and without any changes in the default fuse configuration.

By setting the environment variable ATMEGA328P_CLOCK to a custom frequency in Hz (e.g. 1000000 for 1MHz), this core clock can be changed easily. Refer to the datasheet on how to configure the ATmega328p to use an external crystal, an external clock source or the clockd divider.

Relation Between Supply Voltage, Clock Frequency and Power Consumption

A higher supply voltage results in a higher current drawn. Thus, lower power consumption can be achieved by using a lower supply voltage. However, higher clock frequencies require higher supply voltages for reliable operation.

The lowest possible supply voltage at 8 MHz is 2.7V (with some safety margin), which results in an active supply current of less than 3 mA (about 8 mW power consumption) according to the datasheet. At 1 MHz core clock a supply voltage of 1.8V is possible resulting in an active supply current of less than 0.3 mA (about 0.5 mW power consumption). For more details, refer to the official datasheet.

Flashing the Device

In order to flash the ATmega328P without a bootloader, an ICSP programmer is needed. Connect the programmer as follows:

ISCP pin ATmega328p pin
MISO 18/PB4/MISO
VCC 7/VCC
SCK 19/PB5/SCK
MOSI 17/PB3/MOSI
RESET 1/RESET
Ground 22/GND

The tool avrdude needs to be installed. When using the usbtiny (or one of the super cheap clones) running

make BOARD=atmega328p flash

will take care of everything. To use the programmer <FOOBAR> instead, run

make BOARD=atmega328p PROGRAMMER=<FOOBAR> flash

Serial Terminal

Connect a TTL adapter with pins 2/RXD and 3/TXD an run

make BOARD=atmega328p term

Please note that the supply voltage should be compatible with the logic level of the TTL adapter. Usually everything between 3.3 V and 5 V should work.

Caution

Don't expect having a working network stack due to very limited resources ;-)

Files

file  board.h
 Board specific definitions for the standalone ATmega328p "board".
 
file  periph_conf.h
 Peripheral MCU configuration for the ATmega328p standalone "board".