SSSR Labs. firmware for ACXSynth MIDI2CV

This is the official page for the FIRMWARE of MIDI2CV module. Only here you always can find latest release of the firmware, report bug, or request some new features or custom firmware for this module (and compatibles).

Short project history

When I purchased MIDI2CV eurorack DIY kit in the summer 2013, I was not completely pleased with behaviour of that module. Original firmware has number of flaws: Notes may hang in Monophonic mode, pedal is not supported and polyphonic mode works in manner when voices assigned to taken notes are always stacked in the same order: first note goes to 1st voice, second to 2nd etc. If you play with some patch utilizing release stage of the ADSR, you may experience problems with tails being cut out. Having some background in microcontroller programming, I decided to upgrade firmware from some outdated source in C-language, which was published at ACXSynth website. It became almost completely different product with every bug fixed and having large amount of new features. 10.07.2014 my firmware reached the official status and new run of this great module already have it onboard.


5.x firmware is more stable than original firmware and offers lot of adjustable parameters and new features. Also, voices in Polyphonic mode are assigned in different way.


  • Original “hanging notes” problem is solved.
  • Voices in Polyphonic mode are assigned serially (exactly as implemented on DSI Prophet 2008).
  • CV2 Out can be used as output for assignable MIDI Control Change or Aftertouch.
  • Hold Pedal is now supported in Monophonic and Polyphonic modes.
  • Pitch Bend is supported in all modes.
  • All Sound Off and All Notes Off messages are processed.
  • Clock output is working at 1–24ppqn (programmable).
  • Legato play and retrigger are supported. (up to 8 notes are stored).
  • 2 Velocity curves (linear/Exponential).
  • up to 8-voice system with polyphonic velocity can be built with more units connected via MIDI-splitter.
  • Number of available voices can be limited to any number of voices (2–4/2–8). Available voices are mapped to corresponding number of CV/Gate outputs starting from CV1 / GATE1.
  • All parameters can be stored into EEPROM.

Manual for module with version 5.7.3 of the firmware

Detailed technical reference of the firmware can be found inside the rchive with respective firmware. That file is called MIDI Implementation.txt.

If you have a questions about the source code, please ask me in the comments, not the hexinverter. Also, please be maximally constructive in your questions.

Muffwiggler thread

Download firmware


Support further development

If you liked my firmware, the best way to thank me is to donate some funds to support its further development. Probably, together we will create most flexible converter ever.

Archived versions

Click on blue link with name of the file on corresponding page. The download contains .hex-file packed in RAR archive

Version history

5.7.3 (Official release)
* Poly1 and Poly4 modes are swapped, so Poly1 is 1-channel polyphonic mode, and Poly4 is 4-channel multichannel mode.
* Velocity outputs are added in Split and Duophonic modes. See MIDI Implementation or manual for details.
* The project became open source!

* 8-voice polyphony and polyphonic velocity are now supported. You must have two or more units connected via MIDI-splitter in order to receive identical data. See MIDI Implementation for details.
* Polyphonic and Monophonic modes now have individual sets of function keys. Store function key is now accessible in any of these modes. See MIDI Implementation for details.

Bug fixed: inoperable pedal when triggerring via gate is enabled.

