Jump to content

FYI: MBSID CS panel ordered


TK.
 Share

Recommended Posts

Current solution: there is a table which allows you to assign

the controllers. For changes you have to upload the whole

application.

Is this done by assigning the functions to a certain button/pot or encoder by the use of a number that's pre-assigned (in MIOS application code?) to a button/pot/encoder?

You said there currently isn't any room in the PIC to implent the 'MIDI Learn' function. And that this function is available for the 16F8xx series designs. Wouldn't it therefor be possible to implent this myself in the application code if i start to make my application from scratch? Wouldn't a simple copy and paste, with some code changes for the new PIC routines, this code into my own code? This is because my own application would take less space as your SID application. Or isn't this possible, because it has to be a function of MIOS itself and not of the application and beside the MIOS (v3?) and the application there isn't enough room on the PIC for this?

Link to comment
Share on other sites

Since you cannot wait for the release... ;-)

; ==========================================================================
;  In this table all encoder functions are listed
;  the number and the position of entries are static and cannot be changed
;  without a modification in cs_menu_enc.inc!
; ==========================================================================

CSENC_ENTRY MACRO function, parameter, menu, page_offset, cursor_pos
      db      function, parameter, menu, ((page_offset&0x0f)<<4) | (cursor_pos&0x0f)
      ENDM

      ;; available functions:
      ;; CSENC_ENTRY parameters:
      ;;    - the ID itself
      ;;    - the variable offset (see app_defines.inc, variables begin with CS_SID_*)
      ;;    - the menu in which the variable is located (see cs_menu_tables.inc)
      ;;    - the page offset (which menu item should be at the left border)
      ;;    - the cursor position of the menu item
#define CS_MENU_ENC_CHANGE_SYS           0x00      ; to change any internal parameter directly
#define CS_MENU_ENC_CHANGE_OSC       0x10      ; to change parameter of currently selected OSC
#define CS_MENU_ENC_CHANGE_LFO       0x20      ; to change parameter of currently selected LFO
#define CS_MENU_ENC_CHANGE_ENV       0x30      ; to change parameter of currently selected ENV
      
      ;; CSENC_ENTRY parameters:
      ;;    - the ID itself
      ;;    - other values should be zeroed
#define CS_MENU_ENC_CHANGE_MENU_P1   0x40      ; to change menu parameter #1
#define CS_MENU_ENC_CHANGE_MENU_P2   0x41      ; to change menu parameter #2
#define CS_MENU_ENC_CHANGE_MENU_P3   0x42      ; to change menu parameter #3
#define CS_MENU_ENC_CHANGE_MENU_P4   0x43      ; to change menu parameter #4
#define CS_MENU_ENC_CHANGE_MENU_P5   0x44      ; to change menu parameter #5 (if 2x20 display)
#define CS_MENU_ENC_CHANGE_MENU_P6   0x45      ; to change menu parameter #6 (if >2x20 display)
#define CS_MENU_ENC_CHANGE_MENU_P7   0x46      ; to change menu parameter #7 (if >2x20 display)
#define CS_MENU_ENC_CHANGE_MENU_P8   0x47      ; to change menu parameter #8 (if >2x20 display)
#define CS_MENU_ENC_CHANGE_MENU_P9   0x48      ; to change menu parameter #9 (if >2x20 display)
#define CS_MENU_ENC_CHANGE_MENU_P10  0x49      ; to change menu parameter #10 (if 2x40 display)

      ;; CSENC_ENTRY parameters:
      ;;    - the ID itself
      ;;    - the CC number
      ;;    - the menu entry will be ignored
      ;;    - the page offset will be ignored
      ;;    - the cursor pos will be ignored
