TITLE: Chuck's Robotics Notebook
AUTHOR: Chuck McManis
LAST UPDATE: 27-Sep-2019


Welcome to the reconstituted notebook!

My name is Chuck McManis, and this is an online version of my Robotics engineering notebook. I have been designing, building, programming, and generally investigating small to medium scale robotics since 1984. I also use a notebook, my favorite is the Eureka Lab Notebook with quadrule pages. A nice pocket companion is the Maker Notebook.

The benefit of keeping a notebook is that you can always refer back to things you’ve worked on in the past. Your previous experiments lead to understanding which feeds future projects. This site is something of an online version of my journey.

Most Recent Articles

These are the most recent 5 articles on the site. I try to re-generate this index every time I publish an article so it should show up here when I do. For general indices of all the articles, or specific types of articles (like ones related to hardware or software or reviews, Etc.) see the links to the left in the navigation bar.

Read More ...
Setting up STM32F4 Clocks

Setting up the clocks for a Cortex-M chip from ST Micro can be fairly daunting. If you are used to using an ATMega AVR chip like the Arduino does, you probably soldered down a 16 MHz ceramic resonator and were done, with the Cortex-M you have a lot more options. This article covers those options for the M4 series.

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 ...
Bibliography - Interesting Books

As I build and learn about robots I come across books that I find helpful. A very common question then becomes “What books should I read to get started or learn more?” This article provides a place holder for the recommendation list.

Read More ...
The PIC Instruction Set Architecture

The PIC chip from Microchip, being low cost and a simple to implement, has powered a lot of robotic and sensor designs.

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 ...
Jumper Wires for Prototyping

A common theme in robotics is a number of different sub-assemblies connected together with wires. Now building wiring harnesses can be tedious when prototyping so a quick way to prototype them is useful. This article talks about making your own jumper wires so that you can connect a variety of things (boards, sensors, breadboards) together easily and quickly.

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 ...
FPGAs and VHDL - an Odyssey

The world it is a-changin' as many have said. No where is this more apparent than in the “hobby” electronics space. It used to be that one of those plastic multi-drawer cabinets full of 74xx series TTL logic, a few resistors, capacitors, and crystals was all you needed to create a whole slew of interesting projects. Guess what, not any more.

The Road not Traveled : Full Spec Display

Normally when you write in a “high level” language you expect the compiler to get you reasonably close to a good solution. In this example I could not get VHDL to synthesize a simple hex decoder without resorting to the HDL equivalent of writing in assembly language.

Project #1: Clock Generator

On the premise that you must crawl before you can walk, this first project was really all about learning how to use the WebPack ISE tools rather than doing any serious learning about VHDL. However, I did manage to learn something VHDLish in the process.

Project #2: LED Display Gizmo (looper)

In this next project I start turning on LEDs in a 7 segment display. The result, when combined with my 10hz clock, is lighting LEDs in sequence to create a spinning loop effect.

Project #3: HEX Decoder/Display Driver

Sometimes the lessons you learn aren’t about the languages, rather it’s about the tools. This was certainly the case with the HEX display decoder. A simple project that took me down an interesting side road.

Project #4: Two Digit HEX Counter

Now we combine previous projects to build something slightly more complex. In this case a two digit HEX counter. Not rocket science but it taught me about constants in VHDL code.

Project #5: Multi-digit Counting Display

Design a 32 bit (8 decimal digits) counter that displays its count on an eight digit, multiplexed LED display. The counter should count at a rate of 10 counts/second and display a decimal point between digits 7 and

  1. Use the CLOCK_10HZ and HEX_DISPLAY entities in this project. Include the ability to optionally blank leading zeros on the display.
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 ...
Plastic Casting

A continual challenge for roboticists is the making of piece parts. My particular challenge was making decent wheels when toy car wheels wouldn’t do, but other things are also a challenge like linkages or containers. One solution is casting your own parts out of plastic.

My Initial Experience with Casting

This page describes my initial investigation using a cool plastic called “Alumilite” and the Super Casting Kit that you can buy from the Alumilite corporation.

Making Better Wheels

Of course if you read the previous page you know that my first “wheel” didn’t look very wheel like. I changed the initial mold and my second go was much better.

Making Switch Handles

Let’s say you want to buy switches that have handles like an old PDP-8. Impossible? Not quite. Bob Armstrong has put so much effort into creating the front panel, I had to see if I could help him out with some switch paddles.

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 ...
Tools of the Trade: Building Robots

Building robots is a lot of fun, and of course you need tools to build things. This article is a survey article of tools that I use on a regular basis when building robots. I try to give you an idea of what I use the tool for and why I use it. That may help inform your efforts to equip your own robotics laboratory.

Read More ...
Hacking the Dinotrack

The “Dino Track” was a simple one channel Radio Controlled car offered by Radio Shack one year. During the closeout at the end of the year I bought several from the store for $4 each to use as ‘prey’ in my robot predator prey project. Taking it apart was quite fun.

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 ...
"Fixing" the LAB-X3

