Jump to content

TK.

Administrators
  • Posts

    15,254
  • Joined

Everything posted by TK.

  1. Hallo Stefan, passt! Ich habe Deinen Code gerade in meine aktuelle Version eingefuegt, so geht er nicht verloren :) Einen kleinen Schoenheitsfehler gibt es noch: falls jemand den entspr. Kommentar in main.asm nicht liest, koennte es passieren, dass DEFAULT_ENCODER_GROUP_WIDTH einen Wert erhaelt, der bei Dir nicht abgefangen wird. In diesem Fall wuerde WREG einen undefinierten Wert enthalten. Ich habe es nun so geaendert (leider versteht MPASM kein "#elif") MB64E_LED_Update_Init_Group ; 0x09: returns selected group 1-8 SET_BSR MB64E_BASE #if DEFAULT_ENCODER_GROUP_WIDTH < 2 incf MB64E_GROUP_OFFSET, W, BANKED #else #if DEFAULT_ENCODER_GROUP_WIDTH < 4 rrf MB64E_GROUP_OFFSET, W, BANKED andlw 0x3f #else #if DEFAULT_ENCODER_GROUP_WIDTH < 8 rrf MB64E_GROUP_OFFSET, W, BANKED rrf WREG, W andlw 0x1f #else #if DEFAULT_ENCODER_GROUP_WIDTH < 16 rrf MB64E_GROUP_OFFSET, W, BANKED rrf WREG, W rrf WREG, W andlw 0x0f #else #if DEFAULT_ENCODER_GROUP_WIDTH < 32 swapf MB64E_GROUP_OFFSET, W, BANKED andlw 0x07 #else #if DEFAULT_ENCODER_GROUP_WIDTH < 64 swapf MB64E_GROUP_OFFSET, W, BANKED rrf WREG, W andlw 0x03 #else swapf MB64E_GROUP_OFFSET, W, BANKED rrf WREG, W andlw 0x01 #endif #endif #endif #endif #endif #endif call MIOS_HLP_GetBitORMask rgoto MB64E_LED_Update_InitLoop_Cont [/code] Gruss, Thorsten.
  2. Could it be that there is an error in the schematic? It seems that all blue lines are shifted (e.g., segment g should be connected to D0, not to D1) - the dot is normaly connected to D7 Can you confirm that the LED digits at the right side only show garbage? Best Regards, Thorsten.
  3. Thats the normal behaviour - the Link button is also some kind of "panic button" for the case that there is a hanging MIDI note - this can happen if you play a note, don't release the keyboard and disable the Link... very annoying, therefore this feature :) Best Regards, Thorsten.
  4. Hi Dale, the input which you've marked with STROBE# (pin #6) is not a strobe, but an inhibit signal, which switches off all transmission gates. This signal should be 0 so long an ADC conversion is running, and it's save to let it 0 the whole time (in my own circuit I tied it to ground). But propably the main problem is that you didn't take the required setup time of the ADC into account: once you've switched to a new input, you have to wait for a certain time before the next conversion can be started, otherwise the voltage at the S&H unit of the ADC is not stable. In MIOS I've realized a two-step timer driven conversion. An ISR is called each 100 uS, at the first step a new 4051 input is selected, 100 uS later the conversion is started. The value of this conversion is available with the next call of the ISR. The timer delay can be reduced of course, but this would load the CPU much more than really required (no timeslots for other tasks) Before MIOS I used a method w/o ISR - after the selection of the 4051 input, a dummy conversion was started, just to get some delay. Thereafter a second conversion was started to get a stable value. However, this loads the CPU much more than required, but it's easier to realize Best Regards, Thorsten.
  5. Just try different values between 470 pF and 22 nF - note that caps can be combined in order to increase/decrease the value based on the equations: C_total = C1 + C2 (two caps in parallel) and C_total = 1/(1/C1 + 1/C2) (caps in serial) Best Regards, Thorsten. P.S.: I and some other guys of the forum tried different cap values long time ago - the filter behaviour gets worse with higher/lower values, but nobody focused to eliminate the stepiness...
  6. Hi Kokoon, I don't have the feeling that this would improve the results, but you can do some experiments with different caps of course. Best Regards, Thorsten.
  7. Hi Seppoman, Somewhere below "SID_BANK_SetBankStickAddress" is a routine which checks if a BankStick is connected or not - this routine also needs to be adapted (currently I don't have the sources right here...) Best Regards, Thorsten.
  8. to make it clear: all external functions of the MIDIbox SID can be controlled in the menu too, just only for the SID, Link, CC and Edit button I decided to do it not, since the handling would be so circuitous, that it wouldn't make fun anyhow. This was my decition during the design phase, and it's some effort to overwork parts of the CS handler in order to allow alternative controling methods of these functions. In MBFM I did this (there is a special page which pops up when the CFG button is pressed - it allows you to control 8 special options), but I don't really want to do this again for the SID for various reasons. In other words: for you it's just for temporal comfort, for me it means: overworking and testing code, releasing it, support it in the future (before each release I have to try, if this feature still works), and answering additional questions about such "bad documented features" in the forum over the next years. Just to give you an impression, why I always try to reduce complexity. Believe me, it costs less time if you would just drill the holes! in the debug window of MIOS Studio, you are able to write directly into the memory of the core with the "SRAM Write" command. The "CS_MENU_SELECTED_SID_FLAGS" variable is located to 0x46 (please doublecheck this address in app_defines.h) write 1 to this address: SID 1 is selected write 2 to this address: SID 2 is selected write 3 to this address: SID 1 and 2 are selected Not sure which are the optimum settings for this encoder, you could try a different encoder type (see mios_tables.inc) or you could try different settings for CS_MENU_USE_DETENTED_ENCODER and CS_MENU_ENC_SPEED_VALUE (see main.asm) Best Regards, Thorsten.
  9. No, link just means that the master will forward incoming MIDI events to the slaves. All of these options makes sense in daily work with the SIDs, but it's not a good idea to hide them deep in the menues. Therefore I wrote an explicit hint about this requirement at the StepB page. Once you have the buttons available, you know what I mean :) I strongly suggest to add these buttons - you still have some DIN pins free, which means, that there is no "resource problem" which prevents you from doing this. Best Regards, Thorsten.
  10. Lies Dir doch einfach nochmal das Posting von Raphael richtig durch Gruss, Thorsten.
  11. http://www.maybites.ch/tikiwiki/show_image.php?id=68&nocount=y Ooof! Best Regards, Thorsten.
  12. Hi Jeroen, the easiest way is to program this directly into the USER_ENC_NotifyChange hook. Check for the encoder number (it's in MIOS_PARAMETER1), if it matches with the encoder you are using for pitchbend, don't branch to MB64E_ENC_Handler, but continue with your own routine. For a "cheap" timer I would suggest the use of USER_SR_Service_Prepare or USER_SR_Service_Finish, these routines are called each mS. Here you could add a counter (free register address has to be found and defined in app_defines.h) which decrements a value until it reaches 1(!) This gives you following possibilities: in the USER_ENC_NotifyChange hook, check if the counter is <= 1. If this is the case, send the Note On event with velocity 0x7f always set the counter to 255 (so that it reaches 1 after 255 mS) and send the CC events depending on the direction (-> MIOS_PARAMETER2, read the comments of the hook) in USER_Tick (called when nothing else is to do), check if the counter has reached 1. If this is the case, set the counter to 0 and send the Note On event with velocity 0 (-> Note Off) thats all! :) Additional hint: just make the first tries with the MIOS C wrapper. This should shorten the time to success. Once you've found a working code, you can translate it to assembler. I guess that it will result in ca. 30 additional assembly instructions. Best Regards, Thorsten.
  13. Hi Flo, no, thats not possible. Do you want to change the CV setup very often, or is it ok for you to do it only once (when the LCD is connected to the MBCV core)? Best Regards, Thorsten.
  14. see the description of the SID buttons: http://www.ucapps.de/midibox_sid_csB.html "SID1-4: Use these buttons to select the SID(s). They behave like "radio buttons" if only one is pressed so that you can quickly change between the SID setups. It's also possible to select multiple SIDs by holding one of the SID buttons and pushing the additional SID buttons - in this case every parameter change will be sent not only to one, but to all selected SIDs." Parameter change means in this case: not only the CC parameters, but also the patch once you change it. Best Regards, Thorsten.
  15. Diese Selbstbau-Oszillatoren sind nicht stabil genug, vor allem das Anschwingen macht Probleme. Ich habe anfangs auch damit herumexperimentiert, siehe http://www.midibox.org/forum/index.php?topic=3469.0, nicht ohne Grund findet man auf meiner Homepage keine Referenzen zu solche Basteleien. Es macht wirklich keinen Sinn, sich einen Maxim Chip anzuschaffen, nur um die 2 Euro fuer einen integrierten Oszillator zu sparen. Gruss, Thorsten.
  16. You've to enable the MIDI merger - this is normaly done with the Link button. So long it is not available, you could either enable the Merger via MIOS Studio (see Debug window), or you could recompile the code with CS_MENU_DEFAULT_LINK 1 (see main.asm) Best Regards, Thorsten.
  17. Hallo, da sich Dein Setup teilweise auf dem PC befindet, wuerde ich Dir empfehlen, die Transponierung von Noten auch dort vorzunehmen. Mit http://www.midiox.com sollte das machbar sein Damit laesst sich dann sogar der Roland D20 transponieren - hierfuer muesste der Synth in den "Local Mode" geschaltet werden (wie das genau funktioniert, muesste in der Bedienungsanleitung stehen). Im Local Mode sendet die Tastatur nur noch MIDI Events, der Klang wird jedoch nicht direkt gespielt. Dieser laesst sich dann nur noch ueber MIDI ansteuern. Mit einer Loopback-Schleife MIDI In->MIDI Out muesstest Du den Klang also wieder hoeren. Wenn Du nun das MIDI Signal nicht direkt rueckschleifst, sondern ueber MIDI-Ox, welches auf dem PC laeuft, kannst Du von dort auch die MIDI Events umwandeln, und somit die Transponierung vornehmen (dies laesst sich dann via Knopfdruck auch umschalten). Von MIDI-Ox aus kann man die MIDI Events dann auch auf andere (virtuelle) Instrumente weiterleiten Gruss, Thorsten.
  18. Hallo Pico, ich habe mit dem CCS noch nicht gearbeitet, evtl. musst Du der Variable ein spezielles Attribut mitgeben, damit sie nicht in das "unbanked" Memory (<0x80) abgelegt wird? Oder Du weist der Variablen einer bestimmten Sektion zu (deren Namen du frei waehlst), und lokatierst diese an die gewuenschte Addresse (gibt es ein Locator-File?) Im Zweifelsfall sollte der direkte Memoryzugriff wie folgt funktionieren: (*((volatile unsigned int *)(0x400))) = 0x12; // schreibt 0x12 nach 0x400 Ich mache mir daraus immer ein Macro: #define MEM(register) (*((volatile unsigned int *)(register))) so dass ein direkter Speicherzugriff wie folgt funktioniert: MEM(0x400) = 0x12; CCS und USB: gehe mal nach forum.microchip.com, klicke auf "search", tippe "ccs usb" und waehle (das ist der Trick!) "Time filter: All Topics" an Gruss, Thorsten.
  19. Hi Robin, great! thats the right way Best Regards, Thorsten.
  20. Hi Kokoon, because without a BankStick you would only be able to store a single Patch, but a Drumkit consists of 21 patches... In the meantime I found a solution: it's now possible to stop an envelope immediately, with the effect that the result is more reproducible. 00 will be written into the ADSR registers of the SID, if a wavetable sequence is stopped with "END 7F" Here an example: Track 1 assigned to Waveform Track 2 and 3 not used in this example ((don't assign a track to the VCA envelope anymore...) Wavetable: [tt] Step Trk1 Comment 01 PLAY 01 Switch to Triangle 02 PLAY 08 Switch to Noise 03 PLAY 04 Switch to Pulse 04 PLAY 04 Hold Pulse 05 PLAY 14 Release Gate 06 PLAY 14 let Gate cleared 07 PLAY 14 dito 08 END 7F stop Wavetable and clear VCA envelope [/tt] set attack to 0, decay rate very short, sustain low, release high Now you can control the volume with following parameters: VCA decay, sustain and wavetable rate Another advantage of this method (clearing the envelope registers) is, that it fixes the envelope bug of the SID in most cases. It's still possible to provoke the "hick ups", but only, if the notes are played so fast, so that the envelope registers are not cleared between two notes. There must also be a delay of ca. 20 mS between two notes in order wait until the envelope is "seddled". But so long this is guaranteed, the SID output is more reproducible now :) Here a link to the release which features this function (I will build this also into the main MBSID firmware to keep it compatible) http://www.ucapps.de/mios/mbsid-d_alpha2.zip Best Regards, Thorsten.
  21. Hi Robin, Based on my code I can show you a working solution very quickly. Just define, that group1_selected gets a special value (e.g. 0xff) if the selected button has been pressed a second time. As an effect, all LEDs will be turned off. Once you press the same button again, the routine will work like pressing any other button... So, here the modification: unsigned char group1_selected; void DIN_NotifyToggle(unsigned char pin, unsigned char pin_value) __wparam { unsigned char i; // DIN 16..31 is one "radio group" if( pin >= 16 && pin <= 31 ) { // if button is already selected, turn off all LEDs // this is identified with group1_select == 0xff; if( group1_selected == (pin - 16) ) { group1_selected = 0xff; // all LEDs off } else { // save the selected button function of the group group1_selected = pin - 16; } // the LEDs of this group are connected to DOUT Pin 0..15, clear them for(i=0; i<=15; ++i) MIOS_DOUT_PinSet0(i); // set the LED which is related to the selected function if( group1_selected != 0xff ) MIOS_DOUT_PinSet1(group1_selected); } else { // this branch handles DIN 0..15 and DIN 32..127 } } [/code] Best Regards, Thorsten.
  22. TK.

    Clockbox

    Fine - so just call your functions from MCLOCK_Tick() in mclock.c - it contains all events you need to control a sequencer (Start/Stop/Pause/Clock) :) Best Regards, Thorsten.
  23. V1.5 doesn't work with the current interconnections between CORE and SID. IS THIS A JOKE? Please read my last posting again - all the answers to your last questions are explained in the walkthrough, why do you ignore this document? Karma -1
  24. Which tests that are listed in the Walkthrough are working? -> http://www.ucapps.de/midibox_sid_walktrough.html Best Regards, Thorsten. P.S.: the firmware has reached V1.7! Where did you find a v1.5 version?
  25. TK.

    Clockbox

    I will keep this in mind for the case that I feel boring ;-) Shuffle function: the outgoing clock has to be delayed with the same patterns used in MBSEQ 48ppqn: timer has to be invoked with double frequency, 48ppqn pulse has to be generated on each tick, MIDI clock has to be sent on each second tick 4 ppqn: requires a clock divider Read clock and convert it: similar to MBSEQ (must work like a PLL (phase locked loop)) Best Regards, Thorsten.
×
×
  • Create New...