Welcome to Cowlug

Site Navigation

This site is my personal blog and project repository.

If you are looking for the old Cowichan Valley Linux Users Group, check the side navigation. This site contains links to various projects that I either created or contribute to.

You will also find my Github page and Youtube channel here.

Latest News

QRP Labs Enclosure for the LimeSDR.

I recently got a LimeSDR board and also bought a QRP Labs case for it. The QRP Labs case brings all the RF connectors out to the front and rear panels and also includes heatsinks for the chips and a case fan.
Assembly instructions are here.

Parts list:

    1. 12pcs SMA to U.FL pigtails
    2. aluminium shell bottom (4 holes)
    3. aluminium shell top (fan cutout, 2 holes)
    4. 4 rubber pads
    5. 4 plastic screws
    6. 8 plastic nuts
    7. fan 30x30 5v with mesh
    8. pinheader
    9. heatpad (1pcs, cut later into more pcs)
    10. 6pcs heatsinks (1x + 2x + 3x)
    11. PCB panel (front, rear)
    12. 8 panel screws
    13. 4 bicolor LEDs
    14. 2 LED holders

Software: There are four software packages that I use with the LimeSDR as well as the LimeSuite from Myraid RF.

Pytomation running on Pi3 with TFT display and power circuit.

I recently got a TFT display and a serial port board with a small bit of breadboard space hooked up to my Raspberry Pi3, for running Pytomation. See the side menu for more about automation with Pytomation. I wanted something I could power down, removing power from the Pi board, then start up again with the push of a button. The entire assembly is built with the following components (see the article from January about configuring the TFT display):


This is the Pi serial expansion board including breadboard area. It is available from https://www.abelectronics.co.uk.


This is the schematic of the power circuit. It works as follows:

Once the Pi has booted pressing the bottom button on the TFT display, which is connected to GPIO 17, will initiate a shutdown of the operating system, The very last action taken during the shutdown sequence is to enable (logic high, +3.3v) GPIO pin 26. GPIO 26 turns on the "set" coil of the relay which in turn will remove power from the Pi board. The 470uF capacitor provides just enough additional power to the Pi to properly latch the relay before removing power. Pressing the pushbutton will pulse the "reset" coil and power will be restored to the Pi, which then boots.

Here is a quick video of the board operating.

Parts list:
    1. Raspberry Pi3 with USB power supply and SD card, running Raspbian 9.
    2. Adafruit 2.8" Capacitive display from BC Robotics
    3. SerialPiPlus an RS232 board with breadboard space.
    4. 3.3 volt dual coil latching relay model EE2-3TNU.
    5. 3.3volt three terminal regulator.
    6. IN4148 diode.
    7. Green LED.
    8. 470 ohm, 1/4 or 1/8 watt resister
    9. Normally open pushbutton switch.
    10. 470uF, 25volt electrolytic capacitor.
    11. USB male connector/cable end.
    12. Various standoffs and hardware.

Once the board is complete with the power on/off circuit you must make some changes to your Raspbian installation. There are two things that must be done. Add support for the power down button on the TFT display and add support for GPIO pin 26 to change to a high state (3.3v) one it is safe to remove power from the Pi3.

To get the TFT display working see my article from January 2018, PiTFT

TFT display button support:
This tells the Pi to watch GPIO pin 27 which is one of the buttons on the TFT display, when pressed it will shutdown the Pi.
Login and edit the /boot/config.txt file to add the following at the bottom of the file.

This is from the /boot/overlays/README file.

Name:   gpio-shutdown
Info:   Initiates a shutdown when GPIO pin changes. The given GPIO pin
        is configured as an input key that generates KEY_POWER events.
        This event is handled by systemd-logind by initiating a
        shutdown. Systemd versions older than 225 need an udev rule
        enable listening to the input device:

                ACTION!="REMOVE", SUBSYSTEM=="input", KERNEL=="event*", \
                        SUBSYSTEMS=="platform", DRIVERS=="gpio-keys", \
                        ATTRS{keys}=="116", TAG+="power-switch"

        This overlay only handles shutdown. After shutdown, the system
        can be powered up again by driving GPIO3 low. The default
        configuration uses GPIO3 with a pullup, so if you connect a
        button between GPIO3 and GND (pin 5 and 6 on the 40-pin header),
        you get a shutdown and power-up button.
Load:   dtoverlay=gpio-shutdown,=
Params: gpio_pin                GPIO pin to trigger on (default 3)

        active_low              When this is 1 (active low), a falling
                                edge generates a key down event and a
                                rising edge generates a key up event.
                                When this is 0 (active high), this is
                                reversed. The default is 1 (active low).

        gpio_pull               Desired pull-up/down state (off, down, up)
                                Default is "up".

                                Note that the default pin (GPIO3) has an
                                external pullup.

GPIO pin 26 support:
Login and edit the /boot/config.txt file to add the following at the bottom of the file.

This is from the /boot/overlays/README file.
Name:   gpio-poweroff
Info:   Drives a GPIO high or low on poweroff (including halt). Enabling this
        overlay will prevent the ability to boot by driving GPIO3 low.
Load:   dtoverlay=gpio-poweroff,=
Params: gpiopin                 GPIO for signalling (default 26)

        active_low              Set if the power control device requires a
                                high->low transition to trigger a power-down.
                                Note that this will require the support of a
                                custom dt-blob.bin to prevent a power-down
                                during the boot process, and that a reboot
                                will also cause the pin to go low.

Now assemble all the pieces. Stack the serialpi board on the Pi first , then the TFT display hat on top of the serial board, then power on your Pi. You should be able to safely shutdown the Pi by pushing the bottom button on the TFT display. To turn the Pi back on, press the pushbutton wired into the power circuit.

Here is a picture of the completed project:

