HL-2 IO board operation

1934 views
Skip to first unread message

James Ahlstrom

unread,
Aug 12, 2023, 3:08:43 PMAug 12
to Hermes-Lite
Makerfabs is assembling the IO board and end plates. The testing phase is finished so I am starting a new thread devoted to writing software and using the IO board. This includes protocol additions.

I did some work on the software on github. I replaced the band codes with new band codes based on frequency codes. There is rather complete documentation there.

Now that we have a one-byte frequency code I propose to use it for the Rx frequencies. The HL2 can have up to 12 receivers. So I propose that we allocate 12 registers for the Rx frequencies. The Pico is then in a position to figure out what antenna to use. This is meant to support Spark and other software that skims multiple bands for digital and CW signals.

What to people think, especially Alan.

Jim
N2ADR

Alan Hopper

unread,
Aug 13, 2023, 5:40:43 AMAug 13
to Hermes-Lite
Hi Jim,
this all makes sense to me, thanks.
73 Alan M0NNB

John Scherer

unread,
Aug 16, 2023, 9:20:59 PMAug 16
to Hermes-Lite
Any idea when these will be made available for purchase?

James Ahlstrom

unread,
Aug 17, 2023, 2:21:02 PMAug 17
to Hermes-Lite
I think they should be available in two or three weeks. But it depends on parts availability.

Jim
N2ADR

James Ahlstrom

unread,
Aug 21, 2023, 1:02:31 PMAug 21
to Hermes-Lite
Hello Group,

I uploaded more software to my github site. I added registers for the Rx frequencies, the ADC and a command to reset the IO board to a known power-up condition. I know I am still missing the Thetis antenna selection per band. But is there anything else that should be added?

Jim
N2ADR

Simon Brown

unread,
Aug 21, 2023, 1:51:40 PMAug 21
to James Ahlstrom, herme...@googlegroups.com
Jim,

Does the new board support separate TX & TX antennas, if so is the command to select this option in place? This is essential for me as I always use a separate receive antenna away from the house.

From: herme...@googlegroups.com <herme...@googlegroups.com> on behalf of James Ahlstrom <jah...@gmail.com>
Sent: 21 August 2023 18:02
To: Hermes-Lite <herme...@googlegroups.com>
Subject: Re: HL-2 IO board operation
 
--
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 on the web visit https://groups.google.com/d/msgid/hermes-lite/d8e48bae-8bf6-49e8-a97a-c38b67ba703bn%40googlegroups.com.

James Ahlstrom

unread,
Aug 21, 2023, 4:26:19 PMAug 21
to Hermes-Lite
Hello Simon,

The IO board has a Tx frequency and one or more Rx frequencies. It also has a logic input for EXTTR so the Pico knows if you are in Rx or Tx. Take a look at the code in n2adr_basic/main.c. The code sets the Tx antenna for Tx and the Rx antenna for Rx.

The RF input mode control REG_RF_INPUTS can be set to 1 or 2 to make the IO board SMA the only Rx input. Your separate Rx antenna would go to the SMA J9 on the IO board.

But I am not sure that answers your question. It seems that the Pico has everything it needs to set things properly. Let me know if another option is necessary.

Jim
N2ADR

Reid Campbell

unread,
Aug 21, 2023, 6:48:04 PMAug 21
to herme...@googlegroups.com
Hi Jim,

Another register has come to mind:

A register to select what type of band volts. Currently you have Yaesu voltage settings but Xiegu are slight different. I'm sure there are others. It could also be used to select different mappings for band codes if they were consider to be mutually exclusive.

Have you given any more consider the use of the GPIO05_xxx as a transmit inhibit. This would allow the I/O Board to provide protection if a fault condition was detected.

While using the separate rx input, I noticed a double clicking of the R/T relay. Then the rx input in selected the R/T relay is placed in transmit position to isolate the normal receiver input. On the transition to tx, the Pico drops the relay, only for the HL2 to reenergise it, so giving the double bounce. Would it be possible, when separate rx is selected, to always hold the R/T relay in transmit. This would then give a silence transmit as the receive and transmit path are separate.  

Cheers 

Reid
Gi8TME/Mi0BOT

Simon Brown

unread,
Aug 22, 2023, 12:14:20 AMAug 22
to herme...@googlegroups.com
Hi Jim,

Sounds good - I'll just need to know how to set this via the standard API but obviously it can be done. As soon as this board is available I'll order a full HL2 and use it in anger on the air.
Sent: 21 August 2023 21:26

James Ahlstrom

unread,
Aug 22, 2023, 12:45:20 PMAug 22
to Hermes-Lite
Hello Reid,

On Monday, August 21, 2023 at 6:48:04 PM UTC-4 scumballc... wrote:

A register to select what type of band volts.

