Jump to content

Recommended Posts

Posted

Moin, moin,

ich versuche seit ein paar Tagen 2 4x40 LCDs mit Midibox Seq V4 ans laufen zu bringen. Leider ohne Erfolg.

Ich weiß alle Menüs sind nur für 2 Lines geschrieben, das kann auch so bleiben. Aber ich möchte die Software erweitern und einige Controllerfunktionen für Bitwig implementieren.

Dafür benötige ich mehr Platz auf dem Display.

Ich habe als Core ein STM32F3Discovery.

Leider weiß ich nicht so genau, wo die zwei weiteren E-Pin auf dem Core angeschossen werden.

In der seq_lcd.c steht:

The 2x80 screen is buffered and can be output over multiple LCDs
 * (e.g. 2 * 2x40, but also 4 * 2x20)

Um die beiden 4x40 LCD zu betreiben , benötige ich 4 E-Pins wie für die 4 * 2x20 Konfiguration)

Also habe ich erstmal die seq_lcd.c erstmal angepasst.

// can be overruled in mios32_config.h
#ifndef LCD_NUM_DEVICES
# define LCD_NUM_DEVICES          4
#endif

#ifndef LCD_COLUMNS_PER_DEVICE
# define LCD_COLUMNS_PER_DEVICE  20
#endif

Die Folge ist, das ersten 40 Zeichen in 20er Blöcke auf beide LCD in den oberen Reihen geschrieben werden, die letzen 40 Zeichen aber nicht.

Die beiden zusätzlichen E-Pins sind an J10B D0 und D1 angeschlossen. Wenn ich die app_lcd.c richtig gelesen habe, sind die Pins D0 - D7 auf J10B für weitere E-Pins vorgesehen.

Sind die Anschlüsse dort richtig ???

Gruß

Gidien

 

 

Posted

Hallo Gidien,

MIOS32 wird standardmaessig nur die beiden ersten LCDs initialisieren.

Du muesstest also in SEQ_LCD_Init() noch folgendes einbauen (habe das gerade dementsprechend im SVN repository geaendert):

s32 SEQ_LCD_Init(u32 mode)
{
  u8 dev;

  // first two LCDs already initialized in main.c
  // for the case that more than two LCDs have been configured:
  for(dev=2; dev<LCD_NUM_DEVICES; ++dev) {
    MIOS32_LCD_DeviceSet(dev);
    MIOS32_LCD_Init(0);
  }

  // switch back to first LCD
  MIOS32_LCD_DeviceSet(0);

  return 0; // no error
}


 

Quote

Die beiden zusätzlichen E-Pins sind an J10B D0 und D1 angeschlossen. Wenn ich die app_lcd.c richtig gelesen habe, sind die Pins D0 - D7 auf J10B für weitere E-Pins vorgesehen.

Sind die Anschlüsse dort richtig ???

Ja, das sind die richtigen Pins

Gruss, Thorsten.

Posted

Danke Thorsten,

die LCDs scheinen nun initialisiert zu werden, aber anzeigen tun sie noch nichts. 

Scheint als wenn die Funktion s32 APP_LCD_Data(u8 data) durch lcd_testmode == 1 verlassen wird, wenn mios32_lcd_device >= 2 ist.

 

Gruß

Gidien

Posted (edited)
2 hours ago, TK. said:

 

Leider keine Veränderung , 

Immer wenn mios32_lcd_device >= 2 ist, springt er aus der function APP_LCD_Data(u8 data) über :

  if( lcd_testmode )
    return -1; // direct access disabled in testmode

Ich habe einen Breakpoint bei return -1 gesetzt. Das Programm hält dort immer wenn lcd device >=2 ist , obwohl lcd_testmode == 0 ist.

Thread [1] (Suspended: Breakpoint hit.)    
    8 APP_LCD_Data() app_lcd.c:782 0x08050392    
    7 MIOS32_LCD_PrintChar() mios32_lcd.c:451 0x080464fc    
    6 SEQ_LCD_Update() seq_lcd.c:270 0x080414d6    
    5 SEQ_UI_LCD_Update() seq_ui.c:2741 0x080115d6    
    4 SEQ_UI_LCD_Handler() seq_ui.c:2619 0x08011b50    
    3 SEQ_TASK_Period1mS_LowPrio() app.c:499 0x0801047e    
    2 TASK_Period1mS_LowPrio() tasks.c:171 0x08010a66    
    1 <symbol is not available> 0x00000000    
 

2969-data-evaluate-expression lcd_testmode
2969^done,value="0 '\\000'"
(gdb) 
2970-data-evaluate-expression mios32_lcd_device
2970^done,value="2 '\\002'"
(gdb) 

 

Nur mit dem Bootloader werden alle LCDs angesprochen und sind Ready!.

 

 

 

 

Edited by Gidien
Posted

Die Breakpoints werden bei dem optimierten Code nicht immer zuverlaessig funktionieren.

Dahinter steht ja:

  // check if if display already has been disabled
  if( !(display_available & (1ULL << mios32_lcd_device)) )
    return -1;

welchen Wert hat display_available? Ich wuerde 15 (hexadezimal 0xf) erwarten.

Evtl. macht es Sinn, den Breakpoint in SEQ_LCD_Update() zu setzen, bspw. an der Stelle wo MIOS32_LCD_DeviceSet aufgerufen wird - und ab da mal durchsteppen.

Gruss, Thorsten.

Posted

display_available available ist leider nur 3. Das wäre dann nur für zwei Displays richtig?

