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


Cover Image

21 December 2024

26 December 2024 Geschatte leestijd: 3 minuten

We hadden al een ganse tijd 2 "DPS3005-USB" modules van Aliexpress liggen en daarvoor ook reeds 2 Mean Well voedingen voor gereserveerd.

Regelbarer voeding van Ali ExpressMean Well voeding HRP-200-36

Het was nog even wachten voor we een geschikte behuizing vonden waar we beide modules netjes konden monteren. Die hebben we gevonden in een behuizing (ook via Aliexpress) die eigenlijk voor RD6018 / RD6024 voedingen bedoeld is:

Behuizing voor RD6018/RD6024

Hiervoor hebben we een 3D front en montagebeugels voor getekend en geprint:

Ge-3d-printe onderdelenUSB module in 3d print

Het bordje met de USB connector is vastgezet met 2 boutjes M3.

PSU in 3D print

Test montage

Na de test mongage is alles bekabeld:

BekabeldBekabeld

De bestanden voor de ge-3d-printe onderdelen kan je downloaden op https://www.printables.com/model/1121769-front-panel-to-mount-dps3005-module-in-case-for-rd

Om de zichtbaarheid bij de CNC machines, 3D printer en soldeeroven te verbeteren hebben we ineens nieuwe led panelen opgehangen, meer licht voor minder energie:

Plafond met ledpanelen


Cover Image

2 november 2024

2 November 2024 Geschatte leestijd: ~1 minuut

Om het wasteboard van de RatRig CNC vast te zetten hebben we wat beugels nodig. De CNC kan ons alvast helpen om de gaten in de aluminium profielen voor te boren:

Nu kunnen de gaten gemakkelijk op de juiste maat nageboord worden met de kolomboormachine. Wanneer de beugels geplaatst zijn en het wastebord 'definitief' vast ligt, kunnen we de machine verder afregelen.


P2mate, Peter De Schrijver 17/9/1970 - 12/7/2024

24 Juli 2024 Geschatte leestijd: 2 minuten

Vandaag hebben we in Massenhoven afscheid genomen van P2mate.

Alhoewel Peter, door de afstand tot Finland nog niet tot bij ons was geraakt, was hij wel zeer gekend in onze groep.

Voor zij die Peter niet kennen, Paul Walmsley heeft op het op de Linux Kernel mailing list prachtig uitgelegd: Mourning the loss of Peter De Schrijver

We zullen hem nog vaak herinneren wanneer we, zoals in zijn spirit, werken aan vrije open projecten of onze kennis delen met anderen.

Vaarwel.

In gedachten Peter De schrijver

Linux kernel mailinglist

LinkedIn, Mind software, in memoriam Peter De Schrijver

LinkedIn, Jasper Nuyens, in memoriam Peter De Schrijver

The Debian Project mourns the loss of Peter De Schrijver


29 juni 2024

29 Juni 2024 Geschatte leestijd: 4 minuten

Modificatie van de 80m ARDF ontvanger:

C9 en C14 vervangen en een extra C tussen massa en C14 via een wire-wrap draadje.

Siemens LOGO PLC programmeren onder Linux

Uiteindelijk eens de SoftComfort PLC software voor de Logo PLC's aangeschaft. Volgens de uitleg moet dat ook werken onder Linux. Verrassend genoeg levert Siemens dat nog steeds op een DVD in deze tijd van internet installs en USB sticks. Gelukkig had ik nog een externe DVD-lezer.

De LOGO PLC's die ik heb, zijn van generatie 8 en hebben een netwerk interface voor communicatie en programmatie. Dat scheelt weer een interfacekabel. Het zijn 2de-hands exemplaren en bevatten al een programma en hebben ze ook 'een' IP address. Maar welk?!.

Het IP adres achterhalen is simpel. Even met Wireshark luisteren welke berichten er uitgestuurd worden en ter bevestiging een netwerkscan zodat we weten welk IP-adress we nodig hebben.

Bij installatie blijkt al snel dat het een Java gebasseerde software is. De installatie zelf is wat zoeken, omdat het Linux installatie script niet uitvoerbaar is (mist de exec bit door de mount opties van mijn Linux distributie voor CD/DVD's). Eenmaal de installatie afgerond, blijkt het connecteren naar de LOGO PLC´s zelf ook nog niet te werken. Een forum post weet ons te vertellen dat de SoftComfort software op een zeer specifiek plaats zoekt naar zijn netwerk informatie. Die forum thread levert ook een shell script om alle benodigde informatie te verzamelen en die folder met de nodige informatie te vullen. Zie hieronder!

Link: SoftComfort Network Information

#!/usr/bin/env bash
# fix for Siemens LOGO!Soft Comfort
#
# Unexpected Error
#
# An unexpected error occured.
# Your data may be inconsistent and subsequent errors may occur.
# java.lang.UnsupportedOperationException: adapter type is not supported
#
NETWORK_DEVICES="$(lshw  -c network -businfo 2>/dev/null | tail -n+3 | awk '{print $2}')"
# $1 = cmd
function executeCmd() {
    local locCmd="$1"
    echo "Executing: $locCmd"
    eval "$locCmd"
}
if [[ -n "$NETWORK_DEVICES" ]]; then
    executeCmd "sudo mkdir -p /etc/sysconfig/network/"
    while IFS="" read -r device; do
        executeCmd "sudo touch /etc/sysconfig/network/ifcfg-$device"
    done                     <<< "$NETWORK_DEVICES"
else
    echo "Could not find NETWORK_DEVICE. Connect your ethernet network cable to the Siemens LOGO!"
    exit 1
fi


Cover Image

15 juni 2024

15 Juni 2024 Geschatte leestijd: ~1 minuut

Modificatie van de 80m ARDF ontvanger:

Eerst controleren of we de te vervangen condensators netjes kunnen verwijderen:

Verwijderen van C14:

Verwijderen van C9:

Nu nieuwe onderdelen bestellen en een volgende keer er weer op solderen...


Over ons

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

Links