Triggering via gate interrupt support.
Triggers and Clock now use different timers.
All non-automatic parameters can be stored to EEPROM
Trigger and clock durations are now 2ms
Function keys lock key added (A#1)

5.6 (unreleased)
Pitch bend now works in all modes.
Aftertouch assignable to CV2 Out.
2-voice Split mode at Channel +4 in Multitimbral mode.
2-voice Intellectual duophonic mode at channel +5 in Multitimbral mode.
Fixed bug with Voice two acting as Trigger in polyphonic mode
MIDI Clock rate is now adjustable
Version display at start-up


* Polyphony limit support added.

* Implemented legato play
* Legato Retrigger can be enabled/disabled in Mono mode by D1 key.
* Velocity curve can be toggled with E1 key.
* Trigger duration is increased from 80us to 1.280 ms to make LED flash brighter.

5.3 (first release)
* Serial polyphonic voice assign
* Assignable MIDI CC on CV2 out
* Support for Hold Pedal in Mono and Poly4 modes, support for All Notes Off and All Sound Off messages.
* Correct bypass for unrecognized messages such as SysEx, Channel Aftertouch e t.c.
* True 24ppqn sync
* 80us duration for Trigger and Sync pulses
* Legato play is not implemented

How to update

Update via MIDI is technically not possible with current hardware. Please do not ask for it.
You need:

  • new PIC16F88 MCU chip in DIP18 package. (you can use original chip, but you can’t backup its contents because it is protected)
  • IC Extractor or little screwdriver
  • Programmer such as SI Prog, PicKit3 etc and necessary adapter hardware (board with ZIF/DIP-sockets, breadboard and Dupont wires etc)
  • Software that supports your programmer and able to read Intel hex files (WIth PicKit3 you can use Stand-alone Programmer.

28 thoughts on “SSSR Labs. firmware for ACXSynth MIDI2CV

      1. Robert Hedin

        Hi, I actually have a similar request, I would like to write custom code for a crOwBX that I will be assembling shortly. I would like four modes, 4 note poly, 2 note poly/dual voice, 4 voice unison, and 1 voice mono. I would use two on-off switches for the four modes, one connected to pin6 and one connected to pin7. I think that might work? Thanks, Robert

        1. rpocc Post author

          Hi, Robert.
          The source code will be published on this month. Just wait for a while.

          Of course configuraton you’ve described is possible, but there’s lot of conditional branches where switch is assumed to be a single, 3-position..

  1. Pingback: ACXSynth MIDI2CV Firmware v5.7 | Модульные синтезаторы

  2. Pingback: ACXSynth MIDI2CV Firmware v5.7.2 | Модульные синтезаторы

    1. rpocc Post author

      Hi! Yes, it can work on the original design with only difference that Gate 1-2 and Trigger 1-2 outputs will be assigned as on the Hexinverter version

  3. Alex Bel

    Здравствуйте, Дмитрий.
    Пробую скомпилировать версию 5.7.3 компилятором HI-TECH PICC 9.60 – не собирается, ошибки. Версия 2.31 собирается без проблем. Какую версию компиляторы Вы использовали для сборки 5.7.3?

    1. rpocc Post author

      Компилятор тоже 9.60 (ну мы же все понимаем…), только полная версия. Я не помню, помещается ли последняя версия во флэше при компиляции в демо-режиме. Там половина оптимизаций отрубается. Что компилятор вообще пишет?

      1. Alex Bel

        А вот сборка версии 2.31:

        acx_midi2cv2.31.p1 is up-to-dateExecuting: “C:\Program Files\HI-TECH Software\PICC\PRO\9.60\bin\picc.exe” -oacxmidi2cv231.cof –runtime=default –summary=default –output=default acx_midi2cv2.31.p1 –chip=16F88 -P –opt=default -g –asmlist “–errformat=Error [%n] %f; %l.%c %s” “–msgformat=Advisory[%n] %s” “–warnformat=Warning [%n] %f; %l.%c %s” HI-TECH C PRO for the PIC10/12/16 MCU family V9.60PL3Copyright (C) 1984-2008 HI-TECH SOFTWARElicensed for evaluation purposes onlythis licence will expire on Fri, 14 Dec 2029Memory Summary: Program space used 36Bh ( 875) of 1000h words ( 21.4%) Data space used 27h ( 39) of 170h bytes ( 10.6%) EEPROM space used 0h ( 0) of 100h bytes ( 0.0%) Configuration bits used 1h ( 1) of 2h words ( 50.0%) ID Location space used 0h ( 0) of 4h bytes ( 0.0%)

        1. rpocc Post author

          Ну понятно. Ему что-то строчка с конфигурацией чипа не понравилась. Возможно таки релиз компилятора не тот, т.к. я его на нескольких машинах ставил и никаких дополнений в каталоге с компилятором никогда не делал. В архиве с исходником должен быть батник, можно строку оттуда посмотреть.

        2. rpocc Post author

          Разобрался Короче, этому компилятору почему-то не нравится макро OPTION REG и не нравятся пустые безымянные ные биты в юнионах. Мой себя так не ведёт, не знаю, что тут добавить. Может режим языка Си какой-то другой или таки релиз кривой.
          В принципе, можно как-нибудь произвольно проименовать пустые биты и посмотреть, как называется в этом релизе компилятора макроопределение опшн рега, либо его просто прямо в коде объявить с адресом соответствующим опшн регу в чипе 16f88. На вскидку не помню, надо даташит смотреть.

          1. Alex Bel

            Собрал версией компилятора 9.83, размер HEX-файла совпадает с тем, который в архиве.
            Правильно ли я понял, что схема не менялась и прошивку 5.7.3 можно использовать со схемой с сайта автора ?

            1. rpocc Post author

              Хм. Может у меня и правда была более новая версия.
              Схема не менялась, хотя лучше ориентироваться на схему Hexinverter

            1. rpocc Post author

              Да, но скорей всего там надо ошибки кое-где убирать, т.к. я делал его по разовой просьбе и потом не всегда расставлял условия в местах, которые точно несовместимы с лайтом. Я бы лайт не рекомендовал, там большая часть функций урезана, а весь прикол прошивки в куче режимов и настраиваемой полифонии.

              1. Alex Bel

                Тогда я просто повыкидываю то, что относится только к Лайту.
                А где можно посмотреть схему Hexinverter?

  4. Jordan Aceto

    Hello rpocc,

    I have been experimenting with using your v5.7.3 MIDI2CV firmware to control a TTSH synthesizer (a clone of the ARP 2600 in case you are not familiar with it) that my son and I built together, in monophonic and 3 voice paraphonic mode, it works great! The plan is to build the MIDI2CV converter into the case with the TTSH.

    I have thought of two features which would make it even more useful for our specific application, I’ll try to describe them—>

    —>Since the TTSH has three VCOs, three voice paraphony is the maximum we will need. I’d like for CV4 to always output the MOD wheel signal, no matter which mode you are in.

    —>Additionally, I’d like for CV1, CV2 and CV3 to all output the same mono note signal in mono mode, this would simplify switch wiring. This is really just a convenience, and not essential.

    If these ideas are difficult /inconvenient, or if you are just sick of this project feel free to ignore this, but if these ideas are easy to implement it would make this controller perfect for the TTSH. It is already extremely useful, thanks for all your work!

    regards, jordan

    1. rpocc Post author

      Hi, Jordan. Thank you for your interest.
      The best voice assign way I know is implemented in Elektron Analog Four, where you can assign random channel with random polyphony and voice steal mode on random voices: and this for random number of channels within voice capability of the unit and common sense.
      Unfortunately current version of ACXSynth converter project isn’t very expandable in this way and as long as I have no time for this firmware without commercial interest, it likely will be not updated (until I develop my own MIDI2CV converter with different MCU and completely different code)

      However I did something very similar to what you need, but for Polyvox Reissue. Polyvox has 2-voice paraphony with double-buss keyboard, so I have built a firmware that assigns notes from a midi channel in the way exactly identical to the original keyboard behaviour, so I know how to implement usable paraphony. As far as I understand, you need 3-voice paraphony with assignable controller (or just a modwheel) to the CV out 4 and usable mono/poly switch for it.

      For $100 I can develop customized firmware for your project that will do exactly what you want. It’s not very simple work, this is why I would like this work to be a personal commercial order.
      If you’re interested, please write me a line to and we will discus the technical details (for example, I can put “ANDed” gates to Gate4 output and use others in polyphonic mode, or do something different, what will fit better for 2600. Great project btw, I hope I will be able to buy a kit sometimes later)

      Best regards,

  5. Lenko Bregovic

    Hello Rpocc

    I have build the Midi2cv ACX version and it works with your firmware.
    ACX firmware uses the Trig / Gate (your Sync) output to provide a
    trigger type signal each time a note is played.
    I use it only for polyphonic.
    I don’t have a common trigger for the filter
    I would like to use that output to control filter with it.
    Is it possible to change it somehow?

    Thank You

  6. Lenko Bregovic


    I have a little problem wit the midi2cv
    I have build the ACX version, uploaded the firmware v.5.7.2, v.5.7.1,
    v.5.7, v.5.5, v.5.4 and v.5.3

    I have the same issue with all of them. I did’n try original firmware from the ACX site

    I want to use it only for polyphonic

    In polyphonic mode:
    When I press a note and press another one, it repeats the note before and second time I press it plays that note.

    Let’s say the first note is C and the second one is G, when I play G for the first time It plays C again. And then when I play G again it plays G.

    The monophonic mode works normally.

    Thank You

    I have posted the same post to muffwiggler thread

Leave a Reply