IO board help programming

842 views
Skip to first unread message

Claude

unread,
Oct 11, 2024, 5:49:08 AM10/11/24
to Hermes-Lite
Hello everyone,

I'm a newbie at this and I was wondering if anyone could at least guide me in the right direction under WINDOWS on how to program the IO board for these situations :

One output to key a tube amplifier (Acom 1010)
One output (or rca jack behind the HL2) for a predrive amp (Netptune 50W)
Output to control Icom tuner (actually a LDG AT-1000ProII with the proper Icom cable)

What I would like to achieve:

When I hit CTRL+TUN on Thetis (call for automatic tuning)
      -ONLY key the predrive amp (using the TUNE power level which gives around 10W)
      -Start tuning precedure on tuner
      -When tuning done, stop transmitting

When I hit TUN on Thetis
        -Toggle to key both amps so the tube amp can be adjusted at low power, 10W of drive gives around 150W ouput.

I totally understand that I can't ask for someone to program all of this but at least lead me in the right direction.

Maybe not a good thing to say but at the moment, I haven't been able to even make the LED flash, tried with VS (which is crazy complicated with all the dependencies needed) and also tried Arduino IDE (which is a little closer to goal but still errors like sdtlib.h cannot be find).

So if you have some courage and patience to guide me, I'd appreciate your help !!

Thanks !


Message has been deleted

Steve Haynal

unread,
Apr 6, 2025, 7:00:45 PMApr 6
to Hermes-Lite
Hi,

Have you searched the group via the web interface:


And read through the wiki pages:


Some of the links for the IO board may be on N2ADR sites.

73,

Steve
kf7o



On Monday, March 31, 2025 at 10:04:53 PM UTC-7 Claude wrote:
I have not been annoying too much with my project... since I got no response from anybody, I will try again so sorry to bump that up but anyone has some experience programming with the io board that lead me in the right direction for the simple project of controlling an ah4 tuner and a second amplifier ?

that would be greatly appreciated.

I don't know much about programming and this is why I request any help here.

Thankyou all !

Claude

unread,
Apr 14, 2025, 2:06:49 AMApr 14
to Hermes-Lite
Hi Steve,

thank you for the reply.

Yes I have tried to find information in this forum here and also trying to look at https://github.com/jimahlstrom/HL2IOBoard/tree/main project page.

Thing is Jim has written information like a programmer and for me that is not a programmer, there are a lot of complex data in that page that I have some difficulties to understand. 

I also cannot compile any code to obtain uf2 files to dump in the raspberry. Very difficult to install all requirements under windows for a non programmer.

That is why I was asking for some guidance. I've tried to install vb with many libraries but I always end up with compile errors and no uf2 file is found anywhere.

The IO board is a great additon to the HL2 but you need to be a serious programmer to make something work with it which I had not tought before buying it.

I got the board for almost a year now and I have not been able to do anything than loading the base code that the io board comes with. I suspect many buyers of the io board got in similar situation not knowing it was such complex thing to code and understand.

Anyway, thank you again for taking time to reply.

Claude

Dalton Williams

unread,
Apr 17, 2025, 11:29:49 PMApr 17
to Claude, Hermes-Lite
Thank you Claud for your well written comments.

I too have been struggling like you and Jim has tried to help me as well. 

I taught C in a community college 30 years ago but the complexity of today programming environments is totally different and way beyond my understanding.

Jim zipped up his environment and sent it to me once, but that was completely overwhelming.  Thank you Jim but actually that confused me more.

Like you Clays, I have spent untold hours over months and never produce a working result.  

Can their be a simpler way or perhaps a downloadable pre-constructed SIMPLE set of files and folders with simple instructions of how to use them to compile (make) a successful adaptation of Jim’s C code example on a local computer.

Jim and Steve.  All of your users are lucky such outstanding equipment to use.  Thank you.

Dalton Williams W5EIM 
DeFever 41 MV Easy Living
20 Years & 34,800 Miles on the water
Amateur Radio W5EIM
Capital Yacht Club Member
MTOA Member 
AGLCA Member



--
You received this message because you are subscribed to the Google Groups "Hermes-Lite" group.
To unsubscribe from this group and stop receiving emails from it, send an email to hermes-lite...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/hermes-lite/752bd263-6e69-4760-8bae-1dbcfd5edb31n%40googlegroups.com.

samuel kallmeyer

unread,
Apr 20, 2025, 3:36:17 AMApr 20
to Hermes-Lite
Dear both,
In order to contribute to this topic, most of the time Visual Studio Code is currently used as a programing editor under Windows.
Depending on what we want to achieve, the associated extension/plugin is requested -> installation of the toolchain.
The usage of some extension/plugin might rely on specific external software that still needs to be installed separately, i.e. buildtools like python, gcc, ...
I didn't program a raspberry pico yet, but some description can be found there:
or
https://www.raspberrypi.com/news/raspberry-pi-pico-windows-installer/ which seems to provide an installer that includes everything needed.

Hope it can help as a starting point for setting up the environment...

73,
   Samuel / F8ACB

Claude

unread,
Apr 20, 2025, 10:34:37 PMApr 20
to Hermes-Lite
Hello Samuel, thank you for your input. I will review carefully your links.

Up do now, this is the closest I have been able to acheive following these instructions : https://www.youtube.com/watch?v=MXMsyn9y14g

but still, I get a bunch of compiling errors and the uf2 file is nowhere to be found.

It might be super easy for a skilled programmer but for the hobbyist, it is quite complex to not only compile anything but also to understand the code from Mr. Ahlstrom found here https://github.com/jimahlstrom/HL2IOBoard

Maybe with your links I will be able to understand what is not working and at least be able to compile example codes...

73 Claude VA2CST

Claude

unread,
Apr 20, 2025, 11:43:19 PMApr 20
to Hermes-Lite
Nope...