Sollte hier gesetzt werden, richtig?

s32 APP_LCD_Init(u32 mode)

// enable display by default
  display_available |= (1ULL << mios32_lcd_device);

 

Weiß leider nicht wie ich die Init Phase debuggen kann.

 

Gruß

Gidien

 

Posted

OK nach APP_LCD_INIT ist Display_available 15 , aber dann scheint APP_LCD_PollUnbusy diesen wieder auf 3 zu setzen.

    if( APP_LCD_PollUnbusy(10000) < 0 ) {
      // disable display
      display_available &= ~(1ULL << mios32_lcd_device);

Leider habe ich keine Ahnung warum.

 

 

Posted

Ich habe eine Vermutung: J10B wird ja beim STM32F4 core fuer die optionalen DIN Clock Outputs verwendet, die stehen nun natuerlich im Konflikt mit den LCD Pins (die ja urspruenglich nicht in der Firmware vorgesehen waren).

Ich habe nun seq_cv, seq_hwcfg und seq_file_hw so geaendert, dass die Pins nicht initialisiert werden sollten, wenn im MBSEQ_HW.V4 File "J5_ENABLED" auf 0 gesetzt wurde.

Probiere es mal aus: hole Dir die aktuellen Sourcen aus dem Repository, aendere den Wert fuer J5_ENABLED in Deinem MBSEQ_HW.V4 file auf der SD Karte, und tippe dann "reset" im MIOS Terminal.

Danach sollten die LCDs eigentlich funktionieren. Falls nicht, muesste man ueberpruefen, ob die Pins noch irgendwo anders gesetzt, und nicht ueber die neue Variable "seq_hwcfg_j5_enabled" gegated werden.

Gruss, Thorsten.

Posted

Ich hätte da noch eine andere Frage.

Ich habe als Datawheel Encoder einen mit Taster. Betätige ich diesen Taster, zeigt Mios Studio , dass dieser SR Pin nicht hinterlegt ist. Kann ich irgendwo diesen Encoder Button mit einer Funktion hinterlegen? Wenn ja, wo sollte ich das am besten machen?  Ist es möglich, dies nur für einen Doppelklick zu ermöglichen, um eine Fehlbedienung zu verhindern?

Ok sind doch mehrere Fragen.

Ich würde diesen Button gerne nutzen, um in mein Bitwig Menü zu gelangen.

 

 

Posted

Am einfachsten waere es wohl, wenn Du eine bereits vorhandene Funktion, die Du nicht benoetigst, kannibalisierst.

Bspw. den "BUTTON_MIXER".
Die Pin-Zuweisung wuerdest Du in Deinem MBSEQ_HW.V4 File eintragen (suche dort nach BUTTON_MIXER)
Diese wird dann die SEQ_UI_Button_Mixer() Funktion in seq_ui.c aufrufen... ab dort kannst Du dann weitermachen ;-)

Alternativ eine neue Button-Funktion einbauen, doch das waere umstaendlicher - Du koenntest bspw. nach einem geeigneten Stichwort greppen, so weisst Du, welche Files zu aendern sind.

Hier ein Beispiel: 

MacMini2:midibox_seq_v4 TK$ grep -i track_transpose core/*
core/seq_file_hw.c:	  } else if( strcasecmp(parameter, "TRANSPOSE") == 0 || strcasecmp(parameter, "TRACK_TRANSPOSE") == 0 ) {
core/seq_file_hw.c:	    seq_hwcfg_button.track_transpose = din_value;
core/seq_file_hw.c:	  } else if( strcasecmp(parameter, "TRANSPOSE") == 0 || strcasecmp(parameter, "TRACK_TRANSPOSE") == 0 ) {
core/seq_file_hw.c:	    seq_hwcfg_led.track_transpose = dout_value;
core/seq_hwcfg.c:  .track_transpose = ((( 0   -1)<<3)+    0),
core/seq_hwcfg.c:  .track_transpose = ((( 0   -1)<<3)+    0),
core/seq_hwcfg.c:  .track_transpose = ((( 0   -1)<<3)+    0),
core/seq_hwcfg.h:  u8 track_transpose;
core/seq_hwcfg.h:  u8 track_transpose;
core/seq_ui.c:  if( pin == seq_hwcfg_button.track_transpose )
core/seq_ui.c:  SEQ_LED_PinSet(seq_hwcfg_led.track_transpose, ui_page == SEQ_UI_PAGE_TRKTRAN);

In SEQ_UI_Button_FootSwitch siehst Du, wie man einen Doppelklick realisiert.

Best Regards, Thorsten.

Posted

Danke Thorsten,

Für einen echten Doppelklick musste ich folgende Teil so verändern.

if( depressed ) 
{
  	// if footswitch time passed between pressed and depressed is less than fs_time_delay miliseconds, clear track.
    if( ( MIOS32_TIMESTAMP_GetDelay(fs_time_control) < fs_time_delay ) && ( fs_time_control != 0 ) )
    {
   		SEQ_UI_Button_Clear_Track(0);
  	} else {
  		// store pressed timestamp
  		fs_time_control = MIOS32_TIMESTAMP_Get();
  	}
}

Vorher wurde nur die Zeit zwischen drücken und loslassen gemessen. Jetzt nimmt er die Zeit zwischen zweimal drücken (Doppelklick).

Mal sehen über welche Schwierigkeiten ich noch so stolpere. Ich werde sicherlich noch ein paar weitere Fragen haben.

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...