Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.



This repository contains the source code, Ableton remote script and hardware design for the Pulsar Heavy Industries Cenx4 controller.

Controller picture

The main features are (some of which are already fully implemented):

  • Easy to use: Automatic mapping of selected device's parameters (as seen in the image below). Getting this to work requires almost no setup and no manual mapping in Ableton (just selecting the right remote script).
  • Modular: The thing you see is actually two modules connected togeter using CAN bus.
  • Updateable: Support firmware update over MIDI and over CAN. The master unit takes care of updating the slaves automatically.
  • Open source: Can be used as a basis for many other controllers.

I am still in the process in documenting everything, but please refer to the following posts for more information:

DIY Music Machines - Introduction

DIY Music Machines - Ableton Live Controller Update

Basic steps in getting this to run


  • You will need the following:
  • The pinout of the Debug cable is as following (see page 2 here for where pin 1 is on the flat cable):
    • VCC: Pin 1
    • GND: Pin 2
    • NRST: Pin 6
    • UART_RX: Pin 7 (currently unused)
    • UART_TX: Pin 8 (currently unused)
    • SWCLK: Pin 9
    • SWDIO: Pin 10
  • If using an STM32F4DISCOVERY board as JTAG, remove the jumpers on CN3 (labeled "ST-LINK"), and connect the following to CN2 (labeled "SWD" - pin 1 marked with a dot):
    • 1: VCC (Pin 1 on TagConnect flat cable)
    • 2: SWCLK (Pin 9 on TagConnect flat cable)
    • 3: GND (Pin 2 on TagConnect flat cable))
    • 4: SWDIO (Pin 10 on TagConnect flat cable)
    • 5: NRST (Pin 6 on TagConnect flat cable)
    • 6: Unused
  • There is a tiny adapter board inside misc/st-tag-adapter that makes it easier. You can order it from OSH Park.
  • You will need at least one Cenx4 in Master configuration - this means CAN terminator jumpers installed (labeled CAN_TERM) and a USB connector soldered on.


  • Download and extract ChibiOS 16.1.7 into vendor/
  • Download and extract uGfx 2.7 info vendor/
  • Make you you have a working ARM toolchain in your path
  • Build the bootloader by running make inside cenx4/firmware/bl
  • Start openocd by running openocd -f stm32f4discovery-chibios.cfg inside the openocd directory
  • Use GDB to download the bootloader:
    % arm-none-eabi-gdb build/ch.elf
    GNU gdb (GNU Tools for ARM Embedded Processors)
    Copyright (C) 2015 Free Software Foundation, Inc.
    License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
    Reading symbols from build/ch.elf...done.
    (gdb) target remote
    Remote debugging using
    0x00000000 in ?? ()
    (gdb) monitor reset init
    Unable to match requested speed 1000 kHz, using 950 kHz
    Unable to match requested speed 1000 kHz, using 950 kHz
    adapter speed: 950 kHz
    target state: halted
    target halted due to debug-request, current mode: Thread
    xPSR: 0x01000000 pc: 0x080001a0 msp: 0x20000400
    Unable to match requested speed 8000 kHz, using 4000 kHz
    Unable to match requested speed 8000 kHz, using 4000 kHz
    adapter speed: 4000 kHz
    (gdb) load
    Loading section startup, size 0x1a0 lma 0x8000000
    Loading section .text, size 0x9d84 lma 0x80001a0
    Loading section .data, size 0x4bc lma 0x8009f28
    Start address 0x80001a0, load size 41952
    Transfer rate: 22 KB/sec, 8390 bytes/write.
    (gdb) continue
  • The bootloader should now be running.
  • TODO: Instructions on how to use it to load the firmware
  • Build the application by running make inside cenx4/firmware/app
  • Once again use gdb, similar to the bootloader but use the ELF file build/bl-ch.elf (unlike build/ch.elf, bl-ch.elf is in the format the bootloader expects, so your application would run even when not using the debugger)
  • Copy cenx4/ableton/Cenx4 into Ableton's Remote Scripts directory. On Mac, this would be /Applications/Ableton Live 9 Suite.app/Contents/App-Resources/MIDI Remote Scripts.
  • Start Ableton, and configure the MIDI devide. Make sure to use the Cenx4 remote script.