I've tried to copy an example file from Mr. Ahlstrom (AH4 tuner example) lib folder, I've been able to compile with no error but no .uf2 file to be found in the build folder where there are tons of files and folders instead of a single .uf2 file.

Anyway, I wish someone could help in setting things up, just how to compile an example file found in the lib folder would be a start...

If anyone has pointers, ideas or tips, it would be appreciated in non programmer language if possible... newbee here...

Capture d’écran 2025-04-20 234022.png

Message has been deleted
Message has been deleted

Juan de la Rocha Solís

unread,
Apr 22, 2025, 4:31:53 AMApr 22
to Hermes-Lite

Claude, no offense intended—but I’m genuinely surprised that someone at your level isn’t fully aware of how open hardware/software ecosystems operate. These are personal passion projects, built by individuals in their free time, with zero obligation to provide support, documentation, or hand-holding.

The fact that these boards (like the IO) even exist on the market is already a huge effort by their creators. Expecting additional help or spoon-fed guidance on how to develop for them misses the point entirely. The real value—and frankly, the fun—comes from digging in, experimenting, and learning independently. That’s the whole spirit of open hardware.

Again, I don’t mean to sound harsh, but your approach reflects a fundamental misunderstanding of how these tools are viewed in development circles. They’re not commercial products with warranties and support teams—they’re community-driven labors of love. The responsibility to learn, adapt, and problem-solve lies with the user.
El lunes, 21 de abril de 2025 a las 13:17:53 UTC+2, Claude escribió:
Using VB is way way too complicated for me without any help, after installing dozen and dozen of gig of libraries, there are always errors when I compile. 

Very disapointed in this very nice project. I never thought that the io board would have been so complicated to program just to acomplish simple task I am trying to do control a tuner and a second amp keyer.

I switched to Arduino IDE, installed raspberry pi board and library. I used zl2te folder files. I think I was able to upload to the raspberry pico but I am not sure I understand why "configure_pins.ino" is a separate program file when you want to program "ft817_band_volt.ino". Does the configure pin code need to be copied in the ft817 band volt code ?  I don't know and understand how that structure works.

I did try the "led_flasher.ino", modified the timings, compiled and uploaded, it seems to have properly worked.

I did also try "ft817_band_volt.ino" file in IDE, compiled it and it did seem to upload correctly to the pico. I could measure voltages on the appropriate pin (J4 pin8) when changing bands, it did work on my multimeter.

I then tried to compile the "icom_ah4.ino", uploaded it to the pico, seem to have worked but what I don'T understand is that LED is still flashing when there is I2C trafic when there is absolutely no code about the LED in the ah4 tuner code.

I was not able to trigger my LDG tuner (with the original icom cable), thetis register a yellow warning message that it could not start the tuning procedure, I've checked my cabling and it is still not working unfortunately... I don't know if it is because I am using an LDG tuner instead of the icom ah4, my LDG respond properly when connected to a icom transceiver.

So I cannot say if this works or not even though I see of the code I uploaded seem to have worked using arduino IDE.

Install the "Raspberry Pi Pico/RP2040..." in the board manager by Earle F. Phihower, III then in "tools" set the board to raspberry pico and that seem to be it. Put the raspberry in bootloader mode, compile test code from zl2te folder and upload.

Tell me if you have some more success with Arduino IDE.

Claude VA2CST



Le dimanche 20 avril 2025 à 23 h 47 min 45 s UTC-4, Claude a écrit :
After double watching my previous picture, I noticed that there are actually errors in the compile output. I was watching at the bottom right corner of VB and I thought I had 0 errors.

Here is the output compile information if someone understand any of this and could help, it would be appreciated !


