Apr 242016

After not touching project for a while, using MPLAB X 3.26 with a newer XC8 compiler (1.37) brought me error: (141) can't open include file "delays.h": No such file or directory. For some reason delays.h got cut from the environment. Fortunately, the only function I’ve used from that header was Delay10KTCYx – one you can directly replace with a _delay macro.

For example


can be directly substituted for:

But that works only up to 19 – values 20 and above will give you error: (1355) in-line delay argument too large.

For those we can always create a more direct substitute:

void Delay10KTCYx(unsigned char count) {
    do {
    } while(--count != 0);

Apr 182016

MagiWOL import[This is a post 2 in series, for hardware setup go here]

The first piece of software we need to get Raspberry Pi running is of course its operating system. If you have a monitor and keyboard attached, you can proceed with NOOBS install without any trouble. If you don’t want to deal with imaging SD card, this is the best as you can even buy it pre-programmed.

However, I like to complicate and thus decided to go with the headless install of Raspbian Jessie Lite. The most noticeable difference between normal Raspbian and Raspbian Lite is that you get a graphical interface only in one of them. Guess which is which.

After creating image and booting machine up with the prepared SD card, one challenge is how to find it. I personally use Import function of MagiWOL to find a new IP around, but you can also log into your router and figure IP from there. Chickens can even attach monitor, I won’t judge. With IP in hand just connect to machine via SSH client (e.g. PuTTY). User name and password are usual pi/raspberry.

First action after fresh install would be to update to the latest packages:

# sudo apt-get update

Next you proceed with installing all the goodies (steps taken from Ham Radio Science):

# sudo apt-get install -y git cmake libusb-1.0-0.dev build-essential
# git clone git://git.osmocom.org/rtl-sdr.git
# cd rtl-sdr/
# mkdir build
# cd build
# cmake ../
# make
# sudo make install
# sudo ldconfig

Now we want to create two scripts. Yes, you can run stuff manually but these scripts are going to make it easier if you want to do it automatically on startup. Notice each is just a single cat command with a lot of data:

# cat <<EOF > /home/pi/rtl-sdr/build/rtl_tcp.sh
IP=`ip addr show $INTERFACE | grep inet | grep -v inet6 | awk '{print $2}' | cut -d'/' -f1`
if [[ $IP != '' ]] ; then
    /usr/local/bin/rtl_tcp -a $IP
    echo "Cannot find IPv4 address on $INTERFACE interface." >&2
    exit 1

# cat <<EOF > /home/pi/rtl-sdr/build/rtl_tcp.service

ExecStop=killall rtl_tcp


Finally we have a chutzpah of steps for the remaining details (including disabling TV driver for the SDR device):

# chmod +x /home/pi/rtl-sdr/build/rtl_tcp.sh
# sudo cp /home/pi/rtl-sdr/rtl-sdr.rules /etc/udev/rules.d
# sudo bash -c 'echo "blacklist dvb_usb_rtl28xxu" > /etc/modprobe.d/dvb_usb_rtl28xxu.conf'

If all steps are completed, we can now run our newly created script:

# /home/pi/rtl-sdr/build/rtl_tcp.sh
Found 1 device(s):
  0:  Realtek, RTL2838UHIDIR, SN: 00000001
Using device 0: Generic RTL2832U OEM
Found Rafael Micro R820T tuner
[R82XX] PLL not locked!
Tuned to 100000000 Hz.
Use the device argument 'rtl_tcp=' in OsmoSDR (gr-osmosdr) source
to receive samples in GRC and control rtl_tcp parameters (frequency, gain, ...).

If you wish program to start automatically, you can also make use of the newly created service file:

# sudo systemctl enable /home/pi/rtl-sdr/build/rtl_tcp.service
# sudo init 6

After machine is booted back up (it should take less than a minute), you can use your favorite SDR program with a support for RTL-SDR over TCP to connect on port 1234. I personally find SDR# well behaved and problem-free but any other will do too.

PS: All this was done on a default partition that has under 200 MB free. To increase partition size run sudo raspi-config and choose Expand Filesystem.

Apr 122016

SDR#[This is a post 1 in series, for software setup go here]

If you want to explore the radio world around you, enthusiasts long time ago noticed that TV tuners are, with their software-defined radio core, the easiest way to get into it. They are widely available, cheap, and listen-only. This listen-only is a really important stuff as not only you can get yourself in a lot of legal troubles by transmitting willy-nilly, but you can also mostly ignore all that antenna matching stuff and not burn your devices.

One family of tuners captured radio hobbyist hearts all around – RTL. There is a bunch of chips in that family, RTL2832 and RTL2832U being the current favorites. There is not much about those chips to distinguish them from other TV tuners but the fact there were there first and they are well supported by software. If application supports radio on cheap, it will support RTL chipset.

However, the basic TV tuner devices are not know for their frequency stability. Their main purpose is working in a single frequency range so tight regulation was not of a major concern. Because of that you have companies like NooElec that either know which SDR receivers work well and they just resell them or, in some cases, they equip SDR receivers with a better crystal (e.g. 0.5 ppm). And that helps a lot.

There are many models on their pages and , if you go with 0.5PPM TCXO you are in excellent shape. I myself opted for Nano 2+ but Mini+ with its aluminium enclosure sure looked tempting.

If you have a powerful PC to dedicate as the radio receiver, story can end here – download SDR# or Cubic SDR and enjoy. However, I had something else in plan.

As my main PC is a notebook I got bored connecting SDR receiver every night only to disconnect it some time later. And lets not speak about all the driver tricks you usually need to make radio applications recognize it properly in 64-bit Windows 10. Fortunately pretty much all applications that recognize RTL can also work with it over the network. And creating remote RTL-based server is a job best done on Linux.

For remote Linux I gave quite a few thoughts toward Stick computers but decided against them due to a new Raspberry Pi 3. It has more than acceptable specs (doing RTL server is not really processor intensive task) and at $35 it is third of the price. As a bonus it is completely passive so we don’t need to be worried about the fan noise.

Even better, it has a wired ethernet port that gives better network experience and enables us to turn off wireless and get a cleaner radio input. Although with all the 2.4 GHz networks and microwave ovens blasting around, it makes a little difference in the end. And no, this small SDR device is not stable on 2.4 GHz, thanks for asking. Realistically, if you want to go into the GHz range, you need a better radio frontend than a cheap TV card.

For Raspberry Pi you need an SD card that will hold the operating system – any 4 GB or above micro-SD will do. You also need a power supply – just scavenge whatever you have lying around. And finally you might want to think about a case – that you will have to buy.

To sum it up, here is the equipment list assuming you have nothing at all:

Description Store Cost
NooElec NESDR Nano 2+ NooElec $30
Raspberry Pi 3 B Newark $30
Raspberry Pi 3 Case Newark $9
Raspberry Pi 3 Power Supply Newark $11
Raspberry Pi NOOBS SD Card Newark $14
Total: $94


PS: All prices are without tax and shipping, as customary in States. Your total amount will be a smidgen higher.

PPS: I have no connections neither to Newark nor NooElec. In case of Newark (or Element 14), it was the only supplier that had all items in stock at the time. In case of NooElec, their devices seemed to be at a perfect price/performance point.

Apr 062016

BimilAlthough I kept Bimil, my password manager, without a version for more than five years, version 1.10 comes right on heels of the 1.00.

Most noticeable change is adding the Start window. While not offering anything that isn’t possible in rest of the program, it does help speed-up opening of recently used files. Opening files in read-only mode also becomes possible and I’m sure this will be handy feature to many.

Fields have been refactored a bit; two-factor authentication and CVV buttons are hidden by default and former has gotten an option to show code instead of just copy.

Alongside a few minor fixes, feedback form has been moved to https. It just felt wrong to have password manager send messages via unencrypted channels. :)

As always, upgrade is available directly from program or these pages while source can be found on GitHub.