CVPal Firmware Tweak- Where to Start?

I want to add a new output mode to the CVPal.

I haven’t tried firmware hacking before (though I have some coding experience), what hardware/software do I need, to get started?

Anyone know of any newbie-friendly documentation that would help me get going?


1) Check Step 8 here for how to reflash a new firmware:

2) Read through the source code here:

For hardware you will of course need the cvpal itself and an AVR programmer. You can use an AVRISP MK2 (such as or can probably use a compatible clone such as

What new output mode were you thinking of?

@DMR hi, thanks for the tips!
The new mode I want to add is for controlling the x0x Heart, so there will be pitch CV, gate, and two triggers for accent and slide. I envisage accent being triggered by high velocity MIDI notes, and slide triggers being sent on overlapping notes.

Should be doable, I think. Have to think which of the existing modes to replace, though.


2) in DMR’s excellent list above is the crucial step. You need to work out how the CVpal works. That may be harder than you expect, even if you are familiar with C+, because C+ written for embedded targets with constrained memory and storage tends to be very compact and terse, rather than being written for readability and easy comprehension as you might write code for a desktop computer where you have huge amounts of resources available, relatively speaking. Don’t expect to instantly grasp what is going on in the code unless you are a professional C++ software engineer who can reverse engineer whole apps in their head in a single reading of the source (I’ve worked with and been humbled by such people). But study it enough and it will start to make sense. That’s what I found with the Braids code, at least.

I don’t think it sounds that bad. But it’s easier to simulate your changes somehow before uploading and testing on hardware.

I’ve had a brief look at parts of the source. It didn’t look too bad, though not very thoroughly commented, as I recall.

I don’t have any experience with C++ at all, unfortunately. I have used several C-based scripting languages (JavaScript, PHP most recently, also some C, a tiny bit of Objective C, a long time ago), so I have some idea of the basic syntax. I’m not big on OOP, though, so this may be a project doomed to disillusionment and failure…


The CVpal code is necessary rather brief, and thus there are only a handful of classes each with a handful of methods. I don’t think the OOP aspects should be too intimidating.