#define CS_MENU_ENC_CC_Rel1     0x50      ; to send a relative CC at channel 1 (for assign function)
#define CS_MENU_ENC_CC_Rel2     0x51      ; to send a relative CC at channel 2
#define CS_MENU_ENC_CC_Rel3     0x52      ; to send a relative CC at channel 3
#define CS_MENU_ENC_CC_Rel4     0x53      ; to send a relative CC at channel 4
#define CS_MENU_ENC_CC_Rel5     0x54      ; to send a relative CC at channel 5
#define CS_MENU_ENC_CC_Rel6     0x55      ; to send a relative CC at channel 6
#define CS_MENU_ENC_CC_Rel7     0x56      ; to send a relative CC at channel 7
#define CS_MENU_ENC_CC_Rel8     0x57      ; to send a relative CC at channel 8
#define CS_MENU_ENC_CC_Rel9     0x58      ; to send a relative CC at channel 9
#define CS_MENU_ENC_CC_Rel10    0x59      ; to send a relative CC at channel 10
#define CS_MENU_ENC_CC_Rel11    0x5a      ; to send a relative CC at channel 11
#define CS_MENU_ENC_CC_Rel12    0x5b      ; to send a relative CC at channel 12
#define CS_MENU_ENC_CC_Rel13    0x5c      ; to send a relative CC at channel 13
#define CS_MENU_ENC_CC_Rel14    0x5d      ; to send a relative CC at channel 14
#define CS_MENU_ENC_CC_Rel15    0x5e      ; to send a relative CC at channel 15
#define CS_MENU_ENC_CC_Rel16    0x5f      ; to send a relative CC at channel 16

      ;; CSENC_ENTRY parameters:
      ;;    - the ID itself
      ;;    - the CC number
      ;;    - the menu entry will be ignored
      ;;    - the page offset will be ignored
      ;;    - cursor pos holds the register number (0x00-0x0f) in which the absolute value will be stored
#define CS_MENU_ENC_CC_Abs1     0x60      ; to send a absolute CC at channel 1 (for assign function)
#define CS_MENU_ENC_CC_Abs2     0x61      ; to send a absolute CC at channel 2
#define CS_MENU_ENC_CC_Abs3     0x62      ; to send a absolute CC at channel 3
#define CS_MENU_ENC_CC_Abs4     0x63      ; to send a absolute CC at channel 4
#define CS_MENU_ENC_CC_Abs5     0x64      ; to send a absolute CC at channel 5
#define CS_MENU_ENC_CC_Abs6     0x65      ; to send a absolute CC at channel 6
#define CS_MENU_ENC_CC_Abs7     0x66      ; to send a absolute CC at channel 7
#define CS_MENU_ENC_CC_Abs8     0x67      ; to send a absolute CC at channel 8
#define CS_MENU_ENC_CC_Abs9     0x68      ; to send a absolute CC at channel 9
#define CS_MENU_ENC_CC_Abs10    0x69      ; to send a absolute CC at channel 10
#define CS_MENU_ENC_CC_Abs11    0x6a      ; to send a absolute CC at channel 11
#define CS_MENU_ENC_CC_Abs12    0x6b      ; to send a absolute CC at channel 12
#define CS_MENU_ENC_CC_Abs13    0x6c      ; to send a absolute CC at channel 13
#define CS_MENU_ENC_CC_Abs14    0x6d      ; to send a absolute CC at channel 14
#define CS_MENU_ENC_CC_Abs15    0x6e      ; to send a absolute CC at channel 15
#define CS_MENU_ENC_CC_Abs16    0x6f      ; to send a absolute CC at channel 16

