Voici un tuto pour configurer des faders motorisés et des encodeurs rotatif:
1-Télécharger et installer MPLAB de microchips et Perl.
2-Télécharger le dossier midibox64e_V2_2.zip sur ucapps
3-Décompresser midibox64e_V2_2 dans un disque local ( ex: C:/ )
NB: ne pas le décompresser dans des sous dossiers comme dans vos documents si non MPLAB va créer des erreurs
4-Ouvrir MPLAB, aller sur Project==>New
dans cette fenêtre vous indiquez un nom et dans Project Directory créer un dossier avec le même nom de votre projet toujour dans disque local ( ex: C:/ )
5-Dans la fenêtre qui est déjà ouverte(où alors View-->Projet, pour ouvrir la fenêtre) avec le nom de votre projet.mcp
Faire un clique droit sur le dossier Source Files-->Add Files
Ouvrir le dossier midibox64e_V2_2 et choisir le fichier main.
C'est ici qu'on change les CODES, voici ceux de ma configuration, 32 encodeurs, 64 boutons, 64 LED, 8 faders motorisés.
------------------------------------------------------------------------------------------
;
;
; MIOS Application
; MIDIbox64E
;
;
#ifndef SEPERATE_SETUP_FILE
; Hardware related setup:
;
; Number of connected encoders: 1-64
#define DEFAULT_NUMBER_ENCS 32 ; number of connected encoders
; NOTE: the encoders have to be assigned to the DIN pins in mios_tables.inc
;
; Width of a group - normaly matches with the number of connected encoders, but
; the MB64E_LCD_PrintGroupNumber function in mb64e_bank.inc only supports
; group widths which are a power of two (1, 2, 4, 8, 16, 32, 64)
#define DEFAULT_ENCODER_GROUP_WIDTH 32
; Number of connected buttons
; Allowed values: 1-64
#define DEFAULT_NUMBER_BUTTONS 64 ; number of connected buttons
;
; debounce counter (see the function description of MIOS_SRIO_DebounceSet)
; Use 0 for high-quality buttons, use higher values for low-quality buttons
; NOTE: with a value > 0 the ledrings will flicker on every button movement!
#define DEFAULT_SRIO_DEBOUNCE_CTR 32
;
;
; A difficult decition: define here if you want to store many banks or many patches
; in the (optional) BankStick(s).
; - Bank based (PATCHMODE 0): 8 complete configurations are stored in each BankStick
; - Patch based (PATCHMODE 1): 1 configuration bank and 128 patches are stored in each BankStick
#define DEFAULT_PATCHMODE 0
;
; Chip Select Number of BankStick which should be used:
; -1: allows the MIDIbox to address up to 8 BankSticks (-> 64/8 Banks)
; 0: the MIDIbox addresses only the BankStick with CS=0 (-> 8/1 Banks)
; ...
; 7: the MIDIbox addresses only the BankStick with CS=7 (-> 8/1 Banks)
; all others: don't use any BankStick
;
; * -1 is the most prefered choice, also when only one BankStick is connected.
; * specify a CS number 0...7 when you are using different Applications
; with your MIDIbox in order to assign a dedicated EEPROM to it.
; * specifiy any other number to disable BankStick support at all
#define DEFAULT_BANKSTICK_CS -1
;
; Channel which is used to send a program change event on bank changes
; and to listen for bank change requests
; Allowed values: 1-16
#define DEFAULT_BANK_PRG_CHNG_CHANNEL 16
;
; Channel which is used to send a program change event on patch changes
; and to listen for patch change requests
; Allowed values: 1-16
#define DEFAULT_PATCH_PRG_CHNG_CHANNEL 15
;
; here you can change the default device ID
#define DEFAULT_DEVICE_ID 0x00
;
; if this option is enabled (1), the DEFAULT_DEVICE_ID won't be used, but
; it will be automatically derived from the MIOS Device ID instead
#define DEFAULT_AUTO_DEVICE_ID 1
;
; For MIDI activity monitor: define the DOUT pins for the Rx and Tx LED
#define DEFAULT_MIDI_MONITOR_ENABLED 0 ; if 1, the Tx/Rx LEDs are enabled
#define DEFAULT_MIDI_RX_LED 0x40 ; DOUT SR#9, pin D0
#define DEFAULT_MIDI_TX_LED 0x41 ; DOUT SR#9, pin D1
;
; --> define the DOUT registers which are connected to the LED rings here:
; --> the shift registers are counted from one here - means: 1 for the first, 2 for the second, etc...
; --> please mark unused ledrings with 0
#define LEDRINGS_SR_ENC1_16_CATHODES_1 0 ; first shift register with cathodes of the first 16 LED rings
#define LEDRINGS_SR_ENC1_16_CATHODES_2 0 ; second shift register with cathodes of the first 16 LED rings
#define LEDRINGS_SR_ENC1_16_ANODES_1 0 ; first shift register with anodes of the first 16 LED rings
#define LEDRINGS_SR_ENC1_16_ANODES_2 0 ; second shift register with anodes of the first 16 LED rings
#define LEDRINGS_SR_ENC17_32_CATHODES_1 0 ; first shift register with cathodes of the first 16 LED rings
#define LEDRINGS_SR_ENC17_32_CATHODES_2 0 ; second shift register with cathodes of the first 16 LED rings
#define LEDRINGS_SR_ENC17_32_ANODES_1 0 ; first shift register with anodes of the first 16 LED rings
#define LEDRINGS_SR_ENC17_32_ANODES_2 0 ; second shift register with anodes of the first 16 LED rings
#define LEDRINGS_SR_ENC33_48_CATHODES_1 0 ; first shift register with cathodes of the first 16 LED rings
#define LEDRINGS_SR_ENC33_48_CATHODES_2 0 ; second shift register with cathodes of the first 16 LED rings
#define LEDRINGS_SR_ENC33_48_ANODES_1 0 ; first shift register with anodes of the first 16 LED rings
#define LEDRINGS_SR_ENC33_48_ANODES_2 0 ; second shift register with anodes of the first 16 LED rings
;
#define LEDRINGS_SR_ENC49_64_CATHODES_1 0 ; first shift register with cathodes of the first 16 LED rings
#define LEDRINGS_SR_ENC49_64_CATHODES_2 0 ; second register with cathodes of the first 16 LED rings
#define LEDRINGS_SR_ENC49_64_ANODES_1 0 ; first shift register with anodes of the first 16 LED rings
#define LEDRINGS_SR_ENC49_64_ANODES_2 0 ; second shift register with anodes of the first 16 LED rings
;; see the documentation of MIOS_ENC_SpeedSet for the purpose of these values
#define DEFAULT_ENC_SPEED_NORMAL_MODE MIOS_ENC_SPEED_NORMAL
#define DEFAULT_ENC_SPEED_NORMAL_DIV 0
#define DEFAULT_ENC_SPEED_SLOW_MODE MIOS_ENC_SPEED_SLOW
#define DEFAULT_ENC_SPEED_SLOW_DIV 6 ; (6: increment on every 7th step)
#define DEFAULT_ENC_SPEED_FAST_MODE MIOS_ENC_SPEED_FAST
#define DEFAULT_ENC_SPEED_FAST_DIV 2 ; (2: divider = 2^(7-2) = 32)
; This DIN map allows you to customize the MB64E application to different hardwares
; The MB64E dump structure allows the use of up to 64 buttons, they are grouped to 8 buttons per shift register
; Define the used shift registers for the buttons here
; the shift registers are counted from one - means: 1 for the first, 2 for the second, etc...
; mark unused button groups with 0
;; NOTE: by default, the first two DIN shift registers are used for the encoders
#define DEFAULT_DIN_SR_PIN_01_08 2
#define DEFAULT_DIN_SR_PIN_09_16 3
#define DEFAULT_DIN_SR_PIN_17_24 1
#define DEFAULT_DIN_SR_PIN_25_32 4
#define DEFAULT_DIN_SR_PIN_33_40 5
#define DEFAULT_DIN_SR_PIN_41_48 6
#define DEFAULT_DIN_SR_PIN_49_56 7
#define DEFAULT_DIN_SR_PIN_57_64 8
;
; Datawheel for menu navigation/data entry connected or not?
; A datawheel can replace the left/right buttons!
; if 0: datawheel not connected
; if >= 1: encoder number assigned to datawheel function
; don't forget to check the pins of the datawheel in MIOS_ENC_PIN_TABLE (-> mios_tables.inc or setup_*.asm)
; it has to be connected to pin 4 and 5 by default
#define DEFAULT_ENC_DATAWHEEL 0
;
; DIN pin numbers of menu buttons
#if DEFAULT_ENC_DATAWHEEL == 0
#define DEFAULT_DIN_MENU_EXEC 7 ; menu exec button assigned to DIN pin #7
#define DEFAULT_DIN_MENU_RIGHT 6 ; menu right button assigned to DIN pin #6
#define DEFAULT_DIN_MENU_LEFT 5 ; menu left button assigned to DIN pin #5
#define DEFAULT_DIN_MENU_SNAPSHOT 4 ; menu snapshot button assigned to DIN pin #4
#else
#define DEFAULT_DIN_MENU_EXEC 7 ; menu exec button assigned to DIN pin #7
#define DEFAULT_DIN_MENU_SNAPSHOT 6 ; menu snapshot button assigned to DIN pin #4
#define DEFAULT_DIN_MENU_RIGHT 5 ; NOT USED - overlayed by datawheel
#define DEFAULT_DIN_MENU_LEFT 4 ; NOT USED - overlayed by datawheel
#endif
;
; This DOUT map allows you to customize the MB64E application to different hardwares
; The MB64E dump structure allows the use of up to 64 LEDs, they are grouped to 8 LEDs per shift register
; Define the used shift registers for the LEDs here
; the shift registers are counted from one - means: 1 for the first, 2 for the second, etc...
; mark unused LED groups with 0
;; NOTE: by default, the first four DOUT shift registers are used for the encoders
#define DEFAULT_DOUT_SR_PIN_01_08 1
#define DEFAULT_DOUT_SR_PIN_09_16 2
#define DEFAULT_DOUT_SR_PIN_17_24 3
#define DEFAULT_DOUT_SR_PIN_25_32 4
#define DEFAULT_DOUT_SR_PIN_33_40 5
#define DEFAULT_DOUT_SR_PIN_41_48 6
#define DEFAULT_DOUT_SR_PIN_49_56 7
#define DEFAULT_DOUT_SR_PIN_57_64 8
;
;
; Some menus are providing the possibility to use 16 "general purpose" buttons
; for selecting a parameter - e.g. the Bank Select menu allows to directly change the
; Bank with these buttons. So long as you stay in this menu, the normal function of
; these buttons (triggering MIDI or SFB events) is disabled
; Define the two shift registers which are assigned to this function here:
; 0 disables the GP buttons (not recommented!)
#define DEFAULT_GP_DIN_SR0 7 ; first GP DIN shift register assigned to SR#2
#define DEFAULT_GP_DIN_SR1 8 ; second GP DIN shift register assigned to SR#3
;
; above these buttons LEDs should be mounted to visualize the selected parameter
; (e.g. to visualize the bank which corresponds with the buttons below)
; Define the two shift registers which are assigned to this function here:
; 0 disables the GP LEDs (not recommented!)
#define DEFAULT_GP_DOUT_SR0 7 ; first GP DOUT shift register assigned to SR#5
#define DEFAULT_GP_DOUT_SR1 8 ; second GP DOUT shift register assigned to SR#6
;
; with following settings it is possible to center the screen on 2x20 and 2x40 LCDs
; see also the functional description of MIOS_LCD_YAddressSet
; recommented values:
; 2x16 | 2x20 | 4x20 | Comments
; -----+------+------+----------
#define DEFAULT_YOFFSET_LINE0 0x00 ; 0x00 | 0x02 | 0x42 | cursor pos: 0x00-0x0f
#define DEFAULT_YOFFSET_LINE1 0x40 ; 0x40 | 0x42 | 0x16 | cursor pos: 0x40-0x4f
#define DEFAULT_YOFFSET_LINE2 0x14 ; 0x14 | 0x16 | 0x02 | cursor pos: 0x80-0x8f (not used yet)
#define DEFAULT_YOFFSET_LINE3 0x54 ; 0x54 | 0x56 | 0x56 | cursor pos: 0xc0-0xcf (not used yet)
;
; The morphing function uses addresses within the MIOS address range which are
; reserved for the AIN handler.
; NOTE: morphing is automatically disabled if analog pots/faders are connected
#define DEFAULT_MORPH_FUNCTION_ENABLED 1
;
; Although MIDIbox64E has been designed for rotary encoders, it can also handle with
; up to 64 pots/faders or up to 8 motorfaders.
; Pots and faders are mapped to the "encoder" entries 64-128.
; Example: if group width is 16, and group 1 is selected, encoders are using
; entry 1-16, and pots are using entry 64-70
; NOTE: morphing is automatically disabled if analog pots/faders are connected
#define DEFAULT_NUMBER_AIN 8
;
; you could enable the multiplexers here to test this application
; with a MIDIbox64 based hardware
; if 0: no multiplexers (a *must* when MF module connected)
; if 1: use multiplexers
#define DEFAULT_ENABLE_AIN_MUX 0
;
; motorfaders connected?
; if 0: MF module disabled
; if 1: MF module enabled
#define DEFAULT_ENABLE_MOTORDRIVER 1
;
; The well known motorfader calibration values -- can also be changed "online" in the calibration menu
#define DEFAULT_MF_PWM_DUTY_UP 0x01 ; PWM duty cycle for upward moves (see http://www.ucapps.de/mbhp_mf.html)
#define DEFAULT_MF_PWM_DUTY_DOWN 0x01 ; PWM duty cycle for downward moves (see http://www.ucapps.de/mbhp_mf.html)
#define DEFAULT_MF_PWM_PERIOD 0x03 ; PWM period (see http://www.ucapps.de/mbhp_mf.html)
;
;
; following settings configure the touch sensors
; The DIN shift register to which the 8 touch sensors are connected has to be defined here
; Shift Register 9-16: touch sensor changes won't trigger the MBMF button handler
; no MIDI event will be sent
; Shift Register 1-8: touch sensor changes will trigger the MBMF button handler
; 0: touch sensor disabled
#define DEFAULT_TOUCH_SENSOR_SR 0
;
; Now define one of three behaviours (note: value can be changed "online" in the TS mode menu)
; The TS mode works independent from the MBMF button handler, means: use TOUCH_SENSOR_SR >= 8
; to suspend the motors w/o allocating a button function
;
; TOUCH_SENSOR_MODE EQU 0: no additional action when touch sensor pressed/depressed
; TOUCH_SENSOR_MODE EQU 1: the motor will be suspended via MIOS when the appr. touch sensor
; is pressed, so that it will not be moved on incoming MIDI events
; TOUCH_SENSOR_MODE EQU 2: like mode 1, additionally no MIDI event will be sent when the
; touch sensor is *not* pressed.
;
; Mode "1" is used by default to avoid circular troubleshooting requests in the MIDIbox forum from people
; who don't read this information before starting the application.
; Mode "2" should be the prefered setting if your touch sensors are working properly
#define DEFAULT_TOUCH_SENSOR_MODE 0
;
; The touch sensor sensitivity (can also be changed "online" in the "Touch Sensor" menu)
#define DEFAULT_TOUCH_SENSOR_SENSITIVITY 3
#endif
; ==========================================================================
;
; Copyright © 1998-2003 Thorsten Klose (Thorsten.Klose@midibox.org)
; http://www.uCApps.de
;
; ==========================================================================
;
; This file is part of MIDIbox64E
;
; MIDIbox64E is free software; you can redistribute it and/or modify
; it under the terms of the GNU General Public License as published by
; the Free Software Foundation; either version 2 of the License, or
; (at your option) any later version.
;
; MIDIbox64E is distributed in the hope that it will be useful,
; but WITHOUT ANY WARRANTY; without even the implied warranty of
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
; GNU General Public License for more details.
;
; You should have received a copy of the GNU General Public License
; along with MIDIbox64E; if not, write to the Free Software
; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
;
; ==========================================================================
;; ---[ MIOS header file ]---
#include "mios.h"
;; ---[ useful macros ]---
#include "macros.h"
;; ---[ vectors to MIOS functions (never change!) ]---
#include "mios_vectors.inc"
;; ---[ user hooks (never change!) ]---
#include "user_vectors.inc"
;; ==========================================================================
;; General Application Settings
;; ==========================================================================
;; ---[ variables used by application ]---
#include "app_defines.h"
; ==========================================================================
;; ---[ configuration table for MIDI processor and rotary encoders ]---
#include "mios_tables.inc"
;; ---[ Custom LCD driver ]---
#include "app_lcd.inc"
;; ==========================================================================
;; Standard MIOS hooks
;; ==========================================================================
;; --------------------------------------------------------------------------
;; This function is called by MIOS after startup to initialize the
;; application
;; --------------------------------------------------------------------------
USER_Init
;; initialize the shift registers
movlw 0x10 ; use all shift registers
call MIOS_SRIO_NumberSet
movlw 0x01 ; set update frequncy to 1/1 mS
call MIOS_SRIO_UpdateFrqSet
movlw DEFAULT_SRIO_DEBOUNCE_CTR ; set debounce counter
call MIOS_SRIO_DebounceSet
;; the touch sensor sensitivity is defined in the SysEx dump (see MB64E_presets.inc)
;; and will be set in MB64E_dump.inc
movlw DEFAULT_TOUCH_SENSOR_SENSITIVITY
call MIOS_SRIO_TS_SensitivitySet
;; ------------------------------------------------------------------
;; initialize the AIN driver
movlw DEFAULT_NUMBER_AIN
call MIOS_AIN_NumberSet
#if DEFAULT_ENABLE_AIN_MUX
call MIOS_AIN_Muxed ; service multiplexer interface
#else
call MIOS_AIN_UnMuxed ; don't use multiplexer interface
#endif
movlw 0x03 ; set deadband to 3
call MIOS_AIN_DeadbandSet
#if DEFAULT_ENABLE_MOTORDRIVER
;; initialize the MF driver
call MIOS_MF_Enable
movlw 0x03 ; set MF deadband to 3
call MIOS_MF_DeadbandSet
movlw DEFAULT_MF_PWM_DUTY_UP
call MIOS_MF_PWM_DutyCycleUpSet
movlw DEFAULT_MF_PWM_DUTY_DOWN
call MIOS_MF_PWM_DutyCycleDownSet
movlw DEFAULT_MF_PWM_PERIOD
call MIOS_MF_PWM_PeriodSet
#endif
;; ------------------------------------------------------------------
;; get device ID
#if DEFAULT_AUTO_DEVICE_ID == 0
;; from EEPROM
movlw (EEPROM_READONLY & 0xff) + 1
movwf EEADR
call MIOS_EEPROM_Read
#else
;; from MIOS
call MIOS_MIDI_DeviceIDGet
#endif
andlw 0x07
movff WREG, MB64E_DEVICE_ID
;; initialize application specific variables
clrf MB_STAT
;; load values from internal dump
call MB64E_DUMP_RestoreAll
;; init control surface
call CS_MENU_Init
;; init default LCD offsets
call MB64E_LCD_SetDefaultOffsets
;; if "snapshot at poweron" flag is set, request it here
SET_BSR MB64E_BASE
bcf MB_STAT, MB_STAT_SNAPSHOT_REQ
btfsc MB64E_CFG1, MB64E_CFG1_SNAPSHOT_AT_POWERON, BANKED
bsf MB_STAT, MB_STAT_SNAPSHOT_REQ
;; ------------------------------------------------------------------
return
;; --------------------------------------------------------------------------
;; This function is called by MIOS in the mainloop when nothing else is to do
;; --------------------------------------------------------------------------
USER_Tick
;; ---[ check BankStick status ]---
call MB64E_BANK_CheckStick
;; ---[ if snapshot has been requested, send it here ]---
IFSET MB_STAT, MB_STAT_SNAPSHOT_REQ, call MB64E_PATCH_Send
bcf MB_STAT, MB_STAT_SNAPSHOT_REQ
#if DEFAULT_ENABLE_MOTORDRIVER
;; ---[ if fader positions should be updated, do it here ]---
call MB64E_FADER_CheckUpdate
#endif
return
;; --------------------------------------------------------------------------
;; This function is periodically called by MIOS. The frequency has to be
;; initialized with MIOS_Timer_Set
;; Note that this is an interrupt service routine! Use FSR2 instead of FSR0
;; and IRQ_TMPx instead of TMPx -- and make the routine as fast as possible!
;; --------------------------------------------------------------------------
USER_Timer
return
;; --------------------------------------------------------------------------
;; This function is called by MIOS when a debug command has been received
;; via SysEx
;; Input:
;; o WREG, MIOS_PARAMETER1, MIOS_PARAMETER2, MIOS_PARAMETER3 like
;; specified in the debug command
;; Output:
;; o return values WREG, MIOS_PARAMETER1, MIOS_PARAMETER2, MIOS_PARAMETER3
;; --------------------------------------------------------------------------
USER_MPROC_DebugTrigger
return
;; --------------------------------------------------------------------------
;; This function is called by MIOS when the display content should be
;; initialized. Thats the case during startup and after a temporary message
;; has been printed on the screen
;; --------------------------------------------------------------------------
USER_DISPLAY_Init
;; request an initialization
bsf CS_STAT, CS_STAT_DISPLAY_INIT_REQ
;; continue at the control surface menu handler
goto CS_MENU_Handler
;; --------------------------------------------------------------------------
;; This function is called in the mainloop when no temporary message is shown
;; on screen. Print the realtime messages here
;; --------------------------------------------------------------------------
USER_DISPLAY_Tick
;; continue at the control surface menu handler
goto CS_MENU_Handler
;; --------------------------------------------------------------------------
;; This function is called by MIOS when a complete MIDI event has been received
;; Input:
;; 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_NotifyReceivedEvent
;; continue at MB64E MIDI handler
goto MB64E_MIDI_NotifyReceivedEvent
;; --------------------------------------------------------------------------
;; 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
;; --------------------------------------------------------------------------
;; This function is called by MIOS when a MIDI event has not been completly
;; received within 2 seconds
;; --------------------------------------------------------------------------
USER_MPROC_TO_STR_0 STRING 16, 0x00, " MIDI Time Out! "
USER_MPROC_TO_STR_1 STRING 16, 0x40, " Whats up ??? "
USER_MPROC_NotifyTimeout
;; print timeout message
TABLE_ADDR USER_MPROC_TO_STR_0
call MIOS_LCD_PrintMessage
call MIOS_LCD_PrintMessage
;; request display update
bsf CS_STAT, CS_STAT_DISPLAY_UPDATE_REQ
;; -> jump to "ActionInvalid" for a proper reset of the sysex parser
goto MB64E_SYSEX_ActionInvalid
;; --------------------------------------------------------------------------
;; This function is called by MIOS when a MIDI byte has been received
;; Input:
;; o received MIDI byte in WREG and MIOS_PARAMETER1
;; --------------------------------------------------------------------------
USER_MPROC_NotifyReceivedByte
;; -> continue at MB64E sysex parser
goto MB64E_SYSEX_Parser
;; --------------------------------------------------------------------------
;; This function is called by MIOS before the transfer of a MIDI byte.
;; It can be used to monitor the Tx activity or to do any other actions
;; (e.g. to switch a pin for multiplexed MIDI Outs) before the byte will
;; be sent.
;; Note that this is an interrupt service routine! Use FSR2 instead of FSR0
;; and IRQ_TMPx instead of TMPx -- and make the routine as fast as possible!
;; Input:
;; o transmitted byte in WREG
;; --------------------------------------------------------------------------
USER_MIDI_NotifyTx
;; branch to Rx/Tx handler
goto MIDI_RXTX_NotifyTx
;; --------------------------------------------------------------------------
;; This function is called by MIOS when a MIDI byte has been received.
;; It can be used to monitor the Rx activity or to do any action - e.g.
;; to react on realtime events like MIDI clock (0xf8) with a minimum latency
;; Note that this is an interrupt service routine! Use FSR2 instead of FSR0
;; and IRQ_TMPx instead of TMPx -- and make the routine as fast as possible!
;; Input:
;; o received byte in WREG
;; --------------------------------------------------------------------------
USER_MIDI_NotifyRx
;; branch to Rx/Tx handler
goto MIDI_RXTX_NotifyRx
;; --------------------------------------------------------------------------
;; This function is called by MIOS when an button has been toggled
;; Input:
;; o Button number in WREG and MIOS_PARAMETER1
;; o Button value MIOS_PARAMETER2:
;; - 1 if button has been released (=5V)
;; - 0 if button has been pressed (=0V)
;; --------------------------------------------------------------------------
USER_DIN_NotifyToggle
#if DEFAULT_TOUCH_SENSOR_SR > 0
;; call TS update function if touch sensor has been pressed/depressed
rrf MIOS_PARAMETER1, W
rrf WREG, W
rrf WREG, W
andlw 0x0f
xorlw DEFAULT_TOUCH_SENSOR_SR - 1
skpnz
call MB64E_TS_Handler
#endif
;; else branch to the MB64E button handler
;; (NOTE: this function changes MIOS_PARAMETER[12] -- if additional
;; handlers should be called from this hook, place them before
;; this goto instruction)
goto MB64E_BUTTON_Handler
;; --------------------------------------------------------------------------
;; This function is called by MIOS when an encoder has been moved
;; Input:
;; o Encoder number in WREG and MIOS_PARAMETER1
;; o signed incrementer value in MIOS_PARAMETER2:
;; - is positive when encoder has been turned clockwise
;; - is negative when encoder has been turned counter clockwise
;; --------------------------------------------------------------------------
USER_ENC_NotifyChange
#if DEFAULT_ENC_DATAWHEEL
;; branch to CS_MENU_Enc if datawheel
movlw DEFAULT_ENC_DATAWHEEL - 1
IFNEQ MIOS_PARAMETER1, ACCESS, rgoto USER_ENC_NotifyChange_NoWheel
USER_ENC_NotifyChange_Wheel
;; expects incrementer in WREG
movf MIOS_PARAMETER2, W
goto CS_MENU_Enc
USER_ENC_NotifyChange_NoWheel
#endif
;;else continue at ENC handler
movf MIOS_PARAMETER1, W
goto MB64E_ENC_Handler
;; --------------------------------------------------------------------------
;; This function is called by MIOS before the shift register are loaded
;; Note that this is an interrupt service routine! Use FSR2 instead of FSR0
;; and IRQ_TMPx instead of TMPx -- and make the routine as fast as possible
;; --------------------------------------------------------------------------
USER_SR_Service_Prepare
;; call LEDrings handler
call MB64E_LEDRINGS_Handler
;; branch to the Rx/Tx LED handler
goto MIDI_RXTX_Handler
;; --------------------------------------------------------------------------
;; This function is called by MIOS after the shift register have been loaded
;; Note that this is an interrupt service routine! Use FSR2 instead of FSR0
;; and IRQ_TMPx instead of TMPx -- and make the routine as fast as possible
;; --------------------------------------------------------------------------
USER_SR_Service_Finish
;; ---[ handle with control surface variables (flashing cursor, etc) ]---
goto CS_MENU_TIMER
;; --------------------------------------------------------------------------
;; This function is called by MIOS when a Pot has been moved
;; Input:
;; o Pot number in WREG and MIOS_PARAMETER1
;; o LSB value in MIOS_PARAMETER2
;; o MSB value in MIOS_PARAMETER3
;; --------------------------------------------------------------------------
USER_AIN_NotifyChange
;; convert 10-bit value to 7-bit value
rrf MIOS_PARAMETER3, F ; value / 2
rrf MIOS_PARAMETER2, F
rrf MIOS_PARAMETER3, F ; value / 2
rrf MIOS_PARAMETER2, F
rrf MIOS_PARAMETER3, F ; value / 2
rrf MIOS_PARAMETER2, F
bcf MIOS_PARAMETER2, 7 ; clear 8th bit
;; now: pot number in WREG and MIOS_PARAMETER1
;; 7-bit value in MIOS_PARAMETER2
;; branch to fader handler
goto MB64E_FADER_Handler
;; ==========================================================================
;; Application code (see comments in files)
;; ==========================================================================
;; ---[ reusable utility functions ]---
#include "midi_evnt.inc"
#include "midi_rxtx.inc"
;; ---[ Control surface functions ]---
#include "cs_menu_buttons.inc"
#include "cs_menu_enc.inc"
#include "cs_menu_timer.inc"
#include "cs_menu.inc"
#include "cs_menu_tables.inc"
;; ---[ Menu pages handlers ]---
#include "cs_m_display.inc"
#include "cs_m_bank.inc"
#include "cs_m_patch.inc"
#include "cs_m_channel.inc"
#include "cs_m_learn.inc"
#if DEFAULT_NUMBER_AIN == 0 && DEFAULT_MORPH_FUNCTION_ENABLED == 1
#include "cs_m_morph.inc"
#endif
#include "cs_m_encmode.inc"
#include "cs_m_encspeed.inc"
#include "cs_m_ledrp.inc"
#include "cs_m_ts.inc"
#include "cs_m_tsmode.inc"
#include "cs_m_cali.inc"
#include "cs_m_bname.inc"
#include "cs_m_event.inc"
#include "cs_m_label.inc"
#include "cs_m_copy.inc"
#include "cs_m_midicfg.inc"
#include "cs_m_sysex.inc"
;; ---[ MB64E kernel ]---
#include "mb64e_bank.inc"
#include "mb64e_sysex.inc"
#include "mb64e_enc.inc"
#include "mb64e_fader.inc"
#include "mb64e_ts.inc"
#include "mb64e_buttons.inc"
#include "mb64e_leds.inc"
#include "mb64e_ledrings.inc"
#include "mb64e_lcd.inc"
#include "mb64e_msg.inc"
#include "mb64e_patch.inc"
#include "mb64e_fsr.inc"
#include "mb64e_addr.inc"
#include "mb64e_mem.inc"
#include "mb64e_dump.inc"
#include "mb64e_midi.inc"
#include "mb64e_meta.inc"
#include "mb64e_sfb.inc"
;; ---[ mb64e presets stored in Flash/EEPROM ]---
#include "mb64e_presets.inc"
END
------------------------------------------------------------------------------------------
Quand vous avez terminé avec main.asm.
5-faire un clique droit sur le dossier Header Files-->Add Files, ouvrir le dossier midibox64e_v2_2 et faire un ctrl A pour tout sélectionner les fichiers, cliquer sur ouvrir et tous les fichiers vont apparaître dans le dossier Header Files.
6-Cliquer 2X sur le fichier mios_tables.inc
C'est ici où on change les codes des encodeurs rotatifs
Voici ma config: Attention tout dépend comment vous soudez vos encodeurs
Moi, j'ai soudé mes encodeurs à partir du SR9 au SR16 et un encodeur sa prend 2 pins sur le Shift Registrer
Ex: ENC_ENTRY 9, 6, MIOS_ENC_MODE_NON_DETENTED ; V-Pot 1
mon premier encodeur==>V-Pot 1 est souder sur le SR9==>ENC_ENTRY 9,
pin D6 et D7==>6, MIOS_ENC_MODE_NON_DETENTED==>sans détente mécanique.
Pour les Pins:
0=pin D0 et D1
2=pin D2 et D3
4=pin D4 et D5
6=pin D6 et D7
==========================================================================
#ifndef SEPERATE_SETUP_FILE
org 0x3280 ; never change the origin!
;; --------------------------------------------------------------------------
;; In this table DIN pins have to be assigned to rotary encoders for the
;; MIOS_ENC driver
;;
;; up to 64 entries are provided
;;
;; The table must be terminated with an ENC_EOT entry. Unused entries should
;; be filled with ENC_EOT
;;
;; ENC_ENTRY provides following parameters
;; o first parameter: number of shift register - 1, 2, 3, ... 16
;; o second parameter: number of pin; since two pins are necessary
;; for each encoder, an even number is expected: 0, 2, 4 or 6
;; o the third parameter contains the encoder mode:
;; either MIOS_ENC_MODE_NON_DETENTED
;; or MIOS_ENC_MODE_DETENTED
;;
;; Configuration Examples:
;; ENC_ENTRY 1, 0, MIOS_ENC_MODE_NON_DETENTED ; non-detented encoder at pin 0 and 1 of SR 1
;; ENC_ENTRY 1, 2, MIOS_ENC_MODE_DETENTED ; detented encoder at pin 2 and 3 of SR 1
;; ENC_ENTRY 9, 6, MIOS_ENC_MODE_NON_DETENTED ; non-detented encoder at pin 6 and 7 of SR 9
;; --------------------------------------------------------------------------
;; encoder entry structure
ENC_ENTRY MACRO sr, din_0, mode
dw (mode << 8) | (din_0 + 8*(sr-1))
ENDM
ENC_EOT MACRO
dw 0xffff
ENDM
MIOS_ENC_PIN_TABLE
;; encoders 1-16
;; SR Pin Mode
ENC_ENTRY 9, 6, MIOS_ENC_MODE_NON_DETENTED ; V-Pot 1
ENC_ENTRY 9, 4, MIOS_ENC_MODE_NON_DETENTED ; V-Pot 2
ENC_ENTRY 10, 6, MIOS_ENC_MODE_NON_DETENTED ; V-Pot 3
ENC_ENTRY 10, 4, MIOS_ENC_MODE_NON_DETENTED ; V-Pot 4
ENC_ENTRY 11, 6, MIOS_ENC_MODE_NON_DETENTED ; V-Pot 5
ENC_ENTRY 11, 4, MIOS_ENC_MODE_NON_DETENTED ; V-Pot 6
ENC_ENTRY 12, 6, MIOS_ENC_MODE_NON_DETENTED ; V-Pot 7
ENC_ENTRY 12, 4, MIOS_ENC_MODE_NON_DETENTED ; V-Pot 8
ENC_ENTRY 9, 0, MIOS_ENC_MODE_NON_DETENTED ; V-Pot 9
ENC_ENTRY 9, 2, MIOS_ENC_MODE_NON_DETENTED ; V-Pot 10
ENC_ENTRY 10, 0, MIOS_ENC_MODE_NON_DETENTED ; V-Pot 11
ENC_ENTRY 10, 2, MIOS_ENC_MODE_NON_DETENTED ; V-Pot 12
ENC_ENTRY 11, 0, MIOS_ENC_MODE_NON_DETENTED ; V-Pot 13
ENC_ENTRY 11, 2, MIOS_ENC_MODE_NON_DETENTED ; V-Pot 14
ENC_ENTRY 12, 0, MIOS_ENC_MODE_NON_DETENTED ; V-Pot 15
ENC_ENTRY 12, 2, MIOS_ENC_MODE_NON_DETENTED ; V-Pot 16
;; encoders 17-32
ENC_ENTRY 13, 6, MIOS_ENC_MODE_NON_DETENTED ; V-Pot 17
ENC_ENTRY 13, 4, MIOS_ENC_MODE_NON_DETENTED ; V-Pot 18
ENC_ENTRY 14, 6, MIOS_ENC_MODE_NON_DETENTED ; V-Pot 19
ENC_ENTRY 14, 4, MIOS_ENC_MODE_NON_DETENTED ; V-Pot 20
ENC_ENTRY 15, 6, MIOS_ENC_MODE_NON_DETENTED ; V-Pot 21
ENC_ENTRY 15, 4, MIOS_ENC_MODE_NON_DETENTED ; V-Pot 22
ENC_ENTRY 16, 6, MIOS_ENC_MODE_NON_DETENTED ; V-Pot 23
ENC_ENTRY 16, 4, MIOS_ENC_MODE_NON_DETENTED ; V-Pot 24
ENC_ENTRY 13, 0, MIOS_ENC_MODE_NON_DETENTED ; V-Pot 25
ENC_ENTRY 13, 2, MIOS_ENC_MODE_NON_DETENTED ; V-Pot 26
ENC_ENTRY 14, 0, MIOS_ENC_MODE_NON_DETENTED ; V-Pot 27
ENC_ENTRY 14, 2, MIOS_ENC_MODE_NON_DETENTED ; V-Pot 28
ENC_ENTRY 15, 0, MIOS_ENC_MODE_NON_DETENTED ; V-Pot 29
ENC_ENTRY 15, 2, MIOS_ENC_MODE_NON_DETENTED ; V-Pot 30
ENC_ENTRY 16, 0, MIOS_ENC_MODE_NON_DETENTED ; V-Pot 31
ENC_ENTRY 16, 2, MIOS_ENC_MODE_NON_DETENTED ; V-Pot 32
;; encoders 33-48
ENC_EOT
ENC_EOT
ENC_EOT
ENC_EOT
ENC_EOT
ENC_EOT
ENC_EOT
ENC_EOT
ENC_EOT
ENC_EOT
ENC_EOT
ENC_EOT
ENC_EOT
ENC_EOT
ENC_EOT
ENC_EOT
;; encoders 49-64
ENC_EOT
ENC_EOT
ENC_EOT
ENC_EOT
ENC_EOT
ENC_EOT
ENC_EOT
ENC_EOT
ENC_EOT
ENC_EOT
ENC_EOT
ENC_EOT
ENC_EOT
ENC_EOT
ENC_EOT
ENC_EOT
#endif
org 0x3300 ; never change the origin!
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Une fois terminé vous enregistrez votre projet et cliquez sur Build All une espèce d'enveloppe avec 2 petites flèches bleus vers le bas.
Et là normalement tout devrait être ressemblé, s'il n'y a pas d'erreur.
7-Ouvrir Mios Studio et charger le fichier main.hex que vous venez d'assemblé qui se trouve dans midibox64e_v2_2.
Voilà , j'espère que ça marchera pour vous!!!.
Je ferais un autre tuto avec les statuts de LED