This shows a closeup of the modification I made to the LAB-X3 in order to use the input capture pin as an input capture pin. This moved it away from the LCD. If you want to use my code unchanged you will need to make this mod

Read More ...
A Tale of Two Programmers

When developing for a new architecture it is useful to have a system that is set up to let you quickly prototype ideas. When moving on to PIC16F628 development for my speed controller and Servo Gizmo projects I needed such a tool. I evaluated the MPLAB-ICD from Microchip and the LAB-X3 bundle from MicroEngineering Labs.

Read More ...
Emergency Easter Egg Locator Beacon (EELB)

Hiding eggs during Easter festivities is fun, hiding them so well you can’t find them is a risk. What if you could find them with your pocket AM radio? Well if that sounds like fun read on.

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 ...
Common Sense: What's up with that?

One of those perplexing things you find when doing robotics is that manufacturers seem to be your enemy. They want you to use their parts but they make doing so, in a cost effective way, very hard. That is fine if your company is buying you tools, but if this is a side project, look out. This article was my take on this strange situation.

Read More ...
David Taits Inexpensive 16F84 PIC Programmer

These are David Tait’s original materials for his 16F84 programmer. The cool thing about the 16F84 was that it had an EEPROM in it and could be reprogramed without erasing via a UV light. Now of course every chip is programmed with flash memory and UV lights have faded away.

Read More ...
The ARBE-ONE Platform

The ARBE-ONE was a very simple robot platform that we considered early on as a “club” robot kit.

Read More ...
Servos 101 : R/C Hobby Servos

Everything you needed to know about inexpensive hobby servos. These servos are used in a variety of robot projects, from the BoeBot to robotic arms. fortunately they are all constructed along similar lines and use a similar signaling mechanism.

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.

About This Site

I’m an engineer that likes to build embedded systems. I went to USC where I got a Bachelor of Science degree in Electrical Engineering and then headed to Silicon Valley to make things. I worked as a EE for Intel but had always supported myself both before and during college by programming. I got an opportunity to join Sun Microsystems just as Sun went public and from that point on nearly all of my day to day work was software.

However, I liked to keep my “hands dirty” and building robots has always been a way to do that. At USC I picked up the habit of writing things down in a lab notebook, and I continued that as I built robots. I have often used those old notes when presenting a talk or teaching a class on robots and one day someone said “Chuck you really should put all of this online.”

The first version of my notebook appeared online in the mid-90’s when HTML was new and tables were the cool new browser feature. I ran it off my private pages using a friend’s ISP (webprofessionals). As my web site grew I moved it to its own server and grabeed the ‘mcmanis.com’ domain when it became available. Unfortunately a mishap at a friends where I was “co-locating” my server resulted in being destroyed by fire (and his garage and a quarter of his house). I recovered some of my notebook from the Internet Archive, and recreated some from my paper notebooks.

I then invested in “Front Page”, a Microsoft product, and used it as a content management system. The fact that it had a WYSIWYG editor was fantastic but its support for CSS was pathetic. In fact its support for anything other than the Microsoft infrastructure and ISS was poor but it was useful enough to make the site in. However by about 2006 tracking all of the links and trying to get the look I wanted became impossible.

I went to work in 2006 for Google, and discovered that you could put AdSense on your web pages and make a few dollars a month. Some people made a living at it but that required either monster traffic or some really egregious site design. I made a few pages with ads, they did ok, I looked at the site, wanting to both unify its look and put ads on pages automatically, and that broke the camels back. FrontPage could not handle it. I decided to re-design everything and that was a big weekend project.

5 years later the site was basically unchanged. I hadn’t cracked the nut, I had upgraded to “ExpressionWeb” but that was, if anything, even more embedded in the Microsoft Ecosystem. I needed a way to generate the site from my tools, on my schedule. So I embarked on writing my own content mangement system or CMS. Armed with Markdown, Python (and later Perl) and some templating code. I finally got to the point where I could actually publish stuff again. And because I think it might be fun some day to make an e-book out of it, I decided to give it its own place in the mcmanis.com namespace. So welcome to the new home at robotics.mcmanis.com. Update your bookmarks, look around, and let me know what you think.


About HBRC

In 1984, I met Dick Prather who was putting up notices in a local Silicon Valley surplus electronics store. Dick had been heading up the Robotics Special Interest Group (SIG) for the Homebrew Computer Club As the Homebrew Computer Club was fading, Dick decided to strike out on his own and converted the SIG into a club in its own right and called it the Homebrew Robotics Club. He was the leader and President of that club for approximately 10 years. In 1992, when Dick stepped down for personal reasons I stepped up. The club continued to meet, now with yours truly as President, at various locations from the Cuptertino Public Library, Sun’s Java building in Palo Alto, a middle school in Campbell, and the Carnegie Mellon satellite campus at Moffet field. In 2004 the combination of my work and my kids who were being home schooled by then overwhelmed me and I turned over the reins to Wayne Gramlich who runs the club to this day. I expect his 10 year term to expire some time in 2014 :-).