[proc] Executing command: "C:\Program Files\Raspberry Pi\Pico SDK v1.5.1\gcc-arm-none-eabi\bin\arm-none-eabi-gcc.exe" -v
[main] Configuring project: n2adr_test2
[proc] Executing command: "C:\Program Files\Raspberry Pi\Pico SDK v1.5.1\cmake\bin\cmake.EXE" -DCMAKE_BUILD_TYPE:STRING=Debug -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE "-DCMAKE_C_COMPILER:FILEPATH=C:\Program Files\Raspberry Pi\Pico SDK v1.5.1\gcc-arm-none-eabi\bin\arm-none-eabi-gcc.exe" "-DCMAKE_CXX_COMPILER:FILEPATH=C:\Program Files\Raspberry Pi\Pico SDK v1.5.1\gcc-arm-none-eabi\bin\arm-none-eabi-g++.exe" --no-warn-unused-cli "-SC:/Users/Claude/SynologyDrive/_Personel/_HAM/Radios/Hermes/IO Board/HL2IOBoard-main/n2adr_test2" "-Bc:/Users/Claude/SynologyDrive/_Personel/_HAM/Radios/Hermes/IO Board/HL2IOBoard-main/n2adr_test2/build" -G Ninja
[cmake] Not searching for unused variables given on the command line.
[cmake] Using PICO_SDK_PATH from environment ('C:\Program Files\Raspberry Pi\Pico SDK v1.5.1\pico-sdk')
[cmake] PICO_SDK_PATH is C:/Program Files/Raspberry Pi/Pico SDK v1.5.1/pico-sdk
[cmake] Defaulting PICO_PLATFORM to rp2040 since not specified.
[cmake] Defaulting PICO platform compiler to pico_arm_gcc since not specified.
[cmake] PICO compiler is pico_arm_gcc
[cmake] -- The C compiler identification is GNU 14.2.1
[cmake] -- The CXX compiler identification is GNU 14.2.1
[cmake] -- The ASM compiler identification is GNU
[cmake] -- Found assembler: C:/Program Files/Raspberry Pi/Pico SDK v1.5.1/gcc-arm-none-eabi/bin/arm-none-eabi-gcc.exe
[cmake] -- Detecting C compiler ABI info
[cmake] -- Detecting C compiler ABI info - done
[cmake] -- Check for working C compiler: C:/Program Files/Raspberry Pi/Pico SDK v1.5.1/gcc-arm-none-eabi/bin/arm-none-eabi-gcc.exe - skipped
[cmake] -- Detecting C compile features
[cmake] -- Detecting C compile features - done
[cmake] -- Detecting CXX compiler ABI info
[cmake] -- Detecting CXX compiler ABI info - done
[cmake] -- Check for working CXX compiler: C:/Program Files/Raspberry Pi/Pico SDK v1.5.1/gcc-arm-none-eabi/bin/arm-none-eabi-g++.exe - skipped
[cmake] -- Detecting CXX compile features
[cmake] -- Detecting CXX compile features - done
[cmake] Build type is Debug
[cmake] Using regular optimized debug build (set PICO_DEOPTIMIZED_DEBUG=1 to de-optimize)
[cmake] Defaulting PICO target board to pico since not specified.
[cmake] Using board configuration from C:/Program Files/Raspberry Pi/Pico SDK v1.5.1/pico-sdk/src/boards/include/boards/pico.h
[cmake] -- Found Python3: C:/Program Files/Raspberry Pi/Pico SDK v1.5.1/python/python.exe (found version "3.9.13") found components: Interpreter
[cmake] TinyUSB available at C:/Program Files/Raspberry Pi/Pico SDK v1.5.1/pico-sdk/lib/tinyusb/src/portable/raspberrypi/rp2040; enabling build support for USB.
[cmake] Compiling TinyUSB with CFG_TUSB_DEBUG=1
[cmake] BTstack available at C:/Program Files/Raspberry Pi/Pico SDK v1.5.1/pico-sdk/lib/btstack
[cmake] cyw43-driver available at C:/Program Files/Raspberry Pi/Pico SDK v1.5.1/pico-sdk/lib/cyw43-driver
[cmake] Pico W Bluetooth build support available.
[cmake] lwIP available at C:/Program Files/Raspberry Pi/Pico SDK v1.5.1/pico-sdk/lib/lwip
[cmake] mbedtls available at C:/Program Files/Raspberry Pi/Pico SDK v1.5.1/pico-sdk/lib/mbedtls
[cmake] -- Configuring done (5.3s)
[cmake] -- Generating done (0.5s)
[cmake] -- Build files have been written to: C:/Users/Claude/SynologyDrive/_Personel/_HAM/Radios/Hermes/IO Board/HL2IOBoard-main/n2adr_test2/build
[main] Building folder: c:/Users/Claude/SynologyDrive/_Personel/_HAM/Radios/Hermes/IO Board/HL2IOBoard-main/n2adr_test2/build
[build] Starting build
[proc] Executing command: chcp
[proc] Executing command: "C:\Program Files\Raspberry Pi\Pico SDK v1.5.1\cmake\bin\cmake.EXE" --build "c:/Users/Claude/SynologyDrive/_Personel/_HAM/Radios/Hermes/IO Board/HL2IOBoard-main/n2adr_test2/build" --config Debug --target all --
[build] [1/79   1% :: 0.217] Building ASM object pico-sdk/src/rp2_common/boot_stage2/CMakeFiles/bs2_default.dir/compile_time_choice.S.obj
[build] [2/79   2% :: 1.513] Linking ASM executable pico-sdk\src\rp2_common\boot_stage2\bs2_default.elf
[build] [3/79   3% :: 1.883] Generating bs2_default.bin
[build] [4/79   5% :: 2.023] Generating bs2_default_padded_checksummed.S
[build] [12/79   6% :: 2.372] Building ASM object CMakeFiles/main.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/src/rp2_common/hardware_irq/irq_handler_chain.S.obj
[build] [13/79   7% :: 2.469] Building C object CMakeFiles/main.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/src/rp2_common/hardware_gpio/gpio.c.obj
[build] [14/79   8% :: 2.524] Building C object CMakeFiles/main.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/src/rp2_common/pico_platform/platform.c.obj
[build] [15/79  10% :: 2.574] Building C object CMakeFiles/main.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/src/rp2_common/hardware_sync/sync.c.obj
[build] [16/79  11% :: 2.579] Building C object CMakeFiles/main.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/src/rp2_common/hardware_claim/claim.c.obj
[build] [17/79  12% :: 2.906] Building C object CMakeFiles/main.dir/main.c.obj
[build] [18/79  13% :: 2.992] Building C object CMakeFiles/main.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/src/rp2_common/pico_stdlib/stdlib.c.obj
[build] [19/79  15% :: 3.026] Building C object CMakeFiles/main.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/src/rp2_common/hardware_irq/irq.c.obj
[build] [20/79  16% :: 3.080] Building C object CMakeFiles/main.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/src/common/pico_sync/sem.c.obj
[build] [21/79  17% :: 3.092] Building C object CMakeFiles/main.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/src/common/pico_sync/lock_core.c.obj
[build] [22/79  18% :: 3.176] Building C object CMakeFiles/main.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/src/common/pico_sync/critical_section.c.obj
[build] [23/79  20% :: 3.198] Building C object CMakeFiles/main.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/src/common/pico_sync/mutex.c.obj
[build] [24/79  21% :: 3.502] Building C object CMakeFiles/main.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/src/common/pico_util/datetime.c.obj
[build] [25/79  22% :: 3.520] Building C object CMakeFiles/main.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/src/common/pico_time/timeout_helper.c.obj
[build] [26/79  24% :: 3.598] Building C object CMakeFiles/main.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/src/rp2_common/hardware_timer/timer.c.obj
[build] [27/79  25% :: 3.786] Building C object CMakeFiles/main.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/src/common/pico_util/pheap.c.obj
[build] [28/79  26% :: 3.911] Building C object CMakeFiles/main.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/src/common/pico_time/time.c.obj
[build] [29/79  27% :: 3.993] Building C object CMakeFiles/main.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/src/rp2_common/hardware_uart/uart.c.obj
[build] [30/79  29% :: 4.025] Building C object CMakeFiles/main.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/src/common/pico_util/queue.c.obj
[build] [31/79  30% :: 4.147] Building C object CMakeFiles/main.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/src/rp2_common/hardware_pll/pll.c.obj
[build] [32/79  31% :: 4.313] Building C object CMakeFiles/main.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/src/rp2_common/hardware_clocks/clocks.c.obj
[build] [33/79  32% :: 4.331] Building C object CMakeFiles/main.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/src/rp2_common/hardware_vreg/vreg.c.obj
[build] [34/79  34% :: 4.413] Building C object CMakeFiles/main.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/src/rp2_common/hardware_watchdog/watchdog.c.obj
[build] [35/79  35% :: 4.431] Building C object CMakeFiles/main.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/src/rp2_common/hardware_xosc/xosc.c.obj
[build] [36/79  36% :: 4.458] Building ASM object CMakeFiles/main.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/src/rp2_common/hardware_divider/divider.S.obj
[build] [37/79  37% :: 4.918] Building ASM object CMakeFiles/main.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/src/rp2_common/pico_bit_ops/bit_ops_aeabi.S.obj
[build] [38/79  39% :: 4.982] Building ASM object CMakeFiles/main.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/src/rp2_common/pico_divider/divider.S.obj
[build] [39/79  40% :: 5.021] Building C object CMakeFiles/main.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/src/rp2_common/pico_bootrom/bootrom.c.obj
[build] [40/79  41% :: 5.027] Building ASM object CMakeFiles/main.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/src/rp2_common/pico_double/double_aeabi.S.obj
[build] [41/79  43% :: 5.428] Building C object CMakeFiles/main.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/src/rp2_common/pico_printf/printf.c.obj
[build] [42/79  44% :: 5.610] Building C object CMakeFiles/main.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/src/rp2_common/pico_double/double_init_rom.c.obj
[build] [43/79  45% :: 5.830] Building ASM object CMakeFiles/main.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/src/rp2_common/pico_int64_ops/pico_int64_ops_aeabi.S.obj
[build] [44/79  46% :: 6.007] Building ASM object CMakeFiles/main.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/src/rp2_common/pico_float/float_aeabi.S.obj
[build] [45/79  48% :: 6.067] Building C object CMakeFiles/main.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/src/rp2_common/pico_double/double_math.c.obj
[build] [46/79  49% :: 6.238] Building ASM object CMakeFiles/main.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/src/rp2_common/pico_double/double_v1_rom_shim.S.obj
[build] [47/79  50% :: 6.421] Building C object CMakeFiles/main.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/src/rp2_common/pico_float/float_init_rom.c.obj
[build] [48/79  51% :: 6.502] Building C object CMakeFiles/main.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/src/rp2_common/pico_runtime/runtime.c.obj
[build] [49/79  53% :: 6.541] Building ASM object CMakeFiles/main.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/src/rp2_common/pico_float/float_v1_rom_shim.S.obj
[build] [50/79  54% :: 6.630] Building ASM object CMakeFiles/main.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/src/rp2_common/pico_standard_link/crt0.S.obj
[build] [51/79  55% :: 6.749] Building C object CMakeFiles/main.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/src/rp2_common/pico_float/float_math.c.obj
[build] [52/79  56% :: 6.847] Building ASM object CMakeFiles/main.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/src/rp2_common/pico_mem_ops/mem_ops_aeabi.S.obj
[build] [53/79  58% :: 7.060] Building C object CMakeFiles/main.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/src/rp2_common/pico_standard_link/binary_info.c.obj
[build] [54/79  59% :: 7.078] Building C object CMakeFiles/main.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/src/rp2_common/pico_malloc/pico_malloc.c.obj
[build] [55/79  60% :: 7.298] Building CXX object CMakeFiles/main.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/src/rp2_common/pico_standard_link/new_delete.cpp.obj
[build] [56/79  62% :: 7.370] Building C object CMakeFiles/main.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/src/rp2_common/pico_stdio_uart/stdio_uart.c.obj
[build] [57/79  63% :: 7.476] Building C object CMakeFiles/main.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/src/rp2_common/pico_stdio/stdio.c.obj
[build] [58/79  64% :: 7.602] Building C object CMakeFiles/main.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/src/rp2_common/pico_unique_id/unique_id.c.obj
[build] [59/79  65% :: 7.765] Building C object CMakeFiles/main.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/src/rp2_common/pico_stdio_usb/reset_interface.c.obj
[build] [60/79  67% :: 7.780] Building C object CMakeFiles/main.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/src/rp2_common/pico_stdio_usb/stdio_usb_descriptors.c.obj
[build] [61/79  68% :: 7.792] Building C object CMakeFiles/main.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/src/rp2_common/pico_stdio_usb/stdio_usb.c.obj
[build] [62/79  69% :: 7.798] Building C object CMakeFiles/main.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/src/rp2_common/hardware_flash/flash.c.obj
[build] [63/79  70% :: 8.156] Building C object CMakeFiles/main.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/lib/tinyusb/src/portable/raspberrypi/rp2040/rp2040_usb.c.obj
[build] [64/79  72% :: 8.166] Building C object CMakeFiles/main.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/lib/tinyusb/src/class/dfu/dfu_rt_device.c.obj
[build] [65/79  73% :: 8.203] Building C object CMakeFiles/main.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/lib/tinyusb/src/portable/raspberrypi/rp2040/dcd_rp2040.c.obj
[build] [66/79  74% :: 8.234] Building C object CMakeFiles/main.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/lib/tinyusb/src/class/dfu/dfu_device.c.obj
[build] [67/79  75% :: 8.299] Building C object CMakeFiles/main.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/lib/tinyusb/src/device/usbd_control.c.obj
[build] [68/79  77% :: 8.374] Building C object CMakeFiles/main.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/lib/tinyusb/src/class/audio/audio_device.c.obj
[build] [69/79  78% :: 8.616] Building C object CMakeFiles/main.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/lib/tinyusb/src/device/usbd.c.obj
[build] [70/79  79% :: 8.687] Building C object CMakeFiles/main.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/lib/tinyusb/src/class/midi/midi_device.c.obj
[build] [71/79  81% :: 8.711] Building C object CMakeFiles/main.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/lib/tinyusb/src/class/msc/msc_device.c.obj
[build] [72/79  82% :: 8.785] Building C object CMakeFiles/main.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/lib/tinyusb/src/class/net/ncm_device.c.obj
[build] [73/79  83% :: 8.793] Building C object CMakeFiles/main.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/lib/tinyusb/src/class/net/ecm_rndis_device.c.obj
[build] [74/79  84% :: 8.812] Building C object CMakeFiles/main.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/lib/tinyusb/src/class/cdc/cdc_device.c.obj
[build] [75/79  86% :: 8.847] Building C object CMakeFiles/main.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/lib/tinyusb/src/class/usbtmc/usbtmc_device.c.obj
[build] [76/79  87% :: 8.858] Building C object CMakeFiles/main.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/lib/tinyusb/src/class/hid/hid_device.c.obj
[build] [77/79  88% :: 9.208] Building C object CMakeFiles/main.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/lib/tinyusb/src/portable/raspberrypi/pio_usb/dcd_pio_usb.c.obj
[build] [78/79  89% :: 9.239] Building C object CMakeFiles/main.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/lib/tinyusb/src/class/video/video_device.c.obj
[build] [78/79  91% :: 9.252] Building C object CMakeFiles/main.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/lib/tinyusb/src/class/vendor/vendor_device.c.obj
[build] [78/79  92% :: 9.316] Building C object CMakeFiles/main.dir/734ab788d52071b7ec936fd1cf9a593e/src/rp2_common/pico_fix/rp2040_usb_device_enumeration/rp2040_usb_device_enumeration.c.obj
[build] [78/79  93% :: 9.332] Building C object CMakeFiles/main.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/src/rp2_common/hardware_adc/adc.c.obj
[build] [78/79  94% :: 9.548] Building C object CMakeFiles/main.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/src/rp2_common/hardware_i2c/i2c.c.obj
[build] [78/79  96% :: 9.584] Building C object CMakeFiles/main.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/lib/tinyusb/src/tusb.c.obj
[build] [78/79  97% :: 9.662] Building C object CMakeFiles/main.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/lib/tinyusb/src/common/tusb_fifo.c.obj
[build] [78/79  98% :: 9.681] Building C object CMakeFiles/main.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/src/rp2_common/pico_i2c_slave/i2c_slave.c.obj
[build] [79/79 100% :: 10.008] Linking CXX executable main.elf
[build] FAILED: main.elf
[build] C:\WINDOWS\system32\cmd.exe /C "cd . && C:\PROGRA~1\RASPBE~1\PICOSD~1.1\GCC-AR~1\bin\AR10B2~1.EXE -mcpu=cortex-m0plus -mthumb -Og -g -Wl,--build-id=none --specs=nosys.specs -Wl,--wrap=sprintf -Wl,--wrap=snprintf -Wl,--wrap=vsnprintf -Wl,--wrap=__clzsi2 -Wl,--wrap=__clzdi2 -Wl,--wrap=__ctzsi2 -Wl,--wrap=__ctzdi2 -Wl,--wrap=__popcountsi2 -Wl,--wrap=__popcountdi2 -Wl,--wrap=__clz -Wl,--wrap=__clzl -Wl,--wrap=__clzll -Wl,--wrap=__aeabi_idiv -Wl,--wrap=__aeabi_idivmod -Wl,--wrap=__aeabi_ldivmod -Wl,--wrap=__aeabi_uidiv -Wl,--wrap=__aeabi_uidivmod -Wl,--wrap=__aeabi_uldivmod -Wl,--wrap=__aeabi_dadd -Wl,--wrap=__aeabi_ddiv -Wl,--wrap=__aeabi_dmul -Wl,--wrap=__aeabi_drsub -Wl,--wrap=__aeabi_dsub -Wl,--wrap=__aeabi_cdcmpeq -Wl,--wrap=__aeabi_cdrcmple -Wl,--wrap=__aeabi_cdcmple -Wl,--wrap=__aeabi_dcmpeq -Wl,--wrap=__aeabi_dcmplt -Wl,--wrap=__aeabi_dcmple -Wl,--wrap=__aeabi_dcmpge -Wl,--wrap=__aeabi_dcmpgt -Wl,--wrap=__aeabi_dcmpun -Wl,--wrap=__aeabi_i2d -Wl,--wrap=__aeabi_l2d -Wl,--wrap=__aeabi_ui2d -Wl,--wrap=__aeabi_ul2d -Wl,--wrap=__aeabi_d2iz -Wl,--wrap=__aeabi_d2lz -Wl,--wrap=__aeabi_d2uiz -Wl,--wrap=__aeabi_d2ulz -Wl,--wrap=__aeabi_d2f -Wl,--wrap=sqrt -Wl,--wrap=cos -Wl,--wrap=sin -Wl,--wrap=tan -Wl,--wrap=atan2 -Wl,--wrap=exp -Wl,--wrap=log -Wl,--wrap=ldexp -Wl,--wrap=copysign -Wl,--wrap=trunc -Wl,--wrap=floor -Wl,--wrap=ceil -Wl,--wrap=round -Wl,--wrap=sincos -Wl,--wrap=asin -Wl,--wrap=acos -Wl,--wrap=atan -Wl,--wrap=sinh -Wl,--wrap=cosh -Wl,--wrap=tanh -Wl,--wrap=asinh -Wl,--wrap=acosh -Wl,--wrap=atanh -Wl,--wrap=exp2 -Wl,--wrap=log2 -Wl,--wrap=exp10 -Wl,--wrap=log10 -Wl,--wrap=pow -Wl,--wrap=powint -Wl,--wrap=hypot -Wl,--wrap=cbrt -Wl,--wrap=fmod -Wl,--wrap=drem -Wl,--wrap=remainder -Wl,--wrap=remquo -Wl,--wrap=expm1 -Wl,--wrap=log1p -Wl,--wrap=fma -Wl,--wrap=__aeabi_lmul -Wl,--wrap=__aeabi_fadd -Wl,--wrap=__aeabi_fdiv -Wl,--wrap=__aeabi_fmul -Wl,--wrap=__aeabi_frsub -Wl,--wrap=__aeabi_fsub -Wl,--wrap=__aeabi_cfcmpeq -Wl,--wrap=__aeabi_cfrcmple -Wl,--wrap=__aeabi_cfcmple -Wl,--wrap=__aeabi_fcmpeq -Wl,--wrap=__aeabi_fcmplt -Wl,--wrap=__aeabi_fcmple -Wl,--wrap=__aeabi_fcmpge -Wl,--wrap=__aeabi_fcmpgt -Wl,--wrap=__aeabi_fcmpun -Wl,--wrap=__aeabi_i2f -Wl,--wrap=__aeabi_l2f -Wl,--wrap=__aeabi_ui2f -Wl,--wrap=__aeabi_ul2f -Wl,--wrap=__aeabi_f2iz -Wl,--wrap=__aeabi_f2lz -Wl,--wrap=__aeabi_f2uiz -Wl,--wrap=__aeabi_f2ulz -Wl,--wrap=__aeabi_f2d -Wl,--wrap=sqrtf -Wl,--wrap=cosf -Wl,--wrap=sinf -Wl,--wrap=tanf -Wl,--wrap=atan2f -Wl,--wrap=expf -Wl,--wrap=logf -Wl,--wrap=ldexpf -Wl,--wrap=copysignf -Wl,--wrap=truncf -Wl,--wrap=floorf -Wl,--wrap=ceilf -Wl,--wrap=roundf -Wl,--wrap=sincosf -Wl,--wrap=asinf -Wl,--wrap=acosf -Wl,--wrap=atanf -Wl,--wrap=sinhf -Wl,--wrap=coshf -Wl,--wrap=tanhf -Wl,--wrap=asinhf -Wl,--wrap=acoshf -Wl,--wrap=atanhf -Wl,--wrap=exp2f -Wl,--wrap=log2f -Wl,--wrap=exp10f -Wl,--wrap=log10f -Wl,--wrap=powf -Wl,--wrap=powintf -Wl,--wrap=hypotf -Wl,--wrap=cbrtf -Wl,--wrap=fmodf -Wl,--wrap=dremf -Wl,--wrap=remainderf -Wl,--wrap=remquof -Wl,--wrap=expm1f -Wl,--wrap=log1pf -Wl,--wrap=fmaf -Wl,--wrap=malloc -Wl,--wrap=calloc -Wl,--wrap=realloc -Wl,--wrap=free -Wl,--wrap=memcpy -Wl,--wrap=memset -Wl,--wrap=__aeabi_memcpy -Wl,--wrap=__aeabi_memset -Wl,--wrap=__aeabi_memcpy4 -Wl,--wrap=__aeabi_memset4 -Wl,--wrap=__aeabi_memcpy8 -Wl,--wrap=__aeabi_memset8 -Wl,-Map=main.elf.map "-Wl,--script=C:/Program Files/Raspberry Pi/Pico SDK v1.5.1/pico-sdk/src/rp2_common/pico_standard_link/memmap_default.ld" -Wl,-z,max-page-size=4096 -Wl,--gc-sections -Wl,--no-warn-rwx-segments -Wl,--wrap=printf -Wl,--wrap=vprintf -Wl,--wrap=puts -Wl,--wrap=putchar -Wl,--wrap=getchar @CMakeFiles\main.rsp -o main.elf && C:\WINDOWS\system32\cmd.exe /C "cd /D "C:\Users\Claude\SynologyDrive\_Personel\_HAM\Radios\Hermes\IO Board\HL2IOBoard-main\n2adr_test2\build" && "C:\Program Files\Raspberry Pi\Pico SDK v1.5.1\gcc-arm-none-eabi\bin\arm-none-eabi-objcopy.exe" -Oihex "C:/Users/Claude/SynologyDrive/_Personel/_HAM/Radios/Hermes/IO Board/HL2IOBoard-main/n2adr_test2/build/main.elf" main.hex && cd /D "C:\Users\Claude\SynologyDrive\_Personel\_HAM\Radios\Hermes\IO Board\HL2IOBoard-main\n2adr_test2\build" && "C:\Program Files\Raspberry Pi\Pico SDK v1.5.1\gcc-arm-none-eabi\bin\arm-none-eabi-objcopy.exe" -Obinary "C:/Users/Claude/SynologyDrive/_Personel/_HAM/Radios/Hermes/IO Board/HL2IOBoard-main/n2adr_test2/build/main.elf" main.bin && cd /D "C:\Users\Claude\SynologyDrive\_Personel\_HAM\Radios\Hermes\IO Board\HL2IOBoard-main\n2adr_test2\build" && "C:\Program Files\Raspberry Pi\Pico SDK v1.5.1\gcc-arm-none-eabi\bin\arm-none-eabi-objdump.exe" -h "C:/Users/Claude/SynologyDrive/_Personel/_HAM/Radios/Hermes/IO Board/HL2IOBoard-main/n2adr_test2/build/main.elf" > main.dis && "C:\Program Files\Raspberry Pi\Pico SDK v1.5.1\gcc-arm-none-eabi\bin\arm-none-eabi-objdump.exe" -d "C:/Users/Claude/SynologyDrive/_Personel/_HAM/Radios/Hermes/IO Board/HL2IOBoard-main/n2adr_test2/build/main.elf" >> main.dis && cd /D "C:\Users\Claude\SynologyDrive\_Personel\_HAM\Radios\Hermes\IO Board\HL2IOBoard-main\n2adr_test2\build" && "C:\Program Files\Raspberry Pi\Pico SDK v1.5.1\pico-sdk-tools\elf2uf2.exe" "C:/Users/Claude/SynologyDrive/_Personel/_HAM/Radios/Hermes/IO Board/HL2IOBoard-main/n2adr_test2/build/main.elf" main.uf2""
[build] C:/PROGRA~1/RASPBE~1/PICOSD~1.1/GCC-AR~1/bin/../lib/gcc/arm-none-eabi/14.2.1/../../../../arm-none-eabi/bin/ld.exe: CMakeFiles/main.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/src/rp2_common/pico_standard_link/crt0.S.obj: in function `hold_non_core0_in_bootrom':
[build] C:/Program Files/Raspberry Pi/Pico SDK v1.5.1/pico-sdk/src/rp2_common/pico_standard_link/crt0.S:259:(.reset+0x94): undefined reference to `main'
[build] collect2.exe: error: ld returned 1 exit status
[build] ninja: build stopped: subcommand failed.
[proc] The command: "C:\Program Files\Raspberry Pi\Pico SDK v1.5.1\cmake\bin\cmake.EXE" --build "c:/Users/Claude/SynologyDrive/_Personel/_HAM/Radios/Hermes/IO Board/HL2IOBoard-main/n2adr_test2/build" --config Debug --target all -- exited with code: 1
[driver] Build completed: 00:00:10.245
[build] Build finished with exit code 1



