Jump to content

TK.

Administrators
  • Posts

    15,193
  • Joined

Everything posted by TK.

  1. Hi Dave, currently everything has to be programmed in assembler language, which is more difficult than C and requires some practice (try&error prototyping) at the beginning. In difference to C you have to learn funny mnemonics (instructions) and you have to "tell" the PIC step by step what he should do. However, this increases the performance of applications a lot, thats maybe the reason why I'm mostly speaking about delays of some nano or microseconds (and not about milliseconds like known from the PC world ;-)). On the other hand it consumes some time to learn and understand the language if you don't have the technical background. However, I've already started to search for a good programming language which simplifies the implementation of common control tasks. XPL0 looks interesting: http://www.idcomm.com/personal/lorenblaney/ Here are some programming examples: http://www.idcomm.com/personal/lorenblaney/guess.html I haven't evaluated this language yet, but maybe it could be supported by MIOS. Best Regards, Thorsten.
  2. It's located under http://java.sun.com/j2se/1.4.1/download.html Take the "JRE" package. Alternatively you could download Opera (the famous webbrowser) from http://www.opera.com, because it comes with the same java environment :) Best Regards, Thorsten.
  3. Some months ago I used a shielded cable which was longer that 3m w/o problems. At was a common audio cable for stereo, the shield should be used for the ground and Vss connection, the two wires for +5V (Vdd) and the AIN pin Best Regards, Thorsten.
  4. Thanks! :) Best Regards, Thorsten.
  5. The first MIOS release and a nice example application (MIDIbox LC) can now be found in the Concepts->MIOS->Download section. For all people who already purchased a PIC18F452: good luck! :) Best Regards, Thorsten. P.S.: a lot of additional documentation for MIOS itself and the MBLC wiring has not been written yet - so take it like a text adventure ;-)
  6. Hi Ian, yes, in theory it's possible to convert the files to MIDIbox SID patches (i.e with a perl script), since the dump format of the SID station is well documented. I will check this sooner or later ;-) Best Regards, Thorsten.
  7. There are no special instructions for such a box, but maybe this diagram helps: Best Regards, Thorsten.
  8. Hi Damien, due to the nice weather today I haven't worked on the final release, but maybe I will find the time tomorrow evening. However, if you've already built the core module and want to test the PIC18F, try the bootstrap loader first: http://www.ucapps.de/mios/mios_bootstrap_loader_v1.zip It should send a SysEx command after startup (F0 00 00 7E 40 <device-id> 01 F7) to request the MIOS dump (which will be released very soon :)) Best Regards, Thorsten.
  9. TK.

    Encoders in mb64

    It's not possible due to performance and memory limitations... Solution: buy a PIC18F (or order free samples on the Microchip Site) and use MIOS. Best Regards, Thorsten.
  10. Hi Faz, it isn't required to send the decoded password to Logic or Cubase, some dummy bytes are enough, since the purpose of this nameization sequence is only to unlock the Logic Control itself. Here the appr. code for the MIOS application, which will be published soon (and which can give you some more hints). These parts are called by a SysEx parser, which reacts on F0 00 00 66 <LC-ID> <action-ID>: ;; -------------------------------------------------------------------------- ;; MIDI Check action: perform a sysex action ;; -------------------------------------------------------------------------- LC_MPROC_Handler IFSET LC_MPROC_STATE, LC_MPROC_STATE_ACTION, rgoto LC_MPROC_Handler_DoAction bsf LC_MPROC_STATE, LC_MPROC_STATE_ACTION movff LC_MPROC_IN, LC_MPROC_ACTION rgoto LC_MPROC_SysExCheck_End ;; --- LC_MPROC_Handler_DoAction movf LC_MPROC_ACTION, W bz LC_MPROC_Action_Query movf LC_MPROC_ACTION, W xorlw 0x02 bz LC_MPROC_Action_HostReply movf LC_MPROC_ACTION, W xorlw 0x10 bz LC_MPROC_Action_WriteMTC1 movf LC_MPROC_ACTION, W xorlw 0x11 bz LC_MPROC_Action_WriteMTC2 movf LC_MPROC_ACTION, W xorlw 0x12 bz LC_MPROC_Action_WriteLCD movf LC_MPROC_ACTION, W xorlw 0x13 bz LC_MPROC_Action_VersionReq goto LC_MPROC_ActionInvalid ;; -------------------------------------------------------------------------- ;; MIDI Action: LC Query ;; -------------------------------------------------------------------------- LC_MPROC_Action_Query ;; wait until sysex footer (F7) has been received movlw 0xf7 IFNEQ LC_MPROC_IN, ACCESS, rgoto LC_MPROC_SysExCheck_End ;; send SysEx header call LC_MPROC_Send_SysExHeader ;; send Host Connect Query movlw 0x01 call MIOS_MIDI_TxBufferPut ;; call help function which sends the LC serial number call LC_MPROC_Hlp_SendSerial ;; send dummy password movlw 'A' call MIOS_MIDI_TxBufferPut movlw 'B' call MIOS_MIDI_TxBufferPut movlw 'C' call MIOS_MIDI_TxBufferPut movlw 'D' call MIOS_MIDI_TxBufferPut ;; send SysEx footer call LC_MPROC_Send_SysExFooter ;; finish Action rgoto LC_MPROC_ActionFinished ;; -------------------------------------------------------------------------- ;; MIDI Action: LC Host Reply ;; -------------------------------------------------------------------------- LC_MPROC_Action_HostReply ;; wait until sysex footer (F7) has been received movlw 0xf7 IFNEQ LC_MPROC_IN, ACCESS, rgoto LC_MPROC_SysExCheck_End ;; send SysEx header call LC_MPROC_Send_SysExHeader ;; send Host Connect Confirmation movlw 0x03 call MIOS_MIDI_TxBufferPut ;; call help function which sends the LC serial number call LC_MPROC_Hlp_SendSerial ;; send SysEx footer call LC_MPROC_Send_SysExFooter ;; finish Action rgoto LC_MPROC_ActionFinished ;; -------------------------------------------------------------------------- ;; this help function sends the pseudo serial number of the emulation: 12345678 LC_MPROC_Hlp_SendSerial movlw '1' movwf TMP1 LC_MPROC_Hlp_SendSerial_Loop movf TMP1, W call MIOS_MIDI_TxBufferPut incf TMP1, F movlw '8' IFNEQ TMP1, ACCESS, rgoto LC_MPROC_Hlp_SendSerial_Loop return ;; -------------------------------------------------------------------------- ;; MIDI Action: LC Version Request ;; -------------------------------------------------------------------------- LC_MPROC_Action_VersionReq ;; wait until sysex footer (F7) has been received movlw 0xf7 IFNEQ LC_MPROC_IN, ACCESS, rgoto LC_MPROC_SysExCheck_End ;; send SysEx header call LC_MPROC_Send_SysExHeader ;; send version number movlw 0x14 call MIOS_MIDI_TxBufferPut movlw 'V' call MIOS_MIDI_TxBufferPut movlw '1' call MIOS_MIDI_TxBufferPut movlw '.' call MIOS_MIDI_TxBufferPut movlw '4' call MIOS_MIDI_TxBufferPut movlw '2' call MIOS_MIDI_TxBufferPut ;; send footer only if merger has not been enabled ;; to ensure a proper MIDI protocol call MIOS_MIDI_MergerGet andlw 0x01 bnz LC_MPROC_Action_VersionReq_End movlw 0xf7 call MIOS_MIDI_TxBufferPut LC_MPROC_Action_VersionReq_End rgoto LC_MPROC_ActionFinished there is no special format for the version number Hope it helps Best Regards, Thorsten. P.S.: maybe it's required to handle this SySEx interaction (Query/Reply/Version Request) as fast as possible before the host application sends the query command again!)
  11. Hallo, da auf dem Core-Modul bereits die Kondensatoren, der Gleich'riecht'er und der Spannungsstabilisator vorhanden sind, kann man auch direkt den von Dir vorgeschalgenen Trafo anschliessen. Die Trafo-Werte sind ok, sofern kein LCD mit Hintergrundbeleuchtung angeschlossen werden soll. Auf meiner Homepage ist diese Moeglichkeit nicht dokumentiert, weil ich sie fuer Elektronik-Anfaenger fuer zu gefaehrlich halte. Und die Fortgeschrittenen wissen i.d.R., dass ein Trafo ausreicht... however, ein wichtiger Tip: das Netzkabel auf der 220V Seite gut verloeten und befestigen, damit es nicht abreisst (am besten mit einem sog. Kabelbinder aus Plastik - keinen Metalldraht verwenden!). Anschliessend die Netzspannungs-Kontakte mit einem Panzerklebeband o.ae. ueberkleben, so dass Du mit den Kabelenden nicht (unabsichtlich) in Beruehrung kommen kannst. Falls Du die Box spaeter mal in ein Metallgehaeuse bauen moechtest, solltest Du zusaetzlich noch etwas isolierendes unter die Platine legen, z.B irgendetwas aus Hartplastik (die Verpackung von "Ferrero Rocher" ist dafuer bestens geeignet ;-)) Gruss, Thorsten.
  12. Hi Rogic, you don't have to configure the driver, it should work without modification. So I think that there are two possible reasons for the problem: either your MIDI-In is not working (I hope that you disconnected the optocoupler when using the MAX232?) or you've changed the device ID of your MIDIbox64 by fault. To check if MIDI-In is working correctly and to find out the selected device ID, you can use MIDI-Ox. Just send the following SysEx commands to the box. One after another: F0 00 00 7E 43 0F F7 F0 00 00 7E 43 1F F7 F0 00 00 7E 43 2F F7 F0 00 00 7E 43 3F F7 F0 00 00 7E 43 4F F7 F0 00 00 7E 43 5F F7 F0 00 00 7E 43 6F F7 F0 00 00 7E 43 7F F7 MIDIbox64 will response to one of these commands with: F0 00 00 7E 43 <device-id>F F7 If all 8 commands don't work, you've a hardware problem. Check the connections, ... Best Regards, Thorsten.
  13. oops, so these photos documented that I'm a person with 6 hands and 2 heads after all? No, I've used the self timer of my camera ;-) Best Regards, Thorsten.
  14. So long as you don't use the MIDIbox with a display, the order doesn't matter, since the pots are free assignable. A changed order could also be irritating when you plan to use Serge's MIDIbox editor for the configuration of MIDI events Best Regards, Thorsten.
  15. Hi Klaas, thats not exactly the point, but you will regognize the difference when you start to play with the code. The first example doesn't need a branch with the IFNEQ macro (If-Not-Equal), since simply the pot number and the pot value will be sent out. Pot #0 will send: B0 00 <value>, Pot #1: B0 01 <value>, Pot #2: B0 02 <value>, ... Your modification for the second example will work. And you see that this method will lead to a lot of code (and therefore to a high danger that anything will not work due to a copy&paste error or similar). But fortunately there are two more advanced solutions: array and jumptables. An array can be accessed by the "table read" instruction on this way (I don't write the complete code here, because can be found in the examples later): (Note: the functions with capitalized letters are predefined macros which simplifies the programming - they contain some additional instructions)  ;; get 7-bit value of pot, result in working register    call   MIOS_AIN_Pin7bitGet     ;; save value in MIOS_PARAMETER1    movwf  MIOS_PARAMETER1   ;; preload table pointer with first entry of MyCCTable  TABLE_ADDR   MyCCTable  ;; get pot number  movf   SAVED_POT_NUMBER, W  ;; add pot number in WREG to table pointer  TABLE_ADD_W  ;; read table entry  tblrd*  ;; get table entry, it has been stored in TABLAT  movf   TABLAT, W  ;; this is our CC number. now set the CC parameter  call   SID_CCSet  ; (value in MIOS_PARAMETER1)  an example for the table: MyCCTable     ;; define CC values for Pot #0 - #16     db    44, 46, 48, 52, 56, 60, 61, 62, 01, 02, 03, 04, 05, 06, 07, 08 This reduces the code a lot and different banks can be defined on this way. Another advantage: for users who don't like programming, a GUI could be provided which allows to edit such tables. The second method are jumptables. It's like a "case" function in C. Here an example for the buttons: ;; this routine will be called when a DIN pin has been toggled. ;; DIN pin number in WREG and MIOS_PARAMETER1, ;; DIN pin value (0 or 1) in MIOS_PARAMETER2 USER_DIN_NotifyToggle  ;; branch depending on pin number (which is in WREG)  JUMPTABLE_2BYTES 4  ;; 2-byte instructions, 4 entries  rgoto   DIN0_MIDIChannelDown  rgoto   DIN1_MIDIChannelUp  rgoto   DIN2_DeviceNumberDown  rgoto   DIN3_DeviceNumberUp DIN0_MIDIChannelDown  ;; only continue if button has been pressed (value = 0) movlw 0 IFNEQ MIOS_PARAMETER2, ACCESS, return  call   SID_MIDIChannelGet  addlw  -1  call   SID_MIDIChannelSet  return DIN1_MIDIChannelUp  ;; only continue if button has been pressed (value = 0) movlw 0 IFNEQ MIOS_PARAMETER2, ACCESS, return  call   SID_MIDIChannelGet  addlw  1  call   SID_MIDIChannelSet  return ;; ... Best Regards, Thorsten.
  16. A Windows version of gimp? Cool! Yes, gimp is also one of my favourite tools, but it doesn't offer a grid mode for bitmaps - or where can I find this feature? Best Regards, Thorsten.
  17. Ah, now I understand the problem. I haven't noticed that the Gallery is offline. I moved the pictures to my old (5 year old) tripod account since the downloads on the puretec server produced too much traffic (more than 2GB extra). Ok, I've already an alternative free account at www.8ung.at and will try it there again. Best Regards, Thorsten.
  18. Both are ok - take the cheapest one :) Best Regards, Thorsten.
  19. Hi, ok - here an illustrated guide: first cut the cable ends with a cutter: the cable ends should be tinned to ensure proper junctions: also the connectors should be tinned: now you can solder the cables to the connectors very easily without additional tin: Best Regards, Thorsten.
  20. If your keyboard has no Thru port, it possibly also provides an integrated merger - this would be perfect! Which keyboard do you own exactly? Best Regards, Thorsten.
  21. TK.

    Baby Hui

    Ich selbst kann mittlerweile schlecht einschaetzen, ob fuer einen Neuling die Programmierung anhand von Vorlagen (Copy/Paste/Modify) schwierig ist, aber spaetestens bis zum Wochenende sollten die Beispiele fertig sein, so dass Du Dir selbst ein Bild darueber machen kannst. Gruss, Thorsten.
  22. Hi, I can confirm this. Thomas (who built a mega-midibox with a lot of motorfaders) had the same problem. Best Regards, Thorsten.
  23. Hi Klaas, any help (especially for the applications) is appreciated. With the MIOS functions it will be easy to learn PIC assembly, since the difficult jobs are handled by the operating system itself, and you only have to control the data flow. Here a short example, how to realize an application for common software synthesizers like Reaktor, Reason, etc. --- for such programs, the controller has to send unique MIDI events for each pot: ;; this driver hook is called by MIOS when a pot has been moved ;; pot number in working register MIOS_AIN_NotifyChange ;; save the pot number movwf SAVED_POT_NUMBER ;; get 7-bit value of pot, result in working register call MIOS_AIN_Pin7bitGet ;; save pot value movwf SAVED_POT_VALUE ;; send a unique MIDI controller event on channel 0: ;; B0 <pot-number> <pot-value> movlw 0xb0 call MIOS_MIDI_TxBufferPut movf SAVED_POT_NUMBER, W call MIOS_MIDI_TxBufferPut movf SAVED_POT_VALUE, W call MIOS_MIDI_TxBufferPut ;; print the value on LCD at position 14 (first line) movlw 14 call MIOS_LCD_CursorSet movf SAVED_POT_VALUE, W call MIOS_LCD_PrintBCD3 ;; thats all return And now the same example for MIDIbox SID/18F if you would like to control the cutoff parameter with pot #0 MIOS_AIN_NotifyChange ;; normaly we would use the table jump method here (64 gotos ;; in a table) - but this is just a simple demonstration ;; save the pot number movwf SAVED_POT_NUMBER ;; if pot number is not 0 (first pot), branch to another routine movlw 0 IFNEQ SAVED_POT_NUMBER, ACCESS, rgoto NotPot00 ;; get 7-bit value of pot, result in working register call MIOS_AIN_Pin7bitGet ;; save value in MIOS_PARAMETER1 movwf MIOS_PARAMETER1 ;; forward the value to SID CC#46 movlw 46 call SID_CCSet ; (value in MIOS_PARAMETER1) ;; thats all return NotPot00 ;; do something else ;; ... return Such code snippets can be uploaded within one second to the MIDIbox... And by using tables (arrays), the configuration can be clearly arranged. I hope that the upcoming examples and applications will provide enough inspirations :) Best Regards, Thorsten.
  24. Hi Klaas, major problem of the PIC16F architecture are the memory limitations, therefore it wasn't possible to offer such a high flexibility like with the PIC18F. In theory it could be possible to include an ADC driver for some pots to the PIC16F firmware of MIDIbox SID, but this would result into a lot (!!!) of effort for me - to find some free RAM, some free program memory in the 4 memory banks, and to build the hardware in order to test the extension. And the next guy wants to use rotary encoders, another guy wants a sequencer... not with me ;-) Since I don't use the MBSID in this configuration, this would be lost time for myself. But with MIOS everthing will be changed. All routines which are necessary to handle with the MBHP modules (pots, faders, motorfaders, rotary encoders, buttons, LEDs, LED rings, LED digits, LCDs, BankStick) are already available and accessible by a simple software interface. Therefore it will be possible for the users to add their own extensions to the application source code in order to customize the box. I will provide some examples which can be copy & pasted into the code. My hope is, that with this concept other users will begin to distribute their customizations :) Btw.: In theory also a graphical user interface could be programmed like known from Reaktor which allows to create the "functional connections" between the modules and drivers. But this will not be my job. In the meantime you've to work with your favourite texteditor ;-) Best Regards, Thorsten. P.S.: regarding performance: I noticed that possibly the whole MIDIbox LC (8 motorfaders, 96 buttons, 64 LEDs, 8 rotary encoders, 8 LED rings, graphical LCD) can be handled by one PIC18F core with a latency of ca. 1 ms!)
  25. Problem is, that MSpain(t) isn't really usable and the others are commercial solutions. I haven't found a freeware which can be used on the same erconomic way like xpaint, although xpaint does exists for more than 5 years now ;-) However, I will add support for .bmp files into my converting script, so that this format can also be used. ".xpm" is a special unix format which contains the picture in ASCII text (one character for every pixel), so that it also can be edited with a texteditor. Best Regards, Thorsten.
×
×
  • Create New...