Me wearing ridiculous goggles

Projects

Glitch

A Microcontroller Demo

Glitch is my first demo. To make things more interesting, it runs on a microcontroller instead of a “real” computer. It’s based on m4vgalib, my open-source microcontroller graphics stack.

Here’s the trailer:

I’m working on a series of posts on the internals. Here’s what we’ve got so far:

  • Introduction — with a brief explanation of why I think this is interesting.
  • Pushing Pixels — a look at the options for jitter-free parallel output on STM32F4, and why I chose the one I did.
  • A Glitch in the Matrix — sources of jitter in the STM32F407 and how to fix them, with a focus on the AHB bus matrix.
  • Racing the Beam — making pixels as they’re needed with rasterizers.

Cobble

Cobble is a simple build system for modular software. It acts as a frontend for Ninja and makes certain types of relationships easier to express. I built it to scratch a specific itch: programs that need to compile the same code in several different environments without any risk of confusing the outputs. This is particularly common in complex distributed firmware systems, of the sort I supported on Loon.


Embedded Template Library

The ETL is my reusable collection of C++ code, intended primarily for embedded systems.

If you can, you should probably just use the normal C++ standard library — but often, I can’t. You see, the C++ standard library works best if you’ve got:

  • Exceptions, and
  • Dynamic memory allocation (the heap).

These are both nice features (I’m a rare pro-exceptions person) but they don’t work well in a hard real-time environment.

Since this gave me an opportunity to redesign the C++ standard library, I’ve also incorporated a lot of my ideas on robust software engineering and API design, which were tested during my time leading the firmware effort for Loon. (By convergent evolution, parts of ETL resemble Rust’s standard library.)

The ETL is intended to be used as a git submodule and includes a Cobble BUILD file — though nothing prevents you from doing something else with it, like writing a Makefile.

ETL itself is on GitHub, along with a separate repo containing the unit tests.


m4vgalib

High-Quality Microcontroller Graphics

3D wireframe model with text scroller: demo/rook

3D wireframe model with text scroller: demo/rook

The STM32F407 is a microcontroller that has neither any video hardware, nor enough RAM to store a framebuffer at any reasonable resolution/depth.

So of course I’m using it to produce 800x600 60fps color graphics. It’s like a puzzle game, only much geekier.

m4vgalib is the core code behind my efforts, and is open-source in case anyone else thinks this sounds like a good time.

Read More...

swddude

Many of the newer ARM Cortex-M microcontrollers don’t support the JTAG programming interface. Instead, they support SWD, a proprietary (but well-documented) standard that uses fewer pins. Anton Staaf and I wrote swddude to program these microcontrollers, with an initial focus on the NXP Cortex-M0 line.

For more information, see the github mirror.


Kallisti Makerbot Software

To keep track of exactly what software, patches, etc. I run on my MakerBot Cupcake, I created a repository on GitHub.


3G 5D Mini

3G 5D Mini mounted on a MakerBot Cupcake

3G 5D Mini mounted on a MakerBot Cupcake

With this add-on board, your original MakerBot Cupcake can drive an additional stepper motor.

What on earth will you do with an additional stepper motor? Drive a stepper extruder, of course!

Read More...

Drawers

Four-drawer incarnation

Four-drawer incarnation

I wanted a small toolchest to organize hand tools and soldering supplies in my office. Because I don’t like having to design anything more than once, I wrote a parametric chest-of-drawers generator in OpenSCAD. It’s adaptable to any material, any size, and any number of drawers. Go crazy!

Read More...

XBOX 360 Chatpad Reverse Engineering

Picture of the chatpad hooked up to an Arduino

Picture of the chatpad hooked up to an Arduino

The XBOX 360 Chatpad is a small keyboard (10x4 cm) that attaches to the XBOX 360’s video game controller. I’m not entirely sure what it’s for, since I don’t have an XBOX 360 — I bought a chatpad to reverse engineer it, like the Kinect before it.

Read More...

LILOS

LILOS is a little prototype operating system I wrote over Spring Break 2011. It provides message-passing multitasking for the Atmel AVR. Written in C++, LILOS is the first multitasking operating system I wrote, when I was learning how such things worked. My later projects steal ideas from it whole-cloth.

The source is on GitHub.


Content Gzip Plugin for Jekyll

To serve up static pages generated by Jekyll, I use my favorite static-file webserver: publicfile. To save my bandwidth and your time, I wanted to support gzip compression. The gzip compression patch for publicfile does it in the simplest possible way: it checks for a .gz version of every file and sends you that if it can (and if your browser supports it). Producing all these files by hand got tedious, so I wrote this generator plugin for Jekyll.

Read More...

Case for NuForce Icon uDAC 2

Assembled Case

Assembled Case

This is a replacement case and faceplate for the NuForce Icon uDAC 2, commissioned by a friend. He discovered that buying the DAC without a case saves $60 — basically half the retail price.

Read More...

Chess Set I

One of each piece

One of each piece

A traditional, Staunton-style chess set. This was one of my first published models, when I was still learning — can you believe all vertices were placed by hand? — but it has proven to be a very popular print!

Read More...

Omniwheel (36mm)

Printed

Printed

Several of my robots use omniwheels. They’re wonderfully versatile, but they’re a niche item — meaning, they’re very expensive. Why not print your own?

Read More...

More Cliffle

By Topic