-
Posts
1,285 -
Joined
-
Last visited
-
Days Won
72
Content Type
Profiles
Forums
Blogs
Gallery
Posts posted by Phatline
-
-
he is talking about 5050 LEDs so these for example might fit: aliexpress..
-
ELO: please more information about the used 2812 LEDs, which color in your Setup... it looks like you used 2x Single Color LEDs? CD? Color? - thx.
-
i today updatedt to android 7.1.2, lineageos 14.1 > still the same...
-
so iic or spi?
-
2 songs made with the new TriggerMatrix V3 Sequencer...:
more chill influenced of molvaer...:
2nd is made for a contest, its about love...
-
cool, you got pm i take 2...
-
the DIN6DOUT4 has pulldown/up resistors on board?
-
i am offically a artist. i pay social insurance for that. my time is free for midibox making music for contest cd website or gig. have a girlfriend spending lot of time in love. cooking and houshold on my own... and midibox coding planing building consume the rest of it. since i need the devices for a gig end of february i dont have time for tutorials... but when i have some spare time i would make some video doku-to see what to have done BUT not a detailt tutorial for that it is to much information. but i think in german and for a mios based uset project so it would help only a small group anyway. so i have to rethink it i also dont have the best cam equipment nor mony for that..
maybe this and others is a reason that there are no video tuts outthere ,;)
-
moturola g4 play. android. firefox
when making a new pm: onboard display pops up and the sendbutton is hide.
there need to be more place under the send button. or. the possibility to "overscroll"
-
i need 16 for my
mb lre8x2csplaced like in programma.
if you have that many. i would take 20 + 1xpcb
i was asking because on ebay you have to choose between spi ans iic. when choosbing spi theboicture shows a 4 pinner; gnd vcc scl sca
do i need spi?
-
-
where to connect the "bootloader-mode" switch?
-btw- like this small one.
-
got mine today (Core + Midi IO)
thx for SD-card
-best mike.
-
This code: (app.c download@ http://wiki.midibox.org/lib/exe/fetch.php?media=phatline:tm_v3.zip)
void APP_Init(void){ xTaskCreate(TASK_SEQ, (signed portCHAR *)"SEQ", configMINIMAL_STACK_SIZE, NULL, PRIORITY_TASK_SEQ, NULL);} // install sequencer task
compile with following warnings:
Quotemake (im Verzeichnis: /home/nixgibts/c/tm_V3)
rm -f project.hex
Creating object file for app.c
app.c: In function 'APP_Init':
app.c:386:3: warning: pointer targets in passing argument 2 of 'xTaskCreate' differ in signedness [-Wpointer-sign]
In file included from app.c:11:0:
/home/triggermatrix/mios32/trunk/FreeRTOS/Source/include/task.h:360:13: note: expected 'const char * const' but argument is of type 'signed char *'
Creating object file for seq.c
....
/home/triggermatrix/mios32/trunk/FreeRTOS/Source/portable/GCC/ARM_CM3/port.c: In function 'prvPortStartFirstTask':
/home/triggermatrix/mios32/trunk/FreeRTOS/Source/portable/GCC/ARM_CM3/port.c:282:1: warning: stack usage computation not supported for this target [enabled by default]
...
/home/triggermatrix/mios32/trunk/drivers/STM32F4xx/v1.1.0/STM32_USB_Device_Library/Core/src/usbd_req.c: In function 'USBD_GetString':
/home/triggermatrix/mios32/trunk/drivers/STM32F4xx/v1.1.0/STM32_USB_Device_Library/Core/src/usbd_req.c:845:18: warning: comparison between pointer and integer [enabled by default]
/home/triggermatrix/mios32/trunk/drivers/STM32F4xx/v1.1.0/STM32_USB_Device_Library/Core/src/usbd_req.c: In function 'USBD_GetLen':
/home/triggermatrix/mios32/trunk/drivers/STM32F4xx/v1.1.0/STM32_USB_Device_Library/Core/src/usbd_req.c:863:17: warning: comparison between pointer and integer [enabled by default]
...
Creating object file for freertos_heap.cpp
-------------------------------------------------------------------------------
Kompilierung erfolgreich beendet.
Application successfully built for:
Processor: STM32F407VG
Family: STM32F4xx
Board: MBHP_CORE_STM32F4
LCD: universal
-------------------------------------------------------------------------------
arm-none-eabi-size project_build/project.elf
text data bss dec hex filename
98646 9184 56600 164430 2824e project_build/project.elf
20000000 D __ram_start
200100f8 B __ram_endthat task.h code - Warning by "xTaskCreate...":
#if( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) BaseType_t xTaskCreate( TaskFunction_t pxTaskCode, const char * const pcName, const uint16_t usStackDepth, void * const pvParameters, UBaseType_t uxPriority, TaskHandle_t * const pxCreatedTask ) PRIVILEGED_FUNCTION; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ #endif
do i have to fear?
-
THX! without that i would have been lost!
worked at the first moment!
i had enough to close and re-open the Mios-Studio every time when uploading new code... specially while programming over weeks daily
deep into code...(and that rescan joke? not funny)
my cores bootloader is setup ed, to show up as "MIOS32" (when not in bootload mode), so i hardcodet that in mios-studio to be set when press "Rescan mididevices", working under linux mint kernel 4.4.0-98
no more closing MidiStudio, or have to close multiple-open-instances because of codeing and trying and uploading, then everytime the resize of the window, search and open hexfile and so on. Of course that is hardcodet, but in my case it is good this way, now i know how to compile anyway - thx
open: svn/mios32/trunk/tools/mios_studio/src/gui/MiosStudio.cpp
edit: i deleted all from"case rescanDevices" to "break;" and wrote this instead: (the line is about 955 or so)
case rescanDevices: closeMidiPorts(); initialMidiScanCounter = 1; getMidiInput(); getMidiOutput(); setMidiInput("MIOS32"); setMidiOutput("MIOS32"); break;
dont really know exact what is going on there, but for me its working, and thats enough.
also some colorchanging by searching the gui/....cpp filesvia
g.fillAll(Colours::black);
but the background of the main-fields are still white... to bad...
-
solved - plugged into wrong Core Connector... had assumed that J10B is near J10A... totally wrong
upstidu....
-
same problem here.
-
after initialize:
void APP_Init(void){ int pin; for(pin=0; pin<16; ++pin){ MIOS32_BOARD_J10_PinInit(pin, MIOS32_BOARD_PIN_MODE_INPUT_PU);} }
getting pin 0-7 is workin ok, but 8-15 give me no output:
void APP_SRIO_ServicePrepare(void) { // get GPIO-Pins u8 x = 0; for(x=0; x<16; x++) { if(MIOS32_BOARD_J10_PinGet(x) != flag.j10PinState[x]) { MIOS32_MIDI_SendDebugMessage("pin: %d value: %d", x, MIOS32_BOARD_J10_PinGet(x)); flag.j10PinState[x] = MIOS32_BOARD_J10_PinGet(x); } }
why?
-
always in need for core and Midi IO ;)
- CORE STM32F4 with STM32F4DISCOVERY
- MIDI IO
price? where you from?... mike (austria)
-
Hi,
i want to modify the blm_scalar app a bit
i want to use it in standalone and via midi/sysex...
so my question: how to call the BLM internally? when i want to display a "array[16][16]=0 or 1 or 2;"
i know i can call it like below
but is there a more direct way to use it?
thx. mike
void APP_Background(void){ u8 chn = 0; u8 note = 0; u8 velocity = 0; for(chn=0; chn<16; chn++){ for(note=0; note<16; note++){ velocity = Seq[chn][note]; if( note <= 0x0f ) { //note<=15? // BLM16x16 LEDs led_mod_ix = chn >> 2; led_row_ix = ((chn&3) << 1) + ((note >> 3) & 1); led_column_ix = note & 0x7; //7 modify_led = 1; } else if( note == 0x40 ) { //note==64 // extra column LEDs led_mod_ix = 4; led_row_ix = (chn&3) << 1; led_column_ix = chn >> 2; modify_led = 1; } else if( chn == 0 && note >= 0x60 && note <= 0x6f ) { //Chn0, note>=96, note>0111 // extra row LEDs led_mod_ix = 4; led_row_ix = 1 + ((note >> 1) & 6); led_column_ix = note & 3; modify_led = 1; } else if( chn == 0xf && note >= 0x60 && note <= 0x6f ) { //Chn15, note>=96, note>0111 // additional extra LEDs led_mod_ix = 4; led_row_ix = 1 + ((note >> 1) & 6); led_column_ix = 4 + (note & 3); modify_led = 1; } if( modify_led ) { u8 led_mask = 1 << led_column_ix; // 90 xx 00 is the same like a note off event! // (-> http://www.borg.com/~jglatt/tech/midispec.htm) if( velocity == 0x00 ) { // Note Off or velocity == 0x00: clear both LEDs blm_scalar_led[led_mod_ix][led_row_ix][0] &= ~led_mask; #if BLM_SCALAR_NUM_COLOURS >= 2 blm_scalar_led[led_mod_ix][led_row_ix][1] &= ~led_mask; #endif } else if( velocity < 0x40 ) { // Velocity < 0x40: set green LED, clear red LED blm_scalar_led[led_mod_ix][led_row_ix][0] |= led_mask; #if BLM_SCALAR_NUM_COLOURS >= 2 blm_scalar_led[led_mod_ix][led_row_ix][1] &= ~led_mask; #endif } else if( velocity < 0x60 ) { // Velocity < 0x60: clear green LED, set red LED blm_scalar_led[led_mod_ix][led_row_ix][0] &= ~led_mask; #if BLM_SCALAR_NUM_COLOURS >= 2 blm_scalar_led[led_mod_ix][led_row_ix][1] |= led_mask; #endif } else { // Velocity >= 0x60: set both LEDs blm_scalar_led[led_mod_ix][led_row_ix][0] |= led_mask; #if BLM_SCALAR_NUM_COLOURS >= 2 blm_scalar_led[led_mod_ix][led_row_ix][1] |= led_mask; #endif } } } }} // END - FOR - LOOPS
-
hm i get a error:
app.c:1094:13: warning: implicit declaration of function 'wmemset' [-Wimplicit-function-declaration]
if(edit & (1<<0))wmemset(loop[track].PB, (u32)((8192<<16) + 8192), (sizeof (loop[track].PB))/4); // reset Pitch Bend
when i then add:
#include <wchar.h> to app.c
then error:
Quoteapp.c:1169:13: warning: passing argument 1 of 'wmemset' from incompatible pointer type [enabled by default]
In file included from app.c:23:0:
/home/triggermatrix/mios32_toolchain/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/wchar.h:108:10: note: expected 'wchar_t *' but argument is of type 'u16 *'
should i change this:
typedef struct storage { u16 PB [512]; u8 SEQ[512] [8]; u8 MSQ[512]; char leader:1; char virgin:1; u8 length; u8 decay; u8 rythm; u16 bpm; } store_t;
to this:
typedef struct storage { wchar_t PB PB [512]; u8 SEQ[512] [8]; u8 MSQ[512]; char leader:1; char virgin:1; u8 length; u8 decay; u8 rythm; u16 bpm; } store_t;
hm what size has this wchar_t?
-
if(edit & 0x0f)memcpy(&loop_copy, &loop[track], sizeof loop_copy);
clever i like that
but i planned it more like: check which things have to copyied, so i can copy PB+NOTES, but not CC+Loop-Information, (for default)if i get it right: in your thought i can always copy only one thing: PB, All, Notes or Loop-Info
but i can still use memcpy with for example:
if( (edit[0]==1) && (edit[1]==1) && (edit[1]==1) && (edit[1]==1) ) memcpy(&loop_copy, &loop[track], sizeof loop_copy);
THX for your help guys!
for the rest i will take me time on 23.12... today we make fire in the snow, and celebrate the 21.12 to restart the sun-circle
happy new sun year, skol!
-
aja a < 8 of course, thx!
Edit: read/write on SD-Card is working fine!
MUTEX_SDCARD_TAKE; //Write to File sprintf(file_path, "msp/%d-%d.msp", track, clip); FILE_WriteOpen ( file_path, 16 ); FILE_WriteBuffer( (u8 *)&file_type, 4 ); FILE_WriteBuffer( (u8 *)&loop[track], sizeof(store_t) ); FILE_WriteClose (); MUTEX_SDCARD_GIVE;
@ Background-tasks
function example which make a hardfault when using 1024, when calling it... i call it once a time with a button press on the UI (DIN) > see code below
but also will need such things for mooving sequencer data forward in loop, or backwards, or copy step 0-15 to all other 512 steps in a musically way > means could be a wild button orgie...
in App.h: typedef struct storage { // to optimize SD-Load-Time, each clips data is stored in this struct u16 PB [512]; // Pitchband inital = 8192 = No Pitchbend! u8 SEQ[512] [8]; // 512Steps, 8NotePolyphony u8 MSQ[512]; // Motion-SEQ of one CC ...eg.:Control-Wheel of Keyboard char leader; // Programchange able? - only 1 of 4 Song-Clips can send Programchanges via BLMatrix char virgin; // is there any data in the clip? need to display on a ButtonLed Matrix-Launcher u8 length; // 1x16, 2x16... u8 decay; // 60ms... could be set with Encoder, but I dont need a variable, since the melody out will be used by the Triggermatrix... u8 rythm; // 4x4=16, 5x3=15 usw... to calculate maximal duration per UI-matrix page u16 bpm; } store_t; extern store_t loop[8]; in app.c: u16 SEQ_copy[512][8] = {{}}; //Copy actual Track into ClipboardBuffer u16 MSQ_copy[512] = {}; //Copy actual Track into ClipboardBuffer u16 PB_copy [512] = {}; //Copy actual Track into ClipboardBuffer u16 tact_info_copy[32] = {}; //Copy bpm, loop length, tact and so on // E D I T C L I P D A T A static void Edit_Clip(u8 track, u16 clip, u16 job){ u16 c = 0; u16 x = 0; switch(job) { // Clear case 0: for( c=0; c<512; c++ ) { if(edit[0] == 1) { loop[track].PB[c] = 8192; } // = no Pitch Bend if(edit[1] == 1) {for( x=0; x<8; x++ ) { loop[track].SEQ[c][x] = 0; } } // = no Note if(edit[2] == 1) {loop[track].MSQ[c] = 0; } // = no Control Change } break; // Copy case 1: for( c=0; c<512; c++ ) { if(edit[0] == 1) { PB_copy[c] = loop[track].PB[c];} // PB if(edit[1] == 1) { for( x=0; x<8; x++ ) { SEQ_copy[c][x] = loop[track].SEQ[c][x]; } } // NOTE if(edit[2] == 1) { MSQ_copy[c] = loop[track].MSQ[c];} // MSQ } if(edit[3] == 1) { tact_info_copy[0] = loop[track].leader; tact_info_copy[1] = loop[track].virgin; tact_info_copy[2] = loop[track].length; tact_info_copy[3] = loop[track].decay; tact_info_copy[4] = loop[track].rythm; tact_info_copy[5] = loop[track].bpm; } break; // Paste case 2: for( c=0; c<512; c++ ) { if(edit[0] == 1) { loop[track].PB[c] = PB_copy[c];} // PB if(edit[1] == 1) { for( x=0; x<8; x++ ) { loop[track].SEQ[c][x] = SEQ_copy[c][x]; } } // NOTE if(edit[2] == 1) { loop[track].MSQ[c] = MSQ_copy[c]; } // MSQ } if(edit[3] == 1) { loop[track].leader = tact_info_copy[0]; loop[track].virgin = tact_info_copy[1]; loop[track].length = tact_info_copy[2]; loop[track].decay = tact_info_copy[3]; loop[track].rythm = tact_info_copy[4]; loop[track].bpm = tact_info_copy[5]; } break; } }
also the code above is working ifne ;)
-
ok understand, i let the the file describtion in....
oje...
there is something wrong with the code,
http://wiki.midibox.org/lib/exe/fetch.php?media=phatline:seq-melody-footboard-beta.zip
when i make arrays with 8x512, or arrays with 8x1024, the Files on SD-Card is always 5,6kb size, also on 1024 i got hardfaults when copy those structs into arrays (copy paste clear clips), by 512 no hardfault
typedef struct storage { u16 PB [512]; u8 SEQ[512] [8]; u8 MSQ[512]; char leader; char virgin; u8 length; u8 decay; u8 rythm; u16 bpm; } store_t; no difference in SD-File-Size! typedef struct storage { u16 PB [1024]; u8 SEQ[1024] [8]; u8 MSQ[1024]; char leader; char virgin; u8 length; u8 decay; u8 rythm; u16 bpm; } store_t;
also i initialize all Arrays, but actual most of them (all except the first member loop[0] in the program are 0-out
void APP_Init(void){ //initalize 8 Clips with standart values u8 a = 0; for ( a=0; a>8; a++ ) { loop[a].leader = 0; loop[a].virgin = 1; loop[a].length = 1; loop[a].decay = 60; loop[a].rythm = 4; loop[a].bpm = 120; //initiate Pitchbend u16 b; for(b=0; b<512; b++) { loop[a].PB[b] = 8192; } }; //Initiate Pitchbend - copy paste buffer u16 b; for(b=0; b<512; b++) { PB_copy[b] = 8192; } }
the 1024 thing i think is clear, it takes to long to calculate all the data, i would need something like a xtask... but i dont figured out how to make out of a
Quotestatic void Edit_Clip(u8 track, u16 clip, u16 job); a static void Edit_Clip (void *pvParameters);
i know:
QuotexTaskCreate(Edit_Clip, (signed portCHAR *)"Edit_Clip", 256, NULL, PRIORITY_Counter, NULL);
i use such things for counters in ms tact (decay-counters, blink blink...), but not for a function that gets called, work something out, and done...
for example:
static void Decay(void *pvParameters){ //Send Note OFFs after a while portTickType xLastExecutionTime; xLastExecutionTime = xTaskGetTickCount(); // Initialise the xLastExecutionTime variable on task entry while( 1 ) { vTaskDelayUntil(&xLastExecutionTime, 1 / portTICK_RATE_MS); for(DcyNteCount = 1; DcyNteCount < 128; DcyNteCount++) { for(DcyTrkCount = 0; DcyTrkCount < 8; DcyTrkCount++) { if (MeloDecayTIMER[DcyTrkCount][DcyNteCount] != 0) { MeloDecayTIMER[DcyTrkCount][DcyNteCount] --; if (MeloDecayTIMER[DcyTrkCount][DcyNteCount] == 0) { MIOS32_MIDI_SendNoteOff(MelPortOut, MeloOutCh[DcyTrkCount], DcyNteCount, 0); MIOS32_MIDI_SendNoteOn (MelPortOut, MeloOutCh[DcyTrkCount], DcyNteCount, 0);}} }} }//End While }//End TICK 0 >>> 1ms Task...
search 4 OLED LCD
in Parts Questions
Posted
ok get feedback from the seller: