DSP, Micros & Memory


ATmega328P: Getting started without Arduino

29 November 2024 DSP, Micros & Memory


I’ve been using the Arduino Uno board for quite some time, and I’ve always wondered what it would take to get the ATmega328P (the original chip used on the older Uno boards) working completely on its own. With the Arduino making it so accessible via its bootloader, nice GUI software, and C++ abstraction, you’d wonder why on earth I would want to even attempt this. Sometimes, in order to appreciate what others have done, it’s important to try doing it yourself. This project really demonstrated how much work the Arduino folks put into this and changed the world with that friendly little product.

In this article, we’ll walk through bringing up the chip completely on its own, using only an external power source and an Atmel-ICE programmer.

Environment setup

There are a few ways to configure an ATmega328P. One such way, intentionally not covered as you can tell by the title, is by dropping your ATmega328P chip into an Arduino Uno, programming it, and then moving it over to a breadboard. Based on feedback in forums, some folks want to skip the Arduino process and use a more traditional approach with programmers such as the Atmel-ICE from Microchip. The most straightforward way to start with a Microchip (formerly Atmel) microprocessor is to install Microchip Studio. At the time of writing this article the full Microchip Studio suite is supported only in Windows. Since I like to have all my build environments run in CI (Continuous Integration), I opted for an alternative approach.

The GNU Compiler Collection (GCC) is one of the most popular compilers available for the C language. It compiles certain platforms and architectures, but not for the AVR (ATmega) family of chips. There is, however, a set of compilers for the AVR and other Microchip families hosted on their website. Luckily, these compilers have been packaged into nice Debian packages that can easily be installed in Debian or Ubuntu as follows:

$ apt-get install gcc-avr binutils-avr avr-libc avrdude

With these tools installed, code is now able to be compiled and the ATmega328P can be programmed with only an Atmel-ICE programmer and an external power supply set at 5 V. The AVR version of GCC will be used to compile the code and AVRDUDE will be used to flash the ATmega328P chip.

The project

Table 1 – Connection layout.

For this project, the goal was to demonstrate some basic, but functional, capabilities of the ATmega328P. A simple external LED and some serial commands back and forth were all that were needed to prove that this chip could stand on its own.

An important component to software development is unit testing. Unit testing validates that the functions or pieces of the larger system are working as expected. If someone comes along and modifies a piece of that functionality, the unit test will prevent regressions from happening (that is, you unintentionally broke something else by introducing a new feature).

The pinout used to connect the Atmel-ICE programmer to the ATmega328P chip is shown in Table 1.

Adding a few LEDs, hooking up the serial communication port to a Raspberry Pi, and picking off the Raspberry Pi’s 5 V line, a full assembly ready for testing is available.

Testing, compiling, and more testing

As you develop new features, use the Makefile to run unit tests and compile the code. After validating that your desired code does what it is intended to do (via unit test validation), build the binary, flash it onto the device (also via the Makefile), and run testing using the Raspberry Pi’s serial communication port.

One of the most important pieces is correctly flashing the fuse bits to enable the internal 8 MHz clock. This is added to the flashing command in the Makefile:

avrdude -c atmelice_isp -p m328p -B 32 -U lfuse:w:0xe2:m

After that, the chip’s serial interface should be able to be used with the assumption that the onboard clock runs at 8 MHz (as defined in the top of main.c). From here, more functionality can be added, such as support for additional serial commands, or interfaces to external components and sensors.

Conclusion

In this article, brief instructions on how to get started with the ATmega328P chip, without any external circuitry, were given as commonly seen with the original Arduino Unos and Microchip evaluation boards. Additionally, there was an important detail, often overlooked, about programming the fuse bits to set the internal clock to 8 MHz. At this point, one should be able to add more functionality with additional tests, and run everything with just an Atmel-ICE programmer and an external 5 V supply. For simplicity, utilising a Raspberry Pi for its power source and serial communication capabilities is one of the easiest ways to control the process end-to-end.

The project’s source code can be found by visiting https://bit.ly/4eVcEes




Share this article:
Share via emailShare via LinkedInPrint this page

Further reading:

Arduino platform with Analog Devices technology for flexible industrial control
Altron Arrow Editor's Choice DSP, Micros & Memory
Software-configurable systems enable industrial OEMs to deliver unprecedented flexibility to the factory floor, while simplifying product complexity.

Read more...
Advanced eMMC storage solutions
Future Electronics DSP, Micros & Memory
Alliance Memory provides advanced NAND flash memory storage solutions that follow the JEDEC eMMC v5.1 standard to meet the growing demand for efficient, high-capacity storage solutions in today’s digital era.

Read more...
NPU in the most powerful STM32 processor
Future Electronics DSP, Micros & Memory
The STM32N6 is STMicroelectronics’ newest and most powerful STM32 and the first to come with the company’s Neural-ART Accelerator, a custom NPU capable of 600 GOPS.

Read more...
Low-noise chip-scale atomic clock
Avnet Silica DSP, Micros & Memory
Microchip Technology has announced its second generation Low-Noise Chip-Scale Atomic Clock, model SA65-LN, in a lower profile height and designed to operate in a wider temperature range.

Read more...
ESP32-C6 achieves Thread 1.4 certification
iCorp Technologies DSP, Micros & Memory
The ESP32-C6 has achieved Thread 1.4 Interoperability Certification, offering secure commissioning, advanced diagnostics, enhanced internet connectivity with Thread over Infrastructure, and optimised energy-efficient device roles.

Read more...
PCIe Gen 4 16-lane switch
RS South Africa DSP, Micros & Memory
Microchip’s PCI100x devices deliver high performance and cost efficiency for any application where accelerated or specialised computing is used.

Read more...
Ultra-low-power MCX L microcontroller
Avnet Silica DSP, Micros & Memory
The MCX L series features an Arm Cortex-M33 core, running at up to 96 MHz and a Cortex-M0+ core operating as an ultra-low-power always-on sense domain.

Read more...
Webinar: AMD Vitus Unified Software Platform
DSP, Micros & Memory
By mastering this bi-directional workflow to efficiently transition between AMD Vitis and AMD Vivado environments, design engineers will be able to maximise their productivity.

Read more...
Low-cost i.MX development board
Altron Arrow DSP, Micros & Memory
The FRDM i.MX 93 development board from NXP is a low-cost and compact development board featuring the i.MX93 applications processor.

Read more...
PowerGood DC-DC converter
Vepac Electronics DSP, Micros & Memory
Standard features on the full range of converters include output current limiting and short circuit protection, output over-voltage protection, and input under-voltage lockout.

Read more...