The IO board user should write their own  band volts function based on ft817_band_volts() and use that in their main.c. The only problem I see is that the maximum voltage is five volts. If more voltage is needed, the fan output can be used. This is driven from an op amp and is scaled to the 3.3 volts from the Pico. It should be fairly accurate, but then you lose the fan.

Have you given any more consider the use of the GPIO05_xxx as a transmit inhibit.

The IO board user can wire GPIO05_xxx to the transmit inhibit. There is no need for an option. They would need to sense the error condition in the Pico somehow.
 
While using the separate rx input, I noticed a double clicking of the R/T relay. 

This should not be happening with the current code. It doesn't happen at my QTH. The Pico holds down INTTR for Rx mode 1 and 2.

Jim
N2ADR 

Reid Campbell

unread,
Aug 24, 2023, 4:21:54 AMAug 24
to herme...@googlegroups.com
Hi Jim,

I plan to create the ability within Thetis to allow the selection of the band volts so I need a register on the I/O board to control that. I can modify the Pico code to handle this and it can be pushed back to the basic functionality branch.

As for the aerial changing, I just need one register defined to allow the functionality to be controlled by the I/O Board.

Cheers 

Reid
Gi8TME/Mi0BOT
--
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.

James Ahlstrom

unread,
Aug 24, 2023, 12:27:39 PMAug 24
to Hermes-Lite
Hello Reid,

On the band volts, are you thinking of multiple tables? The current band volts is mostly an example, although I think it is correct for the  FT817. So are you looking for a choice among several known tables of volts for several different rigs?

Jim
N2ADR

Reid Campbell

unread,
Aug 24, 2023, 4:39:27 PMAug 24
to herme...@googlegroups.com
Hi Jim,

Yes, I need the Xiegu mapping and there is the Yaesu one. Icom have one but it's based off +8V and doesn't cover all the bands, seems to be missing the WARC ones. I was also thinking of adding a Custom options so a special mapping could be programmed in the Pico and there would be a selection method in place for it.

So the options would be

No Band volts
Yaesu
Xiegu
Custom

The band codes could be incorporated as well as another item in the list.

Cheers 

Reid
Gi8TME/Mi0BOT

James Ahlstrom

unread,
Aug 26, 2023, 2:39:35 PMAug 26
to Hermes-Lite
Hello Reid,

My design goals of the IO board differ from yours. In "Jim world" the user knows what table of band volts she needs and just programs it into the Pico. You seem to want to provide complete control inThetis, and the user does next to nothing. In "Jim world" the SDR software just provides minimal basic info, and real control is programmed into the Pico by the user.

But I don't want to stand in anyone's way. So I propose the following. Registers in the Pico have a byte address, so there are 256 registers. Currently, registers 0 to 30 have a defined meaning, and some have side effects such as decoding the Tx frequency. A polling loop in main.c looks at the registers to see if something should happen.

Now the registers are in a static 256-byte array and reading and writing any register is supported whether or not it is part of the "protocol". Reading a register just returns the last-written value unless Pico code changes it. The polling loop can see all 256 registers and do what it wants. Registers 200 and up are used for features that are optional or unique to an SDR program. All 256 registers are zero at power on, and after a software reset.

So there is no need to ask for protocol registers, and any SDR author can claim a register. Just announce on this group that you are using register 200 for the selection of a table of band volts. Provide documentation so that other SDR authors can implement the register or not.

To avoid stepping on someone else's register, please use registers 200 and up, announce register usage and provide complete documentation for that register.

Jim
N2ADR

James Ahlstrom

unread,
Aug 27, 2023, 4:53:50 PMAug 27
to Hermes-Lite
Hello Group,

Makerfabs informed me that the IO boards should be complete in one week. They still need to test them with the test jig I sent.

Jim
N2ADR

Colin Larsen

unread,
Aug 27, 2023, 5:03:52 PMAug 27
to Hermes-Lite
Great news! I'll be placing an order ASAP

Colin
ZL2FL 

--
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.

Lou Scalpati

unread,
Aug 27, 2023, 7:38:25 PMAug 27
to Hermes-Lite
Jim, are they taking pre-orders?  I can't find them on the site.

Lou KI5FTY

--
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.

James Ahlstrom

unread,
Aug 28, 2023, 11:44:32 AMAug 28
to Hermes-Lite
No pre-orders. I will announce when they are available.

Jim
N2ADR

Lou Scalpati

unread,
Aug 28, 2023, 12:44:57 PMAug 28
to Hermes-Lite

Reid Campbell

unread,
Aug 29, 2023, 5:11:29 PMAug 29
to herme...@googlegroups.com
Hi Jim,

Sorry, I have been busy this last few of days.


On 26/08/2023 19:39, James Ahlstrom wrote:
Hello Reid,