73 de Claude VA2CST

Claude

unread,
Apr 22, 2025, 6:21:27 AMApr 22
to Hermes-Lite

Juan de la Rocha Solís, I totally understand this. I am seeking help that's all. I am not asking to anybody to program anything for me. I just want to try to understand what does not work in my compile procedure.

I never said anything about the product by itself, I know it is a well tought design and that it is supported by few individuals for free. I know all of this.

What I meant is that the information provided is for advanced programmers which I am not. I am trying to learn that stuff, that is why I am seeking help by posting the most information I have.

All I ask is for some guidance, there are no tutorials anywhere, the github page is well done for a programmer but for the ones that are not as savvy in programming, it is difficult to untangle all of this.

So I am not sure why your comment is directed to me like that. If this place is not the right place to seek help about that project, I will try to find help elsewhere. I found this forum on the github page of that io board project so I thought I was at the right place.

If you know about programming, maybe you could help instead of telling me what I already know about open source projects.

The only comment I said that might not be well received is that if I knew it was so complicated, I would probably not buy it. I had found the github page of the project, saw sample code and I thought I could give it a try but it is way more complicated than it looks for a non programmer.

Anyway, if you cannot help, that will be it.

Claude

unread,
Apr 22, 2025, 6:25:09 AMApr 22
to Hermes-Lite

