After some major drama in the workshop (leakages, iron dust cloud, broken floor, rainwater coming in, etc) I finally have some time to share a few progress pictures.
First and foremost: IT WORKS! The Goldfish R4 UI board can be used as a stand alone USB-MIDI controller! I had to do some workarounds, but it all seems to work now and I’ve used it together with a few DAWs. The current version has two modes: “control” mode and “xy” mode. In control mode you can use the encoders to control 6 MIDI-CC values at the same time, and press the encoders to select midichannels or different sets of CCs. The Goldfish keeps 36 controllers in memory, so you can see their value on the LED rings as soon as you switch between pages of CCs.
In xy mode you can control two MIDI-CC values at the same time by using the touchscreen. The left and rightmost encoders control which midi-CC is being sent by X or Y. This mode will get some “auto-LFO” options to spice things up.
Here it is, showing the LED rings lighting up for the first time:
To save some board space, I’ve added mounting holes to re-use the Connector board from the Goldfish R3. This board provides MIDI plugs and stereo jacks. (the red PCB):
Development is easy: a standard Arduino-serial module plugs in to the board at the back:
Historic moment: First Fish! The hello-world of Goldfish development!
Lacking the time to lasercut a nice enclosure (see “major trouble” earlier 🙁 ) I just took 1 of the leftover PCBs and sandwiched the thing with some hex-standoffs to protect the insides:
Up next – an extra Arpeggiator mode, one more revision of the PCB and some fluo-yellow lasercutting work for the casing!
To be continued!
– The PCBs have arrived!
– The LED badges have survived their first roadtest.
– The first standalone Goldfish UI board has been partly soldered and seems to boot up fine! It is now recognized by the Arduino IDE as an Arduino-Mega 1280.
Pics, vids and other ramblings will follow soon!
The Goldfish v4 user-interface board has been ordered!
The new big protoboards too!
A batch of tiny protoboards too!
And a set of LED badges for the summer festivals where we shall be jumping around!
Goldfish v4 UI board:
Festival LED badge:
The UI board for the Goldfish v4 is almost ready for production (post will follow soon) – so the search for fancy factories has begun!
I was quite charmed by the colours of this fish:
(found here: http://www.andreaharner.com/archives/2007/11/sos_goldfish_na.html)
Which led me to search for circuitboards with white soldermasks and red silkscreening. (or maybe a cheaper inverted option – red soldermask almost 100% covered by white silkscreen)
I found some (not so spectacular) samples:
and so far I found http://project-pcb.com/ as a factory that seems to support this special option in small quantities.
While searching for some easy-to-add USB options for the new Goldfish development, I revisisted the V-USB package. This package allows you to add USB to any small microcontroller that can add an interrupt to a pinchange. Link: http://vusb.wikidot.com/
While digging through earlier projects using this library, I found this amazing piece of “lets just fix this”ism:
This particular German got so upset about the lack of umlauts across the border that he made his own personal umlaut-device. A great reminder that while technology would be nowhere without imagination, it would not even exist without frustration.
The FPGA-based Goldfish is still in constant flux. I decided it needed more encoders on the frontpanel, AND some visual feedback for the value of each of the encoders. Each encoder now has 16 LEDs around it to show the current value/meaning.
Apparently there are some suppliers that build complete rings (like Top-Up ), but I want to build my own rings first.
To build these rings, I wrote a small .NET tool to generate the scripts for Eagle. (If somebody has use for this or something like it, let us know on Twitter – I think it is too small/dirty to warrant its own github project – and it has been done before by others too)
The final puzzle to solve before the board can be routed and fabricated is the various ways I want the chips to talk to each other.
The interface board can be used as a standalone Arduino Mega (with TFT, touch and encoders) – using serial + reset to use the Arduino bootloader
The Freescale Kinetis K20 chip can upload new firmwares using this bootloader
The K20 usb-dfu bootloader is already in place and can be extended to allow passthrough to the FPGA and the Atmega
Now.. the UI board needs to talk to either the fpga or the mk20 based on the final firmware.. and the K20 might need to send commands to the video interface on the FPGA.. or on the UI board.. and the FPGA could send stuff to the audio codec… but the current goldfish code runs fine on the K20… so an optional bridge between the audio codec and the K20 might be handy to have as well… CHOICES!! if I can cleanly upgrade the K20 to a K22, the extra FPU performance will definately warrant codec-connection to that chip…
I’ll be back in the basement trying to decide what will happen. Building an open experimentation platform is all about enabling possibilities. But at some point I shall have to make concessions even before the first experiment.
To be continued!
After playing with the FPGA boards for a while, I decided to completely overhaul the Goldfish board.
Spending a bit more time and money will make this box much more useful for the coming years of audiovisual experiments!
The current preliminary hardware feature set:
Spartan 6 LX9 FPGA
Freescale MK20 (or MK22) ARM Cortex M4 MCU
2 small 320×240 tft screens with AVR for touch handling (1 screen for the FPGA, 1 for the MK20)
4 to 6 encoders (no more buttons, the encoders also have a button if I need something pressed down 🙂 )
2 microsd slots (again one for each)
Wolfson audio codec with headphone, lineout and linein connected
VGA and HDMI output for the FPGA
USB Host port
USB Client port
This all shall fit nicely sandwiched between 2 15x10cm PCBs
Progress so far:
Let’s make some noise!
Most development starts in a very cushy environment with great debugging support. Goldfish once started in the Jeskola Buzz virtual studio platform so I could quickly test and optimize the algorithms without having to upload and install the binaries on a PocketPC.
The Goldfish and Platinumfish synthesizer plugins for Jeskola Buzz were never released on a big platform. To keep them from disappearing from the internet, here they are again!
Unpack these in the Gear/Generators folder of your Buzz installation.
HDMI video out should be well within reach of a Spartan 6 FPGA. I am still in the process of readin up and figuring out. Here are some of the more interesting reads I’ve found. Some are interesting in-depth, technical details, some are stories of people that did this before.
The Hackaday link opens up different other sources and has an interesting discussion. Hamsterworks is a more in-depth technincal commentary. Xilinx, the Spartan-manufacterer, has some helpful things to say – especially on how they intended the HDMI-protocol to be implemented on their chip:
1 HDMI port?
2 HDMI ports?
2 HDMI outputs and an HDMI input?
Maybe an extra FPGA of a different type/brand?
Two outputs would be more than enough to convert the Goldfishies into full music production battlestations.
The Goldfish platform is slowly growing in scope and complexity.
The first three Goldfish designs focussed on getting components to work at all – microcontroller, audio codec, TFT screen and MIDI. The designs I’m working on right now will provide the processing power to do something more interesting than polyphonic ringtones.
The current plan is to move from the Freescale Kinetis K20 to the ST STM32F407VGT6 microcontroller and have an expansion header to host a whole number of other experiments. Most notably – a Spartan 6-with-HDMI board and version two of the prototyping board. This header and the new expansion boards will allow the main Goldfish PCB to become a central JTAG/Debugging environment for the next few months of audio and robotics experiments.
The main Goldfish PCB so far
The MCU board has a few extra features compared to Goldfish version 3 -> there is an extra microSD slot and a big row of expansion pins. USB and reset/program button have been moved to the other side to accomodate the different microcontroller pinout and give a decent place for the pin header. The routing is just a quick autorouter test to see if it would still be possible at all to route it. This design is nowhere near final.
The Spartan 6 FPGA board so far
This is my first FPGA board. I started with the Papilio Pro schematic as a known-to-be-working configuration to start from. Power and IO have been moved around a bit, and the FTDIchip-JTAG setup might be replaced by just a JTAG header. The connected Goldfish microcontroller board should be capable of uploading data to the SPI flash later on anyway, replacing the need for the FTDIchip.
As soon as I can get my hands on a few PCB-mounted HDMI connectors I will add two or three to the board. I’ve been reading up on HDMI-FPGA combinations, and the Spartan-6 FPGA should easily be capable of hosting a few videostreams – even 1080i is within range! (there will be some separate posts on this subject)
Currently I’m putting further development of these boards on hold until I’ve been to the Shenzhen markets. I have no doubt I will find more interesting screens/buttons/leds/plugs to use there – so it makes little sense in finalizing the layouts before going to China.