My design goals of the IO board differ from yours. In "Jim world" the user knows what table of band volts she needs and just programs it into the Pico. You seem to want to provide complete control inThetis, and the user does next to nothing. In "Jim world" the SDR software just provides minimal basic info, and real control is programmed into the Pico by the user.

In my world people have different skills and different interested and I'm trying to cater for that by providing a base level of functionality for the I/O Board. If we make it so you have to know tool chains and C programming, we are appealing to a small user base.

One of the items that I have brought up before is the ability to switch aerials, pretty fundament in most high end radios and amplifiers. There are plenty of hams who are more practical and love to experiment with different aerials. Many times you hear aerial 1, aerial 2 tests on the air. Are you suggesting they should learn to program the Pico and then reload it to switch aerials? That's not their interest.

There are basic functions that the I/O Board can do, band voltage is one of them. I don't think it is unreasonable to assign a register for its control. Not a custom register for one particular SDR program but a defined standard that all SDR program can adhere to if they want to support that functionality.

The same is true of aerial switching and I have already proposed a solution for that which only takes up one byte.   


But I don't want to stand in anyone's way. So I propose the following. Registers in the Pico have a byte address, so there are 256 registers. Currently, registers 0 to 30 have a defined meaning, and some have side effects such as decoding the Tx frequency. A polling loop in main.c looks at the registers to see if something should happen.

That sounds fine.



Now the registers are in a static 256-byte array and reading and writing any register is supported whether or not it is part of the "protocol". Reading a register just returns the last-written value unless Pico code changes it. The polling loop can see all 256 registers and do what it wants. Registers 200 and up are used for features that are optional or unique to an SDR program. All 256 registers are zero at power on, and after a software reset.

Yes, above 200 can be real custom features, like turn on the amp at you remote site.



So there is no need to ask for protocol registers, and any SDR author can claim a register. Just announce on this group that you are using register 200 for the selection of a table of band volts. Provide documentation so that other SDR authors can implement the register or not.

I think for basic functionality that the I/O Board would normal be expected to provide, like band voltage and aerial switching, the next registers available should be used and not in the custom section.



To avoid stepping on someone else's register, please use registers 200 and up, announce register usage and provide complete documentation for that register.

It's important to document definition and usage. Should that placed in the HL2 Wiki?

Cheers 

Reid
Gi8TME/Mi0BOT



James Ahlstrom

unread,
Aug 30, 2023, 12:33:55 PMAug 30
to Hermes-Lite
Hello Reid,

I will answer your concerns in a few days, but now I am installing a new feature that may help. I have programmed registers 170 to 198 so that they map to Pico GPIO pins 0 to 28. That is, you can read and write any Pico GPIO pin directly without making a program for the Pico. For regular IO pins, you would write 0 or 1 to the GPIO. If the pin is used for PWM, you can write 0 to 255 to control the output voltage. The band voltage is GPIO8 so you can control band voltage by writing to register 178. There is documentation on my github site.

This is meant to be helpful to SDR authors who wish to have more complete control of the IO board. It also enables IO board control by an external program such as Steve's hermeslite.py. It is still important for SDR authors to write the Tx frequency to the Pico because it enables the external program to read the Tx frequency and switch antennas. This moves code from the Pico to code in an external program.

Jim
N2ADR

Mike Lewis

unread,
Aug 30, 2023, 1:41:31 PMAug 30
to James Ahlstrom, Hermes-Lite
Super flexible option, something for everyone.  In my case I have a band decoder drive a stack of microwave coaxial relays, usually pulse latching, in various combinations for some antennas that share a feed to multiple VHF/UHF/SHF amps and the related power coupler switching.  A python desktop program can optionally control things, in this case an easy matter to write to port 1025.

I believe you can read the registers also so can always know the status.

Mike

Sent from my T-Mobile 4G LTE Device
Get Outlook for Android

Sent: Wednesday, August 30, 2023 9:33:55 AM

To: Hermes-Lite <herme...@googlegroups.com>
Subject: Re: HL-2 IO board operation
--
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.

ron.ni...@gmail.com

unread,
Aug 30, 2023, 2:58:00 PMAug 30
to Hermes-Lite
Someone wrote:
> In my world people have different skills and different interested and I'm trying to cater for that by providing a base level of functionality for the I/O Board. If we make it so you have to know tool chains and C programming, we are appealing to a small user base.

I doubt that there is any base level of functionality that covers every possible combination of amplifiers, transverters, tuners, antennas, rotators,   Iand other remote equipment, and how they are controlled, that some small user base might have or want to use in conjunction with an HL2. I think the scope of this IO board project is not to support all these (unknown!) possibilities out of the box, but to provide a clean protocol that does not exclude the possibility of such support, should any user base find someone who knows how program a pico to support their particular (sub)set of needs.  Just as there a different versions of HL2 gateware for those who want to transmit, and those who want to skim 10 bands, there can be different builds of IO-board-ware for different user bases, put on GitHub, developed by those with that specific set of needs.
73, Ron, n6ywu