Sorry to everyone on the forum, I thought I was at the right place to seek help and some guidance. 

I deleted the post with compile error logs so you won't need to bother with my long questions anymore.

Thanks anyway.

Colin Larsen

unread,
Apr 23, 2025, 1:21:30 AMApr 23
to Hermes-Lite

Juan de la Rocha Solís and others who think those asking for guidance and help want to be "spoon fed" .........

I am disgusted at this remark and this attitude. Is this how our hobby is now? There will be no help, no mentoring, just getting berated by others who say 'you should be able to do everything from reading the information here'. 

Not all of us can take the enormous amount of information and sort through it and understand completely what is required. I'm not stupid, I've been in ham radio and computing for over 40 years, but some of the concepts required here I too struggle with. 
I too was hoping for some initial guidance. 

Juan de la Rocha Solís, when you went to school did your teachers tell you that everything was in the books, go and find it! You are not here to be spoon fed! Perhaps in your education that is how it worked? 

Claude, I am sorry that you did not find the answers here. It is a shame because I have the same questions and was looking forward to watching and learning from those with the knowledge to then go forward and take it further. 

Apparently this is not the group where that will happen. It is no wonder our hobby is in decay.

Colin, ZL2FL

Clifford Heath

unread,
Apr 23, 2025, 1:57:10 AMApr 23
to Colin Larsen, Hermes-Lite
I am a complete outsider to this discussion, but I think Colin's comments are too strong.