CS_MENU_ENC_TABLE
      ;; OSC "Env" Layer
      ;;            Function name            parameter              menu            offset      cursor pos
      CSENC_ENTRY      CS_MENU_ENC_CHANGE_OSC, CS_SID_VOICEx_DELAY,        CS_MENU_OSC,      0x03,      0x03
      CSENC_ENTRY      CS_MENU_ENC_CHANGE_OSC, CS_SID_VOICEx_ATTACK,        CS_MENU_OSC,      0x03,      0x04
      CSENC_ENTRY      CS_MENU_ENC_CHANGE_OSC, CS_SID_VOICEx_DECAY,        CS_MENU_OSC,      0x03,      0x05
      CSENC_ENTRY      CS_MENU_ENC_CHANGE_OSC, CS_SID_VOICEx_SUSTAIN,        CS_MENU_OSC,      0x03,      0x06
      CSENC_ENTRY      CS_MENU_ENC_CHANGE_OSC, CS_SID_VOICEx_RELEASE,        CS_MENU_OSC,      0x03,      0x07

      ;; OSC "Misc" Layer
      ;;            Function name            parameter              menu            offset      cursor pos
      CSENC_ENTRY      CS_MENU_ENC_CHANGE_OSC, CS_SID_VOICEx_TRANSPOSE,  CS_MENU_OSC,      0x09,      0x09
      CSENC_ENTRY      CS_MENU_ENC_CHANGE_OSC, CS_SID_VOICEx_FINETUNE,        CS_MENU_OSC,      0x09,      0x0a
      CSENC_ENTRY      CS_MENU_ENC_CHANGE_OSC, CS_SID_VOICEx_PORTAMENTO, CS_MENU_OSC,      0x09,      0x0b
      CSENC_ENTRY      CS_MENU_ENC_CHANGE_OSC, CS_SID_VOICEx_ARPEGGIATOR,CS_MENU_OSC,      0x09,      0x0c
      CSENC_ENTRY      CS_MENU_ENC_CHANGE_OSC, CS_SID_VOICEx_PULSEWIDTH, CS_MENU_OSC,      0x09,      0x0d

      ;; OSC "Assign" Layer
      ;;            Function name            parameter              menu            offset      cursor pos
      CSENC_ENTRY      CS_MENU_ENC_CC_Abs16,      0x10,                    0x00,            0x00,      0x00; HERE:
      CSENC_ENTRY      CS_MENU_ENC_CC_Abs16,      0x11,                    0x00,            0x00,      0x01; Abs. Register
      CSENC_ENTRY      CS_MENU_ENC_CC_Abs16,      0x12,                    0x00,            0x00,      0x02; number
      CSENC_ENTRY      CS_MENU_ENC_CC_Abs16,      0x13,                    0x00,            0x00,      0x03; (0x00-0x0f)
      CSENC_ENTRY      CS_MENU_ENC_CC_Abs16,      0x14,                    0x00,            0x00,      0x04

      ;; LFO section
      ;;            Function name            parameter              menu            offset      cursor pos
      CSENC_ENTRY      CS_MENU_ENC_CHANGE_LFO, CS_SID_LFOx_RATE,        CS_MENU_LFO,      0x00,      0x02
      CSENC_ENTRY      CS_MENU_ENC_CHANGE_LFO, CS_SID_LFOx_DEPTH,        CS_MENU_LFO,      0x00,      0x03

      ;; Filter section
      ;;            Function name            parameter              menu            offset      cursor pos
      CSENC_ENTRY      CS_MENU_ENC_CHANGE_SYS, CS_SID_FILTER_CUTOFF,        CS_MENU_FIL,      0x00,      0x01
      CSENC_ENTRY      CS_MENU_ENC_CHANGE_SYS, CS_SID_FILTER_RESONANCE,  CS_MENU_FIL,      0x00,      0x02

      ;; Env "Env" Layer
      ;;            Function name            parameter              menu            offset      cursor pos
      CSENC_ENTRY      CS_MENU_ENC_CHANGE_ENV, CS_SID_ENVx_DEPTH,        CS_MENU_ENV,      0x01,      0x01
      CSENC_ENTRY      CS_MENU_ENC_CHANGE_ENV, CS_SID_ENVx_ATTACK,        CS_MENU_ENV,      0x01,      0x02
      CSENC_ENTRY      CS_MENU_ENC_CHANGE_ENV, CS_SID_ENVx_DECAY,        CS_MENU_ENV,      0x01,      0x03
      CSENC_ENTRY      CS_MENU_ENC_CHANGE_ENV, CS_SID_ENVx_SUSTAIN,        CS_MENU_ENV,      0x01,      0x04
      CSENC_ENTRY      CS_MENU_ENC_CHANGE_ENV, CS_SID_ENVx_RELEASE,        CS_MENU_ENV,      0x01,      0x05

      ;; Env "Assign" Layer
      ;;            Function name            parameter              menu            offset      cursor pos
      CSENC_ENTRY      CS_MENU_ENC_CHANGE_MENU_P1, 0x00,              0x00,            0x00,      0x00
      CSENC_ENTRY      CS_MENU_ENC_CHANGE_MENU_P2, 0x00,              0x00,            0x00,      0x00
      CSENC_ENTRY      CS_MENU_ENC_CHANGE_MENU_P3, 0x00,              0x00,            0x00,      0x00
      CSENC_ENTRY      CS_MENU_ENC_CHANGE_MENU_P4, 0x00,              0x00,            0x00,      0x00
      CSENC_ENTRY      CS_MENU_ENC_CHANGE_MENU_P5, 0x00,              0x00,            0x00,      0x00