James Ahlstrom

unread,
Aug 31, 2023, 12:48:37 PMAug 31
to Hermes-Lite
Hello Group,

The IO board protocol contemplates choosing a Tx and Rx antenna based on the Tx and Rx frequencies. But it lacks a way to choose among multiple antennas for a band. For example, between a dipole and a vertical on 40 meters.

I reviewed prior discussions, and tried to design a protocol that would require minimal SDR changes, provide a simple common denominator and was a single byte. So I propose adding register 31. The high nibble is the Tx antenna and the low nibble is the Rx antenna for the band implied by the frequencies. There are 16 possible Rx and Tx antennas numbered zero to fifteen for each band. The default antenna zero is the first or only antenna for that band. SDR authors could ignore this byte if they don't have an antenna control. Or they could send a new byte when the band changes. Register 31 is only used when there are multiple antennas available for a band.

Is this OK?

Jim
N2ADR

Simon Brown

unread,
Aug 31, 2023, 1:27:45 PMAug 31
to James Ahlstrom, herme...@googlegroups.com
I'll implement whatever you design.
Sent: 31 August 2023 17:48

To: Hermes-Lite <herme...@googlegroups.com>
Subject: Re: HL-2 IO board operation
--
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.

Reid Campbell

unread,
Aug 31, 2023, 4:09:45 PMAug 31
to herme...@googlegroups.com
Hi Jim,

I think this should work fine, Register 31 is the master control and you will also include other registers which are linked to a band selections base on the transmit frequency. If Register 31 is zero the band related aerial selection will be used. If Register 31 is non zero, it takes precedence and antenna switching is performed based on the upper and lower nibbles.

It is worth mentioning that the Pico code should autonomously switch between the receive and transmit aerials based on EXTTR.

The current Thetis Beta-5 has this functionality but I tested it with Register 14, so it should just require a small change to the code.

Cheers 

Reid
Gi8TME/Mi0BOT
--
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.

James Ahlstrom

unread,
Sep 9, 2023, 11:08:14 AMSep 9
to Hermes-Lite
Hello Group,

Makerfabs informs me that the IO board will be available shortly, and the order page is up on their site! I have added more registers and documentation to my github site.

Jim
N2ADR

John Williams

unread,
Sep 9, 2023, 11:35:46 AMSep 9
to James Ahlstrom, Hermes-Lite
Why the green end plates?

Sent from my iPhone

On Sep 9, 2023, at 10:08 AM, James Ahlstrom <jah...@gmail.com> wrote:

Hello Group,

Makerfabs informs me that the IO board will be available shortly, and the order page is up on their site! I have added more registers and documentation to my github site.

Jim
N2ADR

--
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.

Simon Brown

unread,
Sep 9, 2023, 11:43:17 AMSep 9
to James Ahlstrom, Hermes-Lite
Jim,

I assume I need both the standard N2ADR board and​ the new I/O board?

Will order as soon as you let me know.
Sent: 09 September 2023 16:08

To: Hermes-Lite <herme...@googlegroups.com>
Subject: Re: HL-2 IO board operation
--
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.

Simon Brown

unread,
Sep 9, 2023, 11:47:59 AMSep 9
to Hermes-Lite
Hmm,

RTFM: "The board mounts above the N2ADR filter board in the same box as the Hermes Lite 2."

So off I go to order.
From: herme...@googlegroups.com <herme...@googlegroups.com> on behalf of Simon Brown <Si...@sdr-radio.com>
Sent: 09 September 2023 16:43
To: James Ahlstrom <jah...@gmail.com>; Hermes-Lite <herme...@googlegroups.com>

Subject: Re: HL-2 IO board operation
Jim,

I assume I need both the standard N2ADR board and​ the new I/O board?

Will order as soon as you let me know.



From: herme...@googlegroups.com <herme...@googlegroups.com> on behalf of James Ahlstrom <jah...@gmail.com>
Sent: 09 September 2023 16:08
To: Hermes-Lite <herme...@googlegroups.com>
Subject: Re: HL-2 IO board operation
 
Hello Group,

Makerfabs informs me that the IO board will be available shortly, and the order page is up on their site! I have added more registers and documentation to my github site.

Jim
N2ADR

--
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 on the web visit https://groups.google.com/d/msgid/hermes-lite/deb22f53-9802-43b9-ab56-d8bf53b8dbb1n%40googlegroups.com.

--
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.

Lou Scalpati

unread,
Sep 9, 2023, 12:06:19 PMSep 9
to James Ahlstrom, Hermes-Lite
Just ordered 2 boards, thanks everyone for the hard work!

--
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.

Rune Øye

unread,
Sep 9, 2023, 1:07:54 PMSep 9