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:

Integrated IoT development board
DSP, Micros & Memory
The new ESP32 development board from ideaspark features the 32-bit Xtensa dual-core 240 MHz microcontroller combined with a 1,9-inch (6,4 cm) full-colour TFT LCD.

Read more...
QuecPython live demonstration
Quectel Wireless Solutions DSP, Micros & Memory
QuecPython allows designers to adapt Quectel’s modules quickly, with a low-code approach to suit their precise requirements in less time and at reduced cost, while maintaining high security standards.

Read more...
Robust and customisable SBC
Altron Arrow DSP, Micros & Memory
Pairing the powerful i.MX8M Plus System on Module (SoM) from SolidRun, which features the i.MX 8M Plus SoC from NXP, this high-performance SBC is set to transform industrial environments.

Read more...
New family supports future cryptography
Altron Arrow DSP, Micros & Memory
NXP has introduced its new i.MX 94 family, which contains an i.MX MPU with an integrated time-sensitive networking (TSN) switch, enabling configurable, secure communications with rich protocol support in industrial and automotive environments.

Read more...
Fast and reliable 4G connectivity worldwide
TRX Electronics DSP, Micros & Memory
Powered by a powerful Quectel LTE Cat 4 modem, the Arduino Pro 4G module’s fast data throughput and high bandwidths ensure reliable and quick data download and upload, even in remote locations.

Read more...
NXP’s all-purpose microcontroller series
Altron Arrow DSP, Micros & Memory
NXP has released its MCX A14x and A15x series of all-purpose microcontrollers which are part of the larger MCX portfolio that shares a common Arm Cortex-M33 core platform.

Read more...
ESP32-P4 SoC
iCorp Technologies DSP, Micros & Memory
Espressif Systems announced its latest SoC, the ESP32-P4 which is powered by a RISC-V CPU, with an AI instructions extension, an advanced memory subsystem, and integrated high-speed peripherals.

Read more...
Microchip SoC FPGA
ASIC Design Services DSP, Micros & Memory
Microchip Technology introduced the RT PolarFire SoC FPGA, the first real-time Linux capable, RISC-V-based microprocessor subsystem on a proven RT PolarFire FPGA platform.

Read more...
QLC Flash memory using BiCS tech
EBV Electrolink DSP, Micros & Memory
KIOXIA announced it had started shipping its 2 Tb Quad-Level-Cell memory devices with its 8th-generation BiCS FLASH 3D flash memory technology.

Read more...
Low noise 3-axis MEMS accelerometers
Altron Arrow DSP, Micros & Memory
The ADXL357 and ADXL357B from Analog Devices are digital outputs, low noise density, low 0 g offset drift, low power, three-axis accelerometers with selectable measurement ranges.

Read more...