Stefanho Posted October 19, 2004 Report Posted October 19, 2004 Hallo, meine Konfiguration besteht aus: 1x Core2x DIN1xDOUTAls 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 LED1+2 13+4 25+6 37+8 4Die 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 Quote
TK. Posted October 29, 2004 Report Posted October 29, 2004 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. Quote
Stefanho Posted October 30, 2004 Author Report Posted October 30, 2004 Hallo Thorsten,vielen Dank für die Beantwortung meiner Frage. Da brauch ich mein Konzept doch nicht ändern. ;DAn 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* Quote
Stefanho Posted December 3, 2005 Author Report Posted December 3, 2005 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-8SET_BSR MB64E_BASErrf MB64E_GROUP_OFFSET, W, BANKED rrf WREG, W rrf WREG, W andlw 0x0f call MIOS_HLP_GetBitORMask rgoto MB64E_LED_Update_InitLoopContDamit 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-8SET_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#endifcall MIOS_HLP_GetBitORMaskrgoto MB64E_LED_Update_InitLoopCont... hoffe das geht so!?Viele Grüße,Stefan Quote
TK. Posted December 4, 2005 Report Posted December 4, 2005 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. Quote
Stefanho Posted December 4, 2005 Author Report Posted December 4, 2005 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 ;DViele Grüße,Stefan Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.