The I/O board is suitable for someone who knows how to program it, or someone who can follow instructions on how to deploy another person's code. This is a radio group. It is not the place to teach a complete newbie how to program.

There is a huge number of published resources to help someone learn to program an RPi Pico. These are designed specifically for such people. I think Claude should look further afield for help before an extended discussion here. After he has a basic familiarity with programming and device setup, more specific questions should come here. Even though many here are willing to help, basic politeness suggests exhausting published sources of help before asking for non-specific issues.

Clifford Heath

Mike Lewis

unread,
Apr 23, 2025, 3:30:46 AMApr 23
to Claude, Hermes-Lite
Claude,

You will want to post your source code along with your error logs to provide context for the errors you are getting.   

In the below I see the folder name is n2adr _test2, suggesting you maybe made changes to the original n2adr_test files?    Try building in the original folder n2adr_test.  That should work.

With your source code someone (like myself) can run it locally and see if we get the same results and if so, we can look through the code to find out the solution.

The failure is "undefined reference to main".  main() is the primary function that loops around.  That function is located in main.c file.  In Arduino it is named loop() and found in the .ino file.   There is a CMakeLists.txt file that has the dependent files listed such as main.c, and the project name.   Would need to see your source and CMakeLists.txt files to help further.

Separate issue that Windows users may run into:  I just tried to build the stock files on my Windows 11 system.  I have not done so for maybe a year.   No Makefile was generated.  By default it was building a Visual Studio 2022 solution, which I happen to have installed.   In VS22 the build failed for reasons I did not get into much.

