Reliable storage of settings in EEPROM

Embedded systems often require permanent storage of some configuration parameters eg. radio channel, volume in a radio etc. All settings must be saved and read reliably, otherwise the device may become unpredictable. Imagine a variable frequency drive (an “electric motor controller”) set to a certain speed, that after a power cut reads bad data from it’s memory and overspeeds an expensive piece of moving machinery leading to physical damage.
Continue reading “Reliable storage of settings in EEPROM”

Using XMEGA hardware CRC generator for CRC-16 CCITT

CRCs are useful for checking if data received from outside or read from memory is not corrupted. This is especially important in embedded systems, as it could take just a single bit-flip to drastically change the configuration of the system. I needed to protect configuration structure of my new project when it is being saved and read from EEPROM. To make sure that the data I read from EEPROM is exactly what I have written I decided to use CRC-16 CCITT across the whole structure.

Continue reading “Using XMEGA hardware CRC generator for CRC-16 CCITT”

AVR fuses for beginners

Fuses in AVR microcontrollers have a bad reputation among beginners, because a wrong setting can lock you out of accessing the chip. With the right tools they are not scary. 🙂

Fuses are just a special name for three bytes of EEPROM-like memory (they are not “conventional OTP” fuses at all) that set the most low-level features of an AVR like:
Continue reading “AVR fuses for beginners”

MG-log 0.6 for Android


I released MG-log version 0.6 to Google Play store this week. It is now a quite practical app. I made my own log for Android, because I could not find a QSO logging app that would be easy to use during portable operation and not cluttered. A log for me must be build of several text fields, a decent database backend and some GUI-glue. Logging should be as easy as typing the callsign, report, optionally QTH, some remarks and pressing enter at the end.
Continue reading “MG-log 0.6 for Android”

Serial port redirection from Windows to Linux with socat

My work computer is a Windows machine running several virtual machines with Linux and FreeBSD via VirtualBox. A part of my work requires developing software that interacts with hardware. Most of the time I have successfully used VirtualBox USB filtering to redirect USB devices to the virtual machines, but recently I got a USB device (CDC-ACM class) that refused to be forwarded to the VM.
Continue reading “Serial port redirection from Windows to Linux with socat”

Gentoo on Banana Pi

I like to use Gentoo for most of my tasks (except the smallest systems that run OpenWrt). I also wanted to have it on the Banana Pi. I did not find any specific manual for Gentoo and the Banana, so I followed the standard, two-step installation manual for any architecture:

  1. Extract a stage 3 tarball to the medium that will be the rootfs
  2. Try booting the kernel into it

Continue reading “Gentoo on Banana Pi”

RRDtool – quick tutorial


RRDtool is both a database and a graphing tool that is well-suited to visualize time-varying data like temperature, pressure and all kinds of telemetry.

There are many tutorials available, but they dig too much into the details (like the official one). Since I use RRDtool only for storing and graphing telemetry data I will explain how to do it the easy way.

I use RRDtool for graphing many sources of data, like my small solar system:
Continue reading “RRDtool – quick tutorial”

Banana Pi on battery power


The Banana Pi is a great alternative to the well-known Raspberry Pi. It is not a clone, nor a knock-off, rather a completely different, open single-board computer of a very similar size and good price. Most important features (compared to Raspi) to me are the 3 UARTs (one for the serial console, two free eg. for a GPS, the Raspi has only one in total) and a power management chip with battery charger.
Continue reading “Banana Pi on battery power”