I like this conversation we're having, it's interesting.
175kB!!! is that the program code or the hex file?I know for my midi switcher i had a hex code of 4kB and i used 129 bytes of eeprom to store the patches.128 patches and one byte to remember the last patch.
That's 175kB of C code. The hex file itself is 77kB. The bulk of the code is actually the part dealing with live edition. Reading the memory for patches and applying them is not complex and takes little code space, but dealing with menus and submenus and what to change in the patch at what time is what takes more code to implement.
For storing the patches I used one external 24LC512 chip which is 64kB. In them I store some global data too.
The global data is 70 bytes long. It contains mostly the names of my MIDI devices, so it actually depends on the maximum number of devices supported (I went for 4). It also contains the data saying which control change to send to which device for tap tempo, and the calibration data for the expression pedals.
The patches themselves are 112 bytes long (including 16 bytes for the patch name), which might seem big but keep in mind this includes space for my 'modifier' switches data. Finally the banks themselves take 16 bytes each, because I store a name for each of them.
So all in all, I've made the calculus and for 100 banks of 5 patches this takes 58331 bytes in memory. With the EPROM chip I have, I could support up to 12 devices, though. Another possibility would be to support up to 21 devices but with only 64 banks, but I don't see the point of supporting that many devices.
I used 12 inputs directly for the buttons and 8 outs through a ULN2008 to drive the relais.And then Rx and Tx for midi out and midi in.Also attached was the LCD in 4 bit mode.I also used the 7805 and didn't even had to cool it extra.
I use ULN chips too for the delays. I think what draws the most current is actually the 7-segment display.
BTW my power section is designed to support all kinds of power input, be they AC or DC, and if DC, any polarity, and basically any voltage higher than 5V (though more means more heat from the voltage regulator of course). That's kind of a relief, it means I can plug whatever power supply I have at hand.
And of course I wired a phantom power feature, using the 2 unused pins in a MIDI cable (ala VoodooLabs). A simple homemade adapter on the MP-1 side makes it easy to convert from 7 to 5 pin and transfer the phantom power to the correct pins.
I don't think you can compare a 18F4620 with a Z80,the pic is faster,has flash,ram and eeprom memory,uart i²c spi etc...
A Z80 was very basic even a 8051 had more altough it wasn't faster then Z80 at the time.
True, I was thinking more of the instruction set which is similar, because it's 8 bits. So that means mostly that you can add, subtract and multiply 8b registers and 16b registers, but if you need some kind of division operation, you're on your own.
C is a language that you need to maintain,if you don't work with it on daily base it hard to get familiar with it.That's why i like pascal and basic i guess.I'm more of a hardware guy
Different perspectives, I maintain my C/C++ skills 5 days a week
Now the ready for pic board has a power supply on board,both 3.3 and 5V and you just need to hook up a wall adaptor (ac or dc).
Anyway gonna try the matrix thing for the switches (less ic's altough the 165 is a good idea).Look at this pic,it will give you an idea what i mean http://www.extremenxt.com/matrix.html
As for the 7 seg led display I'll think i will go for a serial display like this one http://www.mikroe.com/add-on-boards/display/serial-7seg-display/ The advantage is less connections and you don't need to refresh it,it's all done by the on board chip.
These would sure make life easier. I only went with what I did because of my limited knowledge in electronics and because I used standard modules from the MIDIBOX project. I like the idea of the matrix (but can it handle the case where the user pushes 2 switches at the same time for instance?) and the serial 7s display seems nice, that's not so far from my implementation which basically uses 2 74HC165, each driving one of the digits. Of course the serial 7s has the advantage of being able to handle more digits.
Don't know if we need an LCD or not,but it's easy to implement.
If you want to setup the board easily in a live situation, I think it's better to have some kind of sophisticated output. You could make do with a higher number of digits using a 7-segment dsplay (or more segments actually) as my old Zoom GFX-8 does, but an LCD nowadays doesn't cost much and it's so much better for interfacing with the user.