yoho Posted November 20, 2009 Report Posted November 20, 2009 (edited) Hi there, I have been inspired by the idea of MBSeq in a small box with not too much controls, 1 LCD and 8 encoders and some buttons and started working on a prototype. Due to parts I had, I started on a V2 seq, I had a "452" lying around :-) To implement a shift function this what I have done: in app_defines.h change ;; free: 0x16b to this: SEQ_BUTTON_SHIFT_STATE EQU 0x16b ;; free: 0x16b In seq_core.inc add this after the line with SEQ_MODE1_RECORD.. SEQ_BUTTON_NOSHIFT EQU 0 ; Shift buttons SEQ_BUTTON_SHIFT EQU 1 ; Ofcourse I added something like this to the setup*.asm (according to your own box) DIN_ENTRY SEQ_BUTTON_Shift, 3, 7 in seq_buttons.inc I added this after the SEQ_BUTTON_All function ;; -------------------------------------------------------------------------- ;; Enable to shift ;; -------------------------------------------------------------------------- SEQ_BUTTON_Shift SET_BSR SEQ_BASE #if DEFAULT_BEHAVIOUR_BUTTON_SHIFT ;; Toggle Mode (default): ;; exit if button depressed btfsc MIOS_PARAMETER2, 0 return ;; else toggle status btg SEQ_BUTTON_SHIFT_STATE, SEQ_BUTTON_SHIFT, BANKED #else ;; On/Off Mode: ;; button status controls mode directly bcf SEQ_BUTTON_SHIFT_STATE, SEQ_MODE_SHIFT, BANKED btfss MIOS_PARAMETER2, 0 bsf SEQ_BUTTON_SHIFT_STATE, SEQ_MODE_NOSHIFT, BANKED #endif return In seq_gp.inc in function SEQ_GP_function I added this (some lines repeated for the right line) SEQ_GP_Button ;; request display update bsf CS_STAT, CS_STAT_DISPLAY_UPDATE_REQ ;; the menu select function overlays everything SET_BSR SEQ_BASE BRA_IFSET SEQ_MODE0, SEQ_MODE0_MENU, BANKED, SEQ_GP_Mode4_Button ;; This is new: setting the gp no according to shift state: add 8 = setting bit 3 BRA_IFCLR SEQ_BUTTON_SHIFT_STATE, SEQ_BUTTON_SHIFT, BANKED, SEQ_GP_NoShift bsf MIOS_PARAMETER1, 3 SEQ_GP_NoShift up till now this is working ;-) well almost. The shift key does the job on GP buttons but, you can only see it working after pushing one... Pointers anyone? From here things get worse. I tried to "copy" this to the encoder function, but it is going wrong. I know that you have to add 8 to WREG but I didn't succeed in getting that working. The bit setting trick didn't work. So any help is appreciated SEQ_ENC_Handler ;; save encoder number in SEQ_CURRENT_STEP and SEQ_EVNTS SET_BSR SEQ_BASE ;;new: Altered for shift function BRA_IFCLR SEQ_BUTTON_SHIFT_STATE, SEQ_BUTTON_SHIFT, BANKED, SEQ_Enc_NoShift ;could be this ;bsf MIOS_PARAMETER1, 3 ;or this? addwf 8, 0, BANKED movf MIOS_PARAMETER1, W SEQ_Enc_NoShift This last piece of programming drama (being a pro: this brings me back to my programming kindergarten years) triggers all of them, but: all encoders are shifted one position: first enc does second value....last encoder does first value. And subtracting one from W just crashed the app. Can anyone shine a beautiful light? Cheers.... Edited November 20, 2009 by yoho
yoho Posted November 24, 2009 Author Report Posted November 24, 2009 (edited) I managed to find the solution myself: this code should be placed in seq_enc.inc SEQ_ENC_Handler ;; save encoder number in SEQ_CURRENT_STEP and SEQ_EVNTS SET_BSR SEQ_BASE ;; Altered for shift function BRA_IFCLR SEQ_BUTTON_SHIFT_STATE, SEQ_BUTTON_SHIFT, BANKED, SEQ_Enc_NoShift ;bsf MIOS_PARAMETER1, 3 ;Erik Add 8 to the encoder number... well 7 but it works ?!? movlw 7 addwf MIOS_PARAMETER1, 0 SEQ_Enc_NoShift I'm off to the next challenges: doing a one-button track change. Up till now it looks like (in seq_buttons.inc) this but isn't working :-) ;; -------------------------------------------------------------------------- ;; Select Track 1/2/3/4 ;; -------------------------------------------------------------------------- ;; Erik: Different for single button here! ;;SEQ_BUTTON_Track SET_BSR SEQ_BASE movwf SEQ_SELECTED_TRKS,BANKED rlncf W, 1, 0 andwf 0xf rgoto SEQ_BUTTON_Trackx_Cont SEQ_BUTTON_Track1 Edited November 24, 2009 by yoho
yoho Posted February 8, 2010 Author Report Posted February 8, 2010 (edited) After being offline for half a century: Getting one of the leds to show the shift status in this case the beat-led. In seq_leds.inc just after SEQ_LED_UpdateIRQ_NoBeat movlw DEFAULT_BEAT_INDICATOR_LED call MIOS_DOUT_PinSet insert this #if DEFAULT_SHIFT_ENABLED ;; Erik : update shift led SET_BSR SEQ_BASE clrf MIOS_PARAMETER1 BRA_IFCLR SEQ_BUTTON_SHIFT_STATE, SEQ_BUTTON_SHIFT, BANKED, SEQ_LED_UpdateIRQ_NoShift SEQ_LED_UpdateIRQ_Shift setf MIOS_PARAMETER1 SEQ_LED_UpdateIRQ_NoShift movlw DEFAULT_SHIFT_INDICATOR_LED call MIOS_DOUT_PinSet #endif ;; ---[ increment the LED row counter (used when DEFAULT_TRACK_LEDS_ENABLED set ]--- In setup_mbseq_v2.asm add this #define DEFAULT_SHIFT_INDICATOR_LED 0x07; And the shift led should work... To have the gp leds working with the shift go to seq_leds.inc again and edit SEQ_LED_UpdateIRQ_GPLED ;; transfer current LED pattern to IRQ_TMP[12] movff SEQ_GP_LED0, IRQ_TMP1 movff SEQ_GP_LED1, IRQ_TMP2 to look like this SEQ_LED_UpdateIRQ_GPLED ;; transfer current LED pattern to IRQ_TMP[12] #if DEFAULT_SHIFT_ENABLED BRA_IFCLR SEQ_BUTTON_SHIFT_STATE, SEQ_BUTTON_SHIFT, BANKED, SEQ_LED_UpdateIRQ_GPNoShift movff SEQ_GP_LED1, IRQ_TMP1 bra SEQ_LED_UpdateIRQ_GPEndShift SEQ_LED_UpdateIRQ_GPNoShift movff SEQ_GP_LED0, IRQ_TMP1 SEQ_LED_UpdateIRQ_GPEndShift #else movff SEQ_GP_LED0, IRQ_TMP1 movff SEQ_GP_LED1, IRQ_TMP2 #endif I skipped the one-button-track-change for now. I thought it is better to focus on the display changing steps with the shift status. Here's the challenge in seq_buttons.inc, first part we've seen before, how do I get this to work? ;; -------------------------------------------------------------------------- ;; Enable to shift ;; -------------------------------------------------------------------------- SEQ_BUTTON_Shift SET_BSR SEQ_BASE #if DEFAULT_BEHAVIOUR_BUTTON_SHIFT ;; Toggle Mode (default): ;; exit if button depressed btfsc MIOS_PARAMETER2, 0 return ;; else toggle status btg SEQ_BUTTON_SHIFT_STATE, SEQ_BUTTON_SHIFT, BANKED #else ;; On/Off Mode: ;; button status controls mode directly bcf SEQ_BUTTON_SHIFT_STATE, SEQ_MODE_SHIFT, BANKED btfss MIOS_PARAMETER2, 0 bsf SEQ_BUTTON_SHIFT_STATE, SEQ_MODE_NOSHIFT, BANKED #endif ;;Does this work??? BRA_IFCLR SEQ_BUTTON_SHIFT_STATE, SEQ_BUTTON_SHIFT, BANKED, seq_set_no_shift bsf SEQ_EVNTS, 2, BANKED rgoto seq_set_shift_update seq_set_no_shift bcf SEQ_EVNTS, 2, BANKED seq_set_shift_update ;; request display update bsf CS_STAT, CS_STAT_DISPLAY_UPDATE_REQ return Edited February 8, 2010 by yoho
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now