Link to comment
Share on other sites

Since I will port all PIC16F firmwares to MIOS, you will have some very nice examples sooner or later. However, the integration is already possible and very easy: every MIDI event will be notified in USER_MPROC_NotifyFoundEvent

;; --------------------------------------------------------------------------
;;  This function is called by MIOS when a MIDI event has been received
;;  which has been specified in the CONFIG_MIDI_IN table
;;  Input:
;;     o number of entry in WREG
;;     o first  MIDI event byte in MIOS_PARAMETER1
;;     o second MIDI event byte in MIOS_PARAMETER2
;;     o third  MIDI event byte in MIOS_PARAMETER3
;; --------------------------------------------------------------------------
USER_MPROC_NotifyFoundEvent
      return

you have to copy the received bytes into variables which then will be taken by the MIDI learn function to assign the event to a button/knob/encoder or whatever.

If this info is not enough, please wait for the ported firmwares

Best Regards, Thorsten.

Link to comment
Share on other sites

Those knobs are rocking! Cool one, TK. And really slim thing, too.

Looking forward for the first demo MP3s!

And also looking forward for me having enough money to get the encoders and PCBs I still need....argh.

Link to comment
Share on other sites

In the meantime I found some time to continue with the case. But there are still some issues which have to be solved:

  • due to the 9V output voltage of the C64 PSU and the high current consumption caused by the LEDs and the backlit display, the 7805 gets extreme hot and therefore requires a big heatsink (or just a large metal plate)
  • I haven't found a good solution for mounting the Audio & MIDI plugs, as well as the USB socket at the backsite yet
  • there isn't so much room in the C64 case for more extensions anymore

However, here a snapshot of the current status:

mbsid_cs3.jpg

I've also created a first demo, it's a remix of an older song originally arranged with MIDIbox64SEQ and an AN1x synth.

In the remix everything you hear (beside of the Synth Toms in the background ;-)) comes from a MIDIbox SID . Not all sounds are played at the same time, the tracks have been recorded successively.

See^H^H^HHear http://www.mp3.de/frequencies

"Floating Sequences (SID remix) Part I"

I'm not very satisfied with the results... the new (more powerfull) sounds and the old sequences are not really matching - just because the original composition hasn't been made with a MIDIbox SID ;-)

Part II is planned, and this demo should give an impression of a new feature: an external Moog filter!

I'm in contact with Dirk Lindhof who has a lot of experiences with modular synths - here a link to his homepage http://www.msc175.de/. He will send me a PCB of his 24db Moog filter module in the next days.

The MIOS based MIDIbox SID (later also MIDIbox64SEQ) will support an interface function to the MAX525. This DAC provides 4 analog output channels with 12 bit resolution, it will supply the control voltage (CV) for any external extension. Of course, the 4 channels will also be integrated into the modulation matrix, and they will be controllable via CC :)

Best Regards, Thorsten.

P.S.: StepC is available for download...

Link to comment
Share on other sites

Awesome T!!  ;D

Part II is planned, and this demo should give an impression of a new feature: an external Moog filter!

;D ;D ;D

The MIOS based MIDIbox SID (later also MIDIbox64SEQ) will support an interface function to the MAX525. This DAC provides 4 analog output channels with 12 bit resolution, it will supply the control voltage (CV) for any external extension. Of course, the 4 channels will also be integrated into the modulation matrix, and they will be controllable via CC  

Shocking!!

Peace...

Dan

Link to comment
Share on other sites

Hey, thats cool! Although I already have an analoge moog filter... cant miss a second one.

Because of the room: I used this with my MB64 for future extensions, perhaps you could use it as well:

