Jump to content

Recommended Posts

Posted

Hallo,

meine Konfiguration besteht aus:

1x Core

2x DIN

1xDOUT

Als Anwendung benutze ich MIDIbox64E. Ich habe 8 Alps-Encoder per DIN angeschlossen. Group Width ist deshalb auf 8 gesetzt:

#define DEFAULT_NUMBER_ENCS      8      

#define DEFAULT_ENCODER_GROUP_WIDTH      8

Um zwischen den Gruppen schnell wechseln zu können, habe ich 8 Taster mit Special Functions (FF 01 00 - FF 01 08) belegt. Neben diesen Tastern habe ich LEDs angebracht, die signalisieren sollen, welche Gruppe momentan verwendet wird. Diese Zuordnung habe ich mit Hilfe von mk_syx (midibox64e.ini) gemacht:

[LED_MAP]

  LED_SR1 = 9    # (Button ID #1-#8)

Beim betätigen der Taster wird die korrekte Gruppe angezeigt. Die LEDs leuchten jedoch wie folgt:

Taste    LED

1+2        1

3+4        2

5+6        3

7+8        4

Die LEDs 5-8 reagieren nicht :-(

Mit der Zuordnung:

[LED_MAP]

  LED_SR1 = 1 # (Button ID #1-#8)

leuchten die Dioden neben den Tasten kurz auf.

Kann mir da wer helfen?

???

Viele Grüße, Stefan

  • 2 weeks later...
Posted

Hallo Stefan,

ich vermute, dass es sich hierbei um einen Programmierfehler von meiner Seite handelt -- meine MB16E hat ausser den LED-kraenzen keine zusaetzlichen LEDs, deshalb habe ich dieses Feature nie ausprobiert. Mit der naechsten Version sollte es funktionieren.

Gruss,

       Thorsten.

Posted

Hallo Thorsten,

vielen Dank für die Beantwortung meiner Frage. Da brauch ich mein Konzept doch nicht ändern.  ;D

An der Stelle möcht ich nochmal ein großes Kompliment für die MIDIBOX Seite loswerden. Der Arbeitsaufwand ist mit Sicherheit enorm.

Viele Grüße, Stefan *schon auf MIDIBOX FM freu*

  • 1 year later...
Posted

Hallo,

nach fast einem Jahr hatte ich wieder Zeit meine Midibox zu vollenden. Dabei hab ich das Problem lösen können. Die Midibox64e-Anwendung ist für Group-Offsets von 16 (0x10) optimiert. Ich treffe im mk_syx-Skript folgende Anweisung:

[LED_MAP]

  LED_SR1 = 9    # Selected Group (1 of 8 )

Da ich nur 8 Encoder (DEFAULT_ENCODER_GROUP_WIDTH 8 ) verwende, leuchten bei mir nur die ersten 4 LEDs. Ich habe deshalb innerhalb "mb64e_leds.inc" folgendes geändert:

MB64E_LED_Update_Init_Group        ; 0x09: returns selectred group 1-8

SET_BSR MB64E_BASE

rrf MB64E_GROUP_OFFSET, W, BANKED

rrf WREG, W

rrf WREG, W

andlw 0x0f

      call    MIOS_HLP_GetBitORMask

      rgoto  MB64E_LED_Update_InitLoopCont

Damit funktioniert es bei mir ohne Probleme  ;D Ich habe mich langsam in Assembler und die Anwendung vorgetastet. Ich denke man könnte "mb64e_leds.inc" wie folgt ändern, damit alle Offsets unterstützt werden:

MB64E_LED_Update_Init_Group        ; 0x09: returns selectred group 1-8

SET_BSR MB64E_BASE

#if DEFAULT_ENCODER_GROUP_WIDTH == 1

SET_BSR MB64E_BASE

incf MB64E_GROUP_OFFSET, W, BANKED

#else

#if DEFAULT_ENCODER_GROUP_WIDTH == 2

rrf MB64E_GROUP_OFFSET, W, BANKED

andlw 0x3f

#endif

#if DEFAULT_ENCODER_GROUP_WIDTH == 4

rrf MB64E_GROUP_OFFSET, W, BANKED

rrf WREG, W

andlw 0x1f

#endif

#if DEFAULT_ENCODER_GROUP_WIDTH == 8

rrf MB64E_GROUP_OFFSET, W, BANKED

rrf WREG, W

rrf WREG, W

andlw 0x0f

#endif

#if DEFAULT_ENCODER_GROUP_WIDTH == 16

swapf MB64E_GROUP_OFFSET, W, BANKED

andlw 0x07

#endif

#if DEFAULT_ENCODER_GROUP_WIDTH == 32

swapf MB64E_GROUP_OFFSET, W, BANKED

rrf WREG, W

andlw 0x03

#endif

#if DEFAULT_ENCODER_GROUP_WIDTH == 64

swapf MB64E_GROUP_OFFSET, W, BANKED

rrf WREG, W

andlw 0x01

#endif

#endif

call    MIOS_HLP_GetBitORMask

rgoto  MB64E_LED_Update_InitLoopCont

... hoffe das geht so!?

Viele Grüße,

Stefan

Posted

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.

Posted

Hallo,

ja das ist super! Ich hatte wohl etwas zuviel aus "mb64e_lcd.inc" übernommen  ::) Dort werden mit der Routine die Offsets im Display angezeigt. Der Offset von eins macht auch keinen Sinn.

Schicke bei Gelegenheit mal ein Paar Fotos meiner Midibox. Jetzt muss ich erstmal schrauben gehen  ;D

Viele Grüße,

Stefan 

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...