Cover Image

Atmel AVR programmeren met UPDI

9 Maart 2025 - Geschatte leestijd: 12 minuten

Arduino heeft de microcontroller populair en toegankelijk gemaakt. En menig ontwikkelbord komt dan ook met een Arduino port. Een zoektocht op internet geeft dan ook tal van resultaten hoe je met Arduino aan de slag moet. Als je echter wil uitbreken uit dat Arduino keurslijf zijn de zoekresultaten een pak minder.

Compiler

Nu kunnen we wel meeliften op het werk dat gedaan is door Arduino. Met in eerste instantie de compiler.

Als je zoekt in de repositories van je favoriete Linux distro, vind je oudere compiler versies. Versies die bvb de nieuwere microcontroller versies niet kennen.

En dan zijn er  verschillende opties:

  • Compileren van je eigen versie (compiler, libc, ...)
  • Leentje buur spelen bij Arduino

In dit geval kiezen we voor 'leentje buur' spelen, want achter de schermen hebben veel Arduino bordjes een ATMEL microcontroller en moeten ze dus ook een bijpassende compiler en tooling gebruiken.

Welke versies er zijn kan je vinden op Arduino compilers (Linux). En downloaden kan via een url te bouwen met de gevonden compiler versie. 

wget http://downloads.arduino.cc/tools/avr-gcc-7.3.0-atmel3.6.1-arduino7-x86_64-pc-linux-gnu.tar.bz2

Dit geeft je een modernere voorgebouwde compiler.

Compileren

Uiteindelijk moet de broncode omgezet worden naar de microcontroller instructies. Dit is de compilatie stap.

Een vereiste is wel dat je compiler gevonden wordt en meer bepaald ook als eerste gevonden wordt als je meerdere versies hebt.

Op een linux platform is dit mogelijk door je PATH environment variabele zo aan te passen dat het path naar deze compiler als eerste staat. Dit kan door je settings permanent aan te passen of, zoals ik het prefereer, ze enkel en alleen voor dit doel aan te passen.

Dit is simpel te bereiken door de PATH variabele voor de terminal waarin je de compilatie doet, aan te passen.
We 'sources' deze extra settings

export PATH=<path naar je AVR compiler>:$PATH

Als we dit in een bestand bijhouden is het op de commanline niet meer dan volgend commando uit te voeren

source <path + filename met bovenstaande export lijn>

En compileren wordt nog eenvoudiger als we gebruik maken van een Makefile.
Zo'n makefile beschrijft welke commando's uitgevoerd moeten worden en in welke volgorde.
Hieronder staat een simple voorbeeld:

# The MCU model, see https://www.nongnu.org/avr-libc/user-manual/using_tools.html for list
MCU=attiny1604
# Clock speed used (after divider), mostly for delay functions
CLK=20000000
# Name of project output file
PROJ=avrfox
# List of source files
SOURCES=avr_fox.c
# List of object files generated from source files
OBJ=$(SOURCES:.c=.o)
all: $(PROJ).hex
# Generated object files
.c.o:
avr-gcc -w -Os -DF_CPU=$(CLK) -mmcu=$(MCU) -c -o $@ $<
# Generate executable
$(PROJ).elf: $(OBJ)
avr-gcc -w -mmcu=$(MCU) $(OBJ) -o $(PROJ).elf
# Create Intel hex format for programming
$(PROJ).hex: $(PROJ).elf
avr-objcopy -O ihex -R .eeprom $(PROJ).elf $(PROJ).hex
clean:
rm -f *.hex *.elf *.o
# Install flashes the code
install:
avrdude -c serialupdi -p $(MCU) -P /dev/ttyUSB0 -U flash:w:$(PROJ).hex

# Give program size info
size:
avr-size -C --mcu $(MCU) $(PROJ).elf

Programming (Flashen)

Uiteindelijk moet je programma op de microcontroller geraken. En dat wordt het 'flashen' genoemd. (In de Arduino programmeeromgeving ook wel 'upload' genoemd)

UPDI

Doorheen de jaren zijn er verschillende methodes gebruikt op deze Atmel microcontrollers. Een van de laatste nieuwe is UDPI (Unified Debugging and Programming Interface). Dit is een 1-draads programmer en debugging interface wat de integratie op een bord wel heel eenvoudig maakt.

Hardware

UPDI debugger en programmers zijn er in alle maten en prijsklassen.

De Adafruit UPDI HV Friend is een simpele en vrij goedkope programmer.

Atmel/Microchip heeft er uiteraard ook en die kunnen dan ook debuggen. Deze zijn echter wel wat prijziger.

Software

  • avrdude (website)
    Kijk in bovenstaand Makefile voorbeeld voor de avrdude en bijbehorende argument

Over ons

Samen werken aan en delen van kennis over elektronica en digitale technologie.

Links