The 2018 Hackaday Prize contest will be over next week and that also marks the deadline I've set for this project.
I was blown away to see FATCAT make it to the semi-finals, as one of 20 entries from the Musical Instrument Challenge. I never would've expected that when signing up. Because of it, I feel super encouraged to get started on some other projects I've been thinking about doing.
But since I've actually gotten pretty close to the goals I'd set up for this project I feel it'd be a shame not to tie up the final loose ends. Mainly I want to make some changes to how the chord editor works. For that reason I'll extend the project deadline to the end of November. At that point I'll release firmware version 1.0, I'll put the final touches to the project documentation and build instructions, and after that I'll walk away.
At least for now...
In this section I'll speculate a bit on how the FATCAT project might evolve if I decide to pick it up again at some point in the future.
In the planning stages of this project I briefly considered a slightly more elaborate design for FATCAT. The basic hardware design concept would've been the same, but Instead of building the system around the ATtiny84, this alternate design would've used the notorious ATmega328p. The increased number of GPIO pins would allow for having two 7-segment displays, as well as more buttons. The MCU could even accommodate a potentiometer on pin 28 (ADC5).
Here's a sketch of what that might look like:
In the sketch I've put the two 7-segment displays behind the MCU, since I wanted to show all the pins clearly. Also some PCB traces needs to be cut and some pins left floating, which isn't shown in the diagram; Check out the current build instructions to get an idea on how that would work.
There were a few reasons why I didn't end up going with this design:
- All those components probably wouldn't fit inside an Altoids tin. And it definitely wouldn't fit a large speaker.
- The larger amount of components would make the device messier to build by hand.
- Because of the bigger MCU, the buttons would have to be placed close to the edges of the Altoids tin, which might make the device uncomfortable to operate.
- The bottom LED segment of the right display would be unreadable any time there's audio output, since it shares its GPIO pin with one of the speaker terminals (not really a big deal).
- The hardware design was supposed to be frugal. And I wanted to restrict myself to designing for the most limited system resources possible (within reason).
But now that I've actually implemented that frugal ATtiny design, the ATmega version appears to be the next logical step forward nonetheless.
The ATmega328p has four times the RAM, four times the FLASH, twice the EEPROM of the ATtiny84 and a bunch more GPIO pins. That would provide me a lot more freedom to implement all those features I've had to leave on the drawing board in the current project:
- The added FLASH would leave ample room for a respectable wavetable sound bank, as well as drum samples. It would also fit code for syncing of two FATCATs connected through the patchbay (discussed in this log).
- The added EEPROM would fit more song data.
- The added RAM would allow for more complex patch effects. And the effect states wouldn't need to be binary: Using the potientiometer, the degree of each effect could be tweaked.
- At least 10 GPIO pins can be dedicated to the patchbay (current nr is 6). This allows for 45 unique patches (as opposed to current nr of 15).
And what's equally important: The physical UI would be less restricted. As demonstrated in the recent video tutorial I made, a lot of the song editing process consists of alternating between the "Row select" and "Note select" tasks. With two displays and more buttons, those two tasks could be merged into one: The current row would be selected on the left display (using the left hand buttons) and it's note value would be selected on the right display (with the right hand buttons).
On the Mega-FATCAT Fritzing sketch, the components actually sort of fits on the original PCB. But I'm not so sure about the 3d-aspect of the build, or the button ergonomics. But then again, maybe the Altoids form factor just isn't the right fit for Mega-FATCAT.
I still feel the current ATtiny84 design was the right choice for this project. I believe the hardware limitations of that MCU has forced me write more effective code than I would've otherwise. And all those possibilities for "Mega" features would definitely have resulted in increased development time. Ultimately I'd probably ended up leaving that project in an unfinished state.
Tiny FATCAT can't do everything, and it's a bit of a one trick pony. But it does everything I wanted it to do—it does fit neatly inside an Altoids tin—and I believe it makes for a quite fun and capable music toy. And the design will reach a finalized state.
If I ever start working on Mega-FATCAT, it will probably have to be at least a year from now. There's one or two other project I want to do before that.
But a hiatus will probably be for the best. If I start right away I'll probably repeat some of the "less than optimal" code design choices I've made with this project. Hopefully, a year from now I will have become a better C programmer and will be able to tackle those same problems more competently.
Here's the sketch again with the displays in their proper place on top of the MCU: