vlampreia / midi2cv Goto Github PK
View Code? Open in Web Editor NEWMultichannel configurable MIDI to CV based on the ATMega328
License: GNU General Public License v3.0
Multichannel configurable MIDI to CV based on the ATMega328
License: GNU General Public License v3.0
Another MIDI to CV project! ================================================================================ This project arose out of the desire to control antiquated drum machines which respond to analogue pulses with MIDI enabled devices. MIDI to CV solutions exist in abundance, nonetheless I saw this as an opportunity to involve myself in more embedded software development and as an introduction to hardware development. This project does not consider modular synthesiser CV in any way whatsoever. The end devices this converter is targeted to drive respond to simple voltage-level triggers, and so it lacks output voltage scaling and MIDI processing for anything other than channel, note, and velocity parameters at this time. SYSTEM OVERVIEW AND REQUIREMENTS -------------------------------------------------------------------------------- At a top level, the system processes MIDI and outputs up to 8 analogue pulses simultaneously. It must be capable of mapping channel, note, and velocity data from MIDI packets to their respective analogue values and CV DACs as programmed by the user, in real time and with imperceptible jitter. MIDI channel and note to CV channel mappings are user configurable using the front panel, which provides a 3 character display and a set of momentary switches. User settings are stored in the MCU flash memory and persist after a loss of power. INTERFACE -------------------------------------------------------------------------------- The system is abstracted into programmable CV channels. Each CV channel has a MIDI channel and note assigned to it. Channels may also be configured to respond to all MIDI channels and or all note values. The user interface consists of a display showing the current mode and value, and three buttons, one to cycle mode (CV channel, MIDI channel, and MIDI note, in that order), and two to increment and decrement the value. The omni value can be selected by holding down both value buttons. FIRMWARE -------------------------------------------------------------------------------- The MCU firmware is written in C and is listed under ./firmware. This is currently a work in progress. A makefile is present to facilitate building and flashing the firmware. It targets the ATMega328P-PU using a USBASP programmer. HARDWARE -------------------------------------------------------------------------------- The hardware platform is designed using KiCAD and is listed under ./hardware. This is currently a work in progress. A full BOM will be rendered once the hardware has been finalised. The platform consists of two boards interconnected via standard pin headers: - The main board hosting the MCU, power and MIDI input stages, as well as the CV output stage. - The HUI board hosting the display and navigation buttons. The MCU is an ATMega328, selected for it's simplicity and active community base, it is a fairly capable package boasting a 20MHz clock, 2KB RAM, USART and a SPI. The 328 lacks any digital to analogue conversion, for this the 8bit MCP4802 was selected. Each IC packages 2 DACs, addressable via SPI by the MCU. The MIDI input stage follows the standards set out by the MIDI spec. A H11L1 was selected for the optoisolator, which is identical to the PC900 suggested in the spec. Control voltage outputs are buffered internally by the DACs. Output voltage can vary from 0v to about 4v on max gain. Supply input is regulated and can scale from 8v to 35v. KNOWN LIMITATIONS AND FUTURE IMPROVEMENTS -------------------------------------------------------------------------------- - The output voltage scale is an unknown and can change from target device to device. The hardware currently lacks support for programmable output voltage scaling.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.