I fixed the missing Makefile by deleting the build folder, made a new build folder, changed into build folder, then ran cmake .. -G "Unix Makefiles".  The make command worked and got a good build.  In this case n2adr_test.   I am using Pico_SDK_v1.5.1.

  • Mike K7MDL


From: herme...@googlegroups.com on behalf of Claude
Sent: Sunday, April 20, 2025 8:47 PM
To: Hermes-Lite
Subject: Re: IO board help programming

Mike Lewis

unread,
Apr 23, 2025, 3:56:52 AMApr 23
to Claude, Hermes-Lite
Comparing your build file list to mine, one of the first files to be compiled should have been main.c.  Your build did not find main.c so failed on that error.

I see you are running VS Code on Windows to do the build.  While you are close it requires a bit more configuration.

I suggest a simpler approach to start with to compile your project. 

Like Jim's instructions specify Link to installing-firmware, your project folder will have only 3 files and an empty build folder.  It will look like this:

04/23/2025  12:16 AM    <DIR>          build
10/24/2023  07:03 PM               439 CMakeLists.txt
02/09/2024  04:14 PM             2,993 main.c
10/24/2023  07:03 PM             3,238 pico_sdk_import.cmake

You change folders to "build" then run 

cmake  ..  -G  "Unix Makefiles"