PiTFT small displays for Raspberry Pi

This explains what I had to do to get the Adafruit 2.8" Capacitive display working under Debian Stretch on a Raspberry Pi 3.


At this point in time, January 2018, the tutorial on the Adafruit page only deals with getting the displays working under Debian Jessie. Stretch was released on June 17th, 2017 and it's a bit sad that Adafruit has not updated their tutorial.

Here are the steps:
    1. Install Debian Stretch on your Pi3. I used the 2017-08-17 image from downloads.raspberrypi.org.
    2. Make sure everything is up to date with: sudo apt-get update and then sudo apt-get upgrade, then reboot.
    3. Download the adafruit-piftf-helper2.sh script from here, I have a local version here but it may be old now, please check.
    4. Make the script executable -> chmod +x adafruit-pitft-helper2.sh
    5. Now run the script with the sudo command -> sudo ./adafruit-pitft-helper2.sh
    6. and answer the questions


Just picked up one of these microscopes for surface mount work.


  • High quality optical glass elements
  • High definition erect stereo images over a wide field view
  • 2 levels of total magnifications: 10X and 20X
  • Extremely long working distance allows enough operation space
  • 45┬░inclined binocular head
  • Low heat LED light - harmless for touching
  • Additional flexible lamp holder provided for different lighting angles
  • Ocular tube has diopter adjustment
  • Adjustable inter-pupillary distance to fit anyone's eyes
  • Sturdy small metal boom stand
  • Product GS and CE approved
  • Manufacturer in business 30+ years

  • Model: G22C
  • Head: 45┬░Inclined binocular.
  • Eyepieces: wide field WF10X/20 and WF20X/10
  • Objective: 1x
  • Total magnification: 10x & 20x
  • Ocular tube has diopter adjustment ┬▒5dp
  • Interpupillary distance: 2-3/16" ~ 2-15/16"(55~75mm)
  • Working distance: 9 " (230mm)
  • Maximum field of view: 3/4" (20mm)
  • Focus adjustment stroke: 1-3/4" (43mm)
  • LED illumination
  • Power supply: 110V/60Hz (US and Canada)
  • Dimension: 18" x 5-1/8" x 15" (46cm x 13cm x 38cm)
  • Net weight: 14 lb 12oz ( 6.7kg)
  • Shipping weight: 17 lb (8kg)

Hue Commander

I have released a Linux console, python utility, called "huecmdr.py". You can use it to test various aspects of the Philips HUE lighting system. It runs great in any X terminal as well.

It has the following features:

  • Authenticate your computer with the bridge
  • Ask the bridge to search for newly purchased bulbs
  • List all the bulbs known to the bridge
  • Select a bulb for testing
    • Test various values of
    • RGB colours
    • Colour temperature
    • Hue and Saturation
    • Brightness

This utility is a great way of selecting a value to use in your Pytomation Instance file. You can find the Source on the Pytomation github site.


H19term aims to provide close to 100 percent software emulation of the Heathkit H19, also known as Zenith Z19, hardware video terminal.

It currently has the following features:

  • Software bell - User configurable sound
  • Heath mode
  • Ansi mode
  • Supports 25th line.
  • Support all graphics characters.
  • Custom font files for the Linux console, includes Raspberry Pi
  • Serial Port logging.
  • Help files available for ascii characters, CP/M quick help and user manual.
  • Easily configurable in .h19termrc file
  • Colour changing mode for Amber and Green or other colours.
  • Help files directly inside h19term.


H19term is written in Python version 2.7. It won't run in Python 3.x without some modifications.

You will also require the Pyserial package. The Pyserial home page is here if you want more information about it. You can install it with your standard package manager


Download the h19term tarball and follow the instructions in the README file.

The github page is https://github.com/horga83/h19term


See the h19-readme.txt file or go to the github page and scroll down.

As noted before Python should already be installed in most Linux distributions.


Inital Release. Release V1.2

DD for CP/M

DD.COM - CP/M Disk dump

DD.COM is a floppy imaging program for CP/M. It is modelled after the UNIX utility dd. It allows one to make a floppy disk image from an H8D file or to dump the floppy disk to an H8D image.

How it works.

Disk dump for CP/M - Version 1.2 - 2012/01/13...

dd currently only works for reading and writing H8D CP/M disk images to and from an H17, 100k, hard sector diskette drive.

dd - Prints out the help.
dd map - Prints a map of your disk drives - must have floppy inserted.
dd if=<file|drive|port> of=<drive|file|port> - copies images.

dd if=e: of=cpmboot.h8d - Makes image from E: drive called cpmboot.h8d
dd if=mydisk.h8d of=d: - Images D: drive from file mydisk.h8d
dd if=ttys1: of=d: - Images D: drive from serial port using h8clxfer or H89LDR9.


You can download the BDS C source code and the compiled, ready to run versions of DD.COM here.
DD.COM version 1.2 --- DD-1-2.C Source

Older versions

DD.COM version 1.1 --- DD-1-1.C Source


1.0 - 2012/01/01
- Initial version

1.1 - 2012/01/06
- Dig drive letter out of filename so it uses the the correct drive when doing a bisoh(SELDSK).
- Add version and date to help.
- Add drive type to map display.

1.2 - 2012/01/13
- Added serial port support which can be used with Dwight's H89LDR program or h8trans/h8clxfer.

Other Information

Error checking is a little weak yet but I'm working on it, for example, it fails if a diskette isn't inserted in the drive. The program is written in BDS C so it is easy to extend. I will be adding the ability to work with H89LDR so one can use the serial port from a PC as well.

I have only tested this with the following configuration so if it doesn't work for you send me a bug report and I'll fix it. H8 with IDE hard drives A-D and H17 floppy drive E:

Just remember you MUST have a formatted floppy inserted in the drive before you copy.