Well, things are going pretty good, I think. I have implemented code to use all the peripherals that I need for the RN-9090 like GPIO, Timers, UART, DMA, SPI, I2C, ADC, and external interrupts. It has been both fun and challenging learning how to get these features working properly. It took a bit longer than I thought because a few times I got consumed by trying to make the perfect “universal” library when I just need something for my purposes for right here and right now. I suppose that in the end it isn’t a bad thing but its led to loss of focus and delays.
I have also been revamping the display screen and menu system to better reflect the new philosophy about how the RN-9090 can be used and what is important. My code to run the menu system of the display was an absolute disaster of nested if statements and global variables for everything. I rebuilt the entire program and managed to shrink the code size from 32K to 20K! Now I have room for new features if I want to add them! This new version has a much deeper means of control at your fingertips and an increased complexity in what can be created so a new “main” screen was necessary. Below is what I currently have as the new main screen.
But, I don’t think I want a display screen that says “BUTT” on it… I will have to change that.
With much more control at your fingertips, I had to think about what was important and highlight those things. Now with the multi-page system beyond the binary 2 pages and more detailed control over the output of the RN-9090, the two most important things (to me) are “what page am I looking at?” and “what row am I currently editing?”. Cycling around between rows to manipulate can be done via the navigation buttons or a dedicated encoder. Note, Velo, Swing, and Sustain all have dedicated encoders and when you’re playing the RN-9090, especially connected to synths, you’re going to want to be able to change those values on the fly. For that reason, I think getting those values in real time is important. Previously, I had things like “What MIDI setting am I using?”, “What song am I playing?”, and “What page did I just save/load?” which are pretty much irrelevant to real time operations.
The same with the page system. “What page am I currently looking at?”, “What page is currently being played?” and “Which pages are active are also of primary importance and those are indicated by the “1, 2, 3, 4” boxes on the left. What is not important anymore is the tempo, as I have not found a need to change the tempo that much once its set. There is more I will get into when it’s all finished but this should tide you over for now.
So, I’m at the point now where I am re-evaluating the memory requirements to store things like songs/pages/settings. I haven’t done the math yet but I think it is going to be more than I can realistically fit on to some dedicated EEPROMs. I am going to look at whether it would be better to go the SD card route or EEPROM route. After that, it will be time to do a trial run of making my own PCB for the MCU. My current plan is as follows:
- Determine memory requirements and solution
- Make trial “dev board” to test MCU functionality and USB (make sure I can design a standalone MCU and have it run)
- Make debug PCB for all components
- Build new RN-9090
- Complete new RN-9090 and sell first 3-4 units.