Then run 

make

You should get a good build now. 

  • Mike K7MDL


From: herme...@googlegroups.com on behalf of Mike Lewis
Sent: Wednesday, April 23, 2025 12:30 AM
To: Claude; Hermes-Lite

James Ahlstrom

unread,
Apr 25, 2025, 1:36:24 PMApr 25
to Hermes-Lite
Hello Claude and Group,

Claude wrote me an email for help, but I would prefer to answer here because I think the topic is of general interest. Grizzled veterans will not find this interesting, but the HL2 has been adopted by many hams who are not in the tradition of designing their own rigs. At least some may want to learn.

It seems that you are trying to use Windows and Visual Studio to compile and link code for the Pico. I don't use that, I program code on Linux with command line tools. So the first problem is to search for help on Pico development with Windows tools, either cmake or Visual Studio. This has nothing specific to do with the HL2, so search the web for help.

This project uses Visual Studio: https://github.com/raspberry-pi/pico-vscode


I am not recommending these, I am just saying that help installing a Windows Pico development environment is available by web search.  I have mostly bad memories of code development on Windows, although others love it. Once you can compile and link an example program you are ready to drop in one of the IO board programs and compile and link that. Next you can move on to altering the IO board program to do what you want. I think people here will help you when you have an IO board specific question.

Jim
N2ADR

Mario Vano

unread,
Apr 26, 2025, 2:08:55 PMApr 26
to Hermes-Lite
Hi Jim!

I wonder if you think it's feasible to program the board with MicroPython? There are much friendlier and easier to install IDEs like Thonny that can be used.

It looks to me like the only part  of the code that would be a problem in Python is latency on receipt of the i2c command byte.

If even slightly longer polling for i2c data will work, the even simpler Adafruit Circuit Python language (which is a micropython derivative but doesn't support i2c interrupts ) might even be able to handle it and it requires no development environment installation at all.

Does the HL2 support clock stretching with your board?

I'd try moving your examples myself, but don't actually have an io board or use for one, since my HL2 system is pretty happy without one.

If I decide to get one, I'll look into this however as not everyone's as comfortable with the current pico c environment as we all seem to be...

Just a thought - thanks again for all you do...

Mario AE0GL

James Ahlstrom

unread,
Apr 26, 2025, 3:34:05 PMApr 26
to Hermes-Lite
Hello Mario,

When I designed the IO board there was no I2C client code in MicroPython, and it wasn't in the Pico libraries either. Maybe MicroPython will work if there is an I2C client. I don't know if MicroPython is fast enough or can be used in an interrupt routine as an I2C client requires.

Jim
N2ADR

Mario Vano

unread,
Apr 26, 2025, 4:02:32 PMApr 26
to Hermes-Lite
Thanks,

Interrupts are supported now in the library and it mentions in passing that the I2C buffer object is interrupt safe, but It's not clear from the current micropython documentation how one would use it as the source of an interrupt - possibly by some PIO inline programming. Most of the examples trigger interrupts form pins or from timers. In any case, the limitations on code that can run in an ISR are daunting. I don't know if the board would actually benefit from using them. I believe that's why Adafruit chose not to implement them in circuitpython.

Looks like a interesting experiment for a rainy day... I think I can simulate something here on a bare Pico without the rest of the IO board to at least collect some information about latency if it works at all...

thanks again,

M

James Ahlstrom

unread,
Apr 30, 2025, 3:59:12 PMApr 30
to Hermes-Lite
Hello Claude and Group,

Here is a better description of I2C on the IO board. I added it to the documentation on github.

The Pico listens to I2C address 0x1D and you can read and write to registers at this I2C address. Writes always send a one-byte address and one byte of data. Since the address is one byte, the data item is stored in a 256 byte array named "Registers". All registers are initialized to zero at power on and after a software reset. You can write to any register, not just the ones in the table below. So a write to register REG_ANTENNA_TUNER (equal to 7) looks like this:

Registers[REG_ANTENNA_TUNER] = datum;

Reads always send a one byte address and return four bytes of data. A read from register REG_ANTENNA_TUNER returns Registers[REG_ANTENNA_TUNER] and the next three registers.

There are some exceptions to this general pattern and all are noted below.

The Pico is an I2C slave device, so reads and writes result in a call to the interrupt service routine in i2c_slave_handler.c. This routine must return fast to avoid hanging the bus. So a typical program would not alter i2c_slave_handler.c. It would have a polling loop in main.c to check for changes in any registers it cares about and would perform needed actions there.

Jim
N2ADR



Mario Vano

unread,
May 1, 2025, 1:40:27 PMMay 1
to Hermes-Lite
Thanks - there were a couple of points I missed that you clarified...

M

Reply all
Reply to author
Forward
0 new messages