I just brought all unused in/outputs of the core (and a few left ones from the DOUTs/DINs) to some kind of extension slot (its a PCB connector, 32 pole). If I gonna need that stuff, I´ll just put it into a second case, which looks like the first one (only smaller).

Perhaps this with the SID?

Link to comment
Share on other sites

Oh my giddy giddy gosh!!!  :o :o :o

I wonder if I'm the only one to notice...the combination of these two new features - an analog filter module, and a CV output... The CV out could be used to control the filter module... All MIDI controllable, and LFO's and ENV's would be a piece of cake....

Can anyone say Sherman Filterbank?

I am officially droooling  ;D

Now all we need is a sampler... Don't ask for much do I? heheheh  ;)

Link to comment
Share on other sites

Oh my goodness! My jaw really dropped when I saw those pics! Thank you TK, for sharing your adventures with us!!!

BTW, I have a simple VCF circuit somewhere if someone wants it... based on the (old) ca3080 dual transconductance op amp (though it may be hard to find this chip now)

Link to comment
Share on other sites

:o :o :o  That looks friggin' amazing.

That is MIDIbox of the week for sure ;)

From now on, I suggest we introduce some "SID Synthi of the week" Topic as well!!  ;D

Mine will be finished August or September. It will have about the same controlling layout (I just copied it...  ;) ), but a completely different case and design.

Link to comment
Share on other sites

I have some ultramatched transistor pairs, and other bits that I was going to use for a diy moog filter once, but the pcb I was going to buy went out of production... but how hard to build is your filter project Thorsten? Does it use hard to get parts? I'd like to use the bits I have, if I can... or maybe you can put them to use Thorsten?  Can you easily get the bits you need?

BTW nice knobs! (from Waldorf, I assume, from months back someone did an oder I think I remember!!)

Link to comment
Share on other sites

Congratulations Thorsten,  the new front panel looks a treat!  I'm so building one of them now.

And I'm very happy to hear that you are designing a CV out module for the SEQ unit.  I was waiting for the forums to come back online last week so I could do a search for that very thing.

Yay x 9

;D ;D ;D

When you orginally showed the front panel design for the SID synth, I thought the modulation matrix was buttons, not LEDS, for instant patching.  Is that possible?

The Australian electronics supplier Jaycar sells a nice line of miniature push buttons with LEDs inside them.

Link to comment
Share on other sites

Hey Dr B...

 I bought one of those $0.80 very cheap alps LED buttons to try, but I didn't buy anymore, as

(a) they need a square hole to look neat (more work)

(b) The main problem is that the LED is deep down in the switch, and you need to look straight down from the top, to see if the LED is lit or not... Though maybe the clear plastic lid can be frosted, to diffuse/disperse the light from the LED so it can be visible from an angle? (frosted by use of a bead blaster, on the back of the removeable clear plastic top, but would be very tricky, and I wouldn't want to do more than a few by hand....)

Link to comment
Share on other sites

Thanks! :)

I don't want to start a seperate filter project, my analog skills are low, and there are a lot of functional circuits available in the web. The CA3080 is still available, but very noisy. A multi state filter based on the LM13700 gives better results (I built it some years ago, unfortunately I've no idea where in my flat (or possibly in the cellar?) I can find this board. ;-)

However, a Moog cascade filter can be build with common general purpose transistors, just only the resistor values have to be adapted.

I will start a new MIDIbox SID analog extensions page in some weeks and add some links to other websites which are specialiced on analog DIY stuff

DrBunsen: yes it's possible to replace the 15 select buttons by a matrix of 64 buttons, but this requires some (rel. simple) changes in the firmware. However, I prefer the existing solution, because it's smaller. It doesn't make a big difference from the ergonomic point of view, because mainly you want to see which modulation sources are linked to the targets, the buttons are only used for the configuration, and this will normaly not be changed that much during a playing session.

On the other hand: this control surface is not the ideal solution for everybody, our workflows are too different - other variants are welcome! :)

Hope to see some nice cases, but especially to hear some great SID tunes in the next weeks/months! :)

Best Regards, Thorsten.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

×
×
  • Create New...