Jump to content

Rednas

Members
  • Posts

    50
  • Joined

  • Last visited

    Never

Everything posted by Rednas

  1. Rednas

    rs232 to midi

    Another idea use: Dutch: glasvezel Deutch/english? glassfiber I don't know if you've got to use a led or a laser for this one, but you've got to transform the midibytes into lightpulses, transport them through glassfiber and than transform this back. This is like a long range optocoupler, normaly used to isolate the midiapparatus. (6N138 if I'm not mistaking)
  2. jOrgan is capable of handling aftertouch as a seperate division now, but for hauptwerk (and miditzer?) another channel will suit best I think. This will also work fine with jOrgan.
  3. Rednas

    rs232 to midi

    Here is another schematic + driver for win95 (and 3.1) it might work for win98. Maybe you can instaall the driver first. If that doesn't work, don't build the circuit. http://home.concepts-ict.nl/~nctnico/midi.htm#l11
  4. Rednas

    rs232 to midi

    Here is another schematic + driver for win95 (and 3.1) it might work for win98. Maybe you can instaall the driver first. If that doesn't work, don't build the circuit. http://home.concepts-ict.nl/~nctnico/midi.htm#l11
  5. Rednas

    rs232 to midi

    If this doesn't work you can also use a secondary computer, like a Pentium I with midiconnection, and use MidiViaNet, which sends midi over private networks. In this case your normal computer can stand where it is used to stand. But RS232 would be better. http://www.hitsquad.com/smm/programs/MidiViaNet/
  6. Rednas

    rs232 to midi

    If this doesn't work you can also use a secondary computer, like a Pentium I with midiconnection, and use MidiViaNet, which sends midi over private networks. In this case your normal computer can stand where it is used to stand. But RS232 would be better. http://www.hitsquad.com/smm/programs/MidiViaNet/
  7. You can order cheap IC's (74HC595 and ...165) at www.em.avnet.com They are about 0.18 and 0.16 euro. But the minimum you have to buy is 50. If you build some MIDIO128's (1 MIDIO= 2x 16 IC's) this can be a cheap solution. Other IC's can be ordered as well. I don't know anything about transfer costs though.
  8. I had ordered a chip for my pedal elsewhere, before I found a link to Midibox. I can connect three potentiometers to it, so I will make or buy three swells for that. For MIDIO128 it will indeed be easier to change the firmware, but for my chip maybe not. But it's a good idea to check it out first, so I will.
  9. My midichip has arrvied and I'm building my first Swellpedal. I like to use more of the potentiometer than just the 60 degrees the shoe will turn. Therefore I'm thinking of a translation system that will convert the turning of the shoe into the turning of the potentiometer such that the p-meter rotates more than the shoe. This can be done with new build components of wood or with Lego or mecchano parts. I'll keep you posted.
  10. It is a scanning matrix at least that's what I think, (otherwise you'll be right and this matrix is not such a good idea). This means you give a signal at one row, and then read all the columns. Then you give a signal on the next row and read the outputs. In your example: row 2 is scanned: signal at column 2 and 4 (2x2 and 2x4 are read positive) next scan row 3 no signals scan row 4 4x2 and 4x4 positive So no problem this way.
  11. Helaas, ik heb volgens mij een 874 of een 877 nodig voor een midiprocessor. Wat bedoel je met bootlader flashen? Ik heb het spul binnen, maar moet nog beginnen met bouwen, waaronder een JDM programmer.
  12. Maybe you can find something here: http://www.midipage.nl/ It has some midi to serial port interfaces. But midi on the parallel port? Midi is serieel, so I don't know if anyone bothered to build an interface for the parallel port yet. Maybe a good idea, since you have 10 or more inputs, so you can build 10 in or outputs on it. You could of cousrse design one  :o . More info on parallel ports can be found at www.howstuffworks.com. Maybe you can build or buy an interface between parallel and usb or serial, or between serial and usb and build the rest yourself.] Good luck Rednas
  13. I've been busy, and have code like this so far. IT IS NOT FOR THE PIC18... but for the PIC16..... First implement variables: I did this in main.* Stop variables consist of three bytes. Cblock 0x20 Pitch Channel Velocity Ranks StopsP16:3 StopsP1023:3 StopsP8:3 StopsP4:3 StopsP223:3 StopsP2:3 StopsI16:3 StopsI8:3 StopsI513 .... ENDC To route incoming messages according to manual/channel: PROC_Received9n movf MIDI_LASTEVENT0, W ;; get event byte #0 xorlw 0x90 ;; compare channel with 0 skpz ;; skip next command if equal goto PROC_PEDAL ;; for all manuals This is used to send messages: PROC_SEND ;;used to send output midimessages to 'pipes' movf channel, W call MIDI_SendByte movf pitch, W call MIDI_SendByte movf velocity, W call MIDI_SendByte return Velocity is original velocity. For each manual there is a routine to redirect the messages according to the values of the height and ranks, and adjust channel and pitch to that. PROC_PEDAL ;;=============================================================================== ;; this will handel messages coming from PEDAL (ch0) ;; In: MIDI_LASTEVENT0: 9n, n = midi channel ;; MIDI_LASTEVENT1: note number ;; MIDI_LASTEVENT2: velocity movlw 0x90 ;;midimessage for channel -> W movwf Channel ;;load channel 0 in channel movf MIDI_LASTEVENT1, W movwf Pitch ;; move note number to pitch movf MIDI_LASTEVENT2, W movwf Velocity ;;save velocity message in velocity ;;----------------------------------------------------------------------------- ;; process all stops for Pedal ;; StopsP16:3 ;; StopsP1023:3 ;; StopsP8:3 ;; StopsP513:3 ;; StopsP4:3 ;; StopsP223:3 ;; StopsP2:3 ;;------------------------------------------------------------------------------ ;; StopsP16:3 ;; adjust pitch movlw 0x0C ;;12 subwf pitch,1 ;;pitch-W->pitch ;;check if midibit has to be sent on channel. if it does, do so immidiately wth PROC_SEND BTFSC StopsP16,1 ;; if this bit is 1 GOTO PROC_SEND ;; send message at channel 0 INCF channel ;; increment channel BTFSC StopsP16,2 ;; if this bit is 1 GOTO PROC_SEND ;; send message at channel 1 INCF channel ;; increment channel BTFSC StopsP16,3 ;; if this bit is 1 GOTO PROC_SEND ;; send message at channel 2 INCF channel ;; increment channel BTFSC StopsP16,4 ;; etc GOTO PROC_SEND INCF channel BTFSC StopsP16,5 GOTO PROC_SEND .... BTFSC StopsP16+1,3 GOTO PROC_SEND INCF channel ..... BTFSC StopsP16+2,2 GOTO PROC_SEND INCF channel This for all stops. Next step, pulling stops. ;; ========================================================================== ;; THIS WILL IMPLEMENT PULLING STOPS ;; It assumes same message for pull or withdraw ;; The message contains three bits with it's own function. ;; n, midi channel: What midichannel does the message belong to. ;; n%4 = midi inputchannel notedata ;; midi channel modulo 4 = midi inputchannel notedata ;; ;; Channels 0 to 11 are used. ;; 0,4,8: channel 0/ pedal ;; 1,5,9: channel 1/ manual I ;; 2,6,10 channel 2/ manual II ;; 3,7,11 channel 3/ manual III ;; Note number: ;; Defines tranposition ;; Not all are used. ;; Transposition = notenumber-24 (36) ;; note number tranpose in feet ;; 0 64' ;; 12 32' ;; 24 16' ;; 31 10 2/3' ;; 36 8' ;; 43 5 1/3' ;; 48 4' etc. goto right manual: PROC_ReceivedAn ;;check to which manual ;;1010rrmm ;;two bits of rr define ranks (byte 0, 1 or 2) ;;two bits of mm define manual (0,1,2 or 3) movf MIDI_LASTEVENT0, W iorlw 0xFC ;; 1010rrmm ior 11111100 = 111111mm ;; 1111 11mm xor 1111 11nn = 0000 00pp xorlw 0xFC ;; manual = 0 -> W = 0 skpnz goto PROC_PEDAL ;; manual != 0 -> W = 0000 00mm xorlw 0x02 ;; manual = 2 -> W = 0 skpnz goto PROC_MANUALII goto right rank PROC_STOPSP ;; a stop is pulled for pedal ;; determine which rank ;;MIDI_LASTEVENT0 = 1010rrmm ;;two bits of rr define ranks (byte 1, 2 or 3) ;;two bits of mm define manual (0,1,2 or 3) clrf ranks incf ranks ;; 0:1 1:1 2:1 BTFSC MIDI_LASTEVENT0, 4 ;;Check 5th bit of MIDI_LASTEVENT0. goto PROC_STOPSPR3 ;; only if it is 2 0:1 1:1 2:2 BTFSC MIDI_LASTEVENT0, 5 ;;Check 6th bit of MIDI_LASTEVENT0. goto PROC_STOPSPR2 ;; only if this is one goto PROC_STOPSPR1 ;; 0:0 1:1 2:1 return PROC_STOPSPR1 ;; Stop processor Rank 1 ;; First data byte is used. We have the right manual and the right rank number. ;; Move to second databyte. ;; ;; Note number: ;; Defines tranposition ;; Not all are used. ;; Transposition = notenumber-24 (36) ;; note number in feet ;; 24 0001 1000 0x18 16' ;; 31 0001 1111 0x1F 10 2/3' ;; 36 0010 0100 0x24 8' ;; 48 0011 0000 0x30 4' ;; 55 0011 0111 0x37 2 2/3' ;; 60 0011 1100 0x3C 2 ;; StopsP16:3 ;; StopsP1023:3 ;; StopsP8:3 ;; StopsP4:3 ;; StopsP223:3 ;; StopsP2:3 movf MIDI_LASTEVENT2, W xorwf StopsP16 ;; pull stop in memory. movf MIDI_LASTEVENT1, W xorlw 0x18 ;; w= 0 if 16' skpnz return ;; apparently stop was pulled in memory. Leave this routine movf MIDI_LASTEVENT2, W xorwf StopsP16 ;; unpull stop 16' xorwf StopsP1023 ;; pull stop 10 2/3 ' movf MIDI_LASTEVENT1, W xorlw 0x1F ;; w= 0 if 10 2/3' skpnz return movf MIDI_LASTEVENT2, W xorwf StopsP1023 xorwf StopsP8 etc. Things to do: Cancel all stops for one height (in cas of hangers. / all notesoff Implement presets. I said earlier this will be easy, but not with the routine used now, because after one pull is detected, it leaves the routine. It's an awfull lot of text, but thanks to copy, paste and replace the workload is much less ;D
  14. One other possibility of midibox64 is a matrix for buttons. 8x8 is implented already. 16x32 is on it's way (for organist who need a lot of buttons for 3 manuals etc.) In this way you have eight outputs times eight inputs i.e. 64 buttons. If you use push buttons to send midi messages, for example for instruments, you can use 64 buttons, but you also can use a switch that chooses between several outputs. In this way you can minimise buttons and use less than 64 for sending 64 midimessages. More about matrices in the midification topic.
  15. Thnx. You're right. It's a bit new to me, Hex. I will edit my message for this.
  16. I came up with a better idea instead of the matrix. To use  ordinary variables and use the bits as data. For each height we need two or three bytes. This depends on wether we will you the first bit as a register. In normal midi messages this one is always zero. If we stick to normal midimessages we need three to cover 16 bits. So for instance we have for 8' 0x26 0x63 0xC0 In bits: 00100101 00100011 11000000 Forget the bits that don't count: 0100101 0100011 11 or better to read: 0100 1010 1000 1111 This means midi messages at this channel will be forwarded to output channels 2,5,7,9,13,14,15,16 In the function the bits can be read . If 1 a midi message will be sent, if not, read the next bit and raise the midichannel. For the stops we need an apropriate midi message. For instance ;;  PROC Received Bn: called on a Controller Event ;;  In:    MIDI_LASTEVENT0: Bn, n = midi channel ;;    MIDI_LASTEVENT1: CC number ;;    MIDI_LASTEVENT2: CC value The strong point of this method is: we can use the xor functions to toggle stops. Set and unset is not supported in this way. That would be another routine. And all stops off message will be implemented. 1000 0000 0000 0000 Will toggle channel 1 when xor is used with the bytes in memory. 0100 0000 0000 0000 Will toggle channel 2 0010 0000 0000 0000 Will toggle channel 3 We had 0100 1010 1000 1111 Now we toggle channel 2 so we have: 0100 1010 1000 1111 xor 0100 0000 0000 0000 Will give 0000 1010 1000 1111 Pull channel 1 will give 0000 1010 1000 1111 xor 1000 0000 0000 0000 = 1000 1010 1000 1111 Another advantage: Presets can be implemented directly. First send an all stops off message. (To be implemented) Then send a bunch of messages for each channel and each height like send 1010 0000 1000 0000 for 8' and 0100 0001 0010 0000 for 4' etc. To set 8' on channels 1, 3 and 9 4'  on channels 2, 8 and 11 I'm trying to program this for PIC16F877 in the MIDfilter/processor. Jim Henry, you can wait for this or use a computer program. Maybe both is als a good idea. I hope this helps you too. It can make a standard language you were looking for I think. Any recommendation for codes to use, two or three bytes or other stuff? I must find out how to make variables, but I think it will be somewhere in the help file of MPLAB.
  17. Hallo Wie wil er met mij ruilen? Ik heb 3 x een PIC18F452 besteld bij microchip, maar wil graag 1 ruilen tegen een PIC16F877 om een midifilter/processor mee te maken Ik woon in groningen. Post maar een reply, dan regelen we het. Groetjes Rednas
  18. John, nice organ console. I guess that pipes are working too, with MIDIO128 or something? What is your setup? Pipes and hauptwerk or something? You're right. Limitation to 16 ranks is not necessary but easy. In this way you use the 16 midi noteon channels for noteon messages. You could use more filters, or extra channels like 5n. Another possibility is sending messages for two ranks of 64 pipes on one channel, using all 128 notes. But this is an extra difficulty. 16 ranks can be enough for a regular organ. Remember 16 ranks for all manuals, since it is midi driven. If you have a unit organ, every rank can have multiple stops like 8', 4' 2' etc. So 16 ranks mean a few dozen stops on each manual. This must be enough for the regular home organ. For software it is not that much. But with the soundblaster soundfonts, you're limited by the polyfony of 64 for each card. That's why I have 3 pluged in right now :-). Thanks to kxproject. (Link can be found ot jOrgan website). Polyfony 64 means 8 notes with 8 stops, so I can have 8 notes with 24 stops. And if this isn't enough, I'll buy another card :-) But limitation is not necessary. We have to remember that there is not too much latency through the midifilter though.
  19. I forgot to tell: The preset buttons wil not be to hard to make. When they are ready I can easily test all combinations for the 16x32 matrix. So if you need some help i'm here for you.
  20. Jim, maybe this is a better place to discuss the Diode Matrix we had at http://www.midibox.org/cgi-bin/yabb/YaBB.cgi?board=midification;action=display;num=1093426954 And leave that topic for midi to pipe organ conversion. As I said 16 x 32 will be fine for me I think. Was your plan to call the manuals more often than the stops? Stop delay can be higher than manual delay. Although the tests say it isn't much. I'm glad AIN will work to. How to connect to the matrix. If you have an 16 x 32 matrix you have 48 wires. On the market there is an 2x25 pin to mount on a PCB. With a box around the pins this will be solid. I used IDE computerkabel for my pedalboard. This is 2x20 pins plus box. When 2x25 pins is used you can easily connect a new set of knobs with a cable available at the local shop or an internet store. My plan is to build stops and use one of the 16 outputs for every division. This is four in total for three manuals and pedal. Up to 128 stops can be controlled by this. 32 per division. That should be enough :-) Also I like preset thumb buttons beneath the manuals. To do this I came up with an idea that makes full use of the matrix form. First plan: mount under two manuals 32 buttons. 64 in total. But I have to set and get them in jOrgan so 'll use a switch. In one position they will connect to one channel in another they will connect to another. This means 32 buttons and a switch for 64 inputs. But wait this can be expanded. So I'll use 2x 16 buttons and a (set of) switch(es) to connect to 4 channels. Two to set the presets and two to read them. The same switches on multiple channels can also be used for the manuals. In this way you can select one of the channels to connect your manual with. In this way you must be able to make a 3 manual organ with only two manuals. Just connect a threewayswitch to each manual (or exactly two, one for each 32 notes). And select the division with this switch. I have to take a closer look at the schematics to see if coupling is available two i.e. use two (or more) output connectors on one input. In this way I will have (channel numbers may be different) Channel Use 0 Manual I 1 Manual I 2 Manual II 3 Manual II 4 Manual III 5 Manual III 6 Pedal? Not necessary yet I think. 7 Stops I 8 Stops II 9 Stops III 10 Stops Pedal 11 Preset 1-32 set 12 Preset 33-64 set 13 Preset 1-32 get 14 Preset 33-64 get 15 Left for for example crescendo pedal I hope this is all clear and usefull for other users.
  21. Good idea to test the wiring with the midibox. For my pedal I used a self fabricated testset with one led and two batteries. It works fine, but I had only thirty contacts. The pedal uses a common bus for 4. So that could easily be tested for 8 or more. Manuals: I don't have these yet. For the pedal I made wiring. I planned to use a manual from an old organ. This would have one common bus I think. No second touch for me :-). I think this is a common thing to do. It is not to much trouble to cut it in two or three, if you don't use the organ anymore. But I think cutting in two will be best. So 32 is a good number. I can also construct wiring for existing manuals. I have some here from old harmoniums, but without springs, so I have to fix that too. Or I'll take a look on the internet if someone has some for sale. I ordered 2 Cores, 1 Dout, 2 Din, 1 Ain and a JDM. This would be enough to experiment with right know. I've made plans for a common organconsole, for three manuals and pedal and planned 4*10 stops on both sides of my console. But maybe these dimensions will change. Maybe this will change for a unit organ. But that can also be done later. I think 16x32 is fine. If not I can also redirect the wiring for this project. I will think about it when the console is ready.
  22. I also don't care yet. jOrgan works fine. But maybe later it will be better without computer and with pipes.
  23. I am. I ordered parts this week, so next week I can put stuff together. Then I must also build the drawknops with it's contacts and some preset buttons etc. Than Crescendo pedals and maybe manuals instead of synthesizers. But to use all this I really like the matrix. I don't know how much buttons it will be, but I think I can also test some part of the program before it will be officially bug free and released.
  24. It is amibitious indeed, but I thought this is a bit what you wanted too. And there are some problems to overcome as I told already, but if that is done it should work. PIC assembler may indeed be easier/better than C. I don't have discovered how all of MIOS work, so I don't know what to use yet. I thought of altering the MIDIprocessor program for this purpose, and use whatever it is using. I use jOrgan at the moment. I use two keyboard and just bought a pedalboard from an organ builder. If connected the reedcontacts already, but am waiting for a midiconnection board. Monday I discovered this site and it will be usefull for the rest of the organ console I think. Especially if the matrix input works fine. In this way I can practise warm and dry at home at all organ literature whenever I have spare time. I can play at some organs in the neighbourhood too, but not always, and I have to go there and it can be cold in the winter. It would be nice to have a real organ at home. With real pipes. With the console I'm building I can adres them. And in this way I can connect and buy one rank at a time. Time should not be the problem yet. I will look into opus two. What was your idea at controlling pipes with midi exactly? yours Rednas
  25. Part of this discussion has already been written in the diode matrix discussion, but maybe this is a better place for my and your ideas. Or wiki, but I doesn't seem to work right now. Here is my idea to midi conversion to pipe organ. About: Organ pipes controlled with midfied console. When I came to this website and read about the MIDIO128 I also thought it can be used to control pipes and make a unit organ. This means one rank of pipes use different stops, with different transpose (1 octave, 2 octave, - 1 0ctave, 2 1/2 octave etc.) My idea is this: We have input: 1,2 or 3 manuals + pedal realtime midi input from different channels: note on type. Stops pulled input: This contains: division (what manual) What Rank (Prestant, Trompet, Flute) What Height 16', 8' , 4' etc (8' = 0 transpoze, 16' = 1 octave down, 4' is one octave up. ' stand for feet. The longest pipe on 'piano pitch' C is 8 feet. 16' = twice as long = twice as low = one octave down.) For this we can use different midiboxes or the one with a huge matrix input in development right now. We have output: Up to 16 ranks. With 128 or less pipes. These pipes can be controlled by midimesseges, note onoff, on the right channel. This means noteon messages received on channel 1 will be used to open or close pipes on rank 1 (Prestant for example), messages on channel 2 will control rank 2 (Flute). etc. For this we can use a MIDIO128 for each Rank/Channel, which controls the ranks. Next step: processing. I don't know C and just have little experience with Java, but here is some quick code. We an use a midiprocessor for this purpose. We get a lot of cores in this way, but I think that works fastest and is easiest to explain for now. Later we can bring it all to less midiboxes. in the midi processor we need some matrixes: SP1, SP2, SP3, SPP (stopspulled1, stopspulled2, stopspulled3, stopspulledPedal. The best thing is to put thes in to a main matrix SP= {SP1,SP2,SP3,SPP} In this matrix we save what stops are pulled. SP* look like these: Rank / Channel Transpoze 0 1 2 3 4 etc. 15 Height 16' -12 0 1 0 0 0 0 0 8' 0 0 0 1 0 0 0 0 4' +12 1 0 1 0 0 0 0 2 2/3' +19 0 0 0 0 0 0 0 2' +24 1 0 0 0 0 0 0 1 3/5' +28 0 0 0 0 0 0 0 1 1/3' +31 0 0 0 0 0 0 0 1' +36 0 1 0 0 0 0 0 (looks not to good, but I don't know how to get it better) This is a 8*17 matrix. This makes SP a 4*8*17 matrix. But different sizes can be made according to the pipes and ranks that are available. A normal church organ would only use the 8' height. Stops pulled are: 4' and 2' at channel 0, 16' at channel 1, 8' and 4' at channel 2. First consider a noteon event: 9n xx vv n = channel xx=pitch First we check the channel. channel=n; Originalpitch=xx; (Save original pitch because messages will contain transposed pitch) volume=vv; (either 0 or normal noteon value) For r=1;SP[channel,length] ; for all rows. We first process one row and send the pitch ;belonging to that channel to all ranks(channels) for which the ;stop is pulled. pitch = originalpitch + SP[channel,r,0] ;Change pitch. For k=1;SP[channel,r,length] ; for all kolomns. if SP[1,r,k]=1 ; check if stop is pulled/ if note has to be sent on this channel. send 9k pitch volume ;send corresponding noteon message with right pitch to right channel End ;for k=... End ;for r=... How to fill SP. When a message is received that a stop is pulled/unpulled, the corresponding matrixentry has to be set/unset. The best thing to do is, i think contain this all in the stop message: Stop message Yn pp vv Y= A,B,C whatever is not used. We may need to, for on/off. n= channel corresponding to pedal, manual I etc. pp = pitch, /determines height vv= volume. /determines rank If .... Stop on message is received. Division=n; Height=pp; Rank=vv; SP[Division,Height,Rank]=1. If .... Stop off message is received. Division=n; Height=pp; Rank=vv; SP[Division,Height,Rank]=0. Coupling: Maybe this can de done in the midibox, the manuals are coupled to: send midibyte on two channels. Problems to be solved: Noteoff. This could be a problem when using say 8' and 4' on one channel. Say you press c1 and c2 together, but release c2 first. Then you get a noteof message for c2 on your rank, but it should be one, because the 4' at c1 adresses c2 also. I will think about this. Any suggestions? For a normal organ only working with 8' it's no problem, except if the manuals are coupled. Stopoff. If you put a stop off, you cannot turn the pipes off anymore, because apropriate midi messages will not be send. This means we need a noteoff on that channel, or for everynote pressed on that channel and height. This is another difficulty that will have to be overcome, or an imperfecty we have to live with. What we need, except for the pipes I can't afford yet :-(, is a program in C to process the input and manage the output. The SP matrix can be different for everybody using this, but it will be no problem to adjusting this in the main code. I am willing to write this program in the future, for the midiprocessor, although I don't now C yet. Is there anyone who need this program in the near future? To check I luckily don't need all the pipes :-) Yours Rednas
×
×
  • Create New...