TITLE: Software Article Index
AUTHOR: Chuck McManis
LAST UPDATE: 02-Jan-2013


The flip side of building hardware is writing software to animate that hardware and do the things it needs to do. Whether it is processing the signals from a noisy sensor, to creating decision trees for route planning. Software is one of the three disciplines of robotics.

It is the combination of hardware and software that make the robot do what it can do. This is a list in reverse chronological order of all articles which have, as their main focus, a software theme.

Article List

Read More ...
Learning Software Defined Radio

Wireless communication has become ubiquitous in our world. Most of the radios used in these systems are now “software based.” That idea, that you could build a radio out of software was both intriguing and perplexing to me, so I set out to learn about making radios out of software …

Getting a handle on the Fast Fourier Transform (FFT)

Inevitably an SDR will show you the spectrum it is currently receiving in the form of a periodogram or FFT. What it shows can be fairly intuitive, intensity is the vertical axis and frequency is the horizontal axis. It is also fairly common to find a function call make_fft() or some such that will take some values and convert them to an FFT. But I wanted to know what it was and how it was made, so I set out to write my own.

What is Software Defined Radio?

How do you make a radio out of software? The question is perplexing to many. As computers, analog-to-digital converters, and digital-to-analog converters have become faster, more and more of work of building an analog circuit can be done in the digital domain.

Read More ...
Cross compiling from Linux for the Cortex-M

Cross compiling for an architecture different than the one you were running the compiler on used to be something of an art. For the Cortex-M however, ARM has put a manufacturer supported port of the gcc toolchain for anyone to use. This is a much better answer than the one supported by the package managers and you should consider using it instead. A quick article on how to make that happen.

Read More ...
Building OpenOCD on a Fresh Ubuntu

OpenOCD is an open source tool which can give you access to the ARM debug port. It supports a wide variety of programmer protocols that are often built into evaluation boards. Once you have a working OpenOCD setup, flashing and debugging your code is much easier.

Read More ...
Bare Metal ARM Programming

Programming Cortex-M chips without and operating system is slightly more complicated than programming 8 bit micros. This article goes through some of the differences and gives a working example of “hello world” running on an STM32F4 …

Read More ...
Retargeting the C Library

In the blink article I showed how to blink the LED on the butterfly board with a minimum of support from the C library. The “Hello World” of hardware. But sometimes you do want to use the features of C that are part of the C library, even when you don’t have an OS. Enter C library retargeting.

Read More ...
Blink, the HelloWorld of Hardware

These days programming an “embedded” chip is a much bigger endeavor than it was. This is because the price of 16 and 32 bit processors have plummeted to the point where it becomes trivial to get a “big” processor for even a “small” job, but there are costs to that too.

Read More ...
Black Magic Debugging

Working with embedded ARM systems using only a Linux system can be challenging but Blacksphere Technologies has come out with an excellent tool to help and its open source, so you change it to suit your needs.

Read More ...
Multi-byte Math on the 16Fxxx PIC chips

This is the story of finding a small bug in a multiprecision addition routine which leads to a reexamination of doing multiprecision math on the PIC16 architecture.

Read More ...
Booting an x86 PC for Robot Use

Early on in Robotics one way to get intelligence on board was to use a cast off PC or laptop. Some folks ran MS-DOS on these but others wanted to boot to the bare metal. I researched a bit about what the exact mechanism was to get from power off to running OS and found Ray Knightly’s work useful. I’ve captured them here since his originals are no longer available on his web site.

Windows 95b Boot Sector

This is a disassembly and analysis of the Windows 95 “b” (aka OSR2) boot program which is loaded on system boot.

Windows 95b (OSR2) Master Boot Record (MBR)

This is a Ray Knightly’s disassembly and analysis of the Windows 95 “b” (aka OSR2) master boot record (MBR).

Read More ...
PIC Programming with USB

Programming for “Flashing” PIC chips requires a programmer. Early work like David Tait’s Programmer depended on bit banging the parallel port of a PC, as parallel ports started disappearing, and serial ports soon followed, I looked for a way to program PIC chips via USB and found a kit programmer that could do just that.

Read More ...
Battlebots Weapon Systems Module

When I was competing in BattleBots we had a number of robots in various weight classes. These were typically controlled with regular R/C radios and those radios generated a standard servo control signal. I built a small board to convert that signal into relay activation.

Read More ...
Pulse Measurement with the LAB-X3

One of the things I needed to do for my electronic speed controller was to use the output from an R/C receiver to control it. Those receivers generate a pulse which normally drive an rc-servo so I needed to meausure pulses accurately. This article describes the way I built and debugged code to do that on the PIC chip.

Read More ...
Quadratrack: Using Mechanical Rotary Encoders

Input devices tend to consume precious I/O pins on your projects. A new breed of input device, the Rotary Mechanical Encoder, has come down in price (from the high $20 each range to under $5) so that you might consider using them. I set up a PIC program to do just that.

Read More ...
A PIC Based Electronic Speed Controller

This article was pretty famous for a while. Basically I built an electronic speed controller, like the ones used in R/C models, based on a PIC and four transistors. It has been copied many times, when I re-visited the topic I did so with the ServoGizmo.