The Langstone project is an all mode Microwave transceiver covering bands from 70MHz to 5.7GHz running on a Raspberry Pi4 and the Adalm Pluto.
The project started life as an early prototype for the Hayling project and is named Langstone as it is on the way to Hayling Island!
Since the demise of the Hayling project, the Langstone has now gone mainstream!
- 1 Prototype demo
- 2 Features
- 3 How to build a Langstone
- 4 Hardware
- 5 RF Performance
- 6 Diagnostics
- 7 Details
- 8 Software and code
- 9 Discussion Forum
- 10 Comments and issues
- 11 Langstone user experiences
Colin, G4EML demonstrated an early prototype in early November 2019 running on an RPi4 with USB audio dongle and a Pluto SDR enabling NB operation all bands from 70MHz to 5.6Ghz!
The prototype was running a touchscreen gui written in c controlling gnu radio.
- Touch screen user interface
- All mode (CW/SSB/FM/AM) narrow band transceiver
- 70MHz - 5.7GHz (the unit will actually generate a signal from 47 MHz to 6 GHz)
- Experimental support for 10GHz and 24GHz using Harmonic mixing
- Waterfall spectrum display
- Morse Ident for Beacon Mode.
How to build a Langstone
- Obtain the items listed in the hardware section of this wiki under 'Required Items'
- Plug all the USB items into the Raspberry Pi
- Create the SD card and install the software software using the instructions found at https://github.com/g4eml/Langstone
- The Pi should reboot and start the Langstone Transceiver. Audio output will be from the USB Dongle Headphone connector. Microphone input will be through the USB Dongle Microphone Input.
- For initial testing the touchscreen PTT can be used.
This is the minimum required list of items to build a working Langstone.
- Raspberry Pi Model 4 (2GB version is OK)
- 16Gb micro SD card
- Adalm Pluto with extended frequency modification. See Extending_the_Frequency_Range_of_the_Pluto
- Official Raspberry Pi 7" Touch screen or Pimoroni Hyperpixel4 4" touchscreen
- USB audio dongle (see below)
- Wired USB Mouse with scroll wheel or Arduino Pro Micro board with rotary encoder and switches.
- MCP23017 i2c module for Digital I/O when using the Hyperpixel Display. Can also be used with the 7" display if preferred to using the Pi GPIO pins.
- Audio Amplifier and speaker. (Volume control might also be useful here)
- PTT Switch and Key.
- Panel mounted rotary encoder and two push buttons for tuning. Third push button for dial lock if required. (Wired to mouse board as described below)
- Relays with drivers for control of external devices.
- External Pre-amps, Power-Amps and Filters for your required bands. Filtering will be required if connecting the Langstone to an antenna. See the Filtering section for more details.
It is possible to use the BATC Portsdown band switching and PTT control hardware - https://wiki.batc.org.uk/Portsdown2019_hardware#4-Band_Decode_Switch
External rotary encoder for tuning
The tuning uses the scroll wheel and buttons on a USB mouse. You can modify this to use a panel-mounted encoder and buttons by taking a mouse apart, cutting the tracks to the scroll wheel encoder and connecting external buttons and an encoder as shown here. If you also want the Dial Lock function then you can add a third button to the middle mouse button.
Arduino Pro Micro Board
As an alternative to modifying a mouse board it is possible to program an Arduino Pro Micro board to emulate a USB mouse.
One of the benefits of using this approach is the ability to use high resolution rotary encoders for the tuning knob. The Arduino software allows the resolution of the encoder to be adjusted to suit the Langstone.
Full details can be found at https://github.com/g4eml/Langstone-Mouse
USB Audio Adapter
The recommended USB Audio adapter is a cheap (under £5) adapter from eBay like this.
One working example showed up in Linux as:
pi@raspberrypi:~ $ lsusb Bus 001 Device 005: ID 1b3f:2008 Generalplus Technology Inc. pi@raspberrypi:~ $
The audio device is named in the GNU Radio Modules Lang_TX.py and Lang_RX.py and alternative devices will need the code modifying before they will work. This can be done by using the set_sound command. See the diagnostics section for more details.
For both the transmitter and receiver the audio device sample rate must be 48000. Devices that do not support this sample rate will not work.
Depending on the microphone being used, an amplifier may be required in front of this adapter. The SL6270C is still available (on eBay) as a cheap solution that provides ALC and filtering.
Hyperpixel4 4" Touchscreen
As a smaller alternative to the official Raspberry Pi 7" touchscreen the software has additional support for the Pimoroni Hyperpixel4 4" touchscreen.
This screen requires special drivers to be installed. This is included in the install_hyperpixel4.sh script on the github page.
Note that this screen is not currently supported by the Portsdown project, so a combined Portsdown/Langstone is not possible if you choose this screen.
MCP23017 i2c expander
Because the Hyperpixel4 screen uses virtually all of the Raspberry Pi GPIO there is no spare capacity for the Hardware PTT, Key and Band Select inputs and outputs. To provide more I/O Pins the software supports an external i2c connected expander board using the MCP23017 chip. This provides 16 digital input or outputs and is connected to the Hyperpixel4 display i2c connector. These modules are available at low cost (under £5) from eBay.
The connections for the module are shown in the table below.
The module needs to be configured as device address 20. This is done by grounding pins A0, A1 and A2. On some modules this is the default setting on others you may have to add jumpers.
It can be used on either the Hyperpixel4 display by connecting to the built in i2c connector or on the Raspberry Pi when using the 7" display by connecting to the GPIO Pins.
|Signal||HyperPixel4||Pi GPIO Pin|
N/C= No Connection
You can check that the module is recognised by entering one of the following commands:-
sudo i2cdetect -y 11 (for the 4" display)
sudo i2cdetect -y 1 (for the 7" display)
You should see device 20 present in the displayed matrix
0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- UU -- -- -- -- -- -- -- -- -- -- -- 20: 20 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- --
The following table shows the assignments for the digital inputs and outputs.
The PTT input and the Key input must have pull up resistors connected between the relevant pin and 3.3V.
The PTT Switch and Key should ground these pins when activated.
The Tx and Band Outputs are 0v for off and 3.3V for on. These outputs will need to be externally buffered to drive relays etc.
|Function||GPIO Pin||Pluto GPO||MCP23017|
|Band 0 Output||28 & 32||GPO1||PB0|
|Band 1 Output||35||GPO2||PB1|
|Band 2 Output||7||GPO3||PB2|
|Band 3 Output||22||N/A||PB3|
|Band 4 Output||16||N/A||PB4|
|Band 5 Output||18||N/A||PB5|
|Band 6 Output||19||N/A||PB6|
|Band 7 Output||21||N/A||PB7|
Note that the GPIO output for the Band 0 bit is duplicated on GPIO pins 28 and 32. This is to retain compatibility with the Portsdown Project. Either pin can be used.
Typical Power Output
These are typical output powers from the Pluto, measured on NBFM. SSB outputs peak near these levels.
|144 MHz||+ 1.0 dBm|
|432 MHz||+ 3.5 dBm|
|1296 MHz||+2.5 dBm|
|2400 MHz||+ 1.0 dBm|
|3400 MHz||0.0 dBm|
|5760 MHz||-3.0 dBm|
|10368 MHz||-30 dBm|
The Pluto output is an unfiltered square wave. This has a very high harmonic content at all of the odd harmonics. External filtering is essential if you are going to connect the Langstone to an antenna.
As an example the following picture shows the unfiltered output of the Pluto between 0 and 2GHz when operating on 144MHz.
The left hand peak is the wanted signal at 144MHz followed by peaks at 432MHz, 720MHz, 1008MHz, 1296MHz, 1584MHz and 1872MHz which are the 3rd, 5th, 7th, 9th, 11th, and 13th Harmonics.
Adding a 144MHz bandpass filter results in a much cleaner spectrum as shown in the following picture.
A good low pass filter with a cut-off between 144 and 432 would also be suitable.
This example is for 144MHz but the same applies to any frequency covered by the Langstone. You will need a bandpass or low pass filter for each band you wish to use.
To prevent problems when feeding a power amplifier it is probably best to include a low power band pass filter between the Pluto and the Amplifier and a high power Low pass filter after the amplifier.
If you are experiencing problems in getting your Langstone working there are some diagnostic programs included to try to identify the most common problems.
- Pluto_Test is used to check the connection between the raspberry Pi and the Adalm Pluto. It also checks the throughput to make sure it is working fast enough.
- set_sound is a simple script to find and select the sound device to be used by Langstone.
- HW_Test is used to check for correct operation of the Mouse, Touchscreen, GPIO and MCP23017 (if Fitted).
To run any of these programs you first need to SSH into the Pi. Then enter the following commands:-
This program checks that the Pluto is connected and is responding to the address 'ip:pluto.local'. This is the default name for the device and should be discoverable regardless of the actual IP address. If the Pluto is found then the program runs a short test which sends 1000 commands to the Pluto and times how long it takes to respond. A working system should return a figure of approximately 1900 commands per second. Significantly less than this indicates a problem with the USB connection or the Pluto's power supply. For example connecting the Pluto via a USB hub can reduce this to only about 200 commands per second which is too slow to be usable.
This script searches for suitable sound card drivers. These will begin with 'hw:'. The script will list all suitable drivers and allow you to enter the number of the one you wish to use. This automatically modifies the entry in Lang_TX.py and Lang_RX.py.
When using the recommended configuration only one driver will be listed. This will be 'hw:CARD=Device,DEV=0'.
This program is used to check correct operation of the Mouse, Touchscreen, GPIO inputs and MCP23017 inputs. It first tests to see what devices are connected and then runs a continuous loop reporting any changes it sees.
While the program is running you should exercise the hardware as follows:-
Touch the touchscreen a few times and make sure the touches are reported.
Operate the Mouse Scroll Wheel (Tuning Knob) and left and right buttons and make sure they are reported correctly.
Ground the PTT and KEY inputs on the GPIO pins or MCP23017 pins and make sure they are reported correctly.
When you have finished testing you need to enter <control> C to exit the program.
- The Langstone is intended to be used with the touchscreen and a mouse scroll wheel and buttons. The scroll wheel is used for tuning and adjusting values, the mouse buttons select the digit to be tuned. Mouse movement is not used. Normally a tuning knob will be connected to the scroll wheel. For this description 'Tuning Knob' and 'Scroll Wheel' are the same thing.
- The Middle mouse button can also be used to select and deselect the Dial Lock. This is useful when using tuning knobs without detents. LOCK is displayed above the frequency display in red if the Dial Lock is on. Touching any frequency digit will also remove the dial lock.
- If you do not have a Middle mouse button fitted you can also activate the Dial Lock by pressing both mouse buttons simultaneously (within 200ms).
- The screen always shows the currently tuned frequency in large digits. One digit will be underlined, this is the digit that will be adjusted with the tuning knob. Touching a digit on the screen or using the left and right mouse buttons will move the underline.
- Below the frequency display is the spectrum display and waterfall. This shows signals + and - 20Khz from the centre frequency. A red vertical line shows the tuned frequency and an orange bar shows the receiver bandwidth.
- The top left of the screen shows the S meter. This indicates the maximum level detected within the receiver bandwidth. Zero Level is adjusted in the Settings menu. Calibration is 6dB per S-Point.
- Status Indicators are displayed above the frequency display.
- When operating is SSB or CW the RIT button is displayed to the right of the frequency display. Touching this button turns it red and allows the RIT to be tuned using the tuning dial. touching it again return to normal tuning. Touching the 'Zero' button zeros the RIT and returns to normal tuning.
- To the right of the Waterfall is the volume button. Touching this button allows the volume to be adjusted using the tuning dial. Touching it again return to normal tuning.
- When operating in FM Mode the Squelch Button is displayed to the left of the waterfall. Touching this button allows the squelch to be adjusted using the tuning dial. Touching it again return to normal tuning.
- At the bottom of the screen are the function buttons.
Selects a popup menu of the first 6 of the 12 available bands. Selecting More.. will display the second 6 bands. Touching any band button will switch to that band. Note:- the bands are really just 12 separate VFOs. Any one can be set to any frequency. The label on the button is taken from the last used frequency in MHz.
Selects a popup menu of the available modes, USB, LSB, CW, CWN, FM, and AM. Touching any button will switch to that mode. CWN uses a narrow filter centred on 800Hz.
CW mode has semi break-in. When operating in CW mode the Langstone will switch to transmit when the key is pressed and will return to receive after a short delay, configurable in the setup menu.
Displayed when in FM mode. Turns on the repeater shift. Whilst transmitting this button changes to '1750', touching this button transmits a 1750Hz access tone for repeaters.
Selects the Settings mode described below. Whilst in the settings menu the right hand button shows 'Shutdown', touching this button will close down the program ready for power off.
Selects a popup menu with options of DOTS or CWID. Selecting either of these switches to CW Mode and transmits a constant stream of dots or a user defined Morse Ident. Used for microwave bands to provide an antenna alignment signal. Touching the button a second time returns to receive.
Manually turns on the transmitter. Touching the button a second time returns to receive.
Touching the SET button will display a series of adjustable values. Step through the available values using the NEXT and PREV buttons. Adjust the values using the tuning knob (Mouse Scroll Wheel). For some settings the left and right mouse buttons select the digit to be adjusted. Touching the MENU button exits from the settings menu. Most settings have a different value for each band but some are common to all bands.
The available settings are as follows:-
- SSB Mic Gain
Adjusts the level of the microphone input when in SSB mode. Common to all bands.
- FM Mic Gain
Adjust the level of the microphone input when in FM Mode. Common to all bands.
- Repeater Shift
Sets the repeater shift when working in FM Duplex mode.
- Rx Offset
Applies an offset to the displayed frequency. The display also shows the actual frequency being received. This is primarily used with transverters.
- Rx Harmonic Mixing
Can be set to X1 or X5. Normally set to X1, when set to X5 the receiver will use the 5th Harmonic of the LO for reception. See the description for 10GHz use for more detail.
- Tx Offset
Applies an offset to the displayed frequency when transmitting. The display also shows the actual frequency which would be transmitted. This is primarily used with transverters.
- Tx Harmonic Mixing
Can be set to X1, X2 or X5. Normally set to X1, When set to X2 the output frequency will be half of that displayed. This is for use of an external doubler such as used in the Hydra Modules by OE8FNK. when set to X5 the receiver will use the 5th Harmonic of the LO for reception. See the description for 10GHz use for more detail.
- Band Bits
This is the binary value that will be output to the band select outputs when the current band is selected. Any pattern can be selected for operation of external relays etc.
- FFT Ref
This sets the reference level for the Spectrum display and Waterfall. External Pre-amps will affect the noise level with no signal, you will need to adjust the refence level to give a suitable display.
- Tx Att
Adjust the level of the Transmitter output. This has a range of 0 to -89 dB. This is to allow the signal level to be adjusted to suit external amplifiers.
- S-Meter Zero
This sets the signal level that is displayed as S0 on the display. It should be adjusted to compensate for any pre-amplifier noise.
- SSB Rx Filter Low
This sets the low frequency cut-off of the SSB receive filter. Normal setting is 300 Hz. Common to all bands.
- SSB Rx Filter High
This sets the high frequency cut-off of the SSB receive filter. Normal Setting is 3000 Hz. Common to all bands.
- Rx Gain
Adjusts the Pluto Rx gain setting. This is the overall RF gain of the Pluto Receiver. The default and recommended setting is 'Auto', the Pluto will then adjust its gain automatically to ensure no input signal exceeds the maximum allowable value. Changing the setting from 'Auto' allows the gain to be set manually and fixed at that level. The available range of gain settings depends on the frequency selected (this is the default Pluto behaviour). 70-1300 MHz= -1dB to 73dB, 1300-4000 MHz= -3dB to 71dB, 4000-6000 MHz= -10dB to 62dB. The 'Auto' mode is selected by setting one click above the maximum gain value.
- CW Ident
Defines the Morse code string that is sent (up to 40 characters) when using the Beacon CWID feature. Characters are selected by rotating the tuning knob. The selected character is coloured green. The left and right bottons select the character. Only characters A-Z 0-9 / and space can be selected. To delete unwanted characters set them to Space. Trailing spaces are deleted.
- CWID Carrier
Sets the number of seconds between CW Idents. The key is kept down during this period to produce a constant carrier for antenna alignment.
- CW Break-In Hang Time
Sets the time that Langstone remains in Tx after the morse key is released. Adjustable between 500 and 2000 ms.
Software and code
The Langstone software along with easy to follow installation instructions is available on G4EML github.
The project is open source using GNU radio modules and all code is available on Github.
To update an existing installation to the latest version, log in using ssh, paste in these lines (without the comments):
cd /home/pi # Make sure we're in the right place Langstone/stop # Stop the Langstone killall rpidatvgui # Stop the Portsdown if it is installed Langstone/update # Download and install the update Langstone/run # Restart Langstone
The "killall rpidatvgui" line is only required if you have the Portsdown build loaded on the same system. Do remember that if you have the Portsdown loaded, there is an "Update Langstone" Menu option accessed from Menu 3.
There is a discussion forum about the Langstone hosted on the BATC Forum here: https://forum.batc.org.uk/viewforum.php?f=129
Comments and issues
Extending the Frequency Range of the Pluto
As supplied the Adalm Pluto has a frequency coverage of 325-3800 MHz. This range can be extended by a software modification. Although it is then operating outside its specifications the Pluto can then be used between 70 and 6000 MHz.
To perform the modification you need to connect directly to the Pluto using a serial comms program such as putty.
Connect the Pluto to a Windows PC USB port. Wait for it to be recognised then use device manager to identify which Com port number has been assigned to the Pluto.
Open Putty and make a connection to the Pluto Com port. Speed 9600.
log in as user root
The password is analog
Enter the following commands:-
fw_setenv attr_name compatible
fw_setenv attr_val "ad9364"
After doing this your Pluto will have an extended frequency range.
Changing Pluto IP address
The Pluto comes pre-configured with the IP address 192.168.2.1. If this conflicts with your local network, this Analog Devices web page describes how to change it by editing the config.txt file on the Pluto https://wiki.analog.com/university/tools/pluto/users/customizing?rev=1575147632
The most recent Langstone code (19 May 2020 and later), copes with the changed Pluto IP address without any modification. However, if you load the Portsdown A27 system alongside the Langstone, you will need to set the revised Pluto IP address in the Langstone Configuration on the Portsdown Menu 3. This is to enable a smooth transition between Langsone and Portsdown functionality.
Inverting the Screen Image
If you have used an official Raspberry Pi Case, you may find that the Langstone screen image is inverted. To correct it, simply edit the file /boot/config.txt (using sudo):
Remove or comment out the line
Then save and restart.
The latest version of the Portsdown DATV System, the Portsdown 4, is compatible with the Langstone transceiver when using the 7" touchscreen. If you want both capabilities in one sytem, simply build the Portsdown 4 as detailed here https://wiki.batc.org.uk/Portsdown_4 and then go to Menu 3, Langstone Config and select "Install Langstone". You can then select the Langstone from Menu 2 of the Portsdown and return to the Portdown from the Settings menu of the Langstone.
An earlier experimental version of the Portsdown software (known as the Portsdown A27) was developed that allowed the Langstone hardware to be used as the basis for a Portsdown DATV Transceiver. This version has now been discontinued; there is no upgrade path from the Portsdown A27 to the Portsdown 4. You must rebuild the SD Card.
Although the upper frequency limit of the Pluto (with expanded frequency mod) is 6GHz it has been found that it also produces significant harmonic content. This can be utilised to further extend its coverage to include the 10Ghz band.
Two experimental options have been added to the Langstone setup menus. These are called 'Rx Harmonic Mixing' and 'Tx Harmonic Mixing' and can be set to 1X or 5X. 1X is the default and is the normal mode for Bands up to 6 Ghz.
Selecting the 5X mode causes the Langstone to program the Pluto for one fifth of the displayed frequency. So for a displayed frequency of 10368 Mhz it will be programmed for 2073.6 MHz. The fifth harmonic of this signal is then modulated to provide a low level signal at 10368. A similar thing happens on receive where the 5th Harmonic of the LO is used.
Note that when using Harmonic mixing you need to ensure that Tx Offset and Rx Offset are set to zero.
The output spectrum contains both a signal at 2073.6 MHz and a lower power signal at 10368 MHz. To make use of the higher frequency it is necessary to externally filter out the lower one. This can be done with simple pipecap filters as shown below or even simply by feeding a waveguide 16 antenna which will not pass the lower frequency.
The output power and also the receive sensitivity are much lower than for normal 1X use. Some initial experiments have shown that around 30dB of external gain is required in both the transmit and receive paths. With this extra gain the transmit power will be approximately 0dBm (1mW) and the receive sensitivity will be on a par with other systems.
Even without amplification it should be possible to have short range QSOs on 10 GHz.
The comments above for 10GHz also apply to 24GHz. The output power and receive sensitivity on this band are extremely low, however it can be used as a test signal and receiver for short range testing of other equipment.
Langstone user experiences
- Dave G4FRE has used the Langstone for QSOs on 3.4GHz and received the GB3OHM beacon on 5.7GHz as shown here.
- Dave G8GKQ has received the GB3USK beacon on 23cms and is currently building a Langstone into a box....